?

Log in

No account? Create an account
Speaker Rabbit

abbra


CIFS: curious information funneled sometimes


Coders at work: Knuth
Speaker Rabbit
abbra
Отпуск проходит в активной фазе сна и чтения. В интервью Кнута Сейбелю есть замечательный фрагмент о чтении:
"... Очень важно забраться внутрь чьего-либо образа мышления, разобрать его словарь, его записи. Если получается понять, как люди думали и каким образом они совершали свои открытия, это поможет сделать собственные открытия. Я часто читаю первоисточники, что говорили об этом величайшие люди прошлого. Да, их выражения необычны для сегодняшнего читателя, но для меня очень важно впитать их подходы и попытаться вникнуть в их идеи.

Например, я потратил приличное время, чтобы понять как вавилонские манускрипты описывали алгоритмы 4000 лет назад и о чем они думали. Были ли у них циклы while и тому подобные вещи? Как они их описывали? Для меня это было очень полезным, чтобы понять, как работает мозг и также как они открывали эти вещи.

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

К сожалению, мне не удалось передать этот интерес своим студентам. В компьютерной науке есть некоторое количество людей, которые хорошо следуют этому подходу, но их действительно немного. Я могу сосчитать на пальцах одной руки людей, которые имеют такую же страсть к исходным материалам, как и я.

У меня большая коллекция исходников. У меня есть компиляторы; например, компиляторы Digitek из 1960-х, написанные очень интересным образом. Они использовали собственный язык и идентификаторы длиной в 30 символов, но очень описательные. Эти компиляторы уделывали всех конкурентов в свое время -- компания создала лучшие компиляторы 1963 и 1964 годов.

У меня также есть исходный код операционной системы THE, написанный Дийкстрой. Я его не читал, лишь просмотрел, но он у меня в коллекции, потому что я уверен, что его будет интересно прочитать, если у меня будет время.

Однажды я сломал руку -- упал с велосипеда -- и в течение месяца не мог ничего делать, кроме как читать. Я читал исходный код, о котором я слышал, что в нем есть некоторые интересные незадокументированные идеи. Все это было очень важным опытом.

...

[Читать код] очень важно из-за того, что создается в твоем мозге в процессе чтения. Была такая машина Bunker Ramo 300 и кто-то сказал мне, что компилятор Фортрана для этой машины был исключительно быстрым, но никто не знал, как он был устроен. Я достал копию исходного кода. У меня не было документации по машинному коду этого компьютера, так что я был даже не очень уверен, какой машинный код там был.

Но я решил, что это интересный вызов. Я смог найти обработку BEGIN и начал декодировать. Коды имели двухбуквенную мнемонику и пришлось гадать: "возможно, это инструкция загрузки, а это -- переход". А поскольку я знал, что это компилятор Фортрана, то в какой то момент он должен был смотреть в седьмую колонку перфокарты и делать вывод о том, комментарий это или нет.

После трех часов я понемногу выяснил устройство машины. Затем нашел большие таблицы переходов. Это была головоломка и я делал зарисовки, как будто я работал в агентстве национальной безопасности и пытался раскодировать секретный код. Однако я знал, что код работал и это был компилятор Фортрана, он не был зашифрован в смысле специального запутывания, просто это был код на языке, который мне был незнаком из-за отсутствия документации.

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

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

Нам надо публиковать код. Lions Book доступна. И программы Билла Аткинсона тоже доступны теперь, спасибо Эппл, так что не так уж далеко время, когда мы сможем их прочесть. Это хорошо документированный код с многими прорывными графическими алгоритмами."


(Вот этот код Билла Аткинсона, MacPaint и QuickDraw, на Apple Pascal и ассемблере 68000 -- http://www.computerhistory.org/highlights/macpaint/)

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

Еще один фрагмент:
С ТеХом я взаимодействовал с сотнями лет человеческой истории и не хотел выбрасывать все те вещи, которые дизайнеры книг освоили за столетия, чтобы начать с нуля и сказать: "Ребята, забудьте все; вы же знаете, нам нужно быть логичными". В этом случае целью игры было взять невозможно сложную задачу и найти достаточно простой набор примитивов, которые бы смогли ее описать. Вместо 1000 примитивов, у меня получилась сотня или около того. Но уменьшать до 50 или даже 10 примитивов, чтобы обеспечить математическую чистоту, -- я не верю, что это бы сработало. Проблема создания книг очень глубоко связана со сложностью мира, которая совсем не жаждет упрощения."