Дональд Кнут: Як створювався «Мистецтво програмування» (33,38,39/97)

«Я повинен був закінчити книгу, перш ніж народиться мій син. Тепер йому 40 років, і я до сих пір не закінчив її.»



На третій рік мого перебування в університеті мене попросили провести кілька занять про комп'ютерах. Групка людей сказала, що в каліфорнійському технологічному інституті (Каліфорнійському технологічному інституті) не вчать нічому, що пов'язано з комп'ютерами.В цей час я консультував 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 і запитав, чи не заперечують вони, якщо я доповню книгу матеріалами, які я відкопав. На що мені відповіли: «Давай».

image

(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...

Переклад: Олена Карнаухова, Катя Шершньова та Микита Гладишев

Читати ще


Список 97 відеороликів з історіями Дональда КнутаПлейлист на Youtube

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 проективної planes
33. Inception of The Art of Computer Programming
34. 1967: a turbulent year
35. Work on attribute grammars and the Батіг-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 є поява 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 rights to any 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. Master Chess 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 Батіг-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




Підтримка публікації — компанія веб-інтерфейс для управління радіо-релейного станцією, а також проектує і розробляє ПЗ для запису і аналізу варіабельності серцевого ритму.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.