Обучение программированию обычно связывают с овладением приемами написания текстов на том или ином языке программирования. По существу это равносильно ремесленным навыкам перевода с алгоритмического языка на язык программирования. Но даже беглого взгляда на проблемы использования программ достаточно, чтобы обратить внимание на предъявляемые к ним требования, без удовлетворения которых не достичь эффективности в управлении компьютерами. Брайан Керниган и Роб Пайк, авторы книги «Практика программирования», предлагаемой вниманию читателей, считают, что при написании программ необходим следующий подход: соблюдение принципа простоты, т. е. программа должна быть краткой и удобной для доработки; ясности, гарантирующей, что ни у программиста при чтении программы, ни у компьютера при ее исполнении не должно возникать сомнений и двусмысленности; общности, заключающейся в способности программы правильно реагировать на изменение ситуаций в широком диапазоне и при этом адаптироваться к новой обстановке; программа должна служить автоматизации, освобождающей человека от трудоемких рутинных операций. «Практика программирования» — книга, в которой авторы рассматривают искусство программирования — на разных языках и в диапазоне от текста, описывающего алгоритмы и структуры данных, до архитектуры, включая отладку программ, тестирование и повышение быстродействия, — как совокупность универсальных инженерных концепций, независимых от конкретного языка, операционной системы или среды программирования.

Б. Керниган, Р. Пайк Практика программирования М.: Издательский дом «Вильямс». 2004, 288 с.: ил.

Данный труд свидетельствует о большом опыте авторов в области программирования, и это отражено не только в том, что настоящее издание является переводом восьмого американского, но в этом можно убедиться, обнаружив множество других книг тех же авторов в списках рекомендуемой литературы практически после каждой главы. Приятным обстоятельством является проверка авторами для русского издания всех включенных в него примеров. Коды, приведенные в книге, были протестированы в пяти-шести программных средах, их электронная форма доступна на сайте http://tpop.awl.com, посвященном книге.

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

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

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

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

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

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

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

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

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

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