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

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

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

Другими словами, любой вопрос, раскрытый в моей книге на пяти страницах, этими пятью страницами далеко не исчерпывается — его изучению можно посвятить всю жизнь, потому что компьютерные науки — действительно очень богатая область. Компьютерные науки вовсе не сводятся к ряду простых вещей. Если бы компьютерные науки действительно были очень просты и все свелось бы лишь к тому, чтобы сформулировать 50 правильных вещей и выучить их, тогда, да, тогда бы я сказал: «Да, каждый человек в мире должен знать эти 50 вещей — и должен знать их хорошенько».

Но это не так. В моих книгах — тысячи страниц и тысячи примеров, которые я записываю и включаю в книги, для того чтобы не держать их все в голове. Мне приходится постоянно возвращаться к ним и изучать их заново. В моих книгах есть ответы ко всем заданиям, так как я знаю, что десять лет спустя я не буду помнить ничего о том, как делать ту или иную вещь, и мне придется потратить много времени на то, чтобы восстановить утраченные знания. Поэтому я оставляю для себя хотя бы минимальные подсказки на будущее.

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

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

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

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

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

Сейбел: А что вы используете?

Кнут: Обыкновенное дерево двоичного поиска, которое с недавнего времени стал особым образом рандомизировать.

Сейбел: Кстати, о практической работе — в разгар работы над «Искусством программирования» вы взяли десятилетний перерыв, для того чтобы написать систему компьютерной верстки ТеХ. Насколько я понимаю, первую версию ТеХ вы написали без применения компьютера.

Кнут: Когда в 1977-1978 годах я написал первую версию ТеХ, у меня, разумеется, еще не было литературного программирования, но уже было структурное программирование. Я писал в большом блокноте, без сокращений, карандашом.

Полгода спустя, завершив проект в целом, я начал набирать его на компьютере. Отладку я выполнил в марте 1978 года, а программу начал писать в октябре 1977-го. Код хранится в архивах Стэнфордского университета — он весь написан карандашом. И, конечно, я часто возвращался к написанному и по мере обнаружения ошибок менял подпрограммы.

Перейти на страницу:

Похожие книги

Адмирал Советского Союза
Адмирал Советского Союза

Николай Герасимович Кузнецов – адмирал Флота Советского Союза, один из тех, кому мы обязаны победой в Великой Отечественной войне. В 1939 г., по личному указанию Сталина, 34-летний Кузнецов был назначен народным комиссаром ВМФ СССР. Во время войны он входил в Ставку Верховного Главнокомандования, оперативно и энергично руководил флотом. За свои выдающиеся заслуги Н.Г. Кузнецов получил высшее воинское звание на флоте и стал Героем Советского Союза.В своей книге Н.Г. Кузнецов рассказывает о своем боевом пути начиная от Гражданской войны в Испании до окончательного разгрома гитлеровской Германии и поражения милитаристской Японии. Оборона Ханко, Либавы, Таллина, Одессы, Севастополя, Москвы, Ленинграда, Сталинграда, крупнейшие операции флотов на Севере, Балтике и Черном море – все это есть в книге легендарного советского адмирала. Кроме того, он вспоминает о своих встречах с высшими государственными, партийными и военными руководителями СССР, рассказывает о методах и стиле работы И.В. Сталина, Г.К. Жукова и многих других известных деятелей своего времени.Воспоминания впервые выходят в полном виде, ранее они никогда не издавались под одной обложкой.

Николай Герасимович Кузнецов

Биографии и Мемуары
100 великих гениев
100 великих гениев

Существует много определений гениальности. Например, Ньютон полагал, что гениальность – это терпение мысли, сосредоточенной в известном направлении. Гёте считал, что отличительная черта гениальности – умение духа распознать, что ему на пользу. Кант говорил, что гениальность – это талант изобретения того, чему нельзя научиться. То есть гению дано открыть нечто неведомое. Автор книги Р.К. Баландин попытался дать свое определение гениальности и составить свой рассказ о наиболее прославленных гениях человечества.Принцип классификации в книге простой – персоналии располагаются по роду занятий (особо выделены универсальные гении). Автор рассматривает достижения великих созидателей, прежде всего, в сфере религии, философии, искусства, литературы и науки, то есть в тех областях духа, где наиболее полно проявились их творческие способности. Раздел «Неведомый гений» призван показать, как много замечательных творцов остаются безымянными и как мало нам известно о них.

Рудольф Константинович Баландин

Биографии и Мемуары
100 великих интриг
100 великих интриг

Нередко политические интриги становятся главными двигателями истории. Заговоры, покушения, провокации, аресты, казни, бунты и военные перевороты – все эти события могут составлять только часть одной, хитро спланированной, интриги, начинавшейся с короткой записки, вовремя произнесенной фразы или многозначительного молчания во время важной беседы царствующих особ и закончившейся грандиозным сломом целой эпохи.Суд над Сократом, заговор Катилины, Цезарь и Клеопатра, интриги Мессалины, мрачная слава Старца Горы, заговор Пацци, Варфоломеевская ночь, убийство Валленштейна, таинственная смерть Людвига Баварского, загадки Нюрнбергского процесса… Об этом и многом другом рассказывает очередная книга серии.

Виктор Николаевич Еремин

Биографии и Мемуары / История / Энциклопедии / Образование и наука / Словари и Энциклопедии