С архиваторами у меня давние и тёплые отношения. Самый мощный в мире архиватор написал я на втором курсе института в качестве курсовика. Файл любого размера он сжимал до двух байт: 0x00 и 0x01. На растерянный вопрос препода: «И что же теперь с ним делать?» — я честно ответил: «Понятия не имею. Было задание написать архиватор, а задания писать разархиватор не было».
Второй по мощности в мире архиватор написал тоже я, уже в качестве диплома. В руководители мне достался замзавкафедры вычислительной математики, жутко нудный и мелочный тип. Я должен был написать архиватор по изобретенному моим руководителем алгоритму — что-то там с многократным обходом деревьев Бейкера. По этому поводу мне полагалось проштудировать пару десятков книженций, от одних только названий которых скулы сводило на неделю. Месяца четыре мне удавалось кормить руководителя завтраками, но в конце концов он недвусмысленно намекнул, что без рабочей программы я на предзащиту не попаду.
Делать нечего — через неделю архиватор был предъявлен. Он сжимал любой файл раз в пять лучше RAR на максимальной компрессии и делал это раз в десять быстрее. Выгодно отличало его от моего первого детища то, что этот умел разархивировать файлы. Руководитель сиял, как стоваттная лампочка, и на предъявленный исходник отреагировал мимолётным взглядом и снисходительным кивком. А зря, потому что среди 30 КБ bitwise-операторов и булевой логики сиротливо ютились несколько вызовов к внешним DLL. Один из них со скромным названием RightAlignDWORD получал хэндл открытого файла, копировал его на последние незанятые кластеры жесткого диска и возвращал список кластеров — FAT, разумеется, оставался нетронутым. Этот список кластеров и был единственной полезной информацией в получившемся «архиве».
Защита прошла на ура, я забрал диплом и выписался из общежития. Пути наши с моим (теперь уже бывшим) руководителем разошлись. По слухам где-то через год он меня упорно искал через знакомых. Зачем бы, интересно?
Отлаживал простенькую игрушку. Функция должна была в месте клика выводить на экран спрайт. Два часа я думал, почему картинки корректно отображаются только на небольшой области экрана, а при клике на других областях появляются чёрт-те где. Хотел уже переустанавливать Delphi, а то и мозг, но прозрел.
Дело было в школе, классе в 10-11. На уроках информатики мы учились программировать на турбо-паскале. Обычно я быстро справлялся с заданиями и большую часть урока страдал разными вариантами ничегонеделания. В один из таких дней я напрограммировал примитивную анимацию интересной части тела с поясняющей надписью из трёх букв. Проверил, сохранил под случайным именем и забыл.
Программа всплыла неожиданно спустя месяц. Был такой же урок, только я прохлаждался, сидя за другим компом. Учитель куда-то вышел; одноклассница, ничего не понимающая в предмете, искала в сохранённых файлах уже выполненное задание. Нашла, взглянула на код (исходник был похожим), запустила, тихо пискнула и в шоке чуть не сползла под стол. Я понял, что происходит что-то неординарное, когда вокруг неё столпились все, кто были в классе, издавая утробный гогот.
Через несколько секунд анимация закончилась, а в класс вошёл учитель и удивился собравшейся толпе. «Проблемы?» — спросил учитель, запуская программу. Секунд через десять он гневно прервал выполнение и жестоко затёр исходник.
С тех пор я никогда не сохраняю результаты ничегонеделания под непонятным именем, хоть меня тогда и не поймали. На какой-то дискете до сих пор жива копия той злополучной программы, только вот флоповодов у меня давно уже нет.
1. В день сдачи здания приезжал бы крупный начальник, говорил бы, что ему не нравится вон то восточное крыло и вопрошал: «А можно ли это переделать за два часа?»
2. Половина зданий была бы похожа на барачные конструкции с кучей подпорок по периметру — время не резиновое.
3. Вторая половина зданий была бы нормальной, но недостроенной.
4. Утвержденный план здания по ходу бы дополнялся пулеметами на крыше (чтобы враги не подступились), легкомысленными статуями на фасаде (чтоб красиво было) и окнами, через которые можно смотреть только изнутри — и вся эта красота за те же деньги, в те же сроки и за три дня до окончания проекта.
5. Если бы легкомысленные статуи и пулеметы уместить в одном здании не получилось бы, начальник заглядывал бы в глаза и спрашивал: «А почему нельзя? А вон я видел вон там вон это вон».
6. «Вон там вон это вон» — здание, возведенное международной строительной компанией при поддержке правительств трёх государств.
7. И вообще, плита перекрытия между этажами — это просто, доступно и легко, почему её поднимают на кране? Вон, египтяне еще до нашей эры пирамиды строили, а это вам не хухры-мухры, давайте-ка пошустрее!
8. А зачем нам эти плиты покупать? Не-е-ет, это очень дорого. Проще выдать задание на создание рукотворных плит силами доблестных архитекторов. А то, ишь, сидят, чего-то рисуют в автокаде, жизни не видели.
9. Если бригада таджикских джамшутов сотворила бы с внутренними помещениями какое-то непотребство, то в этом виноваты были бы снова архитекторы (джамшутам должно быть интуитивно понятно, что ламинат на стены не укладывают и обои на пол не клеят, а у вас подписей на стенах и полу нет). Если в здании после его постройки и сдачи в эксплуатацию случился бы пожар из-за курения в постели пьяного жильца, в этом тоже были бы виноваты архитекторы (а здание у вас не пожароустойчивое).
10. Злые архитекторы по вечерам, проклиная всё на свете, отправлялись бы отдыхать от этого бардака куда-нибудь подальше в надежде, что завтра им не выдадут техзадание на постройку очередного колосса в нереальные сроки.
Считаете программистов бездельниками, лентяями и прохиндеями? Зачастую это правда (иначе бы я не потратил четверть часа рабочего времени на написание этой истории). Несмотря на это, уважайте труд программиста — зачастую им ставят задачи из разряда «найти снеговика в Сахаре и привезти его живым», и многие справляются!
В конце восьмидесятых только-только начали появляться персональные компьютеры Д3-28 (ввод с магнитофонной кассеты), Электроника-60 (ввод с перфоленты), ДВК-2 (ввод с 5" дискеты аж на 360 КБ). И вот одна из наших кафедр закупила 3 ПК «Искра» (номера модификации уже не помню). Всё это происходило в период борьбы партии и народа с иностранщиной.
Так вот, в эти «Искры» был уже прошит бейсик на русском. Перевод был поразительным. INPUT — «вводим». Догадались, как будет END? Правильно, «кончаем».
Мы так эти «Искры» и прозвали: «Вводим-кончаем». Правда, проработали они у нас месяца три и поумирали (скончались?) Вместе с этим порнобейсиком отправили их на завод-изготовитель, и больше они к нам не возвращались.
Веду разработку девайса, подключаемого через COM-порт к компу, уже не первую неделю; пока всё шло нормально. Вчера поздно вечером, закончив очередную версию прошивки, ушёл я домой. Сегодня прихожу на работу, завожу комп и не могу ткнуть курсором в поле ввода пароля — мышь упорно уползает в нижний левый угол. Всё, думаю, долазился там, где не надо.
Неимоверными усилиями превозмогая противодействие мыши, таки запустил NOD32. Фиг вам — «нод» свежий, но ни черта не ловит. Полез в панель управления глянуть, что с мышой. Опять-таки бешено гоняя грызуна по коврику вверх-вправо, еле залез на закладку «Оборудование». Там значились:
— PS/2-совместимая мышь (PS/2); — Microsoft BallPoint трекбол (COM2).
На COM2 и висел мой девайс. Более того, выяснилось, что устройство помимо прочего бросает в COM-порт данные со встроенного акселерометра. Теперь всей конторой, подкручивая коэффициенты, пытаемся настроить его для игры в «сапёра».
Было это в универе на втором курсе. В это время мы учили программирование двоичных деревьев в Паскале. У меня неплохо получалось, потому я — человек нежадный и открытый — консультировал почти всю группу по этому вопросу, как, впрочем, и по многим другим.
Подзывает как-то меня на паре одна из одногруппниц, которая не отличалась особым умом и сообразительностью. Показывает мне синенькое окошко Turbo Pascal и спрашивает: «Что делает эта программа?»
Смотрю код. Глаза у меня начинают округляться, а волосы вставать дыбом. Текст программы набран русскими буквами, причём о правильном синтаксисе не идёт и речи. Я не пойму, что происходит: то ли лыжи не едут, то ли со мной что-то не так. Ошалело спрашиваю: «Она компилируется?!» Девушка отвечает, что нет.
Говорю, что тут я ничем не могу помочь. Она тут же открывает еще один аналогичный кусок «кода» и снова спрашивает, что делает программа. Я, офигев окончательно, всё-таки нахожу в себе силы спросить:
Работаю в фирме, занимающейся разработкой устройств связи. В штате 11 разработчиков, деньги платят немалые, хотя спрашивают с нас втройне, а в офисе мы порой засиживаемся допоздна. Естественно, уговорить руководство нанять еще толпу народа для кодинга не удавалось, ибо и так слишком много мы денег на себя требуем, да еще и ноем постоянно.
Однажды достался очень крутой госзаказ, который обещал нам пару месяцев бессонных ночей программирования и отладки. Писать промышленный код — отдельная песня: такие проги падать не должны, а каждая ошибка в таком коде уж очень сильно бьёт по кошельку фирмы, а значит, и по нашим бонусам.
Работали в жёстком режиме месяц. Ели и спали мало. Силы уже подходили к концу, да и руководство давило так, что нервы не выдерживали. Я заметил, что один паренек не столь бледен, как остальной коллектив, а иногда даже умудряется фигнёй пострадать вместо разработки. Начал я его потихоньку пытать, как он всё успевает. Он долго, конечно, отнекивался, но я был настойчив.
Оказалось, парень работал на двух работах одновременно. Проекты были схожие, только вот вторая фирма имела инструменты для автоматической генерации промышленного кода из М-языка. Вся математическая обработка моментально переводилась в C++ и HDL без участия человека. Вот он и генерил код, а исходники потом приносил к нам и внедрял в проект.
Обсудили с командой, естественно, не вовлекая начальника отдела — если он прознает о такой возможности, то может и сократить. Напрягли паренька, чтобы он за весь отдел код автоматически сгенерил — естественно, пивчанским проставились. Два последующих месяца мы загорали.
Учусь на вечернем, а днём работаю. После работы и учёбы прихожу домой, а там двое маленьких деток, муж и кошка. Уроки делаю по ночам — короче, последние пару лет я нахожусь в перманентном состоянии недосыпа.
В университете задали написать лабу: вводишь дату, а программа рассчитывает и выводит, на какой день недели эта дата выпадала, с учетом юлианского, григорианского календарей и прочих исторических поправок.
Пишу, компилирую, всё в порядке, но результата нет. Это ясно — хоть когда-нибудь программа начинала работать с первого раза?.. Значит, где-то я накосячила. Лезу разбираться в код — всё ОК. Отлаживаю «step by step» — программа считает, но результата по прежнему нет!
Я вылизала каждую строчку в коде. Я переписала основной алгоритм трижды. Все логично построено, безошибочно компилируется, а результата нет! В последную перед сдачей ночь я просто начала плакать. Только утром перед зачётом я нашла проблему. Среди заумных алгоритмов отсутствовала лишь одна строчка кода: