Конечно, нельзя не упомянуть о «нашем все» — «Искусстве программирования» (автор Д.Кнут, кто же еще). Признаюсь, что второй и третий тома я только листал, но не погружался. Математическое введение из первого тома я наскоро просмотрел, а затем приступил к изучению ассемблера компьютера MIX. Вот тут мне было реально тяжело. После СМ-4 (PDP-11) MIX казался настолько неуклюжим, допотопным, избыточным, что мне стоило большого труда преодолеть это препятствие (и то, только потому, что мне было интересно разобраться с интерпретатором MIX, написанном на самом MIX). Зато вторая глава, посвященная структурам данных мне, как говорится, «зашла» и я периодически заглядываю в нее.
Языки программирования
Начну с классики на все времена. Это, прежде всего, «Язык программирования Си» (Б.Керниган и Д.Ритчи). Тут мне комментировать нечего.
Далее, «Систематическое программирование» и, разумеется, «Алгоритмы + структуры данных = программы» (автор обеих книг Н.Вирт) (для второй книги я имею в виду издание 1985 года; последующие были значительно беднее). Ясность слога, изящество программ, широта рассматриваемых тем (включая компилятор простого языка высокого уровня); я, честно говоря, до сих пор в восторге от этих книг. Можно было почитать теорию у Д.Кнута и тут же поискать реализацию у Н.Вирта — очень продуктивно и понятно.
Сразу же упомяну небольшую, но очень изящно написанную книгу «Программирование на языке ПАСКАЛЬ» (автор О.Перминов). После книг самого Н.Вирта это, пожалуй, лучшее изложение языка программирования Pascal из тех, что я встречал.
Теперь — совсем неожиданная книга: «Программирование на языке Пролог» (авторы У.Клоксин и К.Меллиш). Я упоминал в первой статье о том, что в начале 90-х язык Prolog был очень популярен и эта книга служила каноническим его описанием. Причем, описанием подробным, местами — дотошным, с массой примеров и упражнений.
Компиляторы
Да‑да, был такой «грех» — я пробовал писать компиляторы (а кто не пробовал!). Тут выбор книг был небольшой, но отличный. Прежде всего, книга уже упоминавшегося Д.Гриса «Конструирование компиляторов для цифровых вычислительных машин». После небольшой теории следовал ряд глав, посвященных основным частям компиляторов: лексический анализатор, синтаксический анализатор и, конечно, генератор кода. Очень подробно изложение, с большим количеством примеров. Долгое время книга Д.Гриса оставалась единственным столь подробным и ориентированным на практику руководством (знаменитая «книга дракона» была переведена значительно позже, а двухтомник «Теория синтаксического анализа, перевода и компиляции» А.Ахо и Дж.Ульмана был книгой чересчур теоретической, хотя и единственной в своем роде по сию пору).
Другая книга, которую я вспоминаю с благодарностью — «Теоретические основы проектирования компиляторов» (авторы Ф.Льюис, Д.Розенкранц и Р.Стирнз). Теория в книге излагалась весьма неформально, зато в мельчайших деталях рассматривалось построение компилятора примитивного варианта Basic с использованием различных методов, что иллюстрировалось прекрасными рисунками, диаграммами и таблицами. Книга внушала почтение своей толщиной, но была написана ясно и интересно.
И напоследок
Наконец, пунктирно, хочу упомянуть еще несколько книг, по которым я учился. Тут уже без описаний и обоснований, только перечисление:
«Язык ФОРТ и его реализации» (авторы С.Баранов и Н.Ноздрунов)
«Язык программирования Форт» (авторы М.Келли и Н.Спайс)
«Введение в логическое программирование» (автор К.Хоггер)
«Функциональное программирование. Применение и реализация» (автор П.Хендерсон)
«Взаимодействующие последовательные процессы» (автор Ч.Хоар)
«Языки программирования: разработка и реализация» (автор Т.Пратт; мне было доступно издание 1979 г.)
Вот, кажется, и все. Хороших вам книг, друзья, и — главное — времени на их чтение!
#подборка@programmist_of
👉
@programmist_of