Для меня было полной неожиданностью то, что моя первая и пока единственная статья Частное мнение о том, как «вкатиться» в IT сразу набрала столько положительных откликов. Спасибо всем, кто столь высокого оценил мой первый опыт.

Я не планировал продолжать эту тему, но сейчас вижу, что кое в чем, статью надо дополнить. Это дополнение не будет повторять или расширять статью очередными мыслями и наблюдениями; все это в ней уже есть и добавить мне нечего. Просто, читая комментарии, я сообразил, что об одной детали я вскользь упомянул, но толком не рассказал. Из‑за чего у части комментаторов возникли сомнения в сегодняшней ценности книг, доступных мне в то время, когда я начинал карьеру программиста. Мне кажется, это не очень справедливо и хотя я, бесспорно, не объективен, но, тем не менее, решил немного об этом поведать.

Я расскажу о тех книгах, что были мне доступны в 1987–1992 гг.: тогда я совмещал работу инженера с программированием. Конечно, я упомяну только те книги, что мне действительно помогли; полный список литературы слишком обширен и перечислять их все — занятие бессмысленное. Разумеется, мой список — это именно мой список; он не претендует на полноту и кто‑то (скорее всего — все) может со мной не согласиться. Так и должно быть.

Практически все книги из списка легко доступны даже сегодня. Итак, вот мой «золотой фонд».

PDP-11

Тут мой безусловный фаворит — книга «PDP-11. Архитектура и программирование» (автор Т.Фрэнк). Никогда больше я не встречал (и, боюсь, уже не встречу) столь ясного, аккуратного и доброжелательного введения в программирование на ассемблере. Книга читалась (и читается) на одном дыхании. Кое‑где (в сложных темах) автор намеренно повторяется, но эти повторения выглядят уместными и полезными. После изучения архитектуры и ассемблера для PDP-11 все остальные архитектуры и их ассемблеры (прежде всего, для процессоров Intel) мне казались недоработанными и ущербными. И это чувство, увы, не пропало. Никого не хочу обидеть, но мне есть с чем сравнивать. Можно списать мою предвзятость на «юношескую любовь», но честное слово — я знаю о чем говорю. Извините, если кого обидел; как говорится — ничего личного.

Следующая книга «Мини‑ЭВМ PDP-11: программирование и организация машины» (автор — М.Сингер). Тоже интересная и полезная книга (особенно хорошо описано программирование ввода/вывода) из которой я почерпнул много сведений.

Наконец, «Мини‑ЭВМ: организация и программирование» (авторы Р.Экхауз и Л.Моррис). Изложение достаточно сжатое, но зато авторы рассмотрели реализацию основных структур данных (очереди, списки, стеки, буферы и т. д.) на ассемблере PDP-11. Кроме того, есть интересная, хотя и заметно более сложная глава о микропрограммировании и совсем небольшая глава с исходником простой операционной системы (в те годы их часто называли «мониторами»), написанной на ассемблере PDP-11.

Теория

Первая книга, которую я хочу упомянуть — «Наука программирования» (автор Д.Грис). Это, фактически, адаптация знаменитой «Дисциплины программирования» (автор Э.Дейкстра). Дейкстра предложил методику доказательства правильности алгоритмов и программ с использованием аппарата математической логики и продемонстрировал эту методику в своей книге на ряде впечатляющих и нетривиальных примеров (например, построение выпуклой оболочки), перемежающихся пространными и крайне интересными рассуждениями. Фактически, Дейкстра попытался сделать больше, чем следует из названия его книги — он попытался создать философию программирования. Почитайте сами и решите — так ли это или я заблуждаюсь.

Книга Гриса на такие высоты не претендует; зато она представляет собой систематический курс построения доказательств правильности алгоритмов и программ. Книга Гриса более техническая, но и более подробная. Любой алгоритм/процедура/функция — рассматривается как теорема, которую необходимо доказать посредством формальных логических выводов. Если такой вывод возможен — теорема (и, следовательно, алгоритм) правильна. В противном случае — увы. Никаких особенных требований к читателю книга не предъявляет: все, что необходимо излагается в ней самой. Книга захватывает, особенно если читателю удается «настроиться на волну» и «попасть в поток». Чтение не самое простое, но вполне доступное. Кроме того, в книге много упражнений как технического, так и творческого характера.

Следующая книга, о которой я хочу упомянуть — это «Математическая логика и автоматическое доказательство теорем» (авторы Ч.Чень и Р.Ли). Книга вышла в серьезной серии «Математическая логика и основания математики», что показывает ее немалый уровень сложности. Вся книга посвящена доказательству теорем методом резолюции (Ж.Эрбран и позже Дж.Робинсон). Теории немало, впрочем, не такой уж страшной. Требования к подготовке читателя тут уже повыше, чем в книге Д.Гриса, но при известном упорстве и усидчивости книга вполне доступна. Практическое значение этой книги я не могу оценить, но для развития навыков математических рассуждений — она очень ценна.

