Я как будто при рождении Скайнета поприсутствовал.
— Покажи мне код, — попросил я, не спеша принимать задачу. Нужно убедиться хотя бы в том, что Синклер не забыл уровни сложности сделать и играть, как тупой новичок, его алгоритм также способен.
Монти вывел на экран монитора паскалевские исходники с дискеты и… более отвратительной «лапши» я не видел, наверное, ни у одного джуна. Просто поток сознания, излитый на монитор. Возможно, гениальный поток гениального сознания. Но всего моего опыта не хватало, чтобы понять что-то большее, чем «это код на Паскале и он производит некие вычисления». Да я не сразу разглядел даже самую тривиальную часть — место с парсингом ввода хода игрока.
Та самая «одна божественная процедура», которая делает всё. Большой кусок чего-то непонятного и неструктурированного. И он еще утверждает, что был лучшим по информатике? Академия Бель Эйр только что с грохотом покатилась вниз в моем рейтинге учебных заведений.
«Ну что, товарищи, коллектив у нас квалифицированный, работа проделана большая, у меня лично сомнений нет — это дело так не пойдёт!»
Глава 12
— Глядя на этот код, мне хочется вызвать копов, чтобы они отправили тебя за решетку за психологическое насилие над коллегами, — объявил я. — Спагетти, конечно, угодны Макаронному Монстру, но у тебя с ними перебор.
— Спагетти? Конкретику, пожалуйста, — не стушевался Монтгомери, — я адекватно воспринимаю критику. Наоборот, мне ее очень не хватает. Нанятые преподаватели, шахматные тренеры и школьные учителя все время меня хвалили и складывалось ощущение, что не всегда заслуженно. Льстили, лишь бы не терять заработок.
— Давай я расскажу основные принципы, которых придерживаюсь, а ты уже сам сделаешь выводы, что в твоей программе не так.
Как бы ни хотелось разнести его писанину в пух и прах — это не наш метод. Парня надо подтолкнуть не бросать программирование и развиваться в правильную сторону, а не самоутверждаться за его счет.
— Самое важное, что ты не учел, а преподаватели, скорее всего, не рассказывали, в том, что мы пишем код не только для компьютера, который будет его исполнять, но и для людей. Самого себя и других разработчиков — всех, кому предстоит читать и дорабатывать программу. Всегда пиши код так, будто поддерживать его будет склонный к насилию психопат, который знает, где ты живешь. Я не про себя, если что!
Линда не удержалась от тихого смешка. Да и Синклер понял, что угроза шуточная и широко улыбнулся.
— Пойдем сварим еще кофе, тут напрашивается целая лекция.
И я ее прочитал — про большую часть принципов организации кода, известных мне из опыта будущего. Пару раз пришлось себя одергивать, так как многое, те же SOLID, шло в контексте, неприменимом ни к голому процедурному необъектному Паскалю, ни к Си без плюсов. «Никакого ООП, никаких тебе классов»!
Но все одно рассказал самые базовые вещи вроде понятных имен переменных: это железяке-то все равно, а вот живому кодеру не нужно гадать, что значит какая-нибудь одинокая буква. Упомянул про избавление от «магических чисел» в пользу нормальных констант. Про чистые функции, которые всегда возвращают один и тот же результат при одинаковых аргументах. Про компактный код, не вылезающий за пределы одного экрана. О правильных комментариях, объясняющих, «почему» так написано, а не работающих капитаном Очевидность в духе «это счетчик цикла».
Вместе с Синклером меня с не меньшим интересом слушала Линда. Старался именно для нее говорить и смотреть ей в глаза. Девушка всегда моими рассказами интересуется, вероятно, из-за влюбленности. А к окончанию не такого и короткого выступления обнаружил, что добавился еще один зритель — мисс Селеста Скай, незаметно проскользнувшая сначала в дом, затем в комнату.
— Браво! Браво, мистер Коламбус! — эмоционально захлопала она в ладоши. — Я совершенно ничего не поняла, но ваш пассаж про «компьютеру нужна математика, а человеку — читаемый текст» — горячо поддерживаю. Не надо делать людей пластиковыми!
Линде тут же достался от нее поцелуй в щечку, а Монти полноценный, в губы, от которого у юноши наверняка выветрилась из головы половина моей импровизированной лекции. Хорошо, что он дисциплинированно записывал. Я удовольствовался рукопожатием.
— Общие принципы я уяснил, — резюмировал тему моего выступления Синклер. — Необходимо сосредоточиться на том, чтобы алгоритм не только выполнял свою задачу, но и оставался понятным постороннему программисту.
— Именно так. Учитывай, что пройдет несколько месяцев или даже дней, и посторонним станешь будущий ты. Наш мозг легко отбрасывает лишние детали и приходится тратить время, чтобы вспомнить, что в той или иной строке имелось в виду.
— Мне потребуется пара дней, чтобы все переделать, — принял мою правоту шахматный гений. Золотой он человек, немало джунов мне после обоснованной критики с пеной у рта доказывали, что их код шикарен, а это я не врубаюсь в гениальные задумки.
— В следующий раз поговорим о тестировании. Это пока не горит, но проверять программы вручную — неправильно. Пока я сам вынужден так и делать, но мы сэкономим великое множество времени, если сразу начнем покрывать код тестами. Я покажу, как и научу. Да хоть бы и на примере твоих шашек после того, как ты их закончишь.
— Принято, спасибо.
— И, несмотря ни на что, ты отлично поработал, а я, как ответственный работодатель, обязан выписать тебе чек. Авансом, потом вычтем из будущих роялти, как и со мной издатель делает.
Синклер принял оплату с невиданным достоинством.
Тысячу долларов пришлось буквально от сердца отрывать, но это честно. Любой труд обязан быть оплачен. А Монти, хоть и сотворил невнятный кусок слипшихся спагетти, но это гениальные макароны, порвавшие проприетарный движок на британский флаг. Интересно, а нет ли чемпионатов по шашечным программам? Если есть, и тут, в районе Сан-Франциско, я бы Синклера заявил. Отличный был бы пиар и для наших порношашек, и для «Каналья Геймс». Надо поспрашивать! Или в битву шахматных движков вписаться, но это уже сложно, там правят балом, прости Ктулху, суперкомпьютеры.
— Мистер Коламбус, что за макаронного монстра вы периодически упоминаете? — встрепенулась вдруг Селеста. — Это новый хоррор? Или персонаж вашей следующей поэмы?
— О, это весьма могущественное божество. Покровитель всех любителей углеводов. Летающий Макаронный Монстр! Согласно нашей вере, пастафарианству, Вселенная была создана его Макароншенством после сильного алкогольного опьянения, чем и объясняются все ее изъяны и несовершенства. А гравитации на самом деле не существует — это просто Невидимый Монстр постоянно прижимает нас к земле своими Макаронными Десницами. Раминь!
— Какая блестящая сатира! — неожиданно восхитилась Селеста. — Высмеивание слепой веры через доведение ее до абсолютного, макаронного абсурда.
— Согласно нашим догматам, настоящими праведниками и первыми пастафарианцами были пираты. Но не жестокие разбойники, а исследователи и мореплаватели, нарочно скомпрометированные другими конфессиями. Каждый истинный верующий обязан время от времени говорить, как пират и дарить детям конфеты. И не забудем наш традиционный головной убор, который каждый истинно верующий имеет право носить даже на фотографиях для официальных документов, вроде водительской лицензии — обычный дуршлаг для макарон.
Линда согнулась в приступе беззвучного хохота. Я давно собирался просветить ее в религиозных вопросах, но заодно и новых друзей повеселил.
— Как же это красиво! — выдохнула Селеста.
Хиппи тут же ускользнула в сторону кухни и, по всей видимости, знала, где находится «традиционный головной убор», так как вернулась с дуршлагом на голове.
— Религия, что не пугает адскими муками и не заставляет страдать, а призывает раздавать конфеты. Без агрессии и навязанного чувства вины! В вашей шутке больше истинной духовности, чем в выступлениях телевизионных проповедников. Считайте меня первой прихожанкой!