автор объявил «сокращение разрыва между знаниями гуру и лучших специалистов отрасли, с одной стороны, и общепринятыми методиками разработки коммерческого программного обеспечения — с другой», в частности, ускорение процесса доступности опыта исследовательских разработок средними программистами. Круг читателей книги должны составить опытные программисты, архитекторы систем, программисты-самоучки и студенты. Говоря о побудительных мотивах ее создания, автор подчеркивает — до сих пор проблемам конструирования кода в цикле разработки программного обеспечения не уделялось должного внимания и, как следствие, отсутствовали подобные книги.
Выбрав из всего жизненного цикла программного обеспечения лишь этап конструирования, автор представил его по следующим аспектам: основы разработки, создание высококачественного кода, обсуждение основных элементов программ (переменные и операторы), проблемы усовершенствования кода, системные вопросы (сложность программы и процесс конструирования, управление конструированием, интеграция и инструменты программирования) и мастерство программирования (вопросы форматирования и стиля, самодокументирования кода и проблемы психологии программиста). Практическая направленность книги является, несомненно, ее сильной стороной; в то же самое время приведенная в книге библиография содержит 20-страничный список работ, которые вполне могут послужить читателям стимулом для исследований.
Прежде всего, в книге дано толкование понятия «конструирование программного обеспечения» с точки зрения практики. Вообще говоря, между понятием «разработка программного обеспечения» и «конструирование» можно установить отношение синонимии. Однако автор несколько сужает предметную область конструирования, предполагая, что к конструированию переходят, уже имея определение проблемы.
Метафорический взгляд на процесс разработки программного обеспечения приводит автора к полезности моделирования на этапе конструирования, а практический подход к конструированию побуждает автора книги декларировать постоянное внимание к предварительным условиям разработки. Основу разработки, отнесенную к конструированию, образуют: выбор языка программирования, описаний конвенций (соглашений); учет волн развития технологий; выбор основных методик конструирования. Создание высококачественного кода, по мнению автора, требует проектного подхода, использования классов, высококачественных методов защиты и использование процессов программирования с псевдокодом.
Две части книги посвящены работе с переменными и операторами. Усовершенствование кода автор связывает с контролем качества разрабатываемого кода, а также с использованием совместного конструирования, тестирования, выполняемого разработчиком, и другими известными приемами, включая стратегии и методики оптимизации кода.
Рассмотрение системных вопросов Макконнеллом проведено на вербально иллюстративном уровне, что конечно от читателя, желающего получить практический выход потребует серьезных усилий. Дело в том, что количественные рекомендации автора книги не содержат в явном виде подобных отсылок методического характера. Необходимо отдать должное автору, выстроившему в книге систему перекрестных ссылок, которая после определенной работы может помочь пытливому читателю.
Завершает книгу раздел по мастерству программирования, содержащий материалы по стилю программирования и другим вопросам, в том числе по основам мастерства и методам поиска дополнительной информации.
Однако, следует отметить, что подобные работы в переводе не стоит издавать без научного редактирования российскими специалистами, которые могли бы указать соответствие с отечественными работами по данному направлению, а также сориентировали бы читателей-разработчиков в конкурентной среде. Наконец, хочу обратить внимание на то, что программистские школы в Москве, Санкт-Петербурге, Новосибирске и Ижевске весьма активно работают над анализом жизненного цикла программ и публикуют статьи и книги по этой проблематике, о которых полезно знать читателям Стива Макконнелла.
С. Макконнелл. Совершенный код, М.: Русская редакция, СПб.: «Питер». 2005. — 896 стр.: ил.