суббота, 18 мая 2013 г.

Вася в роли компилятора


Василий Викторович (далее просто Вася) работал в конторе уже третий год. Программист по образованию, он был на хорошем счету у директора Александра Ивановича, тот нисколько не сомневался в его профессиональных навыках и готов был доверить ему любую важную задачу. Директор часто набирал новых сотрудников в помощь Васе, но все они подолгу не задерживались - Вася жаловался, что, мол, плохие с них программисты, работать не хотят, пишут код, в котором сам чёрт ногу сломит, к тому же пичкают повсюду своё ООП и паттерны.
 - Вася, так может ты сам поработаешь? Уже десять человек уволили... Понимаю, специалистов в наше время не сыскать, понимаю, одному работать трудно, но может всё-таки попробуешь, а?
 - Иваныч, я бы с радостью, но кто тогда мелкими делами будет заниматься? Я пишу важнейшие вещи, а отвлекаться на пустяки всегда очень трудно. Найди мне хорошего человека, Иваныч! Я верю, однажды попадётся тот самый, который сможет работать как я, а то и лучше!
 - Да что ты, Вася, я уже убедился - лучше тебя никого мне не найти. Я постараюсь, Вась, постараюсь!
Директор похлопал его по плечу и вышел из кабинета. А Вася нажал Alt+Tab и продолжил читать ленту.





 - Вася, знакомься, это Андрей. Два года назад закончил университет, семь месяцев работал в Яндексе, рекомендации хорошие, думаю, сработаетесь, - подмигнул директор.

Вася неодобрительно взглянул на новобранца, прикинул в мыслях, через сколько дней он вылетит отсюда и, ехидно улыбнувшись, протянул руку улыбающемуся пареньку.
 - Василий Викторович, - буркнул он.
 - Очень приятно, - паренёк продолжал улыбаться, что только злило Васю.
 - Ну, ты ознакомь Андрея с его обязанностями, а я пойду.
Когда дверь за директором захлопнулась, Вася указал новенькому на компьютер и подкинул ему парочку "простеньких задач", над которыми, если честно, трудился уже не один месяц.
 Андрей открыл проект и ужаснулся: в коде не было ни единого комментария, форматирование просто отсутствовало, названия переменных и методов не соответствовали действительности. Андрей знал, что этот день настанет. Еще с университета он готовился к самому худшему варианту, но к увиденному он не был готов - улыбка паренька бесследно исчезла, а на глаза наворачивались слёзы. "Держись, Андрейка, держись", - подбадривал себя паренёк изо дня в день. За десять дней работы в этой ужасной конторе Андрей понял, что Василий Викторович самый что ни на есть быдлокодер. Кое-какие знания у него, конечно же, были, иначе Александр Иванович сразу бы заподозрил некомпетентность этого "специалиста", но в остальном же он не хотел нормально программировать.
Андрей понял, что так долго не протянет. У него была одна способность, про которую никто не знал - он хорошо владел искусством гипноза. И вот однажды, после тяжелого рабочего дня, он подошел к Васе, щелкнул пальцами и прошептал несколько фраз...



Вася очнулся не сразу. Сначала в ушах был какой-то зловещий глухой звук, потом чернота в глазах постепенно перешла в мутную рябь, а потом раз - и он стоит в каком-то непонятном помещении. Вокруг ничего, только белый пол и серый потолок. Никакого шума. Казалось, Вася мог слышать собственный стук сердца. Откуда-то послышался щелчок мыши, и тишина стала приобретать какие-то напряженные оттенки, как будто перед бурей.


Build started.

 - Эй ты, торопись, нужно прочитать вот эти файлы исходного кода.
 - Ч-ч-то? Какие фа...
 - А ну живо, я сказал, - послышался удар плетью, сопровождающийся криком Васи. - Читаешь эти файлы, всю информацию заносишь в таблицу лексем. Если что-то непонятное встретится, жми стоп-кран с соответствующей надписью об ошибке. И ПОТОРАПЛИВАЙСЯ!
Вася развернул длинный свиток с именем "main" и принялся читать его. В глаза сразу бросилось неудобное форматирование, буквы то и дело сливались воедино, образовывая собой кашу, имена переменных содержали не более трёх букв - сложно запомнить, была объявлена переменная или нет. Такая же история была и с названиями методов. Васе казалось, будто бы он знаком с этим кодом, но времени на раздумья не было - его так часто били розгами, что он едва мог нормально читать написанное.
Покончив с одним файлом, Вася присел передохнуть и тут же получил серию новых ударов. Спохватившись, он развернул другой свиток с именем "Krname" и начал всё по-новой. Затем были файлы "qwerty", "MegaUtils", "dList" и т.д. Глаза Васи начали уставать, спина болела от нескончаемых ударов плетью и розгами, руки тряслись от постоянного записывания лексем в таблицу - Вася попал в ад.
Спустя очень большое количество времени, Вася всё-таки сумел просмотреть все файлы и занести информацию в таблицу лексем. "Ну наконец-то", - вытер он пот со лба.
 - Чего развалился? Бери таблицы лексем, проверяй их синтаксическую правильность и строй по этим данным дерево разбора! Если что-то пропустишь, будешь заново всё переделывать. За работу!