Конечно, нельзя не упомянуть о «нашем все» — «Искусстве программирования» (автор Д.Кнут, кто же еще). Признаюсь, что второй и третий тома я только листал, но не погружался. Математическое введение из первого тома я наскоро просмотрел, а затем приступил к изучению ассемблера компьютера MIX. Вот тут мне было реально тяжело. После СМ-4 (PDP-11) MIX казался настолько неуклюжим, допотопным, избыточным, что мне стоило большого труда преодолеть это препятствие (и то, только потому, что мне было интересно разобраться с интерпретатором MIX, написанном на самом MIX). Зато вторая глава, посвященная структурам данных мне, как говорится, «зашла» и я периодически заглядываю в нее.

Языки программирования

Начну с классики на все времена. Это, прежде всего, «Язык программирования Си» (Б.Керниган и Д.Ритчи). Тут мне комментировать нечего.

Далее, «Систематическое программирование» и, разумеется, «Алгоритмы + структуры данных = программы» (автор обеих книг Н.Вирт) (для второй книги я имею в виду издание 1985 года; последующие были значительно беднее). Ясность слога, изящество программ, широта рассматриваемых тем (включая компилятор простого языка высокого уровня); я, честно говоря, до сих пор в восторге от этих книг. Можно было почитать теорию у Д.Кнута и тут же поискать реализацию у Н.Вирта — очень продуктивно и понятно.

Сразу же упомяну небольшую, но очень изящно написанную книгу «Программирование на языке ПАСКАЛЬ» (автор О.Перминов). После книг самого Н.Вирта это, пожалуй, лучшее изложение языка программирования Pascal из тех, что я встречал.

Теперь — совсем неожиданная книга: «Программирование на языке Пролог» (авторы У.Клоксин и К.Меллиш). Я упоминал в первой статье о том, что в начале 90-х язык Prolog был очень популярен и эта книга служила каноническим его описанием. Причем, описанием подробным, местами — дотошным, с массой примеров и упражнений.

Компиляторы

Да‑да, был такой «грех» — я пробовал писать компиляторы (а кто не пробовал!). Тут выбор книг был небольшой, но отличный. Прежде всего, книга уже упоминавшегося Д.Гриса «Конструирование компиляторов для цифровых вычислительных машин». После небольшой теории следовал ряд глав, посвященных основным частям компиляторов: лексический анализатор, синтаксический анализатор и, конечно, генератор кода. Очень подробно изложение, с большим количеством примеров. Долгое время книга Д.Гриса оставалась единственным столь подробным и ориентированным на практику руководством (знаменитая «книга дракона» была переведена значительно позже, а двухтомник «Теория синтаксического анализа, перевода и компиляции» А.Ахо и Дж.Ульмана был книгой чересчур теоретической, хотя и единственной в своем роде по сию пору).
Другая книга, которую я вспоминаю с благодарностью — «Теоретические основы проектирования компиляторов» (авторы Ф.Льюис, Д.Розенкранц и Р.Стирнз). Теория в книге излагалась весьма неформально, зато в мельчайших деталях рассматривалось построение компилятора примитивного варианта Basic с использованием различных методов, что иллюстрировалось прекрасными рисунками, диаграммами и таблицами. Книга внушала почтение своей толщиной, но была написана ясно и интересно.

И напоследок

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

  • «Язык ФОРТ и его реализации» (авторы С.Баранов и Н.Ноздрунов)

  • «Язык программирования Форт» (авторы М.Келли и Н.Спайс)

  • «Введение в логическое программирование» (автор К.Хоггер)

  • «Функциональное программирование. Применение и реализация» (автор П.Хендерсон)

  • «Взаимодействующие последовательные процессы» (автор Ч.Хоар)

  • «Языки программирования: разработка и реализация» (автор Т.Пратт; мне было доступно издание 1979 г.)

Вот, кажется, и все. Хороших вам книг, друзья, и — главное — времени на их чтение!

Комментарии (12)


  1. Turbo_Pascal_55
    19.03.2024 12:38
    +2

    >> После книг самого Н.Вирта это, пожалуй, лучшее изложение языка программирования Pascal из тех, что я встречал.

    А как же Фаронов?


    1. atues Автор
      19.03.2024 12:38
      +1

      Книги В.Фаронова хороши, но они были посвящены определенной реализации - Turbo Pascal. Поэтому я их и не включал в свой список