Сообщений 41    Оценка 488        Оценить  
Система Orphus

Совершенный код.

Практическое руководство по разработке программного обеспечения

Автор: Стив Макконнелл
Издательство: Русская Редакция, Питер, 2005
896 страниц

Материал предоставили: Алексей Кирюшкин
Илья Рыженков
Найти в магазинах
Купить в Books.Ru
Купить в Болеро (558 руб.)
Купить в My-Shop.ru (513 руб.)

Аннотация

Отзывы
Содержание
Предисловие
Комментарии

Аннотация

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

Отзывы

"Это просто самая лучшая книга по конструированию ПО из всех, что когда-либо попадались мне в руки. Каждый разработчик должен иметь ее и перечитывать от корки до корки каждый год. Я ежегодно перечитываю ее на протяжении вот уже девяти лет, и все еще узнаю много нового!"
Джон Роббинс, автор книги "Debugging Applications for Microsoft .NET and Microsoft Windows"

"Современное ПО должно быть надежным и гибким, а создание защищенного кода начинается с дисциплинированного конструирования программы. За десять лет так и не появилось лучшего руководства по этой теме, чем эта книга."
Майкл Ховард, специалист по защите ПО, корпорация Microsoft; один из авторов книги "Writing Secure Code"

"Новичок вы или профессионал - эта книга научит вас лучшим подходам к программированию"
Джеффри Рихтер

Содержание

Содержание
Предисловие
Благодарности
Контрольные списки

ЧАСТЬ I ОСНОВЫ РАЗРАБОТКИ ПО

1 Добро пожаловать в мир конструирования ПО!
1.1. Что такое конструирование ПО?
1.2. Почему конструирование ПО так важно?
1.3. Как читать эту книгу

2 Метафоры, позволяющие лучше понять разработку ПО
2.1. Важность метафор
2.2. Как использовать метафоры?
2.3. Популярные метафоры, характеризующие разработку ПО

3 Семь раз отмерь, один раз отрежь: предварительные условия
3.1. Важность выполнения предварительных условий
3.2. Определите тип ПО, над которым вы работаете
3.3. Предварительные условия, связанные с определением проблемы
3.4. Предварительные условия, связанные с выработкой требований
3.5. Предварительные условия, связанные с разработкой архитектуры
3.6. Сколько времени следует посвятить выполнению предварительных условий?

4 Основные решения, которые приходится принимать при конструировании
4.1. Выбор языка программирования
4.2. Конвенции программирования
4.3. Волны развития технологий
4.4. Выбор основных методик конструирования

ЧАСТЬ II ВЫСОКОКАЧЕСТВЕННЫЙ КОД

5 Проектирование при конструировании
5.1. Проблемы, связанные с проектированием ПО
5.2. Основные концепции проектирования
5.3. Компоненты проектирования: эвристические принципы
5.4. Методики проектирования
5.5. Комментарии по поводу популярных методологий

6 Классы
6.1. Основы классов: абстрактные типы данных
6.2. Качественные интерфейсы классов
6.3. Вопросы проектирования и реализации
6.4. Разумные причины создания классов
6.5. Аспекты, специфические для языков
6.6. Следующий уровень: пакеты классов

7 Высококачественные методы
7.1. Разумные причины создания методов
7.2. Проектирование на уровне методов
7.3. Удачные имена методов
7.4. Насколько объемным может быть метод?
7.5. Советы по использованию параметров методов
7.6. Отдельные соображения по использованию функций
7.7. Методы-макросы и встраиваемые методы

8 Защитное программирование
8.1. Защита программы от неправильных входных данных
8.2. Утверждения
8.3. Способы обработки ошибок
8.4. Исключения
8.5. Изоляция повреждений, вызванных ошибками
8.6. Отладочные средства
8.7. Доля защитного программирования в промышленной версии
8.8. Защита от защитного программирования

9 Процесс программирования с псевдокодом
9.1. Этапы создания классов и методов
9.2. Псевдокод для профи
9.3. Конструирование методов с использованием ППП
9.4. Альтернативы ППП

ЧАСТЬ III ПЕРЕМЕННЫЕ

