Какими бы ни были эти изменения — хорошими или плохими, они добавляют программистам работы. Кроме того, каждое такое изменение понижает общее качество кода, поскольку неизбежно оставляет после себя некрасивые сращивания и рубцы.
Из нескольких своих недавних поездок я сделал вывод, что тревога в сообществе программистов нарастает. К сожалению, хуже всего чувствуют себя лучшие и опытные программисты. Они прикладывают титанические усилия, но излучают цинизм и впадают в тоску, понимая, что их умения растрачиваются попусту. Они могут и не знать точно, как именно получается, что их квалификация не находит правильного применения, но они не могут не видеть очевидного. Многие из лучших программистов вообще перестали программировать, поскольку работа раздражает их. Они ушли в преподавание, религию, писательство, консультационную сферу, потому что эти занятия не оставляют ощущения пустой траты времени и сил.
Стремление программистов понимать суть вещей побуждает их на инстинктивном уровне создавать такие пользовательские взаимодействия, которые четко соотносятся с внутренним функционированием продукта. Забывая о том, что программа должна помогать пользователю достигать его целей, они делают программы, отражающие механизм их устройства.
пилот небольшого самолета заблудился в облаках. Он идет на снижение, пока не оказывается рядом с офисным зданием, и кричит человеку в открытом окне: «Не подскажете, где я?» На что человек выдает ответ: «Вы в самолете, примерно в тридцати метрах над землей». Пилот тут же берет верный курс и спустя некоторое время благополучно приземляется в аэропорту. Пассажиры самолета удивленно спрашивают, как он понял, куда лететь. И пилот говорит: «Тот человек ответил мне совершенно точно и правдиво, но эта информация была абсолютно бесполезна, поэтому я сразу догадался, что этот человек — разработчик программного обеспечения из Microsoft, а я знаю, где расположено здание Microsoft по отношению к аэропорту».
Некоторые персоны мы описываем лишь затем, чтобы понять, для кого мы точно проектировать не будем
Но такое фанатичное стремление готовиться к исключительным ситуациям влечет за собой неминуемые последствия в виде пренебрежения теми событиями, которые имеют больший процент вероятности случиться.
Несмотря на их низкую вероятность, цена неподготовленности может быть очень высока. Так что маловероятные события являются вполне обыденной реальностью для программистов. И даже тот факт, что исключение может возникнуть только один раз в 79 лет при ежедневном использовании программы, совсем не меняет дела. Что будет, если этот единственный раз случится завтра?
Программисты обычно называют такие маловероятные события «исключениями»19. Вероятность наступления таких событий ничтожно мала, однако они могут вызвать серьезный сбой в работе программы, если не предусмотреть их наступление.
Разумеется, сами программисты не испытывают неудобств при обращении с такими программами, так как понимают, как она устроена, и, следовательно, знают, как решать задачи с ее помощью. Мы зовем такой повсеместно распространенный способ проектирования взаимодействий моделью реализации.
1. Они безгранично великодушны в своем эгоизме.
2. Чем меньше они видят, тем лучше это для них.
3. Они укусят не только руку, их кормящую, но и собственную руку.
4. Они приложат максимум усилий, чтобы поддерживать свой имидж в таком состоянии, чтобы все думали, что их это не заботит.
5. Они будут чинить и чинить то, что не сломано, пока оно окончательно не сломается.
6. «Это не я неверно ответил, это вы не так спросили».
7. Считают отсутствие критики лучшей похвалой.