– Глядя на этот код, мне хочется вызвать копов, чтобы они отправили тебя за решетку за психологическое насилие над коллегами, – объявил я. – Спагетти, конечно, угодны Макаронному Монстру, но у тебя с ними перебор.
– Спагетти? Конкретику, пожалуйста, – не стушевался Монтгомери, – я адекватно воспринимаю критику. Наоборот, мне ее очень не хватает. Нанятые преподаватели, шахматные тренеры и школьные учителя все время меня хвалили и складывалось ощущение, что не всегда заслуженно. Льстили, лишь бы не терять заработок.
– Давай я расскажу основные принципы, которых придерживаюсь, а ты уже сам сделаешь выводы, что в твоей программе не так.
Как бы ни хотелось разнести его писанину в пух и прах – это не наш метод. Парня надо подтолкнуть не бросать программирование и развиваться в правильную сторону, а не самоутверждаться за его счет.
– Самое важное, что ты не учел, а преподаватели, скорее всего, не рассказывали, в том, что мы пишем код не только для компьютера, который будет его исполнять, но и для людей. Самого себя и других разработчиков – всех, кому предстоит читать и дорабатывать программу. Всегда пиши код так, будто поддерживать его будет склонный к насилию психопат, который знает, где ты живешь. Я не про себя, если что!
Линда не удержалась от тихого смешка. Да и Синклер понял, что угроза шуточная и широко улыбнулся.
– Пойдем сварим еще кофе, тут напрашивается целая лекция.
И я ее прочитал – про большую часть принципов организации кода, известных мне из опыта будущего. Пару раз пришлось себя одергивать, так как многое, те же SOLID, шло в контексте, неприменимом ни к голому процедурному необъектному Паскалю, ни к Си без плюсов. “Никакого ООП, никаких тебе классов”!
Но все одно рассказал самые базовые вещи вроде понятных имен переменных: это железяке-то все равно, а вот живому кодеру не нужно гадать, что значит какая-нибудь одинокая буква. Упомянул про избавление от “магических чисел” в пользу нормальных констант. Про чистые функции, которые всегда возвращают один и тот же результат при одинаковых аргументах. Про компактный код, не вылезающий за пределы одного экрана. О правильных комментариях, объясняющих, “почему” так написано, а не работающих капитаном Очевидность в духе “это счетчик цикла”.
Вместе с Синклером меня с не меньшим интересом слушала Линда. Старался именно для нее говорить и смотреть ей в глаза. Девушка всегда моими рассказами интересуется, вероятно, из-за влюбленности. А к окончанию не такого и короткого выступления обнаружил, что добавился еще один зритель – мисс Селеста Скай, незаметно проскользнувшая сначала в дом, затем в комнату.
– Браво! Браво, мистер Коламбус! – эмоционально захлопала она в ладоши. – Я совершенно ничего не поняла, но ваш пассаж про “компьютеру нужна математика, а человеку – читаемый текст” – горячо поддерживаю. Не надо делать людей пластиковыми!
Линде тут же достался от нее поцелуй в щечку, а Монти полноценный, в губы, от которого у юноши наверняка выветрилась из головы половина моей импровизированной лекции. Хорошо, что он дисциплинированно записывал. Я удовольствовался рукопожатием.
– Общие принципы я уяснил, – резюмировал тему моего выступления Синклер. – Необходимо сосредоточиться на том, чтобы алгоритм не только выполнял свою задачу, но и оставался понятным постороннему программисту.
– Именно так. Учитывай, что пройдет несколько месяцев или даже дней, и посторонним станешь будущий ты. Наш мозг легко отбрасывает лишние детали и приходится тратить время, чтобы вспомнить, что в той или иной строке имелось в виду.
– Мне потребуется пара дней, чтобы все переделать, – принял мою правоту шахматный гений. Золотой он человек, немало джунов мне после обоснованной критики с пеной у рта доказывали, что их код шикарен, а это я не врубаюсь в гениальные задумки.
– В следующий раз поговорим о тестировании. Это пока не горит, но проверять программы вручную – неправильно. Пока я сам вынужден так и делать, но мы сэкономим великое множество времени, если сразу начнем покрывать код тестами. Я покажу, как и научу. Да хоть бы и на примере твоих шашек после того, как ты их закончишь.
– Принято, спасибо.
– И, несмотря ни на что, ты отлично поработал, а я, как ответственный работодатель, обязан выписать тебе чек. Авансом, потом вычтем из будущих роялти, как и со мной издатель делает.
Синклер принял оплату с невиданным достоинством.
Тысячу долларов пришлось буквально от сердца отрывать, но это честно. Любой труд обязан быть оплачен. А Монти, хоть и сотворил невнятный кусок слипшихся спагетти, но это гениальные макароны, порвавшие проприетарный движок на британский флаг. Интересно, а нет ли чемпионатов по шашечным программам? Если есть, и тут, в районе Сан-Франциско, я бы Синклера заявил. Отличный был бы пиар и для наших порношашек, и для “Каналья Геймс”. Надо поспрашивать! Или в битву шахматных движков вписаться, но это уже сложно, там правят балом, прости Ктулху, суперкомпьютеры.
– Мистер Коламбус, что за макаронного монстра вы периодически упоминаете? – встрепенулась вдруг Селеста. – Это новый хоррор? Или персонаж вашей следующей поэмы?
– О, это весьма могущественное божество. Покровитель всех любителей углеводов. Летающий Макаронный Монстр! Согласно нашей вере, пастафарианству, Вселенная была создана его Макароншенством после сильного алкогольного опьянения, чем и объясняются все ее изъяны и несовершенства. А гравитации на самом деле не существует – это просто Невидимый Монстр постоянно прижимает нас к земле своими Макаронными Десницами. Раминь!
– Какая блестящая сатира! – неожиданно восхитилась Селеста. – Высмеивание слепой веры через доведение ее до абсолютного, макаронного абсурда.
– Согласно нашим догматам, настоящими праведниками и первыми пастафарианцами были пираты. Но не жестокие разбойники, а исследователи и мореплаватели, нарочно скомпрометированные другими конфессиями. Каждый истинный верующий обязан время от времени говорить, как пират и дарить детям конфеты. И не забудем наш традиционный головной убор, который каждый истинно верующий имеет право носить даже на фотографиях для официальных документов, вроде водительской лицензии – обычный дуршлаг для макарон.
Линда согнулась в приступе беззвучного хохота. Я давно собирался просветить ее в религиозных вопросах, но заодно и новых друзей повеселил.
– Как же это красиво! – выдохнула Селеста.
Хиппи тут же ускользнула в сторону кухни и, по всей видимости, знала, где находится “традиционный головной убор”, так как вернулась с дуршлагом на голове.
– Религия, что не пугает адскими муками и не заставляет страдать, а призывает раздавать конфеты. Без агрессии и навязанного чувства вины! В вашей шутке больше истинной духовности, чем в выступлениях телевизионных проповедников. Считайте меня первой прихожанкой!
– Раминь! – сквозь смех выдавила Линда, вытирая выступившие в уголках глаз слезинки.
И ведь на полном серьезе Селеста говорила. Не удивлюсь, если на самом деле начнет агитировать знакомых хиппи за пастафарианство. С другой стороны, чем Макаронный Монстр хуже Кришны? Да ничем. Ну как, твоё Макароншество, я расплатился за факт переселения душ? Это ведь ты схватил меня своими спагетти и перебросил в тело Криса?
– Ребят, с вами очень весело, но нам еще надо навестить компьютерный магазин, купить некоторую литературу и технику. Не знаешь, где ближайший?
– В городском молле в центре есть Отличная Компания.
Мне потребовалось около секунды, чтобы сообразить, что речь идет не о характеристике, а названии фирмы “Excel Company”. И еще секунда, чтобы понять, что к покорившему в будущем мир мелкомягкому табличному процессору “Эксель” магазин электроники отношения не имеет. Попрощались, забрали свой Эппл 2, который Монти радушно помог донести.
– Крис, а можно я на твою шутку с макаронным монстром сделаю отсылку в “Сорока тысячах способов”? – спросила по пути Линда. – Например, добавлю представителя этой религии, который о ней расскажет, и если главный герой подарит ребенку конфету, то сможет избежать опасности.
– Это называется пасхалками, как-то связано с поиском яиц на Пасху. Неожиданные отсылки в играх, которые не всем понятны. Я такое одобряю и приветствую, но с ними лучше знать меру.
– Значит, сделаю!
Доехали до местного молла Эль-Серрито Плаза и убили несколько минут на поиск “Отличной компании”. От других, как “Хопёр-Инвест” из рекламы в девяностых. Отыскался магазинчик по типу “Радиорубки”, но ориентированный на продукцию самых разных брендов. Застекленные витрины с дорогим товаром, перфорированные держатели с мелочевкой на стенах.
Компьютер, подписанный, как “Коммодор Пет” и Вик-20, подключенный к телевизору в общем демонстрационном доступе. А на стене возле витрины с кассетами я узрел её – Пенелопу Смит в маечке и шортиках, бегущую по джунглям с факелом в руке. Выше крупный заголовок “Темпл Ран”, внизу логотип Сьерры и чуть меньшего размера надпись “Каналья Геймс”. Мы с Линдой так и замерли, глядя на Трейси.
– Вау! – наконец-то первой нарушила тишину девушка. Это она нарисовала, пока я лихорадочно занимался портом Тетриса на Атари 2600, я видел наброски. А в типографии, получается, подправили и напечатали.
– Отличная игра, ребят, рекомендую! – подкрался сзади продавец. Не оставь я трость в машине – не уверен, что не саданул бы с испуга ей сутулого азиатского парня лет двадцати в больших очках с толстыми стеклами. То есть не так уж сильно старше моего. К рубашке прикреплен бейджик с именем Кенни.
– Да? – спросил я – А что за разработчик такой? Какие-то Сьерра и Каналья?
– Сьерра – это Онлайн Системс, новое имя известного издателя. А Каналья Геймс – их новое подразделение аркадных игр для компьютеров Коммодор. Странное название. Во вчерашнем завозе две игры от них пришло. Темпл Ран и Флэппи Бёрд. Советую обе попробовать, но в первую очередь Темпл Ран. Видите девушку с плаката? Мисс Сентябрь журнала Плейбой и в игре она выглядит не хуже. Художник, который рисовал ее – настоящий гений!
Немного обидно, что нас этакими прилипалами к Кену и Роберте посчитали. Но это работает и в другую сторону. Играм от Сьерры положен от потребителя некий кредит доверия, в отличие от никому не известных Каналий. Ничего такого, что нельзя поправить в будущем несколькими интервью, как думается.
Линда смущенно покраснела. Но продавец на нее внимания не обращал. Не удивлюсь, если повторил мою ошибку и принял за парня. Ох уж это серое худи… стоит сжечь его, как лягушачью шкурку из сказки.
– Девушка с обложки игры – археолог по имени Пенни Смит и в игре она убегает от огромного камня. Настоящее имя мисс Сентябрь, между прочим! Ей нужно все время уворачиваться от препятствий, или обегать, или перепрыгивать. А самое крутое – у нее буфера подпрыгивают во время движения! Это лучшая анимация персонажа, что я видел! Ну и играть интересно, да. Я вчера на целый час остался после смены, но дальше сотни ярдов не смог пробежать. Сложно, но очень затягивает. Лучшая игра из всего ассортимента на Вик-20! Осталось последних две кассеты из завоза. Босс уже заказал еще, но советую поторопиться с решением.
– Мы берем обе игры, – решил я. Глупая трата на то, что уже у меня есть, но ее стоит рассматривать, как инвестицию в музей “Каналья Геймс”. – А плакат нельзя купить?
Продавец рефлекторно бросил ревнивый взгляд на стену, как если бы я собирался прямо сейчас сорвать плакат и сбежать вместе с Пенни Смит и ее декольте.
– Плакат? Извини, приятель, но это рекламный промо-материал от дистрибьютора. Он строго учтен и менеджер мне шею намылит, если куда-то пропадет, – по тому, как вздохнул парень, можно сделать вывод, что он уже представлял девушку-археолога на стене своей спальни. – Советую купить Плейбой за сентябрь. Вы же совершеннолетние, парни?
– Да, – ответил я за нас обоих. – Вообще-то, мы не за играми пришли, но мисс Смит привлекла внимание. Мне нужен матричный принтер, который можно подключить как к IBM-5150, так и к Эппл 2. Также нужен современный модем со скоростью 1200 бод и автонабором номера для IBM. И последнее – книга или любая другая документация по компилятору Лэттис Си и диалекту языка, им используемому.
Шаблон у Кенни порвался с громким треском и он недоверчиво вылупился на меня из-под очков. Ну да, подростки-латиноамериканцы наверняка нечасто интересуются у него компиляторами.
– Приятель, ты хорошо представляешь цены? Надежный принтер Эпсон обойдется тебе в шестьсот баксов, плюс по сотне за расширения параллельного порта. Модем на 1200 бод – в семь сотен. Извини, но у тебя вообще есть такие деньги? С налогами выйдет полторы тысячи.
– Крис, это очень дорого! – прошептала мне Линда. – Дороже нашей первой машины!
– Берем. Вы принимаете чеки? И давайте добавим длинный телефонный кабель.
У меня легкий приступ амфибийной асфиксии тоже приключился, но наши игры уже на прилавках, а следовательно, к концу месяца придут первые роялти. Или не придут, если продажи окажутся недостаточно хорошими, чтобы догнать полученный аванс. Плюс что-то капнет, как композитору от песен “Бесконечности тьмы”, да и залог за Гектора обязан вернуться. Не последнее, в общем, отдаю.
Принтер нам критически важен, чтобы распечатать текст “Сорока тысяч способов” и отдать Селесте на редактуру, да и для учебы пригодится. Всякие эссе и рефераты удобнее набирать сразу на компьютере. По крайней мере, мне. Модем же попросту необходим. Пора прекращать порнографию с ручным набором номера при подключении на BBS, достало неимоверно. И скорости мало не бывает, хотя очевидно, что для быстрого скачивания современное оборудование нужно на обоих концах. На Пиратской Бухте ведь как раз такое?
– Компилятор языка Си. Такого у нас нет, извини. Только под заказ. Стоимость около пятисот баксов, книжки в комплекте. Отдельно их не продают из-за пиратства. Посмотри сам на полке с книгами, там вроде бы было что-то про Си, но без гарантий, что тебе подойдет.
Заглянув на указанную витрину, я отыскал настоящую библию “Язык программирования Си” от Брайана Кернигана и Денниса Ритчи. Двадцать пять долларов, ерунда. Даже если спецификация у Лэттис сильно отличается – я записался на университетский курс, там точно пригодится.
Матричный Эпсон MX-80 оказался крупноват и тяжеловат, но все же обладал габаритами принтера, а не здоровенной тумбы, как оставленный на память Ковальски телетайп, взяли коробку за вырезы слева и справа и донесли до багажника.
Подъехали, начали разгружаться, и вскоре рядом прошуршала шинами чужая машина и коротко взвизгнула полицейская сирена.
Опять? Дежавю! Я уже бывал в этом месте раньше! Миссис Фигг, ну не надо вам злить каналью! Я человек добрый и терпеливый, но всему есть предел!
Из точно такого же полицейского форда, что и вчера, вылез единичный коп. Слава Императору, не вчерашние “рыжий и усатый”. Полноватый, гладко выбритый дядька лет сорока, волосы у него светло-русые, а глаза очень блеклые.
– Молодые люди, пожалуйста, поставьте коробку на землю и отойдите на два шага в сторону. Офицер Барнс, департамент полиции Эль-Серрито, – окликнул он нас и даже представился. Вчера были плохие полицейские, а сегодня хороший? Но руку при этом все одно держал на кобуре, хоть и без явной агрессии.
– Офицер, мы легальные арендаторы этого дома, ваши коллеги нас вчера проверяли, – предупредил я, синхронно с Линдой опуская принтер на дорожку.
– В таком случае вам не о чем беспокоиться, молодой человек. Поступил сигнал от бдительных граждан, что подозрительный латиноамериканец выносит из дома технику. Документы у вас при себе? Медленно достаньте и медленно предъявите. Мисс, лучше не двигайтесь.
На колу мочало, начинаем всё с начала! Этот хотя бы вежливый и не дрался.
– Офицер, как вы наверняка заметили, мы заносим технику в дом, – терпеливо сказал я. – У нас есть чеки из магазина.
– Мистер Колон, рекомендую вам уведомить департамент автотранспорта о смене адреса проживания, – познакомившись с моими правами, сказал офицер Барнс. – Скажите, откуда у вас деньги на дорогую технику и машину за пятнадцать тысяч долларов?
– У нас своя студия разработки видеоигр, офицер, и мы хорошо зарабатываем.
– Понятно, – хмыкнул полицейский. – Знаете, ребята... жизнь вдали от родителей полна соблазнов, особенно когда появляются первые большие деньги. Эль-Серрито – хорошее место, но в вашем возрасте легко сбиться с пути. Наша община в Первой Пресвитерианской церкви всегда рада новой молодежи. Служба в десять утра в воскресенье. Приходите, познакомитесь с нормальными людьми, мистер пастор вам обрадуется. И соседи на вас начнут смотреть иначе, если увидят на скамье в часовне.
– Спасибо за приглашение, офицер. Мы обязательно подумаем над ним.
Понятия не имею, что значит “пресвитерианская”. Почему-то представился негритянский хор, хотя совершенно не факт, что всё так.
Глядя в спину уходящему к машине мистеру Барнсу, я заметил шевеление занавесок в доме напротив. Вредная бабка бдит!