Археолог цифрового века – Том 1. 1966-1979

Джимми Мехер, 2021

Перед вами перевод блога Джимми Мехера The Digital Antiquarian, посвященный истории развития индустрии компьютерных развлечений. Вас ждут увлекательные рассказы о знаковых играх разных исторических периодах, биографии выдающихся личностей и экскурсы в историю крупных (и не очень) игровых компаний.

Оглавление

11. Дон Вудс продолжает «Приключение», часть 1

Дон Вудс узнал об Adventure в начале 1977 года, когда учился в магистратуре Стэнфордского университета по специальности «Информатика». Наводку ему дал однокашник, который нашел игру — не поверите — в компьютерной системе Стэнфордского медицинского центра. Каким образом Adventure попала из BBN Technologies в Бостоне, где на момент ее создания работал Уилл Краузер, в северную Калифорнию, наверное, так навсегда и останется загадкой, поэтому не будем плодить домыслы, а поговорим только о том, что нам более или менее известно. А нам известно, что Вудс, заинтересовавшись игрой, перенес ее копию на мини-компьютер PDP-1039 в Стэнфордской лаборатории искусственного интеллекта (СЛИИ), где сам занимался хакерством. Досконально изучив все то немногое, что предлагала оригинальная версия, он решил развить наработки Краузера и доделать игру до конца. К сожалению, в его распоряжении был только исполняемый файл, без исходников на Fortran. История о том, как был добыт исходный код Adventure, прочно вошла в анналы хакерских баек, и я с удовольствием ее здесь перескажу.

В тексте программы Краузер оставил одно-единственное указание на свое авторство. В инструкции к игре с неподражаемой лаконичностью написано: «ОШИБКИ, ЗАМЕЧАНИЯ, ПРЕДЛОЖЕНИЯ — КРАУЗЕРУ». По всей видимости, Краузер и не рассчитывал, что его игра, тем более в столь незавершенном виде, когда-либо выйдет за пределы кружка хакеров из BBN Technologies (а уж они-то определенно знали, кто такой «КРАУЗЕР» и как с ним связаться). Задача осложнялась еще и тем, что к тому моменту, как Вудс наткнулся на Adventure, Краузер уже устроился работать в калифорнийский офис компании Xerox (так что есть вероятность, что игра попала на Западное побережье вместе с ним). Но Вудс нашел выход: он отправил электронное письмо по адресу crowther@xxx, где «xxx» обозначает все существующие домены в Сети. Так, став, возможно, первым в истории спамером, Вудс разыскал Краузера и получил от него разрешение на доработку Adventure и, что самое главное, ее драгоценный исходный код. Да уж, в те времена интернет был куда более тесен…

На момент знакомства с Adventure Вудсу еще не было двадцати трех, но он уже заслужил себе место в хакерской истории, выступив соавтором шуточного языка программирования под названием INTERCAL40 — одного из самых безумных образчиков хакерского юмора. Cтивен Леви особо подчеркивает контраст в хакерской культуре Восточного и Западного побережья США:

«Различия начинались с местоположения: Стэнфордская лаборатория искусственного интеллекта (СЛИИ) размещалась в полукруглом здании из стекла, бетона и редких пород дерева — бывшем конференц-центре, построенном на холмах над университетским городком. Там к услугам хакеров были шестьдесят четыре терминала, разбросанные по разным кабинетам. Никакой тесноты, характерной для Тек-Сквера. Ни лифтов, ни оглушающего гудения кондиционеров. И атмосфера была куда более расслабленной, чем в МТИ: без желчности, пусть иногда и конструктивной, без громких перепалок в аудиториях Клуба железнодоророжных моделистов, без войн между хакерами и магистрантами, доходивших до уровня религиозных. В то время как в Тек-Сквере была популярна воинственная научная фантастика с космическими кораблями и бластерами, в Стэнфорде отдавали предпочтение уютному фэнтези: эльфам, хоббитам и колдунам со страниц трилогии Дж. Р. Р. Толкина “Властелин колец”. Помещения в лаборатории искусственного интеллекта носили названия различных мест Средиземья, а принтер мог печатать на трех эльфийских шрифтах».

На мой взгляд, Леви несколько преувеличивает культурную «пропасть» между консервативными, по-военному стриженными поклонниками Хайнлайна из МТИ и длинноволосыми толкиенистами из Стэнфорда, ведь несмотря на различия в литературных предпочтениях, они все же работали на одинаковых компьютерах (прежде всего, линейки PDP от DEC), с одинаковой операционной системой (TOPS-1041), на одинаковых языках программирования (что угодно, кроме BASIC!) — и вообще придерживались весьма сходных взглядов касательно принципов работы с компьютером. В этом плане у них было гораздо больше общего друг с другом, чем с популистами-хиппи из РСС. Определенная разница в подходах к программированию, безусловно, прослеживалась, но и то скорее поколенческая, нежели географическая. Прежде чем поговорить о ней, небольшое лирическое отступление на техническую тему.

Adventure была написана под операционной системой TOPS-10 для мини-компьютеров DEC PDP-10. Как уже упоминалось, ЭВМ производства DEC пользовались у хакеров безоговорочной любовью, которая длилась по меньшей мере лет двадцать — с 1960 по 1980 годы. Во-первых, компания-производитель постоянно стремилась к инновациям, причем не только в производимой технике. Во-вторых, сами машины были достаточно мощными, чтобы решать серьезные задачи, но вместе с тем достаточно компактными, чтобы их можно было без особого труда перемещать. Но главное даже не это, а другое: DEC не просто понимала потребности хакеров, а разделяла их. Для нее передовые исследовательские учреждения вроде МТИ и Стэнфорда служили полигонами для разработки и обкатки нового программного и аппаратного обеспечения. Наиболее перспективных хакеров DEC даже время от времени приглашала к себе в штат. Трудно представить более разительный контраст со снисходительным и закоснелым гигантом под названием IBM. Операционная система TOPS-10, разработанная DEC, пользовалась точно такой же огромной любовью, и ее развитие с конца 60-х до середины 70-х годов велось при активном участии хакерского сообщества. TOPS-10 сохраняла свои позиции главной хакерской ОС вплоть до 1977 года, когда начался плавный переход на Unix и TOPS-20, духовную наследницу от все тех же разработчиков из DEC.

Исходный код Adventure был написан на языке Fortran42 (FORmula TRANslating system, т.е. «система перевода формул»), которому на тот момент уже исполнилось два десятилетия. Это был первый высокоуровневый язык программирования, получивший широкое распространение; его разработали в конце 50-х годов в недрах компании IBM для своих же мейнфреймов. Краузер и Вудс программировали на стандарте Fortran IV, который появился в 1965 году. Как бы хакеры ни плевались от BASIC, Fortran, сказать по правде, был не сильно лучше: в нем тоже приходилось вручную нумеровать строки, а также обильно пользоваться вставными структурами с оператором GOTO, без которых ничего не работало. Более не подходящий для текстовых приключений язык отыскать трудно — еще и потому, что Fortran не поддерживал строковые переменные. Именно поэтому Краузер вынес весь игровой текст в отдельный файл: с ним так было удобнее работать. По иронии судьбы, в том же году, когда Вудс завершил работу над Adventure, появился Fortran 77 — крупное расширение, которое, помимо прочего, давало возможность манипулировать полноценными строковыми переменными. Увы, переносить проект на этот стандарт было уже поздно.

Но почему именно Fortran? Дело в том, что выбор языков, поддерживаемых TOPS-10, был невелик. В число альтернатив Fortran входил язык ассемблера (но писать на нем игру вроде Adventure — еще большее мучение), а также ненавистный всем BASIC и, наверное, еще более ненавистный COBOL43 (COmmon Business Oriented Language, «обобщенный язык для применения в сфере бизнеса») — страшно негибкий язык, разработанный исключительно для неинтерактивной работы со структурами данных, т.е. рутинных расчетов и бизнес-вычислений, которые казались хакерам невыносимо скучными. Известный нам Эдсгер Дейкстра, желая, видимо, продемонстрировать, что сарказм не всегда идет рука об руку с изобретательностью, отзывался о COBOL примерно в том же духе, что и о BASIC: «Программирование на Коболе калечит мозг, поэтому обучение ему должно трактоваться как преступление». Собственно, методом исключения выбор и пал на Fortran.

Однако несмотря на то, что Краузер с Вудсом писали на одном и том же языке, подходы к оформлению кода у них коренным образом различались. Оригинальный исходный код, написанный Краузером, представляет собой весьма суровый образчик спагетти-кода и практически лишен комментариев, то есть сам по себе все равно что «лабиринт из маленьких запутанных переходов». Да, он, несомненно, лаконичен и прекрасно оптимизирован, но едва ли кто-то, кроме самого Краузера, был в состоянии его поддерживать или хотя бы прочесть. Окончательная версия Вудса, напротив, — образец чистоты и ясности: множество развернутых комментариев, а структура прозрачная и логичная — насколько, конечно, позволяет ограниченный инструментарий Fortran IV. Впрочем, даже невзирая на эти ограничения, читать код Вудса — одно удовольствие. Именно этим, я думаю, и объясняется, каким образом Adventure впоследствии столь быстро портировали на множество других языков и платформ: код Вудса позволял делать это чуть ли не с закрытыми глазами.

Сравнивать черновую заготовку с законченной версией, конечно, нечестно. Едва ли программа Вудса была такой читаемой с самого начала; ее шлифовкой явно занимались вплоть до самого релиза. Однако определенные выводы сделать все-таки можно. Во-первых, код явно демонстрирует различие в темпераменте: Краузер, хоть и признанный гений программирования, был скорее одиночкой, и потому явно не стремился комментировать свои решения и делать код понятным для последователей. Во-вторых, как уже упоминалось выше, Краузер с Вудсом принадлежали к разным поколениям хакеров. Краузер начал работать в 60-е годы, когда никаких законов «правильного» программирования не было и в помине; главное — добиться результата любым способом, который позволяло хилое «железо» тех лет. Вудс же сложился как хакер уже в 70-е годы, когда структурированность, прозрачность, читаемость и удобство сопровождения кода уже выходили на первый план и когда программисты сформулировали основные правила, которых мы — с некоторыми добавлениями и уточнениями — придерживаемся до сих пор.

В следующей главе мы поговорим о том, чем отличалась законченная версия Adventure с точки зрения геймплея.

Примечания

39

https://ru.bmstu.wiki/PDP-10

40

https://ru.bmstu.wiki/INTERCAL

41

https://ru.bmstu.wiki/TOPS-10

42

https://ru.bmstu.wiki/Fortran

43

https://ru.bmstu.wiki/COBOL_(COmmon_Business_Oriented_Language)

Смотрите также

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я