10 Общие принципы использования переменных
10.1. Что вы знаете о данных?
10.2. Грамотное объявление переменных
10.3. Принципы инициализации переменных
10.4. Область видимости
10.5. Персистентность
10.6. Время связывания
10.7. Связь между типами данных и управляющими структурами
10.8. Единственность цели каждой переменной

11 Сила имен переменных
11.1. Общие принципы выбора имен переменных
11.2. Именование конкретных типов данных
11.3. Сила конвенций именования
11.4. Неформальные конвенции именования
11.5. Стандартизованные префиксы
11.6. Грамотное сокращение имен переменных
11.7. Имена, которых следует избегать

12 Основные типы данных
12.1. Числа в общем
12.2. Целые числа
12.3. Числа с плавающей запятой
12.4. Символы и строки
12.5. Логические переменные
12.6. Перечислимые типы
12.7. Именованные константы
12.8. Массивы
12.9. Создание собственных типов данных (псевдонимы)

3 Нестандартные типы данных
13.1. Структуры
13.2. Указатели
13.3. Глобальные данные


ЧАСТЬ IV ОПЕРАТОРЫ


14 Организация последовательного кода
14.1. Операторы, следующие в определенном порядке
14.2. Операторы, следующие в произвольном порядке

15 Условные операторы
15.1. Операторы if
15.2. Операторы case

16 Циклы
16.1. Выбор типа цикла
16.2. Управление циклом
16.3. Простое создание цикла - изнутри наружу
16.4. Соответствие между циклами и массивами

17 Нестандартные управляющие структуры
17.1. Множественные возвраты из метода
17.2. Рекурсия
17.3. Оператор goto
17.4. Перспективы нестандартных управляющих структур

18 Табличные методы
18.1. Основные вопросы применения табличных методов
18.2. Таблицы с прямым доступом
18.3. Таблицы с индексированным доступом
18.4. Таблицы со ступенчатым доступом
18.5. Другие примеры табличного поиска

19 Общие вопросы управления
19.1. Логические выражения
19.2. Составные операторы (блоки)
19.3. Пустые выражения
19.4. Укрощение опасно глубокой вложенности
19.5. Основа программирования: структурное программирование
19.6. Управляющие структуры и сложность

ЧАСТЬ V УСОВЕРШЕНСТВОВАНИЕ КОДА

20 Качество ПО
20.1. Характеристики качества ПО
20.2. Методики повышения качества ПО
20.3. Относительная эффективность методик контроля качества ПО
20.4. Когда выполнять контроль качества ПО?
20.5. Главный Закон Контроля Качества ПО

21 Совместное конструирование
21.1. Обзор методик совместной разработки ПО
21.2. Парное программирование
21.3. Формальные инспекции
21.4. Другие методики совместной разработки ПО
21.5. Сравнение методик совместного конструирования

22 Тестирование, выполняемое разработчиками
22.1. Тестирование, выполняемое разработчиками, и качество ПО
22.2. Рекомендуемый подход к тестированию, выполняемому разработчиками
22.3. Приемы тестирования
22.4. Типичные ошибки
22.5. Инструменты тестирования
22.6. Оптимизация процесса тестирования
22.7. Протоколы тестирования

23 Отладка
23.1. Общие вопросы отладки
23.2. Поиск дефекта
23.3. Устранение дефекта
23.4. Психологические аспекты отладки
23.5. Инструменты отладки - очевидные и не очень

24 Рефакторинг
24.1. Виды эволюции ПО
24.2. Введение в рефакторинг
24.3. Отдельные виды рефакторинга
24.4. Безопасный рефакторинг
24.5. Стратегии рефакторинга

25 Стратегии оптимизации кода
25.1. Общее обсуждение производительности ПО
25.2. Введение в оптимизацию кода
25.3. Где искать жир и патоку?
25.4. Оценка производительности
25.5. Итерация
25.6. Подход к оптимизации кода: резюме

26 Методики оптимизации кода
26.1. Логика
26.2. Циклы
26.3. Изменения типов данных
26.4. Выражения
26.5. Методы
26.6. Переписывание кода на низкоуровневом языке
26.7. Если что-то одно изменяется, что-то другое всегда остается постоянным

