О книге Дональда Кнута Искусство компьютерного программирования | SHIFU.IO
Переводы
Искусство программирования
Перевод 29.11.2017

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


Билл Гейтс однажды сказал: «Если вы думаете, что вы действительно хороший программист ... прочитайте "Искусство компьютерного программирования» ... Обязательно отправьте мне резюме, если вы сможете прочитать все это».


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


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


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


Просто я не достоин глубин TAOCP.


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


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


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


Любовь Кнута к компьютерам такова, что целая серия книг посвящена одному: мэйнфрейму IBM 650, популярному в 1950-х годах. Это был первый «массовый» компьютер, и он стоил несколько сотен тысяч долларов. Это машина, которую Кнут знал от и до.


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


Не было отображения и командной строки. Операционная система была человеком: консоль управления позволяла оператору запускать и останавливать программы и так далее.


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


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


Вы также могли бы оптимизировать то, как ваша программа загружается и запускается - работая со структурой машины. Память магнитного барабана, предшественница современного жесткого диска, была основной памятью для 650, и это было очень медленно. Таким образом, ваша цель в качестве программиста заключалась в том, чтобы свести к минимуму вращательную задержку на 12 500 об / мин, чтобы весь ваш код и данные были легко доступны в ЦП в нужный момент во время выполнения. Вам нужна идеальная синхронизация между циклами ЦП мейнфрейма и этими вращениями барабанной памяти.


Так и была выкована информатика, на пересечении математики и машиностроения. Так может быть полностью понят  очень умный человек. К сожалению, это уже не так. Кнут и программисты той эпохи должны были быть умнее IBM 650. Они понимали каждую вакуумную трубку и переключатель управления. Таким образом, мы больше не умнее наших компьютеров.


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


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


С тех пор десятилетия абстракции сложены как куча матрацев, и большинство из нас просто катится сверху.




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


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


 


Источник: https://goo.gl/FoMYRK


Перевод 29.11.2017