Главная - Литература

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 [270] 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294

Ключевые моменты

Способность к написанию программ напрямую зависит от личного характера.

Важнейшие качества программиста - скромность, любопытство, профессиональная честность, творчество и дисциплина, а также «просвещенная» лень.

Чтобы стать отличным программистом, можно не обладать особым талантом, но необходимо постоянно стремиться к самосовершенствованию.

Удивительно, но интеллект, опыт и настойчивость вредят программистам не меньше, чем помогают.

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

Хороший характер во многом - продукт правильных привычек. Если хотите стать великолепным программистом, выработайте правильные привычки, а все остальное придет само собой.



ГЛАВА 34

Основы мастерства

Содержание

,, , mtp: €c20.oom/3444

34.1. Боритесь со сложностью

34.2. Анализируйте процесс разработки

34.3. Пишите программы в первую очередь для людей и лишь во вторую - для компьютеров

34.4. Программируйте с использованием языка, а не на языке

34.5. Концентрируйте внимание с помощью соглашений

34.6. Программируйте в терминах проблемной области

34.7. Опасайтесь падающих камней

34.8. Итерируйте, итерируйте и итерируйте

34.9. И да отделена будет религия от разработки ПО

Связанные темы

Вся книга

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

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

34.1. Боритесь со сложностью

Стремление к снижению сложности играет такую важную пщп$тш ееыш О важно-

роль в программировании, что в главе 5 управление слож- i ума дпя борьбы со

ностью получило статус Главного Технического Императи- сложностью см. раздел 33,2,



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

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

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

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

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

Избегайте глубоких иерархий наследования, потому что они предъявляют высокие требования к интеллекту.

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

Избегайте операторов goto, так как они вносят в программу нелинейность, за которой большинству людей трудно следовать.

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

Систематично используйте встроенный механизм исключений, поскольку он может стать нелинейной управляющей структурой, которую при недисциплинированном применении понять почти так же трудно, как и операторы goto.

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

Поддерживайте методы короткими.

Используйте ясные, очевидные имена переменных, чтобы не вспоминать детали вроде «/ - это индекс счета, ау - индекс клиента или наоборот?».

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

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

В целом боритесь по мере возможности с тем, что в главе 5 было названо «несущественной сложностью».

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



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 [270] 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294



0.0041