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

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

батіг

На третій рік мого перебування в університеті мене попросили провести кілька занять комп'ютерів. Група людей сказала, що в Caltech (Каліфорнійському технологічному інституті) не вчать нічого, що пов'язано з комп'ютерами. У цей час я консультував Burroughs. «То чому б тобі не провести пару занять в університеті?» — спитали мене. Так я провів заняття лише один раз, і перш ніж закінчити університет, вони вирішили найняти мене як доцента, одразу після його закінчення навчання.

Зазвичай в університеті не беруть на роботу власних випускників, за винятком MIT. Але як ви знаєте, вважається погано робити інбридинг (кровосмішення), тому що відділення може загрузнути в одній філософії, а вони хочуть «свіжої крові». Але Caltech вважав мене досить дивним і чужим «по крові», і це було позитивним аргументом, щоб найняти мене.

Як зародилася ідея книги

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 і використав її для моєї дисертації у Каліфорнійському технологічному інституті. Я ніби був людиною за клавіатурою: я грав на фортепіано, на саксофоні, так що це була просто ще одна машина з клавішами.

Що? Я думав, у мене шість чи сім сотень сторінок у книзі. Я сказав, знаєте, подумав: «Я ж роками читав книги. Як ви можете говорити мені, що ця книга буде такою довгою? Так що я повернувся до “Thomas's Calculus” (підручник з матану), оригінальної книги, яку я любив на першому курсі в коледжі, і надрукував.

Я відчував, що п'ять сторінок, які я друкую, перетворяться на одну сторінку в книзі, але вони сказали: «Ні, ні, півтори до одного». Я не міг повірити. Так що я взяв “Thomas's Calculus” та надрукував 2 сторінки звідти на моїй друкарській машинці. Точно три сторінки машинописного тексту перетворилися на дві.

У мене була книга втри рази більша, ніж я розраховував. Не дивно, що я пішов стільки часу, щоб закінчити цю річ. Але потім вони сказали: "Ніхто не зможе подужати цю книгу". Знаєте, у всіх видавців є страшилки про професорів, які шлють їм манускрипти в 10 томів про історію яєць або начебто і вони просто лежать. І ось як вони збираються оминути цю проблему?

Випуск першого тиражу

Ти був безстрашний і наполегливий, стоячи перед директором кампанії, молодець, хлопчику!

Ось так і розпочалася історія «Мистецтво програмування». У 1968 році я вперше отримав копії першого тому. З того часу було продано ще близько 400 000 примірників англійською мовою і набагато більше іншими мовами. Я не міг повірити, що ця книга стане настільки популярною. Але якби в 1962 році я знав, що у свої 68 я все ще продовжуватиму працювати над нею, я б точно відмовився від цієї витівки. Якщо чесно, я взагалі думав, що закінчу 1965 року, просто перед народженням мого сина.

To be continued.

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

Читати ще

1. Family history 2. Learning to read and school 3. My mother 4. My parents' finances 5. Interests in high school 6. Виходить на хребет nerds at high school 7. My sense of humor 8. The Potrzebie System of Weights and Measures 9. Зображуючи потребу до практики 11. University life: my basketball management system 12. University life: the fraternity system 13. Meeting my wife Jill 14. Biblia study at university and time of personal challenge 15. Extra-curricular activities at Case 16. Такі graduated classes at Case 17. Physics, welding, astronomy and mathematics 18. My maths teacher at Case and a difficult problem 19. Мій інтерес до графіків і мій перший досвід роботи з комп’ютером 20. Як я зацікавився програмуванням 21. Навчання програмуванню на IBM 650 22. Написання програми «хрестики-нулики» 23. Вивчення програм Symbolic Optimum Assembly 24. Внутрішній перекладач 25. Додавання додаткових функцій до RUNCIBLE 26. Я хочу бути вчителем і чому я вирішив вступити до Калтеху 27. Написання компілятора для Burroughs Corporation 28. Робота в корпорації Burroughs 29. Корпорація Берроуз 30. Мій інтерес до контекстно-вільних мов 31. Отримання докторської дисертації та проблема симетричних блокових конструкцій з... 32. Пошук розв’язку відкритої задачі про проективні площини 33. Зародження мистецтва програмування 34. 1967: бурхливий рік 35. Робота над граматикою атрибутів і алгоритмом Кнута-Бендікса 36. Творчість у лісі 37. Нова область: аналіз алгоритмів 38. Мистецтво програмування: недооцінка розміру. 39. Успішний перший випуск Мистецтва програмування 40. Натхнення для написання Surreal Numbers 41. Написання сюрреалістичних чисел у номері готелю в Осло 42. Завершення сюрреалістичних чисел 43. Поява інформатики як навчального предмета 44. Я хочу займатися інформатикою, а не сперечатися за це 45. Рік державної служби в Прінстоні 46. Переїжджаю до Стенфорда й думаю, чи зробив я правильний вибір 47. Проектування будинку в Стенфорді 48. Том третій "Мистецтво програмування" 49. Робота над четвертим томом «Мистецтво програмування» 50. Погана якість верстки другого видання моєї книги 51. Вирішив створити власну програму верстки 52. Працюю над своїм наборомпрограма 53. Математична формула для форм літер 54. Дослідження історії книгодрукування 55. Працюю над своїми листами та проблемами з S 56. З’ясування того, як набирати текст, і проблеми зі специфікаціями 57. Робота над TeX 58. Чому розробник і виконавець програми має бути… 59. Перетворення другого тому на TeX 60. Написання посібника користувача для TeX 61. Читаю лекцію Гіббса про мою типографічну роботу 62. Розробка Metafont і TeX 63. Чому я вирішив не зберігати жодних прав на TeX і транскрибував його на... 64. Налаштування моїх шрифтів і отримання фінансування для TeX 65. Завдання до другого тому 66. Грамотне програмування 67. Переписування TeX з використанням відгуків, які я отримав 68. Важливість стабільності для TeX 69. LaTeX і ConTeXt 70. Короткий зміст проекту TeX 71. Рік у Бостоні 72. Написання книги про Біблію 73. Найкрасивіший 3:16 у світі 74. Майстер гри в шахи в Adobe Systems 75. Читає цикл лекцій про науку та релігію в MIT 76. Повернення до роботи в Стенфорді та достроковий вихід на пенсію 77. Займаюся плаванням, щоб допомогти мені впоратися зі стресом 78. Мої аспіранти і моє 64-річчя 79. Мій урок конкретної математики 80. Пишу книгу на уроках конкретної математики 81. Оновлення першого-третього томів «Мистецтво програмування» 82. Початок роботи з четвертим томом «Мистецтво комп’ютера… 83. Два останні великі дослідницькі проекти 84. Моя любов до писання та щасливе життя 85. Боротьба з раком 86. Почесні докторські ступені 87. Важливість нагород і премії Кіото 88. Органна музика — одна з найбільших насолод життя 89. Орган у моїй вітальні 90. Гра на органах 91. Анміжнародні символіки на algoritms в 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 books of my collected papers 97. Why I chose analysis of algorithms як subject