Прислали от одной госконторы-монополиста программку для учёта и создания всероссийской базы кое-каких данных. Программа даже не сетапится, а просто запускается экзешником. Собственно, делает простое: из заполненных табличек формирует XML-файл. Сама программа весит полметра. Но, блин, чтобы её запустить, надо установить .NET-фреймворк 3.5, который весит 240 метров и загружает проц чуть ли не на 100%. И как после такого назвать человека, что писал этот код? Индусы нервно курят в сторонке и завидуют.
Индийский код
Антииндийский код
Мудрость наших отцов и дедов гласила: «Нет такой программы, которую нельзя было бы сократить хотя бы на один оператор». Учитывая, что вводить код приходилось с перфокарт, индийский подход был нежизнеспособен. Те времена прошли, но «мышечная память» всё ещё жива в некоторых преподавателях программирования.
История эта произошла со мной, когда я учился на первом курсе МИРЭА. Очередная лаба по программированию: матрица N×N с рандомными числами, задающими расстояние, в которой надо было провести расчет кратчайшего пути из {1; 1} в {N; N}. Первая версия программы была напичкана циклами и массой условий. Работала быстро — ну, насколько это позволял третий «пень». Тётечка-преподаватель, оценив код, сказала, что надо бы оптимизировать. Почесав репу, я изрядно переписал код: количество циклов сократилось вдвое, а условий — втрое. «Всё равно много», — сказала тетечка.
Десятая версия выглядела примерно так:
i := 0;
while ((48 условий) and (i <= N*N)) do inc(i);
Только после этого я получил зачёт и фразу, которая вьелась мне в мозг: «Памяти много не бывает!»
Читер от безнадёги
Работаю программистом на производстве. Есть у нас софтина, написанная, похоже, высокопородистыми индусами. Каждый раз, когда меняется производственный процесс, начинается веселуха у всех от мала до велика: никогда на 100% не знаешь, как изменение одной циферки в конфиге (если её можно поменять, то это уже праздник) повлияет на всё остальное. То, что от цвета пластика может зависеть количество болтов, уже никого не удивляет.
Оператору, готовя производственное задание, приходится каждый раз тыкать в три менюшки и в них отмечать кучу галок. Иногда он что-то пропускает по запарке, и получается брак. Непорядок! Неделя ушла на то, чтобы перерыть все конфиги и скрипты (хуже не пишут даже студенты в лабах, сделанных на коленке за час до сдачи) — ничего и близко похожего не нашёл, зато обнаружил в недрах настроек окошко, где отмечен дефолтный набор этих галок, и всё задисейблено. Ещё пару дней искал, откуда этот список туда попадает, но тщетно. Позвонил в техподдержку. Там официально заявили: список жёстко зафиксирован в программе и защищён. Сбилдить с нужными галками и выслать патч они тоже не могут.
Сижу в расстроенных чувствах, медитирую на задисейбленный предмет моих изысканий. Осеняет мысль. Качаю Window Scanner, раздисейбливаю. Запускаю Аrtmoney, потыкав по галкам, нахожу адреса. Проверяю вне окошка с настройками — работает! За двадцать минут пишу трейнер, как для игрушки, который щёлкает эти галки, и батник, который всё это запускает. Задача решена.
Как у них, но втрое круче
Только что помогал какому-то (или каким-то?) индусам на cplusplus.com. Эти удивительные «программисты» решили написать 3D-игруху на «плюсах», только начиная осваивать их. Но дело не в этом. Они упорно спрашивали, «как сделать GUI», а на мой вопрос, какой: виндоусный (а вдруг настройщик, снаружи валяющийся) или игровой, они лишь дали ссылку: «Как в этой игре». Мой вопрос про движок был проигнорирован — видимо, у них сейчас важное заседание на тему этого движка. Сначала мне хотелось смеяться, потом плакать. Жду не дождусь их нового сообщения.
Это не порнуха, это патч
Работаю сметчиком. Ежедневно пользуюсь программой одной из фирм-гигантов данной области. Недавно столкнулась с проблемой. При запросе поиска по шифру строительного материала программа писала: «Введн недопустимый символ», — и намертво висла. Проверила, не запала ли какая клавиша. Терпение кончилось, и я позвонила в службу поддержки.
Озвучиваю проблему. Специалист отправляет меня на диск С: и просит посмотреть количество места. Первая мысль: наверное, думает, что свободное место закончилось, вот прога и виснет. Ехидно отвечаю: «Свободно 264 ГБ». И тут слышу невозмутимое: «Ну, тогда всё ясно. Программа не ищет по шифру материалы, когда свободное место на диске С: кратно четырём. Фильм какой-нибудь скачайте, и всё заработает».
Положила трубку, теперь думаю, как оправдаться перед нашими сисадминами за трафик, когда я скачаю гиговый хлам из интернета. Производственная необходимость?
263 ГБ свободного места — всё работает в штатном режиме.
А потом опять вперёд и немного потрясём
Дословные выдержки из инструкции по установке приобретённой за большие деньги глубоко специализированной программы:
Внимание! Для проведения всех операций по установке и настройке рекомендуется привлечение квалифицированного программиста.
1. Система устанавливается только на Windows XP.
2. Язык операционной системы — любой (английский или немецкий).
3. Основная системная папка Windows — требуется C:\WINNT.
4. Система автоматического обновления Windows должна быть выключена.
5. Перед установкой отключить все режимы сохранения энергии и заставку.
6. Жёсткий диск должен иметь определенную структуру разделов: C: — 10 ГБ, D: — 100 МБ, E: — 20 ГБ, F: — 30 ГБ, а также требуется не менее 6 ГБ неразмеченного пространства.
7. Метки дисков должны обязательно иметь следующие имена: ...
8. Для установки запустите файл setup.bat. Если из-за этого компьютер сразу сам перезагрузится, ничего страшного, запустите ещё раз.
9. Ставить программу следует только под именем пользователя «%brandname%».
10. Программа установки может сама назначить учётной записи пароль «password».
11. К выбору языка программы требуется отнестись с максимальной ответственностью: потом переключить будет почти невозможно.
12. В процессе установки Windows может несколько раз зафиксировать «замену системных файлов неизвестными версиями». Это нормально.
13. По окончании установки ПК будет перезагружен.
14. Возможно, после перезагрузки вы не сможете открыть ни проводник Windows, ни какие-либо папки. В этом случае через диспетчер задач убейте процесс %processName%, затем запустите с диска файл xxx.reg, и всё будет работать.
Заставить работать это пока не удалось.
Инициация в индуизм
Недавно я, программист старой закалки, увидел, откуда берутся современные программисты.
Молодой человек (очень молодой, лет восьми) покупает молоко. Сам, своим ходом, что похвально. Два пакета, итого 84 рубля. Услышав сумму, молодой человек протягивает стольник и требует... вы правильно заподозрили неладное: 26 рублей сдачи. Забыл перенос в старший разряд сделать, бывает в его возрасте. Продавщица улыбается и указывает ему на ошибку. Молодой человек, ничтоже сумняшеся, апеллирует: у него-де пять по математике.
...И вспомнилось мне, как на работе ткнутый носом в очевидную ересь программист вместо того, чтобы пожать плечами и исправить случайный огрех, как сделал бы любой нормальный человек, стал махать IT-сертификатами и кричать, что он кандидат технических наук.
Начало большого пути
Пора и мне внести свою лепту в копилку историй о студентах. Поступил я на первый курс факультета прикладной информатики. Перед началом занятий в институте предоставлялись вводные курсы по C/C++ для тех, кто не имел ни малейшего понятия об этих языках.
Итак, первый день. Несмотря на зловещее проклятье всех студентов (им я в тот момент себя ещё не ощущал, что не помешало мне хорошо отпраздновать моё поступление), зелёного утреннего змия, я пришёл за 15 минут до начала занятий. Нас попросили включить компьютеры и запустить Visual Studio. Через 10 минут с этим справились все, даже непонятно как оказавшаяся в кабинете блондинка с большой буквы, которая пыталась объяснить преподу, что компьютер ей совсем не нужен, а записывать всё она будет в тетрадку.
Через полчаса после начала занятия дверь кабинета распахнулась, и на пороге появился индус. Мой затуманенный мозг задумался: а не сплю ли я? Сначала блондинка со, скажем так, нестандартным мышлением, затем главный герой айтишных баек.
Окинув взглядом кабинет, индус увидел место возле меня. Надо сказать, это было одно из двух свободных мест. Видимо, никто не решался подсесть к мрачному парню, от которого разит выхлопом на всю аудиторию. Доброжелательно улыбнувшись мне, индус спросил: «Как я вкылючать тут моя компьютер?» Сначала мне показалось, что я не расслышал, затем я решил, что всё-таки сплю, и это всего лишь продолжение бреда о блондинке. Видимо, моё лицо сильно изменилось. Не дождавшись ответа, индус решил нанести завершающий удар. Подняв руку, он громко спросил препода: «Господын праффесар, как мене вкылючать моя компьютер?»
Воцарилась абсолютная тишина. Мои нервы не выдержали, и, громко икнув, я начал нервно ржать. Хохот был подхвачен всем кабинетом.
Прости меня, индус! Уже прошёл год, а ты всё ходишь, хмуро насупившись и глядя на меня из-под бровей. Виной всему — зелёный змий и предрассудки. И всё же хочется спросить: неужели это была часть индусского шаманства, попадающего под категорию if(0 != 0)?
Два процента толка
Вы тут ругаете бухгалтеров, а на самом деле злейший враг программера — его же брат программист. За 25 лет программерской деятельности я сменил несколько фирм и много чего насмотрелся.
Для написания «перделки», которая на VB делается за полчаса, надо непременно использовать С++, желательно под линуксом — и наплевать, что пользователь сидит под виндой. Времени уйдёт несколько месяцев.
Если в проекте используется сторонняя библиотека, её надо объявить дерьмом и написать свою. Если в проекте встретилась слишком простая функция — её надо обязательно переписать на ассемблере.
Если поставлена задача написать виндовую программу, то надо обязательно писать кроссплатформанный проект, довести до половины, а потом потом бросить поддержку парочки платформ.
Если делать нечего и всё работает, надо объявить архитектуру устаревшей, придумать новую (упаси боже посмотреть при этом, как сделали другие) и переписать парочку подсистем, чтобы взвыли коллеги из соседних отделов.
Если можно прикрутить какой-то хак, специфичный для конкретного билда ОС или видеокарты, это сделать попросту обязательно.
Думаете, смешно? А я насмотрелся на поделки, где одновременно используется три самопальных класса для одних и тех же кнопок на тулбаре, три библиотеки для работы со строками и пять подпрограмм для умножения матриц — с ошибками, естественно. На программы, где на ассемблере с SSE переписаны функции копирования памяти, при этом один и тот же файл открывается и закрывается в цикле двадцать раз, чтобы прочесть первые три байта сигнатуры. На проги, где используются параллельно оконная библиотека MFC и своя, с ней несовместимая. Программы, у которых после наведения «архитектурной чистоты» начинались тормоза, а размер своп-файлов поднимался с единиц мегабайтов до терабайтов. Многопоточные программы, которые не в состоянии были загрузить процессор на 40%, потому что потоки дрались за критические секции...
КПД программерского коллектива — как у паровоза Черепановых: все пыхтят и создают работу друг для друга. Полезный выход — два процента.
Думаете, отчего я такой злой? Просто я всё это добро портирую с платформы на платформу, просматривая и исправляя чужой код по мегабайту в день.