Алгоритмы для жизни. Простые способы принимать верные решения - Том Гриффитс
Шрифт:
Интервал:
Закладка:
И метод минимизации максимального времени опоздания (для обслуживания посетителей в кофейне), и метод суммы времен выполнения (для быстрого сокращения вашего списка дел) могут легко перевести любую задачу в разряд труднорешаемых, если одно из дел в списке не может быть начато до наступления определенного момента.
Но если мы можем применить метод приоритетного прерывания, то задачи снова обретают эффективное решение.
В обоих случаях классические стратегии скорой даты исполнения и наименьшего времени обслуживания соответственно остаются наиболее подходящими, если мы внесем в них простые и ясные коррективы. Поэтому, когда наступает время решения вопроса, сравните его с тем, который вы уже начали решать. Если вы работаете над задачей с самым близким дедлайном, а новая задача должна быть исполнена еще раньше, то просто переключитесь или же доведите начатое дело до конца. Аналогичным образом, если вы работаете по схеме наименьшего времени обслуживания и новое задание можно закончить быстрее, чем то, которое вы уже выполняете, займитесь им или же продолжайте начатое.
Сейчас при хорошем раскладе работники механического цеха могут четко знать все, что им предстоит делать в ближайшие несколько дней, но большинство из нас привыкли работать «вслепую», по крайней мере отчасти. Мы даже можем не догадываться, например, когда мы сможем приступить к определенному проекту (когда мы получим ту или иную информацию от того или иного человека). И в любой момент телефонный звонок или электронное письмо могут добавить новую задачу в наш график. Оказывается, что, даже если вы не знаете, когда сможете начать решать вопросы, схемы скорой даты исполнения и наименьшего времени обслуживания по-прежнему остаются оптимальными стратегиями, которые могут гарантировать вам (в среднем) лучший возможный результат в условиях неопределенности. Если новые задания появляются на вашем столе абсолютно непредсказуемо, то оптимальной стратегией для минимизации максимального времени опоздания как раз является схема скорой даты исполнения с возможностью приоритетной остановки – когда вы можете переключиться с текущего вопроса на новый, с более горящими сроками, или же игнорировать его. Похожим образом схема наименьшего времени обслуживания с возможностью приоритетного прерывания – когда требуется сравнить время, которое необходимо вам для завершения текущего дела и для выполнения нового, – остается оптимальной для минимизации суммы времен выполнения.
В действительности весовая версия схемы наименьшего времени обслуживания зарекомендовала себя как достойный кандидат на звание лучшей универсальной стратегии планирования в условиях неизвестности. Ее рецепт эффективного тайм-менеджмента прост: каждый раз, когда вы получаете новое задание, разделите его важность на количество времени, которое вы потратите на его выполнение. Если результат превышает аналогичный показатель по заданию, которое вы уже выполняете, то вам лучше переключиться на новое задание. Если нет – продолжайте начатое дело. Этот алгоритм в теории планирования больше всего напоминает мастер-ключ или швейцарский нож, поскольку оптимально подходит для решения множества аспектов задач.
При определенных условиях он минимизирует не только сумму весовых времен выполнения, как ожидалось, но и сумму весов каждого просроченного поручения, а также сумму весовых задержек при выполнении этих заданий.
Любопытно, что оптимизация всех этих других критериев труднодостижима, если мы знаем время, когда мы приступим к решению задачи, и продолжительность ее выполнения. Таким образом, если говорить о влиянии неизвестности в вопросах планирования, перед нами возникает парадоксальное явление: в некоторых случаях ясновидение становится обременительным. Даже имея возможность четко прогнозировать будущее, создать идеальный график выполнения дел было бы практически невозможно. Напротив, импровизация и немедленное реагирование на появляющиеся задачи не подарили бы вам столь же совершенного распорядка, как если бы вы заглянули в будущее. Но то лучшее, что вы можете сделать, вычислить гораздо проще.
Это немного утешает. Как говорит обозреватель и программист Джейсон Фрайд, «вам кажется, что вы не можете продолжать, пока у вас не появится железобетонный план? Замените слово "план" на "предположение" и успокойтесь». Теория планирования подтверждает это утверждение.
Когда будущее туманно, вам нужен не календарь, а просто список дел.
Чем больше я тороплюсь, тем больше не поспеваю.
Программисты не разговаривают потому, что их нельзя перебивать… Синхронизация с другими людьми (или их присутствием в телефонах, сигналах пейджера или звонках в дверь) означает только, что ход мысли прерван. За прерываниями следуют ошибки. Вы не должны останавливаться.
И все же опыт теории планирования может вдохновлять. В ее составе есть простые оптимальные алгоритмы для решения многих задач по планированию, максимально похожих на те, с которыми мы ежедневно сталкиваемся в быту. Но как только дело доходит до планирования работы одного устройства в реальном мире, все становится гораздо сложнее.
Прежде всего и людей, и операционные системы компьютеров ждет одно крайне любопытное испытание. Устройство, которое осуществляет планирование, и устройство, работа которого распланирована, – равнозначны. Таким образом, наведение порядка в списке ваших дел становится одним из пунктов этого списка, который сам нуждается в установлении очередности и координировании.
Во-вторых, прерывание не проходит бесследно. Каждый раз, переключаясь с задачи на задачу, вы платите за это определенную цену, известную в мире программирования как контекстное переключение. Когда внимание компьютерного процессора переключается с заданной программы, затраты вычислительных ресурсов возрастают. Процессор должен отметить место, в котором он остановился, и отложить всю информацию, относящуюся к этой программе. Затем он определяет, какую программу надо запустить в следующую очередь. Наконец, процессору необходимо извлечь всю соответствующую информацию для новой программы, найти ее место в коде и включиться в работу.
Эти переключения с задачи на задачу не относятся к «настоящей» работе, поскольку не меняют статус выполнения какой-либо из задач, между которыми компьютер переключается. Это метаработа. Каждое контекстное переключение – трата времени. У людей контекстное переключение тоже приводит к определенным дополнительным затратам. Мы ощущаем это, когда перекладываем бумаги на столе; когда открываем и закрываем файлы на компьютере; когда заходим в комнату и не можем вспомнить, зачем мы туда пришли, или когда спрашиваем «так о чем я говорил?». Психологи доказали, что у людей переключения между задачами приводят к ошибкам и задержкам памяти, которые измеряются минутами, а не микросекундами. Объективно оценивая эти цифры, можно сказать, что, перебивая человека несколько раз в час, вы напрочь лишаете его возможности работать.