ОПЫТ

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

1. Бек К. Экстремальное программирование. СПб.: Питер, 2002. - 224 с.

2. Брукс Ф. Мифический человеко-месяц, или Как создаются программные системы. СПб.: Символ-Плюс, 2001. - 304 с.

3. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на С++. 2-е изд. М.: Бином. СПб.: Невский диалект, 2000. - 560 с.

4. Вирт Н. Алгоритмы и структуры данных. 2-е изд. СПб: Невский Диалект, 2001. - 352 с.

5. Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. СПб.: Питер, 2001. - 368 с.

6. Коберн А. Быстрая разработка программного обеспечения. М.: Лори, 2002. - 314 с.

7. Фаулер М. Рефакторинг: улучшение существующего кода. СПб.: Символ-Плюс, 2003. - 432 с.

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

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

В жизни неизбежно приходится переходить от написания небольших курсовых программ к разработке и поддержке крупных компьютерных систем. И тогда уже знаний основ того или иного языка программирования явно не хватает. Проблему отлично раскрывает Фредерик Брукс в монографии "Мифический человеко-месяц, или Как создаются программные системы", описывая бесценный опыт создания операционной системы OS/360. Адресованная разработчикам и менеджерам проектов книга Алистера Коберна "Быстрая разработка программного обеспечения" создание ПО уподобляет игре, где игроки должны быть восприимчивы к разным методологиям и сосредоточены на достижении высококачественного результата за короткий промежуток времени.

Сегодня много разговоров ведется о проектах в открытых исходных текстах (www.opensource.org) и их влиянии на компьютерную экономику. При этом не секрет, что подход к таким работам нередко отвечает принципу "экстремального программирования" (www.xprogramming.com) - набору практик для небольших и средних команд разработчиков, занимающихся созданием ПО в условиях неясных или быстро меняющихся требований. Инициатор данной методологии Кент Бек в простой и доступной форме описывает ее в книге "Экстремальное программирование".

Существует несколько подходов к написанию программ: процедурный, функциональный, объектно-ориентированный, логический. Бизнес-приложения преимущественно создаются с использованием объектно-ориентированных языков программирования. Выход в свет издания Гради Буча "Объектно-ориентированный анализ и проектирование с примерами приложений на С++" стал знаменательным событием в истории становления объектной технологии и способствовал ее превращению в практическую методологию разработки программных продуктов. Напомним, что чуть позже Буч участвовал в разработке унифицированной нотации моделирования UML (www.uml.org), а также в создании небезызвестной компании Rational (российским пользователям хорошо знаком ее продукт Rational Rose), которая в настоящий момент принадлежит корпорации IBM.

Проектирование объектно-ориентированных программ - нелегкое дело, а если их нужно использовать повторно, то все становится еще сложнее. Дизайн должен, с одной стороны, соответствовать решаемой задаче, а с другой - быть общим, чтобы удалось учесть все требования - как сегодняшние, так и будущие. Нужно немало времени, чтобы самостоятельно определиться, что такое удачная объектно-ориентированная архитектура. Опытному разработчику понятно, что нет смысла обдумывать каждую новую задачу с нуля. Вместо этого он старается повторно использовать те решения, которые оказались удачными в прошлом. Эти подходы были проанализированы и выделены в так называемые паттерны проектирования в труде группы авторов "Приемы объектно-ориентированного проектирования. Паттерны проектирования". С выходом этой монографии термин "паттерн" стал широко использоваться в программировании.

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

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

Версия для печати