ЧАСТЬ VI СИСТЕМНЫЕ ВОПРОСЫ

27 Как размер программы влияет на конструирование
27.1. Взаимодействие и размер
27.2. Диапазон размеров проектов
27.3. Влияние размера проекта на возникновение ошибок
27.4. Влияние размера проекта на производительность
27.5. Влияние размера проекта на процесс разработки

28 Управление конструированием
28.1. Поощрение хорошего кодирования
28.2. Управление конфигурацией
28.3. Оценка графика конструирования
28.4. Измерения
28.5. Гуманное отношение к программистам
28.6. Управление менеджером

29 Интеграция
29.1. Важность выбора подхода к интеграции
29.2. Частота интеграции - поэтапная или инкрементная?
29.3. Стратегии инкрементной интеграции
29.4. Ежедневная сборка и дымовые тесты

30 Инструменты программирования
30.1. Инструменты для проектирования
30.2. Инструменты для работы с исходным кодом
30.3. Инструменты для работы с исполняемым кодом
30.4. Инструменты и среды
30.5. Создание собственного программного инструментария
30.6. Волшебная страна инструментальных средств

ЧАСТЬ VII МАСТЕРСТВО ПРОГРАММИРОВАНИЯ

31 Форматирование и стиль
31.1. Основные принципы форматирования
31.2. Способы форматирования
31.3. Стили форматирования
31.4. Форматирование управляющих структур
31.5. Форматирование отдельных операторов
31.6. Размещение комментариев
31.7. Размещение методов
31.8. Форматирование классов

32 Самодокументирующийся код
32.1. Внешняя документация
32.2. Стиль программирования как вид документации
32.3. Комментировать или не комментировать?
32.4. Советы по эффективному комментированию
32.5. Методики комментирования
32.6. Стандарты IEEE

33 Личность
33.1. Причем тут характер?
33.2. Интеллект и скромность
33.3. Любопытство
33.4. Профессиональная честность
33.5. Общение и сотрудничество
33.6. Творчество и дисциплина
33.7. Лень
33.8. Свойства, которые менее важны, чем кажется
33.9. Привычки

34 Основы мастерства
34.1. Боритесь со сложностью
34.2. Анализируйте процесс разработки
34.3. Пишите программы в первую очередь для людей и лишь во вторую - для компьютеров
34.4. Программируйте с использованием языка, а не на языке
34.5. Концентрируйте внимание с помощью соглашений
34.6. Программируйте в терминах проблемной области
34.7. Опасайтесь падающих камней
34.8. Итерируйте, итерируйте и итерируйте
34.9. И да отделена будет религия от разработки ПО

35 Где искать дополнительную информацию
35.1. Информация о конструировании ПО
35.2. Не связанные с конструированием темы
35.3. Периодические издания
35.4. Список литературы для разработчика ПО
35.5. Профессиональные ассоциации

Библиография
Предметный указатель
Об авторе

Предисловие

Стив Макконнелл

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

Хотя передовые методики разработки ПО в последние годы быстро развивались, общепринятые практически стояли на месте. Многие программы все еще полны ошибок, поставляются с опозданием и не укладываются в бюджет, а многие не отвечают требованиям пользователей. Ученые обнаружили эффективные методики, устраняющие большинство проблем, которые отравляют нашу жизнь с 1970-х годов. Однако из-за того, что эти методики редко покидают страницы узкоспециализированных технических изданий, в большинстве компаний по разработке ПО они еще не используются. Установлено, что для широкого распространения исследовательских разработок обычно требуется от 5 до 15 и более лет (Raghavan and Chand, 1989; Rogers, 1995; Parnas, 1999). Данная книга призвана ускорить этот процесс и сделать важные открытия доступными средним программистам.

КОМУ СЛЕДУЕТ ПРОЧИТАТЬ ЭТУ КНИГУ?

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

Опытные программисты

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

Технические лидеры

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

Программисты-самоучки

