Почти век назад математики были озабочены построением общего фундамента своей науки, получившего название основания математики.
Программированию всего лишь полвека, но, похоже, бурное развитие информационных технологий, а вместе с ними инструментального программирования сформировало у многих специалистов, а вслед за ними и у обучающихся, несколько потребительское отношение к предмету. К сожалению, этот взгляд получал поддержку на рынке программных продуктов, когда программирование объявляли забавой на уровне сборки «Лего», а обучение ему подменяли штудированием различных «Руководств» по конкретным продуктам. Разумеется, есть достойные учебники по программированию, но это лишь приятное исключение. И вот появились изданные Институтом компьютерных исследований «Основания программирования», авторы которых Н.Н. Непейвода и И.Н. Скопин — представляют новосибирскую школу программирования.
Данное учебное пособие, по представлению его авторов, предназначено, в первую очередь, для тех, кто пришел в вуз, будучи уже знакомым с программированием и намерен стать ИТ-профессионалом. В книге предлагается база основных понятий, проработав которую, можно свободно ориентироваться в программировании, — в этом авторы видят главную цель своего пособия. Читателю не следует искать здесь возможности для тренинга; авторы адресовали его к разделам курсов, посвященным конкретным языкам программирования и алгоритмике, а в данной книге лишь привели ссылки на рекомендуемые учебники. И, как подчеркивается в авторском предисловии, языковые и алгоритмические аспекты программирования в данной книге «служат, в первую очередь, иллюстративным материалом».
Представленные в пособии задания для контроля усвоения материала не являются задачами с одним-единственным правильным ответом, что, по мнению авторов, поможет развитию критического мышления.
Пособие представляет собой объемный том из трех частей: базовые понятия, структуры программирования и методы программирования. Введение в систему понятий программирования включает описание языков и систем программирования, модель вычислений фон Неймана и представление традиционных языков, базовые конструкции языка; структуру вычислений и структуру текста программы, а также описание особенностей работы со значениями. Следующие главы этой части книги посвящены синтаксису, семантике и прагматике языка программирования, стилям программирования (авторы называют это «программированием с птичьего полета»), а также пониманию и модели жизненного цикла программного обеспечения.
В следующей части книги рассматриваются структуры программирования, к которым отнесены выражения, разветвления вычислений, циклические вычисления, подпрограммы, а также структуры данных. Заключительная часть описывает методы. Авторы начинают с методов программирования от состояний, называемых часто автоматными и далее рассматривают методы, основанные на рекурсиях и на объектно-ориентированном подходе. Затем обсуждаются сентенциальные методы, реализованные в языках Пролог и Рефал, функциональное программирование (например, язык LISP) и моделирование на базе языков GPSS, SIMSCRIPT и Simula.
Надеюсь, с интересом будет прочитана 16-я глава книги — Summing Up, написанная весьма эмоционально и с увлекающими философствованиями, однако ее подлинное предназначение состоит в том, чтобы сообщить читателям 25 комментариев, посвященных важным методологическим моментам из разных мест книги. В целом эти комментарии воспринимаются как полезная философия программиста-созидателя, а не рутинного кодировщика. Например: «... Разные стили программирования не сводимы друг к другу и к конкретному языку. Один и тот же стиль может быть реализован разными средствами».
Далеко не каждый студент или начинающий программист осилит эту книгу, но тот, кто найдет в себе силы справиться с этой задачей, будет способен в этой области на многое.
Н. Н. Непейвода, И. Н. Скопин, Основания программирования. Москва-Ижевск: Институт компьютерных исследований, 2003, 868 с., ил.