Алгоритмы для жизни. Простые способы принимать верные решения - Том Гриффитс
Шрифт:
Интервал:
Закладка:
Работа с компьютером представляет определенную опасность, когда нам нужно осознанно и четко выбрать критерий планирования: пользовательский интерфейс может ненавязчиво (или навязчиво) заставить нас использовать его критерии. Современный пользователь смартфона, в частности, привыкает видеть на иконках приложений значки, сигнализирующие о том количестве задач, которое мы должны выполнить в каждом из них. Если почтовый ящик извещает нас об определенном количестве непрочитанных писем, то получается, что все сообщения по умолчанию имеют одинаковую значимость. В таком случае можно ли порицать нас за то, что мы выбираем невесовую модель алгоритма наименьшего времени обслуживания в решении этой задачи (в первую очередь разбирайся с самыми простыми письмами и оттягивай работу с самыми сложными до последнего), чтобы быстро уменьшить количество непрочтенных писем?
Жить по критерию, умереть по критерию. Если все задачи на самом деле имеют одинаковую значимость, именно так нам и придется поступить. Но, если мы не хотим стать заложниками мелочей, нужно принять меры, чтобы продвинуться к концу списка дел. И здесь все начинается с осознания, что задача об одном устройстве, которую мы решаем, – та самая, которую мы хотим в данный момент решать. (В случае со значками приложений, если мы не можем заставить их отражать наши реальные приоритеты или не в силах побороть порыв оптимально сократить это количество нерешенных задач, брошенное нам как вызов, то, возможно, лучше всего будет попросту их отключить.)
Концентрация на том, чтобы не просто решать вопросы, но решать весовые вопросы, выполняя самую важную работу в каждый момент времени, выглядит как панацея от прокрастинации. Но, как показывает практика, даже этого недостаточно. И группа экспертов в области компьютерного планирования убедится в этом при крайне драматичных обстоятельствах: на поверхности Марса, на глазах у всего мира.
Стояло лето 1997 года, и у человечества было много поводов для радости. Например, впервые вездеход исследовал поверхность Марса. «Марсопроходец» стоимостью $150 млн развил скорость до 16 000 миль в час, пересек 309 млн миль пустого пространства и приземлился с помощью воздушных амортизаторов на красную скалистую поверхность Марса.
И тут он забуксовал.
Инженеры лаборатории реактивного движения были обеспокоены и поставлены в тупик. «Марсопроходец» удивительным образом начал игнорировать выполнение своей ключевой задачи с самым высоким приоритетом (обмен данными через информационную шину) и стал решать вопросы средней важности. Что же происходило? Неужели робот не понимал, что делает?
Внезапно «Марсопроходец» зафиксировал, что информационная шина не использовалась неприемлемо долго, и, не имея возможности обратиться за помощью, самостоятельно инициировал полную перезагрузку, что стоило миссии почти всего рабочего дня. Спустя день или больше все повторилось снова.
Лихорадочно работая, команда лаборатории в конце концов смогла воспроизвести и затем диагностировать такое поведение. Корнем зла оказалась классическая опасность планирования под названием «смена приоритетов». Происходит следующее: задача с низким приоритетом захватывает для работы системный ресурс (скажем, доступ к базе данных), но затем таймер прерывает работу задачи на середине, ставя ее на паузу, и активирует диспетчер системы. Диспетчер готов запустить задачу с высоким приоритетом, но не может, поскольку база данных занята. Таким образом, диспетчер опускается ниже по списку очередности задач, запуская различные незаблокированные задачи средней важности вместо того, чтобы запустить задачу с наивысшим приоритетом (которая заблокирована) или задачу с низким приоритетом, которая и блокирует работу (и которая оказалась в самом конце списка очередности после задач среднего приоритета). В таком кошмарном сценарии система может игнорировать задачу высшего приоритета очень долго[17].
Как только инженеры лаборатории выяснили, что проблема заключается в смене приоритетов, они написали код для решения проблемы и отправили его через миллионы миль «Марсопроходцу». Решением стало наследование приоритетов. Это означает, что если низкоприоритетная задача блокирует ресурс высокоприоритетной задачи, то низкоприоритетная задача должна немедленно «унаследовать» высокий приоритет той задачи, которую она блокирует.
Комик Митч Хедберг рассказывает такую историю: «Я был в казино, отдыхал, вдруг ко мне подошел парень и сказал: "Вы должны пересесть. Вы заблокировали пожарный выход". Можно подумать, что я не собирался бежать, если бы начался пожар». Аргумент сотрудника казино: это смена приоритетов. Контраргумент Хедберга: наследование приоритетов. Хедберг, развалившийся на стуле перед пытающейся спастись бегством толпой, мешкая, ставит свою низкоприоритетную задачу над высокоприоритетной задачей людей, намеренных спасти свою жизнь. Но все изменится, если он унаследует их приоритет (перед наступающей в панике толпой ее приоритет наследуется довольно быстро). Как говорит Хедберг, «если вы состоите из горючих материалов и у вас есть ноги, вы никогда не блокируете пожарный выход».
Мораль этой истории в том, что даже любви к решению задач иногда бывает недостаточно, чтобы избежать роковых ошибок в планировании. И даже любви к решению важных задач – тоже. Готовность крайне скрупулезно решать самый важный вопрос с привычной нам близорукостью может привести к тому, что весь мир называет прокрастинацией. Как в случае с застрявшим автомобилем: чем сильнее вы хотите выбраться, тем больше буксуете. По утверждению Гёте, «то, что значит больше, никогда не должно быть во власти того, что значит меньше». И хотя в этом есть определенная мудрость, иногда такое утверждение не совсем справедливо. Зачастую то, что значит для нас больше всего, не может быть сделано, пока не закончено самое незначительное дело. Поэтому единственный выход – это относиться к неважным вещам с той же важностью, как и к тем, выполнение которых они тормозят.
Когда к какому-то заданию невозможно приступить, не завершив перед этим другое, теоретики в области планирования называют это управлением очередностью. Для проведения операционного исследования эксперт Лора Альберт Маклей, полагаясь на этот принцип, существенно изменила некоторые аспекты ведения домашнего хозяйства в своей семье. Если вы понимаете, как работают такие вещи, это может быть очень полезно. Конечно, жизнь с тремя детьми – это ежедневное планирование… Мы не выходим из дома, пока дети не позавтракают, а дети не смогут начать завтрак, если я забуду дать им ложки. Иногда мы можем забывать элементарные вещи, которые потом тормозят все. С точки зрения алгоритмов планирования осознание этого факта и попытка держать его в памяти – уже большое подспорье. Так я и справляюсь с делами день за днем.