abbra: (Default)
[personal profile] 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 примитивов, чтобы обеспечить математическую чистоту, -- я не верю, что это бы сработало. Проблема создания книг очень глубоко связана со сложностью мира, которая совсем не жаждет упрощения."
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org

April 2016

S M T W T F S
     12
3456789
1011121314 1516
17181920212223
24252627282930

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Apr. 16th, 2026 11:19 am
Powered by Dreamwidth Studios