Чтение онлайн

на главную - закладки

Жанры

Кодеры за работой. Размышления о ремесле программиста

Сейбел Питер

Шрифт:

Во время работы над ТеХ я обращался к сотням лет истории человечества, не желая отказываться от всего того, до чего дизайнеры книг дошли за многие века, и начинать заново, сказав: “В общем, забудьте тех ребят; знаете, мы будем рассуждать логически”. В этом случае суть дела сводилась, в основном, к тому, чтобы выбрать чудовищно сложную задачу и найти сравнительно небольшой набор базисных элементов для ее поддержки. Вместо 1000 элементов у меня 100 базисных элементов или около того. Но пойти дальше, сведя все к 50 или 10 элементам - что нужно было бы сделать для математической ясности, - мне кажется, такой путь просто не сработает. Задача изготовления книг очень сильно взаимосвязана

со сложностью реального мира, который просто противится любым упрощениям.

Сейбел: Я не проводил никаких специальных исследований, но у меня складывается такое ощущение, что подавляющее большинство математических и научных работ в наши дни сверстаны в ТеХ. Наверняка вы не раз видели какие-то исследования, сверстанные в ТеХ, и думали: “Ого, моя программа играет здесь определенную роль”.

Кнут: Доказательство великой теоремы Ферма - один из таких случаев. Это одна из самых известных математических работ. И все равно постоянно встречаются книги, которые, я знаю, не были бы написаны, если бы их авторы шли по проторенным дорожкам. Опять же это своего рода проблема черных ящиков.

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

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

Поэтому мне всегда очень приятно осознавать тот факт, что люди смогли пробиться через все это и что плоды их творчества поступают напрямую к их читателям.

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

Кнут: Не так уж и много сейчас ученых. Даже когда я начинал писать книги - в 1963 году, - мне не казалось, что люди знали тогда, что происходило в 1959 году. На прошлой неделе я прочел в “American Scientist”, что был заново открыт алгоритм, который Бойер и Мур открыли в 1980 году. Я на каждом шагу сталкиваюсь с тем, что люди не осознают все великолепие нашей истории. Многим молодым программистам кажется странной мысль о том, что в 1970-х люди тоже что-то знали, понимали и умели.

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

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

Например, я долго изучал вавилонские

рукописи, чтобы узнать, как 4000 лет назад описывались алгоритмы и что они обо всем этом думали, были ли у них циклы и прочее и как их описывали. Для меня эта работа, безусловно, была не напрасной, поскольку я обогатил свое понимание работы человеческого мозга и понял, как тогда делались открытия.

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

Мне не удалось передать ничего этого своим студентам. В современной компьютерной науке есть те, кому это удается (их не так много). Но я могу пересчитать по пальцам одной руки тех, кто разделяет мою любовь к чтению первоисточников.

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

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

Сейбел: Как вы читаете исходный код? Ведь непросто читать даже то, что написано на известном вам языке программирования.

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

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

Спустя три часа я кое-что понял об этом компьютере. Затем обнаружил огромные таблицы ветвлений. То есть это была своего рода головоломка, и я продолжал рисовать небольшие схемы, как разведчик, пытающийся разгадать секретный шифр. Но я знал, что программа работает, и знал, что это компилятор Фортрана — это не был шифр, в том смысле что программа не была написана с сознательной целью запутать. Все дело было в коде, поскольку у меня не было руководства по компьютеру.

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

Поделиться:
Популярные книги

Идеальный мир для Социопата 5

Сапфир Олег
5. Социопат
Фантастика:
боевая фантастика
рпг
5.50
рейтинг книги
Идеальный мир для Социопата 5

Титан империи 2

Артемов Александр Александрович
2. Титан Империи
Фантастика:
фэнтези
боевая фантастика
аниме
5.00
рейтинг книги
Титан империи 2

На границе империй. Том 9. Часть 3

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Защитник

Кораблев Родион
11. Другая сторона
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Защитник

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Дворянская кровь

Седой Василий
1. Дворянская кровь
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Дворянская кровь

Наследник старого рода

Шелег Дмитрий Витальевич
1. Живой лёд
Фантастика:
фэнтези
8.19
рейтинг книги
Наследник старого рода

Система Возвышения. (цикл 1-8) - Николай Раздоров

Раздоров Николай
Система Возвышения
Фантастика:
боевая фантастика
4.65
рейтинг книги
Система Возвышения. (цикл 1-8) - Николай Раздоров

Кодекс Охотника. Книга XIX

Винокуров Юрий
19. Кодекс Охотника
Фантастика:
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга XIX

Младший научный сотрудник

Тамбовский Сергей
1. МНС
Фантастика:
попаданцы
альтернативная история
6.40
рейтинг книги
Младший научный сотрудник

Я – Стрела. Трилогия

Суббота Светлана
Я - Стрела
Любовные романы:
любовно-фантастические романы
эро литература
6.82
рейтинг книги
Я – Стрела. Трилогия

Измена. Он все еще любит!

Скай Рин
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Измена. Он все еще любит!

Сумеречный Стрелок 4

Карелин Сергей Витальевич
4. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 4

Мимик нового Мира 3

Северный Лис
2. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 3