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

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

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

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

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

...

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

Это очевидно, но вера в это формировалась неуловимо. Хакеры редко пытались донести до остальных все преимущества компьютеров. Однако этот принцип проявлялся в обыденной жизни хакеров TX‐0, а также поколений хакеров после них.

Вне всяких сомнений, компьютер изменил их жизнь — обогатил, придал ей смысл, наполнил приключениями. Он позволил им верховодить своими судьбами. Питер Самсон позже говорил: «Мы занимались этим отчасти потому, что у нас это хорошо получалось, а отчасти — ради того, чтобы оставить после себя метафорическое наследие, способное жить собственной жизнью. В этом и заключается магия программирования… Устраняя проблему в поведении [компьютера или программы], вы исправляете ее навсегда. Результат оказывался в точности таким, каким вы его ожидали».

...

Компьютер, как лампа Аладдина, может исполнять ваши желания.

Безусловно, каждый может ощутить эту силу на себе. Мир, построенный на столпах этики хакеров, даст выигрыш каждому. Это незыблемая вера хакеров. Хакеры с энтузиазмом меняли традиционный взгляд на возможности компьютера, на вопрос, для чего он нужен. Они создавали новый мир, меняющий взаимодействие человека и компьютера.

Это был трудный путь. Даже в таком продвинутом университете, как МТИ, некоторые профессора считали маниакальное увлечение компьютерами легкомысленным и даже безумным. Однажды Бобу Вагнеру, хакеру из TMRC, даже пришлось объяснять профессору инженерного факультета, что такое компьютер. Вагнер ощутил противоборство компьютерных и антикомпьютерных точек зрения еще сильнее на занятиях по математическому анализу. Профессор требовал, чтобы студенты выполняли домашнее задание с помощью грохочущих и неуклюжих электромеханических калькуляторов. Коток учился в этой же группе, и их обоих пугала перспектива работы с этими отсталыми устройствами. «Почему мы должны это делать, — спрашивали они друг друга, — ведь у нас есть компьютер?»

Поэтому Вагнер начал работать над компьютерной реализацией калькулятора. Идея казалась возмутительной. Считалось нерациональным тратить на это рабочее время компьютера. По мнению некоторых, это время драгоценно и достойно только выполнения задач, максимально полно задействующих компьютер. Стандартный путь решения таких проблем предполагал привлечение больших ресурсов со стороны ученых или времени. Хакеры же считали иначе: забавно и интересно скормить компьютеру подобные задачки. Они верили, что и эти проблемы надо решать с помощью интерактивных возможностей компьютера, когда никто не маячит у тебя за спиной и не требует официального допуска к работе. После двух-трех месяцев напряженной работы, продумывая все хитрости организации вычислений с плавающей точкой (программа должна знать, где поставить знак в дробных числах) на компьютере, который до сих пор не имел элементарного алгоритма для выполнения наипростейшего умножения, Вагнер написал три тысячи строк кода. Он заставил чудовищно дорогое устройство выполнять функции калькулятора, который стоил в тысячи раз меньше. Чтобы подчеркнуть иронию ситуации, Вагнер назвал свою программу «Дорогущий настольный калькулятор» (Expensive Desk Calculator), а на одном из занятий он с гордостью продемонстрировал домашнее задание, выполненное с помощью компьютера.

Профессор не оценил его работу. «Ты пользовался компьютером! — сказал профессор. — Ответ не может быть верным».

Вагнер даже не потрудился объясниться. Как он мог донести до препода, что компьютер способен делать то, что раньше казалось невероятным или невозможным? Или как объяснить ему существование программы «Дорогущая печатная машинка», написанной другим хакером, с помощью которой на TX‐0 можно было набирать текст и выводить его на флексограф? Можете ли вы представить профессора, принимающего домашнее задание, напечатанное при помощи компьютера? Как мог этот профессор, да и любой другой человек, далекий от новой, неизведанной пока еще вселенной «компьютер и человек», понять, что Вагнер и его товарищи постоянно моделируют с помощью компьютера «непредсказуемые ситуации»? Со временем и профессор, и все прочие поймут, что мир, открываемый перед человеком компьютером, безграничен.

Если нужны дополнительные доказательства, можно привести пример проекта, над которым в вычислительном центре работал Коток, — шахматная программа. Над ней на машине IBM 704 работал еще бородатый Джон Маккарти, «Дядя», как называли его хакеры. Хотя Коток и другие хакеры, помогавшие ему с программой, презрительно относились к пакетной обработке данных, лежавшей в основе работы IBM 704, им пришлось пересилить себя и выкроить немного ночного времени, чтобы использовать машину в интерактивном режиме. Они вступили в неофициальную битву с системными программистами IBM 704, выясняя, кто из них «пожиратель» рабочего времени компьютера. Бой был жарким, и ксенофобы в белых рубашках и черных галстуках впечатлились и уступили напору хакеров. Они позволили Котоку с его группой касаться кнопок и переключателей IBM 704 — уникальная возможность физического контакта со знаменитым чудовищем IBM.

Роль Котока в воплощении шахматной программы в жизнь была показательна так же, как и роль хакеров в области развития искусственного интеллекта. Обычно какая-нибудь «умная голова» вроде Маккарти или его коллеги, Марвина Минского, начинала научный проект, обсуждалась возможность его реализации, и в случае заинтересованности хакеры тут же подключались.

Шахматная программа изначально писалась на FORTRAN — одном из первых компьютерных языков. Компьютерные языки гораздо больше похожи на английский, чем язык ассемблера. На них легче писать и нужно меньше строчек кода для выполнения серьезных задач. Однако всякий раз, когда в компьютер вводилась программа на языке типа FORTRAN, компьютер сначала переводил команды в двоичный код с помощью компилятора, занимавшего не только значительную часть времени работы компьютера, но и бо`льшую часть его объема памяти. По сути, использование компьютерного языка только увеличивало дистанцию между человеком и компьютером, нарушая их непосредственный контакт. Поэтому хакеры предпочитали язык ассемблера или, как они его называли, машинный язык, пусть даже не такой элегантный, как высокоуровневый FORTRAN.

Коток понимал, что из-за огромного количества инструкций будущей шахматной программы часть кода должна быть написана на языке FORTRAN, а часть — на языке ассемблера. Они собирали программу по частям, используя генераторы перемещений, составляющие основу структуры данных, и применяя всевозможные инновационные алгоритмы для реализации стратегии. После ввода в компьютер правил перемещения каждой фигуры были добавлены инструкции для оценки позиции фигуры, анализа ходов и выбора наиболее выигрышного, передвигающего фигуру в наиболее выгодную позицию. Коток работал над шахматной программой в течение многих лет. Код расширялся по мере модернизации компьютеров IBM в МТИ. И однажды памятной ночью хакеры собрались вместе посмотреть, как программа сделает свои первые ходы в реальной партии. Программа уверенно разыграла дебют, но после примерно восьмого обмена ходами начала промахиваться, и компьютеру вот-вот должны были поставить мат. Стало интересно, как отреагирует компьютер. Через некоторое время (присутствующие понимали, что во время пауз компьютер «думает», просчитывая ходы, оценивая, отклоняя большинство вариантов и используя предопределенный набор параметров для выполнения хода) компьютер передвинул пешку на две клетки вперед, перепрыгнув через другую фигуру. Баг в коде? Да, но хитрый баг — так компьютер вывел игру на новый уровень. Может быть, программа попыталась разработать какой-то новый алгоритм достижения победы?