• Не пишите код, привязанный ко времени выполнения. Иногда вы будете сталкиваться с кодом, который основан на временном интервале. Самый вопиющий пример, который я встречаю чаще всего, – это код, который ждет завершения какой-то другой задачи, а через полсекунды уже считает, что она завершилась. Такой код обычно работает на компьютере разработчика, но в реальных условиях идет вразнос – может, соединение с Интернетом слишком медленное, может, у пользователя слишком старый компьютер. Хуже кода с ошибкой может быть только «код с ошибкой, которая проявляется только при определенных условиях». Такие баги невероятно трудно найти и связать с кодом, который писали, исходя из предположений об определенном наборе условий работы. Правильный код «знает», что некоторые машины работают ужасно медленно, а некоторые срабатывают мгновенно. Иногда на соединение с интернетом можно положиться, иногда оно еле-еле передает данные или вообще неожиданно обрывается. Программисты категории AAA используют события, а не таймеры (типа: «Выполнить это, когда завершится ввод/вывод»). Когда это уместно, они пишут для кода автоматизированный стресс-тест, чтобы проверить, что произойдет при худших условиях. Цель не в том, чтобы пройти тестирование с первого раза, а в том, чтобы код стал неуязвим к тому моменту, как его начнут использовать клиенты. Никто лучше вас не будет знать ваш код и то, как его сломать. Будьте впереди всех.
• Действительно ли нужна эта фича? Если в продукте есть какая-то функция или свойство, из-за которого проект в целом становится намного сложнее, обсудите эту проблему и предложите альтернативное решение. Если функция очень нужна, ну, значит нужна, но так бывает не всегда. Никто не осудит вас за критику в духе: «Думаю, если мы уберем этот элемент или реализуем его другим способом, мы быстрее доделаем проект, а финальный код будет надежнее». Если позже окажется, что вы были правы, и фича, против которой вы высказывались, обернется ящиком Пандоры, о вашем предложении вспомнят – это вы отстаивали альтернативный и более простой подход. Даже если вы «всего лишь» кодер, не стесняйтесь задавать вопросы о дизайне проекта. При этом не будьте назойливы. Указывайте на проблемы, которые видите, и убедитесь, что вы действительно понимаете, что должен делать написанный вами код. Но в конце концов, когда придет время приступить к работе, надо будет молча засучить рукава и кодить.
• Обещайте меньше, выполняйте больше. Не стесняйтесь сообщать руководству срок завершения работы. По правде говоря, вам нужно определить две даты. Ту, к которой вы рассчитываете управиться на самом деле, и еще одну дату попозже, ее вы озвучите коллегам. Когда срок назначен, вы должны сделать все необходимое, чтобы в него уложиться. Даже если вам придется спать на рабочем столе и не возвращаться домой. В следующий раз будете умнее и не станете называть нереалистичные сроки. Начальников может и не устроить дата окончания работы, но если у вас будет репутация того, кто держит обещания, то ваши старания заметят, вот увидите.
• Как можно быстрее дайте заказчику что-то, что можно попробовать. То, что просит заказчик, неизбежно отличается от того, что ему на самом деле надо. Если в ваш код придется внести изменения, то чем раньше вы об этом узнаете, тем быстрее можно будет начать. Уже с самого начала проекта подумайте, как создать рабочий прототип.
• Если что-то не работает, свет клином на этом не сошелся. Не пытайтесь пробить лбом стену, пытаясь заставить что-то работать, лучше найдите альтернативный подход. Не всякая битва стоит участия в ней – просто подберите другой вариант, чтобы работал, и переходите к следующему бою. Ваша цель – выиграть войну, а не победить в конкретном сражении.
• Правила созданы для того, чтобы их нарушать. Ничего из написанного здесь не высечено в граните. Это общие рекомендации, каждая ситуация уникальна. Поэтому… нарушайте правила и делайте то, что поможет вам выполнить работу, когда это необходимо.
• И всегда помните: важнее всего – понять, чего хочет ваш руководитель, и дать ему это. Если начальство хочет, чтобы вы сделали какую-то глупость, сделайте ее лучше, чем начальство могло себе представить. Даже если вы двигаетесь куда-то не туда, но руководитель желает двигаться именно в этом направлении, значит, так и надо. Не стесняйтесь доказывать, почему вы считаете что-то неправильным, но, когда придет время приступать к работе, не надо игнорировать пожелания руководителя и делать все по-своему. Если вы так поступите, то работу вы, может, и сделаете, но оттолкнете руководителя и не получите повышения. Нет, начальник не всегда прав, иногда подчиненных просят делать что-то бессмысленное. Если вы попытались переубедить руководителя, а он все равно настаивает на том, чтобы двигаться в неправильном, на ваш взгляд, направлении, у вас есть два варианта: ехать куда велели или хлопнуть дверью. Решать вам. Но не пытайтесь бороться с системой.
Я закончу эту главу притчей, которую мне как-то рассказали – в ней фигурирует Эдсгер Дейкстра, один из ранних специалистов по теории вычислительных систем. Я не нашел никаких доказательств того, что эта притча хоть как-то основана на реальных событиях или имеет какое-то отношение к Дейкстре. Но мне понравилась история, и если вы когда-нибудь работали в моей компании в отделе тестирования, то наверняка слышали ее много-много раз.
В те времена, когда еще не было ЭВМ общего назначения, один господин по фамилии Дейкстра построил машину для умножения чисел. Эту машину хотело купить датское правительство, но чиновникам нужна была уверенность в том, что ЭВМ можно доверять. Для «тестирования» машины была собрана специальная группа контроля качества. Тестировщики начали перемножать на машине числа и через две недели получили следующие результаты: 1 × 2 = 2, 1 × 3 = 3, … 2 × 3 = 6 и так далее. Они добрались до 120 × 12 = 1440, когда у чиновников лопнуло терпение. Тестировщики пожали плечами и сказали: «А что еще нам остается делать?» Дейкстра занервничал. Для него это была большая сделка, и ему нужны были деньги. Он умолял чиновников завершить продажу, но безуспешно. Наконец, спустя несколько недель, когда команда только приступила к умножению четырехзначных чисел на однозначные, а жена Дейкстры запретила ему спать с ней в общей постели, Дейкстра решил, что пора поискать какой-то способ ускорить тестирование.
Именно тогда его посетило важное откровение.
«Чисел на свете бесконечно много. Нельзя взять и перемножить все числа. Такой проект будет продолжаться бесконечно долго», – сказал Дейкстра. Он знал, что тестировщики пошли по ложному пути. Он взялся размышлять, как же помочь команде, учитывая, что от этого еще и зависел его брак. Как насчет случайной генерации чисел? Если группа контроля качества произвольно сгенерирует 1000 чисел, а машина выдаст для каждого результат, то можем ли мы утверждать, что числа между ними тоже будут правильными? «Может быть», – сказали чиновники.
Наконец, поразмыслив еще немного, он придумал следующий тест.
• Умножить 0 на случайно выбранное положительное число
• Умножить 0 на 0
• Умножить случайно выбранное отрицательное число на 0
• Умножить два случайно выбранных отрицательных числа
• Умножить два очень маленьких случайно выбранных (например, 0,00000000000123) положительных числа
• Умножить два очень больших случайно выбранных (например, – 123 937 983 416 125 371) отрицательных числа
• Умножить очень маленькое случайно выбранное отрицательное число на очень большое случайно выбранное положительное число
• Умножить два целых случайно выбранных числа
Этот тест занял минут пять, и Дейкстра смог математически объяснить чиновникам, почему «абсолютно положительное подтверждение правильности» физически невозможно. Но он также показал, что этот простой тест обнаружит проблемы с НАМНОГО большей вероятностью, чем полгода случайного перебора значений.
Правительство купило ЭВМ, и господин Дейкстра был счастлив, как и госпожа Дейкстра.
Вскоре у них родился сын.
В Оклахоме, там, где я живу, кругом сплошные скотоводы. Все мои друзья – ковбои, грубые мужики. А вот будь
у меня джакузи, я бы мог хоть Ричарда Симмонса к себе пригласить пожить.
Блейк Шелтон[23]
Я параноик. С первого же дня, когда я уволился с работы, чтобы основать Sierra, я беспокоился, смогу ли обеспечить нам приток денег на годы вперед. Мне казалось, что на одних только приключенческих играх компания долго не продержится. Нам нужна была широкая доходная база.
Для этого были и рациональные причины: у меня в руках был канал для дистрибуции игр, для которого отчаянно нужны были новые продукты. Я знал, что если не удовлетворю этот спрос сам, то за меня это сделает кто-нибудь другой.
Одну из первых экшен-игр Sierra разработал Джей Салливан, программист, с которым я работал в компании Informatics. Это был простой, но затягивающий экшен под названием Crossfire – Sierra в последующие годы несколько раз выпускала для него обновленные версии.
Я дал в компьютерный журнал объявление: ищу игры на продажу. Все, что мне нужно было делать, – каждый день открывать почтовый ящик, и там каждый день оказывались новые игры – бери да продавай! Проще не бывает.
Одна из таких присланных в ответ на объявление игр оказалась почти полным клоном Pac-Man для игровых автоматов. Даже не помню, задумывался ли я хоть минуту, издавать игру или нет. Этот клон мне прислал автор – Олаф Любек. Я отправил ему контракт, и мы начали продавать.
Прошло совсем немного времени, и я получил неприятное письмо от адвокатов Atari – они настаивали на том, чтобы я немедленно изъял продукт из продажи. Но Gobbler оказался хитом, и я не хотел терять выручку.
Один из наших программистов, Джон Харрис, уже начал работать над портированием Gobbler на приставку Atari.
В этот момент моему брату Джону Уильямсу пришла в голову остроумная идея. Компания Atari заявляла о нарушении авторских прав, указывая на персонажей-призраков – мол, это их интеллектуальная собственность. Джон сказал: «А что, если мы заменим призраков на веселые рожицы, и пусть за ними по лабиринту гоняются челюсти с клацающими зубами?» В конце уровня можно было бы сделать милую анимацию – появляется зубная щетка и чистит зубы, а потом они вновь отправляются жевать.
Я поговорил с юристами, те одобрили идею – я вновь связался с Олафом и попросил его поменять графику и создать новые лабиринты, не копирующие Pac-Man.
Atari подала на меня в суд, и дело было интересное. Вправе ли Atari говорить, что ее авторские права защищают еще и геймплей? Мои юристы сказали, что нет, и я был достаточно молод и глуп, чтобы бодаться в суде с большой компанией. Этот процесс выглядел как битва Давида с Голиафом: какие-то детишки из горной глуши судятся с Atari, в то время (сравнительно) гигантской корпорацией.
Дело прошло через все судебные инстанции, и Sierra выиграла в Верховном суде штата. Несмотря на нашу победу, я снял игру с продаж и официально заявил: я не хотел бы, чтобы чья-нибудь игра напоминала какую-либо из наших игр настолько, насколько Jawbreaker напоминала Pac-Man.
Перед публикацией этой книги я отправил рукопись бывшим сотрудникам Sierra, многие из которых ушли работать в другие игровые компании. Один из них прислал мне интересное замечание по поводу судебного процесса, о котором я писал выше:
«…суд с Atari. Вы уделили ему всего несколько коротких абзацев, не затронув того, насколько этот судебный процесс был исторически важен. Но, насколько помню я сам, это был не просто иск о внешнем сходстве двух продуктов, а прецедент: решение суда навсегда зафиксировало, что игровая механика не может быть защищена авторским правом.
Я считаю, что оно навсегда изменило индустрию компьютерных и видеоигр и, вполне возможно, заложило основу для краха индустрии годом позже. После вашей победы над Atari многие компании могли без опаски создавать производные продукты с теми же игровыми механиками, что и у главных хитов. Как раз поэтому рынок наводнили игры с разной графикой, но по сути совершенно одинаковые; потребитель пресытился, спрос упал. Винить в крахе индустрии игру E.T. от Atari – слишком много чести…»
Кен А., август 2020 г.
Наш судебный процесс с Atari и вся эта история были подробно описаны Стивеном Леви в книге «Хакеры. Как молодые гики провернули компьютерную революцию и изменили мир раз и навсегда»[24].
Я отвлекусь на несколько минут, чтобы поговорить о книге Стивена.
До написания «Хакеров» Стивен – он и по сей день очень успешный журналист – писал для журнала Rolling Stone. Стивен выявил концепцию, которой он присвоил название «хакерской этики» – она подразумевает создание и распространение бесплатного программного обеспечения исключительно ради острых ощущений: тебе удалось добиться чего-то нового и крутого. Стивен, указав на эту тенденцию, опередил свое время. В наши дни тысячи программистов посвящают себя разработке не ради денег, а ради продукта. С точки зрения Стивена я был злодеем. Да, я хотел взять этот творческий потенциал в оборот и заколачивать на нем деньги.
Ранним этапам истории Sierra посвящена примерно треть книги Стивена, и это весьма увлекательное чтение.
Я нанимал очень молодых программистов – им в основном было от семнадцати до двадцати одного года. В те времена «разработка компьютерных игр» приличной работой для профессиональных программистов не считалась. Ни один опытный разработчик программного обеспечения не бросил бы стабильную работу в «настоящей» компании ради недавно открытой игровой студии у черта на куличках. Чтобы разместить программистов, которых я нанял, я арендовал один большой дом и усадил туда своих высокоинтеллектуальных пацанят.
Попробуйте представить, что произойдет, если взять группу юношей студенческого возраста, отсыпать им от души денег и поселить эту компанию вместе в небольшом городке вдали от цивилизации. Да что там представлять, посмотрите лучше фильм «Зверинец». Стивен во время написания книги переехал в Окхерст и даже жил вместе с программистами в «общежитии» Sierra.
Полагаю, я мог бы отпираться и уверять, что никакого участия в этом веселье не принимал, но тогда вы бы прочитали «Хакеров» и узнали правду. С некоторыми частями книги Стивена я бы поспорил, но в целом у него все описано так, как оно и было.
Когда книга Стивена вышла в свет, мой отец тут же купил себе экземпляр. Я должен был сконфузиться, и в какой-то степени так и получилось. Но, как я сказал своему отцу: «Ну кто в детстве не валял дурака? Мне просто не повезло – мое детство вошло в историю».
И на самом деле ничего плохого в этом и не было. Посмотрите на Майли Сайрус или семейство Кардашьян и поймете, что в индустрии развлечений плохого пиара не бывает. Пишите обо мне все, что вздумается, – только ошибок в имени не делайте. Платная реклама – это дорого и неэффективно, а пиар от СМИ бесплатен. Я быстро усвоил эту концепцию и, как любой фермер, увидевший интересную корову, понял, как выгодно ее доить.
Кстати говоря…
По почте нам прислали очередную игрушку – это была обычная текстовая приключенческая игра с пикантным содержанием и под названием Softporn.
В названии пикантности оказалось больше, чем в игре. Ни порно, ни софт-порно мы там не нашли. Просто забавная игра с веселым геймплеем. Если бы из нее сделали фильм или телесериал, он бы получил рейтинг PG или PG-13.
Но это был не фильм и не сериал. Это была игра для компьютеров Apple, и она была не похожа ни на что, с чем мы сталкивались до нее. Я сразу же понял, что Softporn быстро привлечет внимание и бесплатного «сарафанного радио», и настоящих СМИ.
Я мучительно размышлял, издавать ее или нет. И после 30 или 40 секунд тяжких раздумий у меня возникла идея.
«А что, если поместить на обложку фотографии каких-нибудь сексапильных красоток?» У нас дома была ванна-джакузи, отделанная снаружи красным деревом, и выглядела она довольно фотогенично. Я задумал наделать для упаковки и рекламы игры фотографий в этом самом джакузи. Когда я рассказал об этом коллективу, тут же нашлись желающие. Среди них была жена нашего менеджера по производству (Диана), жена одного из наших гейм-дизайнеров (Сьюзан) и моя супруга (Роберта)!
Я хотел, чтобы обложка показывала, какое веселье творится в Softporn, и предложил зазвать на фотосессию еще и официанта по имени Рик из местного модного ресторана The Broken Bit. Выглядел Рик весьма импозантно – если нарядить его в форменный костюм, и чтобы он подавал барышням в джакузи напитки с подноса, получилась бы потрясающая реклама! Я позвонил в местную газету и договорился с тамошним фотографом – тот согласился приехать к нам домой для фотосессии.
Роберту как-то спросили в одном интервью: «Как Кен уговорил вас в этом участвовать?» Роберта ответила интересно: «А почему вы не думаете, что это была моя идея?» Роберта не наивна. Она прекрасно понимает, что между бесплатным пиаром в прессе и выручкой от продаж есть взаимосвязь.
И реклама, и продукт немедленно прославились – мы получили бесплатное продвижение на миллионы долларов.
С именованием, как и с отсутствием графики, была небольшая проблема. Некоторые магазины наотрез отказывались продавать продукт под названием Softporn, сколько бы я ни доказывал, что содержание игры по большей части соответствует рейтингу PG. И, конечно, что-то неправильное было в том, что компания, которая до этого вышла на рынок с графической приключенческой игрой, вдруг продает текстовую игру вообще без графики.
Несмотря на название и устаревшую технологию, Softporn продавалась несколько лет подряд.
Спустя годы после выхода Softporn кому-то пришла в голову идея переиздать игру уже в виде графической адвенчуры. Мой брат Джон говорит, что это была его идея, и, возможно, он прав. Softporn в конечном счете переработали и модернизировали два человека – Джон и Эл Лоу, и оба заявляют, что лично придумали игре новое название.
Эл Лоу – гениальный юморист, который превратил Softporn в самую известную игровую серию, которую когда-либо запускала Sierra. Даже сейчас, когда я говорю людям, что раньше у меня была игровая компания, и меня расспрашивают о наших играх, самым узнаваемым остается вот это название:
Leisure Suit Larry in The Land of the Lounge Lizards.
Из всех игр Sierra за всю историю компании Leisure Suit Larry всегда была моей любимой.
Я уделял серии Leisure Suit Larry особое внимание, даже когда-то сам писал для нее программный код.
В отличие от фильмов, для игр тогда не существовало никакой системы возрастных рейтингов. Я всегда считал, что детей надо ограждать от взрослого контента. Однажды мне пришла в голову идея вставлять в начало игр викторину. Идея заключалась в том, что игроку могли попадаться вопросы, взятые из заголовков газет, и, если тот не мог на них ответить, программа отказывалась загружаться. Сочинять такие викторины было забавно, но мы оплошали – не подумали о том, что у этих игр будет долгая жизнь. Помнится, один из вопросов был такой: как называется яхта сенатора Гэри Харта (а тогда этот сенатор со своей яхтой был на первых полосах всех газет: он провел ночь на своей яхте Monkey Business – «Шалость» – с дамой, которую считали его любовницей). На момент выхода игры ответ знал любой американец старше 18 лет. Сегодня для этого нужно быть старше 65 лет и иметь очень хорошую память.
Некоторая напряженность вокруг Leisure Suit Larry появилась задолго до хэштега #metoo. Я полагаю, что, если изучить все диалоги в игре под лупой, там, скорее всего, найдутся строчки, которые можно интерпретировать как сексистские. То же самое, вероятно, можно сказать о каждом когда-либо снятом комедийном фильме или телесериале с «перчинкой». Я всегда думал, что Leisure Suit Larry – смешная игра, и что наши с Элом Лоу жены были очень крутыми. В Sierra на высоких должностях было немало женщин, а юмор в играх был совсем в другом: Ларри был любвеобильным неудачником, который мог только мечтать о том, чтобы подцепить сексапильную представительницу противоположного пола. Игры смеялись над Ларри, а не над женщинами. Я также отметил бы, что я наблюдал за многими женщинами, которые пробовали эту игру, разговаривал с ними, и ни одна из них не выглядела оскорбленной. В конце концов, Leisure Suit Larry можно легко сравнить с такими фильмами, как «Феррис Бьюллер берет выходной». Если бы я снимал фильмы, взялся бы я за такой фильм? А вы? Конечно! Зрители от него в восторге, никто никому его силой не навязывал.
На самом деле, мне никогда и не приходило в голову, что Leisure Suit Larry в состоянии кого-то оскорбить, пока одно событие не заставило меня понять: Larry не всем по душе.
Мы с Робертой были в местном ресторане тайской кухни на острове Мерсер, недалеко от офиса Sierra. Мы сидели за столиком и наслаждались обедом, когда услышали разговор нескольких дам за другим столиком позади нас. Они через слово поминали Sierra, и, когда речь зашла о Leisure Suit Larry, повысили голос. Одна из дам была явно недовольна. Она говорила, что ей поручили работать с этой противной игрой, и она хотела поскорее покончить с этим заказом и перейти к чему-то получше. Мы быстро поняли, что там сидят сотрудницы рекламного агентства, которому наша компания поручила рекламировать Leisure Suit Larry.
Мы с Робертой смутились, но ничего не сказали и никак себя не выдали. Я подумывал что-то возразить и был уверен, что дамы просто не «разобрались», с чем имеют дело. Я был убежден: если они сядут и поиграют, то увидят просто хороший, чистый (хотя и пикантный) юмор. Вместо этого я смалодушничал: вернулся в офис и нажаловался на этот разговор нашему вице-президенту по маркетингу. Если наши рекламщики относятся к игре без энтузиазма, как они могут заинтересовать клиентов? Я так и не узнал, чем все закончилось, но предполагаю, что мы сменили агентство.
В последующие годы самые разные люди пытались выпустить для Leisure Suit Larry продолжения. Но за исключением тех игр, которые разрабатывал Эл Лоу лично, почти все они были провальными. Создать игру, где видна разница между шутками на грани дозволенного, сексуальностью, грубостью и сексизмом – нелегкая затея. Как раз в этом Эл был на высоте, и почему другие разработчики не звали его к себе – уму непостижимо. Что бы ни случилось, я надеюсь, кто-нибудь когда-нибудь до этого додумается. Я скучаю по старым играм![25]
Эта глава подходит к концу, и под занавес я хочу вспомнить одну забавную историю из тех самых дней…
Я всегда хотел себе Porsche. Я вожу машину как столетний дед под снотворным, скоростной спорткар для меня – деньги на ветер, но я все равно хотел именно такой автомобиль. Почему бы и нет? Дела у компании шли хорошо!
Я любил свой славный красный Porsche, но заметил, что каждый раз, когда я проезжал через город или совершал дальнюю поездку в соседний Фресно, мне на хвост садилась полицейская машина. Я был вполне уверен, что не делаю ничего плохого, поэтому беспокойства не испытывал, но и интереса к себе не понимал. Так продолжалось до тех пор, пока я случайно не превысил скорость на пять миль в час. Мне немедленно выписали штраф. Потом до меня дошел слух, что в местном участке по этому случаю закатили праздник. Один из полицейских выиграл пари! Все сотрудники скинулись деньгами в призовой фонд, а отойти эти деньги должны были тому, кто выпишет мне первый штраф. Когда я услышал об этом, я решил оспорить штраф! Я рассказал судье, что произошло; судья спросил офицера, действительно ли история с пари имела место.
Офицер смиренно покаялся, и штраф с меня сняли.