Если вы не имеете специального образования, вы не одиноки. Ежегодно программистами становятся около 50000 человек (BLS, 2004, Hecker 2004), однако число дипломов, вручаемых ежегодно в нашей отрасли, составляет лишь около 35000 (NCES, 2002). Легко прийти к выводу, что многие программисты изучают разработку ПО самостоятельно. Программисты-самоучки встречаются среди инженеров, бухгалтеров, ученых, преподавателей, владельцев малого бизнеса и представителей других профессий, которые занимаются программированием в рамках своей работы, но не всегда считают себя программистами. Каким бы ни было ваше программистское образование, в этом руководстве вы найдете информацию об эффективных методиках программирования.

Студенты

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

ГДЕ ЕЩЕ МОЖНО НАЙТИ ЭТУ ИНФОРМАЦИЮ?

В этой книге собраны методики конструирования из самых разнообразных источников. Многие знания о конструировании не только разрозненны, но и годами не попадают в печатные издания (Hildebrand, 1989; МсСоппеll, 1997а). В эффективных, мощных методиках программирования, используемых лучшими программистами, нет ничего мистического, однако в повседневной череде неотложных задач очень немногие эксперты выкраивают время на то, чтобы поделиться своим опытом. Таким образом, программистам трудно найти хороший источник информации о программировании.

Методики, описанные в этой книге, заполняют пустоту, остающуюся в знаниях программистов после прочтения вводных и более серьезных учебников по программированию. Что читать человеку, изучившему книги типа "Introduction to Java", "Advanced Java" и "Advanced Advanced Java" и желающему узнать о программировании больше? Вы можете читать книги о процессорах Intel или Motorola, функциях ОС Microsoft Windows или Linux или о другом языке программирования - невозможно эффективно программировать, не имея хорошего представления о таких деталях. Но эта книга относится к числу тех немногих, в которых обсуждается программирование как таковое. Наибольшую пользу приносят те методики, которые можно использовать независимо от среды или языка. В других источниках такие методики обычно игнорируются, и именно поэтому я сосредоточился на них.

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

ГЛАВНЫЕ ДОСТОИНСТВА ЭТОЙ КНИГИ

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

Полное руководство по конструированию ПО.

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

Готовые к использованию контрольные списки

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

Самая актуальная информация

В этом руководстве вы найдете описания ряда самых современных методик, многие из которых еще не стали общепринятыми. Так как эта книга основана и на практике, и на исследованиях, рассмотренные в ней методики будут полезны еще многие годы.

Более общий взгляд на разработку ПО

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

Объективность

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

Независимость от языка

Описанные мной методики позволяют выжать максимум почти из любого языка, будь то С++, С#, Java, Microsoft Visual Basic или другой похожий язык.

Многочисленные примеры кода

Эта книга содержит почти 500 примеров хорошего и плохого кода. Их так много потому, что лично я лучше всего учусь на примерах. Думаю, это относится и к другим программистам.

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

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

Доступ к другим источникам информации

В данном руководстве приводятся подробные сведения о конструировании ПО, но едва ли это последнее слово. В разделах "Дополнительные ресурсы" я указал другие книги и статьи, которые вы можете прочитать, если заинтересуетесь той или иной темой.

Web-caйт книги

Обновленные контрольные списки, списки книг и журнальных статей, Web-ссылки и другую информацию можно найти на Web-сайте http://сс2е.com для получения информации, связанной с "Code Complete, 2d ed.", введите в браузере сс2е.соm/ и четырехзначное число, пример которого показан слева. Читая книгу, вы много раз натолкнетесь на такие ссылки.

ЧТО ПОБУДИЛО МЕНЯ НАПИСАТЬ ЭТУ КНИГУ?

Необходимость руководств, отражающих знания об эффективных методиках разработки ПО, ясна всем членам сообщества разработчиков. Согласно отчету совета Computer Science and Technology Board максимальное повышение качества и продуктивности разработки ПО будет достигнуто благодаря систематизации, унификации и распространению существующих знаний об эффективных методиках разработки (CSTB, 1990; МсСоnnеll, 1997а). Совет пришел к выводу, что стратегия распространения этих знаний должна быть основана на концепции руководств по разработке ПО.

Тема конструирования игнорировалась

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

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

