Руководство по стилю программирования и конструированию по
Скачать 7.6 Mb.
|
«Великолепное руководство по стилю программирования и конструированию ПО». Мартин Фаулер, автор книги «Refactoring» «Книга Стива Макконнелла… это быстрый путь к мудрому программированию… Его книги увлекательны, и вы никогда не забудете то, что он рассказывает, опираясь на свой с тру- дом полученный опыт». Джон Бентли, автор книги «Programming Pearls, 2d ed» «Это просто самая лучшая книга по конструированию ПО из всех, что когда-либо попада- лись мне в руки. Каждый разработчик должен иметь ее и перечитывать от корки до корки каждый год. Я ежегодно перечитываю ее на протяжении вот уже девяти лет и все еще уз- наю много нового!» Джон Роббинс, автор книги «Debugging Applications for Microsoft .NET and Microsoft Windows» «Современное ПО должно быть надежным и гибким, а создание защищенного кода начи- нается с дисциплинированного конструирования программы. За десять лет так и не по- явилось лучшего руководства по этой теме, чем эта книга. Майкл Ховард, специалист по защите ПО, корпорация Microsoft; один из авторов книги «Writing Secure Code» «Это исчерпывающее исследование тактических аспектов создания хорошо спроектиро- ванных программ. Книга Макконнелла охватывает такие разные темы, как архитектура, стандарты кодирования, тестирование, интеграция и суть разработки ПО». Гради Буч, автор книги «Object Solutions» «Авторитетная энциклопедия для разработчиков ПО — вот что такое „Совершенный код“. Подзаголовок „Практическое руководство по конструированию ПО“ характеризует эту 850- страничную книгу абсолютно точно. Как утверждает автор, она призвана сократить раз- рыв между знаниями „гуру и лучших специалистов отрасли“ (например, Йордона и Прес- смана) и общепринятыми методиками разработки коммерческого ПО, а также „помочь создавать более качественные программы за меньшее время с меньшей головной болью“… Эту книгу следует иметь каждому разработчику. Ее стиль и содержание в высшей степени практичны». Крис Лузли, автор книги «High-Performance Client/Server» «Полная плодотворных идей книга Макконнелла „Совершенный код“ — это одна из са- мых понятных работ, посвященных подробному обсуждению методик разработки ПО…» Эрик Бетке, автор книги «Game Development and Production» «Кладезь полезной информации и рекомендаций по общим вопросам проектирования и разработки хорошего ПО». Джон Демпстер, автор книги «The Laboratory Computer: A Practical Guide for Physiologists and Neuroscientists» «Если вы действительно хотите улучшить навыки программирования, обязательно прочтите книгу „Совершенный код“ Стива Макконнелла». Джин Дж. Лаброссе, автор книги «Embedded Systems Building Blocks: Complete and Ready-To-Use Modules in C» «Стив Макконнелл написал одну из лучших книг по разработке ПО, не привязанных к конкретной среде…» Кеннет Розен, один из авторов книги «Unix: The Complete Reference» «Пару раз в поколение или около того появляются книги, обобщающие накопленный опыт и избавляющие вас от многих лет мучений… Не могу найти слов, чтобы адекватно опи- сать все великолепие этой книги. „Совершенный код“ — довольно жалкое название для такой превосходной работы». Джефф Дантеманн, журнал «PC Techniques» «Издательство Microsoft Press опубликовало то, что я считаю самой лучшей книгой по конст- руированию ПО. Эта книга должна занять место на книжной полке каждого программиста». Уоррен Кеуффель, журнал «Software Development» «Эту выдающуюся книгу следует прочесть каждому программисту». Т. Л. (Фрэнк) Паппас, журнал «Computer» «Если вы собираетесь стать профессиональным программистом, покупка этой книги, по- жалуй, станет самым мудрым вложением средств. Можете не читать этот обзор дальше — просто идите в магазин и купите ее. Как пишет сам Макконнелл, его целью было сокра- щение разрыва между знаниями гуру и общепринятыми методиками разработки коммер- ческого ПО… Удивительно, но ему это удалось». Ричард Матеосян, журнал «IEEE Micro» «„Совершенный код“ — обязательное чтение для всех… кто имеет отношение к разработ- ке ПО». Томми Ашер, журнал «C Users Journal» «Я вынужден сделать чуть более категоричное заявление, чем обычно, и рекомендовать книгу Стива Макконнелла „Совершенный код“ всем разработчикам без всяких оговорок… Если раньше во время работы я держал ближе всего к клавиатуре руководства по API, то теперь их место заняла книга Макконнелла». Джим Кайл, журнал «Windows Tech Journal» «Это лучшая книга по разработке ПО из всех, что я читал». Эдвард Кенворт, журнал «.EXE» «Эта книга заслуживает статуса классической, и ее в обязательном порядке должны про- честь все разработчики и те, кто ими управляет». Питер Райт, «Program Now» Посвящаю эту книгу своей жене Эшли, которая не имеет особого отношения к программированию, но настолько обогащает всю мою остальную жизнь, что я не могу выразить это в словах. Second Edition C O D E COMPLETE Steve McConnell Стив Макконнелл Совершенный К О Д 2010 М А С Т Е Р - К Л А С С УДК 004.45 ББК 32.973.26–018.2 М15 Макконнелл С. М15 Совершенный код. Мастер-класс / Пер. с англ. — М. : Издательство «Русская редакция», 2010. — 896 стр. : ил. ISBN 978-5-7502-0064-1 Более 10 лет первое издание этой книги считалось одним из лучших практических руководств по программированию. Сейчас эта книга полностью обновлена с учетом современных тенденций и технологий и дополнена сотнями новых примеров, ил- люстрирующих искусство и науку программирования. Опираясь на академические исследования, с одной стороны, и практический опыт коммерческих разработок ПО — с другой, автор синтезировал из самых эффективных методик и наиболее эффектив- ных принципов ясное прагматичное руководство. Каков бы ни был ваш профессио- нальный уровень, с какими бы средствами разработками вы ни работали, какова бы ни была сложность вашего проекта, в этой книге вы найдете нужную информацию, она заставит вас размышлять и поможет создать совершенный код. Книга состоит из 35 глав, предметного указателя и библиографии. УДК 004.45 ББК 32.973.26–018.2 © 2005-2012, Translation Russian Edition Publishers. Authorized Russian translation of the English edition of Code Complete, Second Edition, ISBN 9780735619678 © Steven C. McConnell. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. © 2005-2012, перевод ООО «Издательство «Русская редакция». Авторизованный перевод с английского на русский язык произведения Code Complete, Second Edition, ISBN 9780735619678 © Steven C. McConnell. Этот перевод оригинального издания публикуется и продается с разрешения O’Reilly Media, Inc., которая владеет или распоряжается всеми правами на его публикацию и продажу. © 2005-2012, оформление и подготовка к изданию, ООО «Издательство «Русская редакция». Microsoft, а также товарные знаки, перечисленные в списке, расположенном по адресу: http://www.microsoft.com/about/legal/en/us/IntellectualProperty/Trademarks/EN-US.aspx являются товарными знаками или охраняемыми товарными знаками корпорации Microsoft в США и/или других странах. Все другие товарные знаки являются собственностью соответствующих фирм. Все названия компаний, организаций и продуктов, а также имена лиц, используемые в примерах, вымышлены и не имеют никакого отношения к реальным компаниям, организациям, продуктам и лицам. Содержание VII Содержание Предисловие .................................................................................................................... XIII Благодарности ................................................................................................................ XIX Контрольные списки ...................................................................................................... XXI Часть I Основы разработки ПО 1 Добро пожаловать в мир конструирования ПО! .................................................... 2 1.1. Что такое конструирование ПО? ................................................................................................. 2 1.2. Почему конструирование ПО так важно? ........................................................................... 5 1.3. Как читать эту книгу ................................................................................................................................ 6 2 Метафоры, позволяющие лучше понять разработку ПО .................................... 8 2.1. Важность метафор ...................................................................................................................................... 8 2.2. Как использовать метафоры? ...................................................................................................... 10 2.3. Популярные метафоры, характеризующие разработку ПО ........................ 12 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 VIII Содержание 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 Содержание IX 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 X Содержание 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 Содержание XI 25.5. Итерация .................................................................................................................................................... 590 25.6. Подход к оптимизации кода: резюме ........................................................................... 591 26 Методики оптимизации кода ................................................................................ 595 26.1. Логика ........................................................................................................................................................... 596 26.2. Циклы ............................................................................................................................................................ 602 26.3. Изменения типов данных ......................................................................................................... 611 26.4. Выражения ............................................................................................................................................... 616 26.5. Методы ......................................................................................................................................................... 625 26.6. Переписывание кода на низкоуровневом языке ............................................... 626 26.7. Если что-то одно изменяется, что-то другое всегда остается постоянным ............................................................................................ 629 Часть 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 X I I Содержание 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 Предисловие Разрыв между самыми лучшими и средними методиками разработки ПО очень широк — вероятно, шире, чем в любой другой инженерной дисциплине. Средство распро- странения информации о хороших методиках сыграло бы весьма важную роль. Фред Брукс (Fred Brooks) Моей главной целью при написании этой книги было сокращение разрыва между знани- ями гуру и лучших специалистов отрасли, с одной стороны, и общепринятыми методика- ми разработки коммерческого ПО — с другой. Многие эффективные методики програм- мирования годами скрываются в журналах и научных работах, прежде чем становятся доступными программистской общественности. Хотя передовые методики разработки ПО в последние годы быстро развивались, общепри- нятые практически стояли на месте. Многие программы все еще полны ошибок, поставля- ются с опозданием и не укладываются в бюджет, а многие не отвечают требованиям пользо- вателей. Ученые обнаружили эффективные методики, устраняющие большинство проблем, которые отравляют нашу жизнь с 1970-х годов. Однако из-за того, что эти методики редко покидают страницы узкоспециализированных технических изданий, в большинстве ком- паний по разработке ПО они еще не используются. Установлено, что для широкого распро- странения исследовательских разработок обычно требуется от 5 до 15 и более лет (Raghavan and Chand, 1989; Rogers, 1995; Parnas, 1999). Данная книга призвана ускорить этот процесс и сделать важные открытия доступными средним программистам. Кому следует прочитать эту книгу? Исследования и опыт программирования, отраженные в этой книге, помогут вам созда- вать высококачественное ПО и выполнять свою работу быстрее и эффективнее. Прочи- тав ее, вы поймете, почему вы сталкивались с проблемами в прошлом, и узнаете, как избе- гать их в будущем. Описанные мной методики программирования помогут вам сохранять контроль над крупными проектами, а также успешно сопровождать и изменять ПО при изменении требований. Опытные программисты Эта книга окажется полезной опытным программистам, желающим получить всесторон- нее и удобное руководство по разработке ПО. Так как эта книга фокусируется на констру- ировании — самой известной части жизненного цикла ПО, — описанные в ней методики будут понятны и программистам, имеющим соответствующее образование, и программи- стам-самоучкам. Технические лидеры Многие технические лидеры используют первое издание этой книги для обучения менее опытных членов своих групп. Вы также можете использовать эту книгу для восполнения пробелов в своих знаниях. Если вы — опытный программист, то, наверное, согласитесь не со всеми моими выводами (обратное было бы странным), но, если вы прочитаете весь материал и обдумаете каждый поднятый вопрос, едва ли какая-то возникшая проблема конструирования окажется для вас новой. X I V Предисловие Программисты-самоучки Если вы не имеете специального образования, вы не одиноки. Ежегодно программистами становятся около 50 000 человек (BLS, 2004, Hecker 2004), однако число дипломов, вруча- емых ежегодно в нашей отрасли, составляет лишь около 35 000 (NCES, 2002). Легко прий- ти к выводу, что многие программисты изучают разработку ПО самостоятельно. Програм- мисты-самоучки встречаются среди инженеров, бухгалтеров, ученых, преподавателей, вла- дельцев малого бизнеса и представителей других профессий, которые занимаются про- граммированием в рамках своей работы, но не всегда считают себя программистами. Каким бы ни было ваше программистское образование, в этом руководстве вы найдете инфор- мацию об эффективных методиках программирования. Студенты В отличие от программистов, которые обладают опытом, но не могут похвастаться специ- альным обучением, недавние выпускники вузов часто имеют обширные теоретические знания, но плохо владеют практическими ноу-хау, связанными с созданием реальных программ. Передача практических навыков хорошего кодирования зачастую идет медленно, в риту- альных танцах архитекторов ПО, лидеров проектов, аналитиков и более опытных програм- мистов. Еще чаще эти навыки приобретаются программистами в результате собственных проб и ошибок. Эта книга — альтернатива традиционным неспешным интеллектуальным ритуалам. В ней собраны полезные советы и эффективные стратегии разработки, которые ранее можно было узнать главным образом только непосредственно у других людей. Это трамплин для студентов, переходящих из академической среды в профессиональную. Где еще можно найти эту информацию? В этой книге собраны методики конструирования из самых разнообразных источников. Многие знания о конструировании не только разрозненны, но и годами не попадают в печатные издания (Hildebrand, 1989; McConnell, 1997a). В эффективных, мощных методи- ках программирования, используемых лучшими программистами, нет ничего мистиче- ского, однако в повседневной череде неотложных задач очень немногие эксперты выкра- ивают время на то, чтобы поделиться своим опытом. Таким образом, программистам трудно найти хороший источник информации о программировании. Методики, описанные в этой книге, заполняют пустоту, остающуюся в знаниях програм- мистов после прочтения вводных и более серьезных учебников по программированию. Что читать человеку, изучившему книги типа «Introduction to Java», «Advanced Java» и «Advanced Advanced Java» и желающему узнать о программировании больше? Вы можете читать книги о процессорах Intel или Motorola, функциях ОС Microsoft Windows или Linux или о другом языке программирования — невозможно эффективно программировать, не имея хорошего представления о таких деталях. Но эта книга относится к числу тех не- многих, в которых обсуждается программирование как таковое. Наибольшую пользу при- носят те методики, которые можно использовать независимо от среды или языка. В дру- гих источниках такие методики обычно игнорируются, и именно поэтому я сосредото- чился на них. Как показано ниже, информация, представленная в этой книге, выжата из многих источ- ников. Единственным другим способом получения этой информации является изучение горы книг и нескольких сотен технических журналов, дополненное значительным реаль- ным опытом. Если вы уже проделали все это, данная книга все равно окажется вам полез- ной как удобный справочник. Предисловие XV Главные достоинства этой книги Какой бы ни была ваша ситуация, эта книга поможет вам создавать более качественные программы за меньшее время с меньшей головной болью. Полное руководство по конструированию ПО В этой книге обсуждаются такие об- щие аспекты конструирования, как качество ПО и подходы к размышлению о програм- мировании. В то же время мы погрузимся в такие детали конструирования, как этапы со- здания классов, использование данных и управляющих структур, отладка, рефакторинг и методики и стратегии оптимизации кода. Чтобы изучить эти вопросы, вам не нужно чи- тать книгу от корки до корки. Материал организован так, чтобы вы могли легко найти кон- кретную интересующую вас информацию. Готовые к использованию контрольные списки Эта книга включает десятки конт- рольных списков, позволяющих оценить архитектуру программы, подход к проектирова- нию, качество классов и методов, имена переменных, управляющие структуры, формати- рование, тесты и многое другое. Самая актуальная информация В этом руководстве вы найдете описания ряда самых современных методик, многие из которых еще не стали общепринятыми. Так как эта книга основана и на практике, и на исследованиях, рассмотренные в ней методики будут полез- ны еще многие годы. Более общий взгляд на разработку ПО Эта книга даст вам шанс подняться над суе- той повседневной борьбы с проблемами и узнать, что работает, а что нет. Мало кто из прак- тикующих программистов обладает временем, необходимым для прочтения сотен книг и журнальных статей, обобщенных в этом руководстве. Исследования и реальный опыт, на которых основана данная книга, помогут вам проанализировать ваши проекты и позво- лят принимать стратегические решения, чтобы не приходилось бороться с теми же вра- гами снова и снова. Объективность Некоторые книги по программированию содержат 1 грамм информа- ции на 10 граммов рекламы. Здесь вы найдете сбалансированные обсуждения достоинств и недостатков каждой методики. Вы знаете свой конкретный проект лучше всех, и эта книга предоставит вам объективную информацию, нужную для принятия грамотных решений в ваших обстоятельствах. Независимость от языка Описанные мной методики позволяют выжать максимум по- чти из любого языка, будь то C++, C#, Java, Microsoft Visual Basic или другой похожий язык. Многочисленные примеры кода Эта книга содержит почти 500 примеров хорошего и плохого кода. Их так много потому, что лично я лучше всего учусь на примерах. Думаю, это относится и к другим программистам. X V I Предисловие Примеры написаны на нескольких языках, потому что освоение более одного языка час- то является поворотным пунктом в карьере профессионального программиста. Как толь- ко программист понимает, что принципы программирования не зависят от синтаксиса конкретного языка, он начинает приобретать знания, позволяющие достичь новых высот качества и производительности труда. Чтобы как можно более облегчить бремя применения нескольких языков, я избегал ред- ких возможностей языков, кроме тех фрагментов, в которых именно они и обсуждаются. Вам не нужно понимать каждый нюанс фрагментов кода, чтобы понять их суть. Если вы сосредоточитесь на обсуждаемых моментах, вы сможете читать код на любом языке. Что- бы сделать вашу задачу еще легче, я пояснил важные части примеров. Доступ к другим источникам информации В данном руководстве приводятся под- робные сведения о конструировании ПО, но едва ли это последнее слово. В разделах «До- полнительные ресурсы» я указал другие книги и статьи, которые вы можете прочитать, если заинтересуетесь той или иной темой. Web-сайт книги Обновленные контрольные списки, списки книг и журнальных статей, Web-ссылки и другую информацию можно найти на Web-сайте cc2e.com. Для получения информации, связанной с «Code Complete, 2d ed.», введите в браузере cc2e.com/ и четырехзначное число, пример которого показан слева. Читая книгу, вы много раз на- толкнетесь на такие ссылки. Что побудило меня написать эту книгу? Необходимость руководств, отражающих знания об эффективных методиках разработки ПО, ясна всем членам сообщества разработчиков. Согласно отчету совета Computer Science and Technology Board максимальное повышение качества и продуктивности разработки ПО будет достигнуто благодаря систематизации, унификации и распространению суще- ствующих знаний об эффективных методиках разработки (CSTB, 1990; McConnell, 1997a). Совет пришел к выводу, что стратегия распространения этих знаний должна быть осно- вана на концепции руководств по разработке ПО. |