Выбрать главу

Вы можете создавать красоту и искусство при помощи компьютера.

Музыкальная программа Самсона была тому примером. Но для хакеров, искусство программирования не сводилось к умению извлекать приятные звуки из спикера. Программный код сам по себе был красив и совершенен.

Тем не менее, Самсон особенно скрытничал, отказываясь писать комментарии к своим исходным текстам, утверждая, что он это уже делал в свое время. В одной, написанной Самсоном и ставшей весьма популярной программе, в которой использовалось более четырех сотен команд на языке ассемблера, был один-единственный комментарий на строке номер 1750. Комментарий состоял из одного слова RIPJSB. Остальные чуть было не свернули себе мозги, пытаясь понять, что же он имел в виду, пока кто-то не догадался, что в 1750 году умер Бах, и то, что написал Самсон, означало «Rest In Peace Johann Sebastian Bach» [12]

Возникла определенная эстетика стиля программирования. Из-за ограниченного пространства памяти на TX-0 (неприятная особенность, свойственная всем компьютерам того времени), хакеры высоко ценили хитрые приемы, которые позволяли программам выполнять сложные задачи при помощи нескольких команд. Чем короче была программа, тем больше места оставалось для других программ, и тем быстрее она работала. Иногда, когда вы не сильно гнались за скоростью и экономией памяти и не очень-то задумывались над красотой и искусством, вы могли бы схачить достаточно уродливую программу, штурмуя проблему методом «грубой силы». «Ну, мы можем сделать это, добавив еще двадцать команд», — мог сказать сам себе Самсон, — «гораздо быстрее написать двадцать лишних инструкций, чем придумывать цикл в начале и в конце, для того чтобы сделать всю эту работу при помощи семи или восьми команд». Но более поздний вариант этой программы мог бы восхитить его сотоварищей, а некоторые программы «бамились» им в несколько строк настолько искусно, что его друзья могли бы только от одного взгляда на код растечься по полу от восторга.

Иногда программный бамминг принимал состязательный характер — своеобразное соревнование мачо, призванное доказать, в первую очередь, самому себе, что ты можешь управлять системой так, что эти элегантные приемы, с помощью которых можно удалить одну или две инструкции из программы, будут непременно оценены по заслугам. Или, что еще лучше, можно было пересмотреть проблему с нуля и разработать новый алгоритм, который бы сократил программу на целый блок команд[13]. Как правило, это можно было сделать, только рассмотрев проблему с такого угла зрения, с которого никто никогда не делал этого раньше, и только детально изучив настоящее и прошлое этой проблемы можно было уловить некоторый общий смысл. Это был своего рода удар, вдохновение, которое испытывает артист. Эта технология, словно позаимствованная у древней марсианской цивилизации, в сочетании с качеством, присущим черным магам и колдунам, позволяла хакерам отбросить традиционные взгляды лучших умов на земле и принести в мир абсолютно новый и неожиданный алгоритм.

Так произошло и с программой печати десятичных чисел. Эта была подпрограмма[14], иногда использовавшаяся в других программах, и которая позволяла транслировать двоичные числа, которыми оперировал компьютер в обычные десятичные цифры. По словам Сандерса эта проблема являлась «своего рода павлиньим хвостом в программировании, и, если вы могли написать рабочую программу печати десятичных чисел, то вы знали о компьютере достаточно, чтобы расправить хвост и называть себя, в некотором роде, программистом. А если вы были в состоянии написать действительнохорошую процедуру, то вы могли бы попробовать называть себя хакером». Проблема превратилась в больше чем просто состязание, окончательный бамминг процедуры печати десятичных чисел превратился для хакеров в своеобразные поиски Святого Грааля.

В течение нескольких месяцев было изготовлено множество версий процедуры печати десятичных чисел. Если программист был непроходимо глуп, или был полным идиотом и совершенным «лозером», то подпрограмма конверсии отняла бы у него около сотни команд. Но любой хакер, стоивший своего имени, мог уместить ее в меньший объем. В конечном счете, попеременно убирая инструкции то в одном, то в другом месте, процедура была уменьшена до, примерно, пятидесяти инструкций.

После этого дела приняли серьезный оборот. Хакеры тратили многие часы, пытаясь найти путь, как можно было бы сделать все то же самое, но при помощи меньшего количества кода. Это стало больше чем соревнованием — это стало настоящим крестовым походом. Сколько бы сил не было потрачено, никто не был в состоянии преодолеть барьер из пятидесяти команд. Возник вопрос: а можно ли вообще сделать ее меньше? И есть ли предел, ниже которого бамнуть программу просто нельзя?

Среди многих, кто пытался решить эту головоломку, был парень по фамилии Дженсен, высокий и тихий хакер из Мэйна. Он обычно тихо сидел в Клудж Комнате и покрывал своми каракулями распечатки с таким же невозмутимым спокойствием, как живущий в лесной глуши человек неспешно обстругивает ножом деревяшку, сидя на завалинке перед своим домом. Дженсен всегда пытался найти способ как сжать свои программы в объеме и увеличить их скорость. Его код, на первый взгляд, представлял собой беспорядочную последовательность логических и арифметических команд, часто вызывающих производство различных расчетов в разных частях одного и того же 18-битного слова. Если коротко, то его стиль программирования состоял из удивительных вещей и волшебных трюков.

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

«Мы поняли, что дошли до логического конца», —сказал позднее Боб Сандерс, — «Это была Нирвана».

Компьютеры могут изменить твою жизнь к лучшему.

Данное мнение проявлялось очень незаметно. Хакеры крайне редко пытались объяснить массу преимуществ компьютерного пути познания людям со стороны. Кроме того, данный постулат занимал главенствующее положение в течение всего времени суток хакеров TX-0, также как и среди поколений хакеров, которые пришли за ними.

Но несомненным было то, что компьютер действительно изменил их жизнь, он обогатил ее, показал в ней цель, и сделал ее более яркой и насыщенной. Он сделал их хозяином большей части своей судьбы. Питер Самсон позднее говорил: «Примерно 25-30% процентов из того, что мы делали, было сделано только потому, что мы это могли делать, и делали хорошо. И примерно шестьдесят процентов делалось только ради того, чтобы то, что мы делаем, начинало жить само по себе, словно родное дитя, которое после своего появления на свет, подчиняется собственным правилам. И именно это было самой привлекательной вещью в программировании, своеобразным зовом свыше.… После того как вы решали проблему поведения [железа или программы], она устранялась раз и навсегда, и результат был в точности тем самым, что вы имели в виду и ничем иным».

вернуться

12

Иоганн Себастьян Бах, покойся с миром.

вернуться

13

Алгоритм — это специальная процедура, готовый порядок действий, который можно применить к решению сложной компьютерной проблемы; своего рода математическая болванка

вернуться

14

т.е. программа внутри программы