Конструирование важно

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

На конструирование кода обычно приходятся около 65% работы в небольших и 50% в средних проектах. Во время конструирования допускаются около 75% ошибок в небольших проектах и от 50 до 75% в средних и крупных. Очевидно, что любой процесс, связанный с такой долей ошибок, можно значительно улучшить (подробнее эти статистические данные рассматриваются в главе 27).

Некоторые авторы указывают, что, хотя ошибки конструирования и составляют высокий процент от общего числа ошибок, их обычно дешевле исправлять, чем ошибки в требованиях или архитектуре, поэтому они менее важны. Утверждение, что ошибки конструирования дешевле исправлять, верно, но вводит в заблуждение, потому что стоимость неисправленной ошибки конструирования может быть крайней высокой. Ученые обнаружили, что одними из самых дорогих ошибок в истории, приведшими к убыткам в сотни миллионов долларов, были мелкие ошибки кодирования (Weinberg, 1983; SEN, 1990). Невысокая стоимость исправления ошибок не подразумевает, что их исправление можно считать низкоприоритетной задачей.

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

Отсутствие похожих книг

Когда я начал подумывать об этой книге, я был уверен, что кто-то другой уже написал об эффективных методиках конструирования. Необходимость такой книги казалась очевидной. Но я обнаружил лишь несколько книг о конструировании, описывающих лишь некоторые его аспекты. Одни были написаны 15 или более лет назад и были основаны на относительно редких языках, таких как ALGOL, PL/I, Ratfor и Smalltalk. Другие были написаны профессорами, не работавшими над реальным кодом. Профессора писали о методиках, работающих в студенческих проектах, но часто не имели представления о том, как эти методики проявят себя в полномасштабных средах разработки. В третьих книгах авторы рекламировали новейшие методологии, игнорируя многие зрелые методики, эффективность которых прошла проверку временем.

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

К читателям

Я буду рад получить от вас вопросы по темам, обсуждаемым в этой книге, сообщения об обнаруженных ошибках, комментарии и предложения. для связи со мной используйте адрес stevemcc@coпstrux.com или мой Web-сайт http://www.stevemcconnell.com

Комментарии

Алексей Кирюшкин

Как только вы освоили свой первый язык программирования настолько, что справочник по ключевым словам языка перестал быть вашей настольной книгой, перед вами неизбежно должен был встать второй слой вопросов - оставить в теле функции 10 операторов return, или все-таки переписать ее так (как?), чтобы return был один? Почему все говорят, что goto - это плохо? Как быть, если ход программы зависит от значений одновременно нескольких переменных, а в описывающих эти зависимости if-else и switch-case уже сломали ноги все окрестные черти? Какой стиль форматирования кода наиболее полно отражает логическую структуру программы? Какие входные данные можно проверять только в отладочном режиме при помощи утверждений (ASSERT-ов), а какие еще и в релизе?

Прочтите Совершенный код и вы перестанете так вздрагивать при слове "грабли" :)

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

Подводя итог, можно сказать так - прочитайте Совершенный код и следуйте его рекомендациям, и вам скажут спасибо все, кто будет иметь дело с вашими программами.

Илья Рыженков

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

Мне не понравилась слегка "попсовая" манера изложения материала, которая, кажется, призвана сделать материал понятным не только программистам и техническим лидерам, но и менеджерам разных уровней. При этом у новичка может сложится ложное впечатление, что проектирование и конструирование - это как два байта переслать. С другой стороны объём информации настолько велик, что осилить эту книгу целиком можно только летом на даче, когда заняться больше не чем. Опытный программист при чтении этой книги скорее всего не раз подумает: "да-да, конечно, но мы-то знаем..."

Что очень хорошо, так это структура книги. Всё прекрасно рассортировано, даны перекрестные ссылки и ссылки на сайты, список литературы, отличное подробное оглавление. Это позволяет действительно использовать книгу как настольную, как источник тем для размышлений над своим кодом, как руководство к улучшению кода. Я бы советовал читать эту книгу следующим образом:

Приятного совершенствования кода!

    Сообщений 41    Оценка 488        Оценить