logo search
Алан Купер

Программисты сосредотачиваются на исключительных ситуациях

Программисты разделяют присущий математикам взгляд на сложные системы, а потому неудивительно, что они смотрят на вещи не так, как большинство людей. Что я имею в виду? Представьте, что вы подбросили монету 1000000 раз; из них 999999 раз монета упала орлом вверх, и только один раз вверх решкой. Для математика утверждение «монета всегда падает орлом вверх» является ложным. Единственный раз, когда монета упала вверх решкой, опровергает утверждение. Говоря математическим языком, утверждение верно, если оно верно всегда. Этот образ мысли привычен и кажется разумным хомо логикус, поскольку именно так ведут себя компьютеры.

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

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

Программисты называют эти события с крайне низкой вероятностью «исключительными ситуациями»1. Наступление подобных событий маловероятно, но если их не предусмотреть, программа даст серьезный сбой, когда такое событие произойдет. Несмотря на низкую вероятность описываемых событий, за неподготовленность к оным приходится платить огромную цену. Таким образом, маловероятные события становятся для программистов вполне жизненными ситуациями. Тот факт, что граничные условия могут наступать лишь раз в 79 лет ежедневного применения программы, программиста совершенно не утешает. Что если этот Раз наступит завтра?

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

Замечательный пример «щедрости в эгоизме», по Бронсону, - изобилие ненужных и нежелательных возможностей, появляющихся в результате возможностного мышления программистов. Они поставляют нам много такого, что нужно только им самим.

* * *

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

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

А что же люди? Они понимают нули и единицы, но, кроме того, еще твердо понимают двойки, семерки и число тридцать один. Большинству людей сложнее представить миллион вещей, чем 300 вещей. Типичный человек выполняет действия в количествах, которые не исследуются программистами. Скажем, заядлые лыжники-любители могут потратить на лыжные походы десяток выходных за сезон. За сорок лет активного катания это составит менее 500 раз. Современные цифровые компьютеры способны обработать 500 объектов за долю секунды. Фанат любой программы запустит ее не более нескольких тысяч раз, а программисты продолжают думать в масштабах бесконечного числа событий.

Хорошие программисты преднамеренно игнорируют такие практичные числа, как 500, потому что это повышает готовность про грамм к возможному пятьсот первому разу. Именно это подразумевает По Бронсон, говоря, что «слепота улучшает их зрение».