Совершенный код стив макконнелл краткое содержание

Обновлено: 05.07.2024

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

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

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

Часть II Высококачественный код

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

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

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

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

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

Часть III Переменные

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

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

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

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

Часть IV Операторы

14 Организация последовательного кода 338
14.1. Операторы, следующие в определенном порядке 338
14.2. Операторы, следующие в произвольном порядке 342
15 Условные операторы 346
15.1. Операторы if 346
15.2. Операторы case 353

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

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

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

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

Часть V Усовершенствование кода

20 Качество ПО 456
20.1. Характеристики качества ПО 456
20.2. Методики повышения качества ПО 459
20.3. Относительная эффективность
методик контроля качества ПО 462
20.4. Когда выполнять контроль качества ПО 466
20.5. Главный Закон Контроля Качества ПО 467
21 Совместное конструирование 471
21.1. Обзор методик совместной разработки ПО 472
21.2. Парное программирование 475
21.3. Формальные инспекции 477
21.4. Другие методики совместной разработки ПО 484
21.5. Сравнение методик совместного конструирования 487

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

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

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

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

Часть VI Системные вопросы

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

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

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

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

Часть VII Мастерство программирования

31 Форматирование и стиль 712
31.1. Основные принципы форматирования 713
31.2. Способы форматирования 720
31.3. Стили форматирования 721

31.4. Форматирование управляющих структур 728
31.5. Форматирование отдельных операторов 736
31.6. Размещение комментариев 747
31.7. Размещение методов 750
31.8. Форматирование классов 752

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

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

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

35 Где искать дополнительную информацию 834
35.1. Информация о конструировании ПО 835
35.2. Не связанные с конструированием темы 836
35.3. Периодические издания 838
35.4. Список литературы для разработчика ПО 839
35.5. Профессиональные ассоциации 841
Библиография 842
Предметный указатель 863
Об авторе 868

Совершенный код, С. Макконнелл - рейтинг книги по отзывам читателей, краткое содержание


Автор:
Категория:

Компьютеры и интернет

О книге

Краткое содержание

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


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

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

Первое на что вы обратите своё внимание — это объём книги, почти 900 страниц. И тут можно попасть в ловушку, пусть вы читаете по 50 страниц в день, то вы решите, что делов всего на 900/50 = 18 дней, но на самом деле это будет скорее всего не так. Стив рассказывает о разных вещах, как о непосредственном кодировании, так и об архитектуре , стиле, общении внутри команды и многом другом. Плотность информации в книги довольно велика, плюс ко всему на многих страницах есть ссылки ведущие на сайт автора с дополнительным материалом, а в конце каждой главы есть ссылки на рекомендуемую литературу (сложно представить сколько автор провёл времени изучая её, при этом оставаясь действительным разработчиком).

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

Другой принцип — никогда не следуйте слепо тем или иным требованиям. Одна из простых причин — требования и правила могли устареть, ваш монитор может вместить больше 80 символов в строке. Из этого же принципа следует другой, старайтесь не делать поспешных выводов до тех пор, пока не измерите так ли это хорошо на самом деле. То что кажется удобным — может отбирать много времени (например красивые или избыточные комментарии). То что кажется хитрым — может быть сложным и на самом деле вы не совсем понимаете что делаете. Вам кажется что ваш код быстр, но компилятор может делать эту работу куда лучше вас, и люди, которые занимаются разработкой компиляторов уже решили вашу проблему, а вы по-прежнему пишите не читаемый код.

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

Ещё в книге поднимается вопрос о том, что просто годы программирования не делают из вас хорошего разработчика, вы можете все 3-5-10-15-50 лет делать одно и тоже. Поэтому решение всегда остается за вами хотите ли вы стать лучше, узнать как работают другие, попробовать что-то новое, посмотреть на себя и свою работу с другой стороны.

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

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

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

Советую книгу как начинающим, так и опытным разработчикам.

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

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

Могу оценить с позиции человека, который занимается front-end разработкой. Будет ли она полезна таким же, как я? Да, будет, несомненно. Но слово 'javascript' в ней встречается буквально единожды. Примеры преимущественно на С++ и Visual Basic. В деталях синтаксис будет незнаком, но общий смысл уловить не сложно. На самом деле это даже довольно познавательно, вот так взять и мельком посмотреть на синтаксис других языков, когда на них не писал, узнать про типы данных, которых в js и популярном php, скажем, нет. Лично мне книга пришлась полезной на процентов 80, остальные 20 -- это те самые узкие знания и сведения. А вообще книга про общие вещи. В начале она может показаться нудной. Но это не так. Речь идет о серьезных вещах, поэтому шутить через слово было бы слишком. Но юмор присутствует, в середине его чуть больше. Читать в целом приятно. В отзывах пишут, что книга не для новичков. Это неправда. Можно читать не будучи знакомым с программированием вообще, и как минимум, 50% книги будет полезной.

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

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

В книге почти нет информации о некоторых современных инструментах, решениях, концепциях, т.к. писалась книга в 2004-м году, но при этом почти все, что описано в книге имеет разную степень актуальности и по сегодняшний день. Не думайте, что вы найдете в ней упоминания или примеры чего-либо на JavaScript, PHP и подобных современных язках (в книге используются больше C/C++ и Visual Basic), но от этого материал не становится менее актуальным или ценным.

Читайте также: