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

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.9. И да отделена будет религия от разработки ПО

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

Оракулы программирования

Увы, догматиками бывают и некоторые из наиболее уважа- ([щщщош как емых людей в нашей отрасли. Конечно, инновационные руководителям следует адхо-методики нужно разглашать, чтобы их могли попробовать дт к религии програширова-практикующие разработчики. До того как эффективность иия, cw. подраздел «Вопросы методик можно будет полностью доказать или опровергнуть, Рии* раздела 2Ш их нужно испытать. Распространение результатов исследований на практикующих специалистов называется «передачей технологий» и играет важную роль в совершенствовании способов разработки ПО. Однако распространение новой методологии нужно отличать от продажи чудодейственного средства от всех болезней программирования. Передача технологий - это совсем не то, чем занимаются торговцы догматичными методологиями, пытающиеся убедить вас в том, что их высокотехнологичная новинка решит все проблемы всех программистов во Вселенной. Забудьте обо всем, что вы изучили, потому что эта великолепная новая методика повысит производительность вашего труда в два раза во всех областях!

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

Эклектизм

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

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

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



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

ре«рвшш1С«я»11«аОшаф(ь позиций эклектизма полезно подходить и к методикам, ре инструментария ш. подраз- описанным в этой книге, и к методикам, рассматриваемым дел «Применение «етодое раз- в других источниках. Некоторые подходы, представленные работки ПО: интеялектуальный мной, имеют улучшенные альтернативы, и вы не можете ис-инстр5ентарий» раздела 2Д пользовать их одновременно. Вы должны выбрать для конкретной проблемы один или другой подход. Рассматривайте методики как инструменты и выбирайте наиболее подходящую для работы. В большинстве случаев выбор инструмента не играет особой роли. Вы можете использовать торцовый ключ, плоскогубцы или разводной ключ. Однако иногда выбор очень важен, поэтому вам следует всегда делать выбор со всей тщательностью. Разработка предполагает нахождение компромисса между конкурирующими методиками. Вы не сможете достичь компромисса, если преждевременно ограничите выбор единственным инструментом.

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

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

Экспериментирование

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

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



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

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

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

Главная цель программирования - управление сложностью.

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

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

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

Программирование в терминах проблемы, а не решения помогает управлять сложностью.

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

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

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



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.0075