Первый «Спектрум» родители мне подарили на шестилетие, и с тех пор пошло-поехало. Прогуливание школы сводилось к посещению секции магазина электротоваров, где на огромном столе были разложены аудиокассеты с играми и программами. Ритуальное еженедельное слюнопускание, как ни странно, никак не беспокоило продавцов. Меня в магазине знали; ни у кого не вызывало удивление то, что мелкий пацан консультирует покупателей по поводу приобретения той или иной кассеты.
Там были и книги на компьютерную тематику. Так вот, одна из них буквально изменила мою жизнь. Учебник назывался «Напиши игру сам» и, как вы понимаете, был пособием для начинающего программиста.
В день рождения родители подарили мне эту книгу. Произведение зачитывалось до дыр, перечитывалось и снова зачитывалось. Когда родители хотели меня наказать за что-нибудь, они просто прятали от меня учебник. Да-да, в детстве меня наказывали книгой — вернее, её отсутствием.
Чтобы противостоять предкам, я аккуратно разобрал книжку на много частей. Ту часть, которую я читал в данный момент, я прятал в учебниках. Когда я дочитывал пачку страниц, я находил остаток, вкладывал фрагмент обратно и вынимал следующий.
Конечно, были и другие методы воздействия: отбор провода питания, RGB-провода... Но всё это не шло в сравнение с отсутствием на руках необходимой части книги и присутствием родителей дома, так что я должен был дожидаться их ухода для «замены расходников».
Лет пять назад попросил меня знакомый отредактировать пару документов в жёлтой бухгалтерии шестой версии. Конфигурация была самодельная, а контакты самоделкина за давностью лет были утеряны. Комментарии отсутствовали напрочь, но хотя бы все поля форм и переменные имели осмысленные названия.
Если кто не знает, в «шестёрке» в именах переменных можно использовать кириллицу, а начинаться имя должно с буквы «П». Шёл третий час разбора чужого кода, когда я добрался до расчётов издержек по разным статьям. Угадайте, как именовались переменные? Правильно:
Довелось мне как-то посетить контору широко известного в узких кругах разработчика «с выходом на международный уровень», в продукции которого содержание багов стало стремительно сокращаться. Зашёл в основное помещение, увидел впереди себя парня, который всем, начиная с внешнего вида, заканчивая поведением и каким-то неуловимым содержимым во взгляде, разительно отличался от остальных в меру ухоженных, лохматых и довольно откормленных сотрудников. Парень имел стрижку под Котовского, обладал атлетически-коренастым телосложением, был гладко выбрит, а крой его костюма больше говорил о том, что парень куда уместнее смотрелся бы где-нибудь на армейском полигоне, а не в офисе девелоперов.
Подошёл к тамошнему тим-лидеру, спросил про вышеупомянутую личность. Тим-лидер улыбнулся и рассказал, что это «виновник» понижения числа багов и главный тестер, а по совместительству — бывший сапер. Парень обладал неописуемым «чувством жопы» — находил такие баги, косяки и проблемные места, о которых никто и не подозревал. Впрочем, это не мешало ему постоянно заваливать партии в «сапёра» с первого клика. Собственно, именно так его и заприметили.
Ковыряюсь в потрохах жёлтой программы. В момент, когда курсор остановился на серии строк, начинавшихся с «БухИт20», с просьбой подошла жена, которая на работе умоталась так, что взгляд фокусировала с трудом. Озвучив просьбу, она перевела взгляд на экран:
— Бухито, бухито, бухито... Классную ты программу пишешь!
Да уж — для большинства пользователей языки скриптов и программирования зачастую звучат как нецензурщина.
Ночевал как-то у тру-админа. Выпили по пиву, покурили, пошли спать. В спальне — рай для железа: сановский сервак, комп, роутер и пара ноутов. Шумит всё это, понятно, мама не горюй. Говорю ему: «Включи какой-нибудь фильм и поставь таймер на полчасика». Привык, знаете ли, к простым виндовым решениям.
Последним, что я запомнил перед встречей с Морфеем, были горящие глаза друга и фраза: «Сейчас мы напишем простой скрипт».
Короче, я надолго запомнил эту картину: ночь, шум от десятка кулеров и тело с сигаретой в зубах, бесконечно повторяющее одно слово: «Щас, щас...»
Писали как-то на первом курсе лабораторную на Паскале с меню, по которому передвижения происходят с помощью стрелок. Меню дописывали в последнюю ночь, поэтому времени на отладку не было. Показываем программу: стрелка вверх передвигает курсор вниз, а стрелка вниз двигает вверх. Принимающий говорит, чтобы исправили прямо при нём.
Мозги у нас уже не соображают, тупое переделывание кодов стрелок приводит к отказу в компиляции. Один из нас дописывает чуть ниже меню: «Внимание: стрелка вниз двигает курсор вверх и наоборот. Будьте внимательны!» Работу защитили.
Начну издалека. Есть такая модель вычислений: demand-driven computation. В ней считается только то, что нужно посчитать. А еще есть common subexpression elimination — это такая техника оптимизации в компиляторах. Проще всего объяснить на примере: из sqrt(2) в пяти местах компилятор один раз сделает double s2 = sqrt(2), после чего везде будет использовать s2. Это можно усугубить, вбив вместо вычисления sqrt(2) просто константу.
Так вот, когда-то давно, когда машины были большие, проводились сравнения разных компиляторов Фортрана. Им подсовывалась тестовая программа, измерялось время компиляции и время работы скомпилированного бинарника. Особенно в этом сравнении отличились два коммерческих компилятора.
Дело в том, что тестовая программа только что-то считала, но не выводила результат. Умный компилятор рассуждал так: если результат никому не нужен, зачем его считать? Это допустимое поведение, но не для Фортрана же! В результате тест был провален, потому что тестовая программа отрабатывала моментально. Да-да, вы правильно догадались. Оптимизированный вариант выглядел так: exit(0).
После этого в тест добавили вывод результата вычислений. Тут уже отличился другой продукт: компилировал тестовую программу он три часа, зато отработала она опять-таки моментально. В оптимизированном коде было нечто вроде printf(result) — программа сразу выводила результат вычислений, который компилятор в поте лица и считал так долго.
Совсем неайтишный отдел одной не очень-то айтишной компании. Рабочее время. Девочка-блондинка вполне офисной внешности и не менее манагерского вида мальчик сидят за одним столом, придвинувшись друг у другу, насколько это позволяют подлокотники кресел, и увлечённо, забыв обо всём, смотрят в экран ноутбука. Процесс сопровождается эмоциональными междометиями, обменом горящими взглядами и порывистыми движениями рук.
Это дело замечает босс. Ага, всё ясно: в рабочее время смотрят понятно какого содержания видео, причём настолько увлеклись, что, похоже, уже готовы перейти от созерцания к действию! Совсем охренели! Босс тихо подходит и заглядывает в экран, где его и постигает разрыв шаблона: взору предстаёт синий фон с ровными колонками каких-то непонятных букв и цифр.
...А мы всего лишь потрошили код одной программки, которая нам очень пригодилась бы по работе, если б её вот тут и вот здесь чуть-чуть переделать.