[Перевод] Дональд Кнут: Как создавалось «Искусство программирования» (33,38,39/97)
На третий год моего пребывания в университете меня попросили провести пару занятий о компьютерах. Группка людей сказала, что в Caltech (Калифорнийском технологическом институте) не учат ничему, что связанно с компьютерами.В это время я консультировал Burroughs. «Так почему бы тебе не провести пару занятий в университете?» — спросили меня. Так я провел занятие всего один раз, и прежде чем закончить университет, они решили нанять меня в качестве доцента, сразу после его окончания учебы.
Обычно в университет не берут на работу собственных выпускников, за исключением MIT. Но как вы знаете, считается нехорошо делать инбридинг (кровосмешение), потому что отделение может увязнуть в одной философии, а они хотят «свежей крови». Но Caltech счел меня достаточно странным и чуждым «по крови», и это было положительным доводом, чтобы нанять меня.
Как зародилась идея книги
(1:04)Тем временем, в январе 1962 года, был мой второй курс в университете и первый год брака с супругой. Мы поженились летом 1961. Я и Джилл прожили 6 месяцев в блаженстве. Мы провели медовый месяц и потом у нас было еще немного времени, что бы побыть вдвоем, пока я не погрузился в написание книги по computer science.
В январе 1962, редактор из Addison-Wesley пригласил меня на обед, и сказал: «Мы хотели бы предложить вам написать книгу о компиляторах». (Компиляторы — это то, чем я занимался для Burroughs весь предыдущий год.)
Addison-Wesley — американское издательство, специализирующееся на компьютерной литературе, ранее также выпускавшее литературу по естественным наукам. Принадлежит к медиа-концерну Pearson.
«Вас рекомендовали нам как того, кто умеет писать компиляторы, и вы думаете о написании книги?» Раньше я работал на всякие газеты и журналы, написал несколько статей. Мне всегда нравилось писать. И вот издатель моих любимых учебников, Addison-Wesley, просит меня написать книгу.
(3:00) Я сразу пошел домой и записал название 12-и глав и подумал, что было бы неплохо, если книга будет именно такой. Я думал, что смогу закончить книгу довольно быстро. У меня есть письмо, которое я написал в 1964 году в ответ на приглашение в один университет: «Я, к сожалению, не могу посетить Стэнфордский университет в этом году, потому что я должен закончить книгу, прежде чем родится мой сын.
Теперь ему 40 лет, и я до сих пор не закончил книгу… Я хотел бы её закончить быстрей, но понятия не имел как и сколько времени мне еще потребуется. Меня попросили написать книгу о компиляторах, но я сказал: «Минуточку, есть куча вещей, которые происходят в компьютерном программировании, о которых вы тоже должны знать». И они сказали, что не против, если в книге будут освещены и другие темы, касающиеся программирования.
Книгу мы решили назвать «Искусство программирования» (The Art of Computer Programming). Издателям понравилось название.
Я решил написать «Искусство программирования» не потому что мне нравится писать, а потому что я чувствовал острую потребность в такой книге. Ничего подобного на то время не существовало. Хоть я написал несколько компиляторов, и многое знал про них, я не придумал какой-либо оригинальной идеи в этой области. Я всего лишь применил идеи, которые я узнал от других людей. И я стал задумываться, кто сможет написать книгу о компиляторах, но счел всех кандидатов предвзятыми и сфокусированными только на своем подходе.
Я счел только одного кандидата достойным для такой работы, который напишет не предвзято, — себя.
Недооценка размера книг
Черновик оглавления содержал 12 глав. С первого дня я начал заполнять главу за главой и писать больше материала, а тем временем computer science стремительно развивалась. Оказалось, я очень сильно недооценил, насколько может продлиться работа. В конце написания, я посмотрел на свои заметки, они все были написаны вручную, и мне казалось, что моих заметок намного больше, чем чем сама книга. На самом деле я… я дошел до конца главы 12 у меня было 3000 страниц. А я всего планировал 64–65 глав…
У меня накопилось 3000 рукописных страниц. Я написал в Addison-Wesley и спросил, не возражает ли они, если я дополню книгу материалами, которые я откопал. На что мне ответили: «Давай».
(1:36) 3000 страниц. Я взял печатную машинку и начал печатать. В первой главе было 400 страниц машинного текста и это через два интервала. Кстати, я печатал на IBM Selectric. В то время это было одна из лучших пишущих машинок. Как мне сказали позже, я был первым частным, а не корпоративным покупателем такой машинки. Прелесть в том, что в ней был реализован «буфер». То есть вы могли вводить новую букву, пока предыдущие еще не были напечатаны. Впервые я увидел такую машинку на выставке и попробовал напечатать пару предложений. Я был восхищен. И так я купил себе Selectric и использовал ее для моей диссертации в Калифорнийском технологическом институте. Я как будто был человеком-за-клавиатурой: я играл на фортепиано, на саксофоне, так что это был просто еще одна машина с клавишами.
(3:50) Я начал печатать, набрал первую главу из двенадцати, и отправил её в Addison-Wesley, сказав: «Вот первая глава моей книги». Потом я получил письмо от человека, который вообще-то был первым редактором, кто говорил со мной в 1962. Но это был 1966, думаю, к этому моменту у меня было уже 3000 страниц плюс набираемая глава. И теперь я снова слышал того же парня, но его повысили на три ступени в компании за это время, так что теперь он был на пути наверх. И, знаете, он говорил: «Что происходит? Ваша книга, Дон, вы понимаете, что ваша книга займёт больше 2000 страниц?»
Что? Я думал, у меня шесть или семь сотен страниц в книге. Я сказал, знаете, я подумал: «Я же годами читал книги. Как вы можете говорить мне, что эта книга будет такой длинной?» Так что я вернулся к «Thomas’s Calculus» (учебник по матану), оригинальной книге, которую я обожал на первом курсе в колледже, и напечатал.
Я чувствовал, что пять страниц, которые я печатаю, превратятся в одну страницу в книге, но они сказали: «Нет, нет, полторы к одному». Я не мог поверить. Так что я взял «Thomas’s Calculus» и напечатал 2 страницы оттуда на моей печатной машинке. Точно, три страницы машинописного текста превратились в две.
У меня была книга в три раза большая, чем я рассчитывал. Не удивительно, что у меня ушло столько времени, чтобы закончить эту вещь. Но потом они сказали: «Никто не сможет осилить эту книгу». Знаете, у всех издателей есть страшилки про профессоров, которые шлют им манускрипты в 10 томов об истории яиц или вроде того, и они просто лежат. И вот как они собираются обойти эту проблему?
Выпуск первого тиража
Я прилетел в Массачусетс, чтобы обсудить наши дальнейшие планы. Ребята из издательства сказали: «Ну, мы придумаем что-нибудь», хотя они уже успели показать эту главу нескольким людям, которым она очень даже понравилась, и особо не сомневались в ней. Однако во время ланча я заметил у своего тогдашнего редактора — Норма Стэтона — в личных заметках пометку «строгое ограничение в бюджете» или что-то типа того. Он, видимо, хотел мягко подвести меня к этой новости, и предложил… То есть, они предложили, не заморачиваться с написанием ответов к упражнениям, а вместо профессиональных иллюстраций вставить те, которые я сам рисовал в рукописи. Ребята сказали, что «очарованны» ими. Я тогда, честно, подумал, что они пьяны или под кайфом. «Нет уж», — сказал я, — «знаете, почему мне нравится «Addison-Wesley»? Потому что качество их книг именно такое, каким должно быть — великолепное, а иллюстрации в них — на должном уровне. И именно поэтому я подписывал с вами контракт, ребята!» После этого разговора, мой редактор подошел ко мне и сказал:
«Ты был бесстрашен и настойчив, стоя перед директором кампании, молодец, мальчик!»
И все в таком духе. Тогда они решили напечатать эту книгу в трех томах, но затем их мнение изменилось, и они решили выпустить ее уже в семи томах… В общем, был утвержден план публикации книги «Искусство программирования» в семи томах. И мы до сих пор официально придерживаемся этого плана, но за последние 30 лет было выпущено только 3 тома. Сейчас же я работаю над четвертым.
Computer science — очень обширная область, и те 3000 страниц что я написал ранее охарактеризовывали ее состояние лишь на 1965 год. Но с тех пор прошло немало времени, я изучил некоторые другие ее аспекты, которые тоже стоило включить в книгу. Таким образом прошло еще несколько стадий. Также ребята попросили меня не включать в книгу ответы к упражнениям; задумывалось, что они будут публиковаться отдельно, в мягкой обложке, а печататься будут на машинке. Однако редакторы, все же, решили печатать ответы вместе с остальным текстом. И вот наконец в 1968 году первый том был выпущен. И оценивался он, мягко говоря, дорого — в целых 32$! Когда остальные книги по компьютерным наукам стоили от силы 10$. И что поразительно, в первый же год книга обрела большой успех, 50 университетов утвердили ее как учебное пособие. И хотя читать ее было непросто, это доказывало, что в этой области давно уже не хватало книг именно такого типа.
Вот так и началась история «Искусства программирования». В 1968 я впервые получил копии первого тома. С тех пор было продано еще около 400 000 экземпляров на английском языке и гораздо больше — на других языках. Я не мог поверить, что эта книга станет настолько популярной. Но если бы в 1962 году я знал, что в свои 68 я все еще буду продолжать работать над ней, я бы точно отказался от этой затеи. Если честно, я вообще думал, что закончу в 1965 году, прямо перед рождением моего сына.
To be continued…
Перевод: Алена Карнаухова, Катя Шершнёва и Никита Гладышев
Читать еще
- Дональд Кнут: Я сидел на задних партах и травил шутки, а учителя смирились и не часто били по заднице (1,2,3,7/97)
- Дональд Кнут: «Мой совет молодым» (93/97) и «Ощущая потребность самоутвердиться» (9/97)
- «Сюрреальные числа»: Я творил шесть дней, а на седьмой отдыхал (40,41,42/97)
1. Family history
2. Learning to read and school
3. My mother
4. My parents' finances
5. Interests in high school
6. Being a nerd of nerds at high school
7. My sense of humor
8. The Potrzebie System of Weights and Measures
9. Feeling the need to prove myself
11. University life: my basketball management system
12. University life: the fraternity system
13. Meeting my wife Jill
14. Bible study at university and a time of personal challenge
15. Extra-curricular activities at Case
16. Taking graduate classes at Case
17. Physics, welding, astronomy and mathematics
18. My maths teacher at Case and a difficult problem
19. My interest in graphs and my first experience of a computer
20. How I got interested in programming
21. Learning how to program on the IBM 650
22. Writing a tic-tac-toe program
23. Learning about Symbolic Optimum Assembly programs
24. The Internal Translator
25. Adding more features to RUNCIBLE
26. Wanting to be a teacher and why I chose to go to Caltech
27. Writing a compiler for the Burroughs Corporation
28. Working for the Burroughs Corporation
29. Burroughs Corporation
30. My interest in context-free languages
31. Getting my PhD and the problem of symmetric block designs with…
32. Finding a solution to an open problem about projective planes
33. Inception of The Art of Computer Programming
34. 1967: a turbulent year
35. Work on attribute grammars and the Knuth-Bendix Algorithm
36. Being creative in the forest
37. A new field: analysis of algorithms
38. The Art of Computer Programming: underestimating the size of the…
39. The successful first release of The Art of Computer Programming
40. Inspiration to write Surreal Numbers
41. Writing Surreal Numbers in a hotel room in Oslo
42. Finishing the Surreal Numbers
43. The emergence of computer science as an academic subject
44. I want to do computer science instead of arguing for it
45. A year doing National Service in Princeton
46. Moving to Stanford and wondering whether I’d made the right choice
47. Designing the house in Stanford
48. Volume Three of The Art of Computer Programming
49. Working on Volume Four of The Art of Computer Programming
50. Poor quality typesetting on the second edition of my book
51. Deciding to make my own typesetting program
52. Working on my typesetting program
53. Mathematical formula for letter shapes
54. Research into the history of typography
55. Working on my letters and problems with the S
56. Figuring out how to typeset and the problem with specifications
57. Working on TeX
58. Why the designer and the implementer of a program should be the…
59. Converting Volume Two to TeX
60. Writing a users' manual for TeX
61. Giving the Gibbs lecture on my typography work
62. Developing Metafont and TeX
63. Why I chose not to retain any rights to TeX and transcribed it to…
64. Tuning up my fonts and getting funding for TeX
65. Problems with Volume Two
66. Literate programming
67. Re-writing TeX using the feedback I received
68. The importance of stability for TeX
69. LaTeX and ConTeXt
70. A summary of the TeX project
71. A year in Boston
72. Writing a book about the Bible
73. The most beautiful 3:16 in the world
74. Chess master playing at Adobe Systems
75. Giving a lecture series on science and religion at MIT
76. Back to work at Stanford and taking early retirement
77. Taking up swimming to help me cope with stress
78. My graduate students and my 64th birthday
79. My class on Concrete Mathematics
80. Writing a book on my Concrete Mathematics class
81. Updating Volumes One to Three of The Art of Computer Programming
82. Getting started on Volume Four of «The Art of Computer…
83. Two final major research projects
84. My love of writing and a lucky life
85. Coping with cancer
86. Honorary doctorates
87. The importance of awards and the Kyoto Prize
88. Pipe organ music is one of the great pleasures of life
89. The pipe organ in my living room
90. Playing the organs
91. An international symposium on algorithms in the Soviet Union
92. The Knuth-Morris-Pratt algorithm
93. My advice to young people
94. My children: John
95. My children: Jenny
96. Working on a series of books of my collected papers
97. Why I chose analysis of algorithms as a subject
Поддержка публикации — компания веб-интерфейс для управления радио-релейной станцией, а так же проектирует и разрабатывает ПО для записи и анализа вариабельности сердечного ритма.