bash.im ithappens.me zadolba.li
8228

Эликсир эффективного кода

11 января 2012, 11:45

Во время оно в голове у меня было только две мысли: написать программу, уложившись в ТЗ, и навариться на эпидемии вируса Chernobyl, имея под рукой программатор.

А ТЗ было очень даже заколдобистое. То есть программа должна была работать на XT без винта. С двух дискет. По филиалам у нас такие едва ли не до 98-го работали.

Кто писал объёмные проекты на Clipper, тот знает, чего стоит впихнуть клиппериану в 640К минус драйвер русской клавиатуры минус драйвер сетевой карточки минус драйвер принтера. То есть ~540К. И клипперовский рантайм на 320К.

И был у меня там модуль. Ничего сверхординарного: выборка по заранее не определённому, но конечному количеству параметров. Только Клиппер — это не SQL. Он не только сам запрос должен создать, но ещё и сам его обработать.

Был этот модуль в двух вариантах: либо быстро, но то чего-то пропустит, то вылетит по нехватке памяти, либо медленно даже с винта. А уж с дискетки на XT вообще вешалка. По полчаса. Зато точно.

И тут пациент за восстановление погрызенного «Чернобылем» биоса подгоняет аж три литра настоящего привозного Хольстена. Дедлайн по проекту был не то что виден, а уже конкретно кусал за пятки, то есть оставалась до него пара дней. И решил я превентивно выпить и попрощаться с премией, а то и с работой.

После третьей бутылки мысли начали плавать легко и быстро, и душа попросилась за клавиатуру. Я поправил версию с беты на релиз (типа, сжёг мосты) и полез в этот грешный модуль. Как раз к концу шестой бутылки про меня вспомнила охрана и буквально на руках вынесла меня из кабинета в троллейбус.

Утром, придя на работу, я первым делом схватился за исходники. Бэкап был только от последнего релиза. Плохо. BAK-файлы. Их много. Время у них практически совпадало со временем моей эвакуации охраной. Очень плохо. Значит, на перекурах сохранялся. Где там наш большой авось?

Запускаю сборку. Собирается. Причём даже без привычных ворнингов. О как! Подцепляю тестовые базы. Гоняю в хвост и в гриву. Всё работает! Добавились кое-какие красивости интерфейса. Откуда бы? Запускаю эту, мать её, выборку. Работает. Быстро. Ну, это на 486-й. Засовываю дискетку в стендовую экстишку. Работает. Быстро. Проверяю ковырнадцать раз. И не ошибается. Тихо обалдеваю.

Глазам не верю. Лезу в исходник. До меня доходит, что я не понимаю, как он работает. Любая попытка что-то поменять или поправить приводит к неработоспособности. Да и чёрт с ним! Трачу день на всевозможные тесты и точно в срок сдаю новую версию АРМ. Ну, премия, хорошие слова, почти слава.

Спустя несколько лет мне позвонил мой преемник с вопросом: «Что-то я никак не пойму, как у вас работает модуль N». Пришлось рассказать ему эту самую историю.