А.Е. Анисимов, В.В. Пупышев
Сборник заданий по основаниям программирования: Учебное пособие.
М.: Интернет-университет информационных технологий; БИНОМ. Лаборатория знаний, 2006. 348 с.: ил.

В многотомной серии «Основы информационных технологий», выпускаемой ИНТУИТ (Интернет-университетом информационных технологий), издана книга А. Анисимова и В. Пупышева «Сборник заданий по основаниям программирования». Авторы, преподаватели Удмуртского государственного университета, испытывают серьезное влияние главы школы программирования профессора Н.Н. Непейводы, поэтому данную работу можно рассматривать как практическое приложение к уже опубликованным в упомянутой серии книгам Н.Н. Непейводы «Стили и методы программирования» и И.В. Скопина «Основы менеджмента программных проектов». Наряду с этим ее можно предложить для тренировок молодым людям, пробующим свои силы в различных олимпиадах по программированию, так как один из авторов более десяти лет активно участвует в организации подобных соревнований в Удмуртии и обладает соответствующим интересным опытом. К тому же среди заданий приведено значительное количество олимпиадных задач, предлагавшихся в УдГУ, СПбИТМО. Некоторые из них можно обнаружить и в других олимпиадных ресурсах вроде http://colymp.da.ru, http://algolist.manual.ru/olimp.

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

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

Книга построена в лучших традициях вузовского преподавания программирования, предполагающего не только обучение навыкам написания текста программы, но и учитывающего необходимость осмысления постановки задачи. Так, в первой главе «Введение в систему понятий программирования» авторы предлагают 55 задач, в которых требуется уделить значительное внимание именно пониманию того, что требуется запрограммировать.

На примере 51 задания предлагается рассмотреть вопросы синтаксиса, семантики и прагматики языка программирования.

Для обучения стилям программирования, или, как выражаются авторы, программированию с птичьего полета, предлагаются 39 заданий как из программистской практики, так и требующие усилий в обобщении многих практических шагов.

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

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

Еще в пяти главах «Сборника заданий» читатели знакомятся с 345 задачами, посвященными методам программирования. Основное внимание уделено автоматному программированию, методам, основанным на рекурсии, объектно-ориентированному подходу, сентенциальным методам (на основе языков ПРОЛОГ и РЕФАЛ), функциональному программированию и моделированию.

Наконец, в заключительной главе авторы приводят 188 заданий, предлагая выполнить их различными методами программирования. Если читатель достаточно овладел основами программирования, то работа над данной главой сулит ему немало удовольствия.

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

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