Вася принялся сверять данные в таблице с Книгой Правил и вычерчивать на огромном листе бумаги дерево операторов и операндов. Строка за строкой, лексема за лексемой, он сверял записи. Вершина за вершиной, ребро за ребром, он рисовал дерево. В глазах маячили символы, много символов, им не было конца. И тут Васе на глаза попала строчка, не указанная в правилах. Недолго думая, он дёрнул рычажок с надписью "Syntax error". Тот час же работа остановилась, удары плетью закончились, лист, в котором рисовалось дерево очистился, в помещении снова наступила зловещая тишина. Вася свалился на пол, обессилев. Отдыхать ему долго не пришлось, уже спустя две минуты работа началась... заново. Вася крикнул в отчаянии "Нет", но его спину прожгло парой новых ударов, пришлось читать все файлы по новой.
 Какую-то долю вечности, во всяком случае, так казалось Васе, он перебирал свитки с исходным кодом и проверял таблицу лексем. К счастью, синтаксических ошибок больше не было, но это ничуть не облегчило участь Васи, впереди было новое испытание.
 - Эй, бери синтаксическое дерево и помечай правильность типизации, - скомандовал голос, ударяя плетью беднягу.
 Усталость Васи давала о себе знать, он то и дело сбивался при проверке типов, но ощущение того, что он будет переделывать всё заново, если сделает ошибку, добавило немного энтузиазма его работе.
 - Теперь сгенерируй то, что у тебя есть в промежуточный язык. И не забудь оптимизировать полученное!!
Вася вздрогнул - еще никогда он не делал никаких оптимизаций. Он не любил заключать повторяющиеся куски кода в отдельный метод, не часто использовал циклы, он даже переменные называл как можно короче, ведь считал, что все эти мелочи отвлекают от основного занятия - программирования. Зачем думать об оптимизации, если важна сама работа программы? Но каким бы критичным не было мнение Васи, пара ударов плетью сделали своё дело - он начал оптимизировать. Он рассматривал отдельные строки кода и пытался найти им наиболее оптимальный вариант. Он разворачивал циклы, собирал последовательности строк в пару более кратких, переписывал некоторые фрагменты. Голова Васи гудела. Казалось, сам дьявол наказывает его за долгие годы написания плохого кода. Оптимизировав последнюю оставшуюся строку, Вася упал на колени и выдавил:
 - Я так больше не могу.
 - Как это ты не можешь? А машинный код кто будет генерировать? Я, между прочим, делаю это по сотни раз на день и не жалуюсь. Я каждый день читаю твой ужасный код, изучаю типы твоих бессмысленных переменных, оптимизирую всё твоё бездарное творчество, чтобы на выходе получить программу, которая даже не запустится, потому что ты забыл прописать вызов модуля! Я вынужден вновь и вновь это делать, пока ты не удосужишься всё-таки его прописать. И я не получаю ни единого слова благодарности, напротив, я постоянно слышу "Компилься ты быстрей, зараза!", "Что это еще за ошибка? У меня в коде всё правильно!". Я не имею возможности сказать то, что думаю о тебе, потому что не имею рычагов с нужными фразами. Но если бы они были, ты боялся бы нажимать "Compile"... А сейчас поднимайся и генерируй машинный код!
 Вася повиновался и начал заменять инструкции промежуточного языка на инструкции машинного кода. Руки едва поднимались, в глазах мутнело, в ушах был слышен свист, ноги подкашивались, спину жгло новыми ударами, шея едва удерживала кипящую от бесконечного потока информации голову. Да, Вася попал в ад быдлокодера. Он точно это знал. Если ему удастся когда-нибудь выбраться отсюда, он перестанет писать плохой код, станет форматировать исходники, будет давать осмысленные имена переменным и методам, начнёт оптимизировать свои программы и никогда, никогда больше не будет ругать компилятор!

 Build successfull. Elapsed time: 00:01:19.

 ...Вася открыл глаза. В кабинете не было никого. На экране монитора была открыта среда разработки. На одной из неотформатированных строк мигал курсор. Вася потянулся к клавиатуре и зажал Ctrl+Backspace. Курсор побежал, забирая с собой всё, что было написано за последние месяцы работы. Оставив чистый файл исходника, Вася встал, посмотрел на консоль вывода компилятора и сказал: "Спасибо".

Комментариев нет:

Отправить комментарий