С. Лавров
Программирование. Математические основы, средства, теория
«БХВ-Петербург», 2001, 320 с.: ил.

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

Книга С. Лаврова выпущена в серии «Мастер. Учебное пособие», что и определило круг ее читателей. Автор - член-корреспондент РАН, человек, известный в отечественном программировании. Так, он занимался расчетами на ЭВМ орбит первых советских спутников, написал множество статей и книг по программированию, в том числе и по языку Лисп для серии «Библиотека программиста», выпускавшейся издательством «Наука» почти четверть века назад. Новая книга подготовлена на базе лекций, прочитанных им в 70-х — начале 80-х гг. на математико-механическом факультете ЛГУ, в которых автор преследовал цель научить студентов навыкам написания программ начиная от постановки задачи. В ней искусство программирования представлено метафорически в виде дома, фундамент которого — математические основы, стены — собственно сложившиеся в них понятия и конструкции, крыша — теория программирования, в которой следует искать ответы на вопросы, возникающие при исследовании результатов собственно программирования.

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

Во второй главе даются основные понятия и конструкции языков, что позволяет познакомиться с традиционными программистскими взглядами, чтобы глубже, а порой и правильнее разбираться в современных интерпретациях новых информационных технологий. Программы рассматриваются по отношению не только к данным, информации и языкам программирования, но и к описанию синтаксиса и семантики. В отдельных разделах этой главы приведены структуры данных и действий, т. е. говорится о переменных и способах их объявления, операциях и выражениях, операторах и структуре программы, работе со ссылками и т. п. Также представлены более сложные средства вроде процедур, алгоритмов над графами, файлов и операторов для работы с ними. Несомненный интерес вызывает раздел, где описаны, пусть и в импрессионистской манере, крупными мазками, стили программирования — функциональный и объектно-ориентированный. Приведенные там занимательные примеры помогают понять, почему этот раздел назван «Старые новые веяния».

Завершающая глава «Анализ свойств программ» вводит в теорию программирования, причем С. Лавров делает акцент на операторных схемах и указывает на то, что можно сделать с их использованием. Кроме того, представляет интерес формализация семантики языков программирования, в том числе денотационная семантика, дающая возможность по шагам построить семантику программы целиком и отдельных ее компонентов, что особенно важно на стадии отладки. Справедливости ради стоит обратить внимание на то, что автор, пожалуй, излишне скептически относится к возможности широкого распространения денотационной семантики в конкретном программировании. Впрочем, может быть, кто-нибудь попытается опровергнуть автора?

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