Вы находитесь на странице: 1из 697
ÏÐÎÔÅ ÈÎÍÀËÜÍÎ Ïèòåð Ãóäëèô РЕМЕСЛО ПРОГРАММИСТА // п р а к т и к а

ÏÐÎÔÅ

ÈÎÍÀËÜÍÎ

Ïèòåð Ãóäëèô

РЕМЕСЛО

ПРОГРАММИСТА

// п р а к т и к а н а п и с а н и я х о р о ш е г о к о д а

ПРОГРАММИСТА // п р а к т и к а н а п и с а

По договору между издательством «Символ Плюс» и Интернет магази ном «Books.Ru – Книги России» единственный легальный способ получе ния данного файла с книгой ISBN 978 5 93286 127 1, название «Ремесло программиста. Практика написания хорошего кода» – покупка в Интер нет магазине «Books.Ru – Книги России». Если Вы получили данный файл каким либо другим образом, Вы нарушили международное законо дательство и законодательство Российской Федерации об охране автор ского права. Вам необходимо удалить данный файл, а также сообщить из дательству «Символ Плюс» (piracy@symbol.ru), где именно Вы получили данный файл.

Code Craft

The Practice of Writing Excellent Code

Pete Goodliffe

Code Craft The Practice of Writing Excellent Code Pete Goodliffe
Ремесло программиста Практика написания хорошего кода Питер

Ремесло

программиста

Практика написания хорошего кода

Питер Гудлиф

написания хорошего кода Питер Гудлиф Санкт Петербург–Москва 2009

Санкт Петербург–Москва

2009

Серия «Профессионально»

Питер Гудлиф

Ремесло программиста.

Практика написания хорошего кода

Перевод С. Маккавеева

Главный редактор

А. Галунов

Зав. редакцией

Н. Макарова

Научный редактор

Б. Попов

Редактор

А. Петухов

Корректор

О. Макарова

Верстка

Д. Орлова

Художник

О. Макарова

Гудлиф П. Ремесло программиста. Практика написания хорошего кода. – Пер. с англ. – СПб.: Символ Плюс, 2009. – 704 с., ил. ISBN 978 5 93286 127 1 Ничто не сравнится по ценности с советами настоящего программиста профес сионала. Книга Питера Гудлифа «Ремесло программиста» написана ясно, практично и занимательно. Она поможет вам перейти на более высокий уро вень мастерства программирования и покажет, как писать код, который боль ше чем «просто работает». Да, вы умеете писать работающий код, но как напи сать понятный код? Как добиться его надежности и отсутствия ошибок? Смо гут ли другие программисты выяснить логику и цель вашего кода? Выдающи еся программисты не просто обладают техническими знаниями – у них есть правильный подход и отношение к программированию. Перед вами руководство по выживанию в условиях промышленного производ ства ПО. Эта книга посвящена тому, чему вас никто не учил: как правильно программировать в реальной жизни. Здесь вы найдете не связанные с конкрет ными языками рекомендации, полезные всем разработчикам и касающиеся таких проблем, как стиль представления, выбор имен переменных, обработка ошибок, безопасность, эффективность групповой работы, технологии разра ботки и составление документации. Читатель должен обладать опытом программирования, ибо книга не учит про граммированию – она учит правильно программировать. Издание будет полез но и студентам старших курсов, знакомым с принципами программирования.

ISBN 978 5 93286 127 1 ISBN 978 1 59327 119 0 (англ)

© Издательство Символ Плюс, 2009

Authorized translation of the English edition © 2007 No Starch Press, Inc. This trans lation is published and sold by permission of No Starch Press, Inc., the owner of all rights to publish and sell the same.

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

Издательство «Символ Плюс». 199034, Санкт Петербург, 16 линия, 7, тел. (812) 324 5353, www.symbol.ru. Лицензия ЛП N 000054 от 25.12.98. Подписано в печать 26.12.2008. Формат 70х100 1 /16 . Печать офсетная. Объем 44 печ. л. Тираж 1500 экз. Заказ N Отпечатано с готовых диапозитивов в ГУП «Типография «Наука» 199034, Санкт Петербург, 9 линия, 12.

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

Псалом 150

Оглавление

Об авторе

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

16

Благодарности .

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

17

 

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

19

I. Перед лицом

кода.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

27

1. Держим

оборону.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

. 29

На пути к хорошему коду Готовьтесь к худшему. Что такое защитное программирование? Этот страшный, ужасный мир Технологии защитного программирования Ограничения Резюме Контрольные вопросы

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

30

31

32

35

36

45

50

51

2. Тонкий

расчет.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

53

Да в чем проблема? . Знайте своих клиентов Что такое хорошее представление?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

54

55

56

Размещение скобок. Единственно верный стиль Внутрифирменные стили (и когда их придерживаться) Установка стандарта. Религиозные войны? Резюме Контрольные вопросы

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

57

61

63

65

68

68

71

3. Что

в

имени тебе

моем?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

73

Зачем нужны хорошие имена?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

 

75

Каким объектам мы даем имена? Игра в названия. Технические подробности

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

75

76

79

8

Оглавление

Роза пахнет розой Резюме Контрольные вопросы

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

86

88

90

4. Литературоведение

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

93

Самодокументируемый

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

95

Техника написания самодокументируемого кода

98

Практические методологии самодокументирования Резюме Контрольные вопросы

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

103

108

109

5. Заметки на полях

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

113

Что есть комментарий в коде? Как выглядят комментарии?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

114

115

Сколько комментариев требуется?

.

.

.

.

.

.

.

.

.

.

115

Что помещать в комментарии? На практике . Замечание об эстетичности Работа с комментариями Резюме Контрольные вопросы

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

116

120

121

126

129

130

6. Людям свойственно ошибаться

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

133

Откуда что берется Механизмы сообщения об ошибках Обнаружение ошибок . Обработка ошибок. Подымаем скандал Управление ошибками . Резюме Контрольные вопросы

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

134

135

141

143

151

153

154

156

II. Тайная жизнь кода

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

157

7. Инструментарий программиста

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

159

Что такое инструмент программирования?

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

160

А зачем они нужны – инструменты?

162

Электроинструменты Какой инструмент необходим? Резюме Контрольные вопросы

.

.

.

.

.