Кви Ноа работает в Сент-Луисе, в фирме сельскохозяйственных технологий, которая специализируется на продаже генетически модифицированных семян. Она всего лишь скромная секретарша, и ее босс дал ей кучу заданий, которые нужно закончить к концу недели. Отчетный день – пятница. Осталось всего два дня. Если Кви не выполнит все задания вовремя, ей не разрешат пойти на ежегодный корпоратив в субботу. Этот банкет – единственное мероприятие в жизни фирмы, во время которого начальники и подчиненные общаются на равных. Для Кви это шанс «на людей посмотреть и себя показать». Если ей повезет, то она получит повышение, на которое так давно надеется. Что же ей делать?
Справляться с растущим потоком задач – одно из самых важных умений в жизни взрослого человека. Только подумайте, как много книг и статей вам нужно будет прочитать по теме эффективного планирования рабочего времени, чтобы умело распределять рабочую нагрузку. Кви хорошо знает, что успеть все вовремя – задача непростая, которая потребует напряжения всех сил. Давайте рассмотрим для нее несколько способов достичь цели.
ЦЕЛЬ: ВЫПОЛНИТЬ ВСЕ ЗАДАНИЯ К КОНЦУ НЕДЕЛИ.
МЕТОД 1: ПОРАБОТАТЬ НЕМНОГО НАД ОДНИМ ЗАДАНИЕМ. ПЕРЕКЛЮЧИТЬСЯ НА ДРУГОЕ. ПОРАБОТАТЬ НЕМНОГО. ПЕРЕКЛЮЧИТЬСЯ НА СЛЕДУЮЩЕЕ. И ТАК ДАЛЕЕ.
МЕТОД 2: ОТСОРТИРОВАТЬ ЗАДАНИЯ ОТ САМОГО ПРОСТОГО ДО САМОГО СЛОЖНОГО. НАЧАТЬ С ПРОСТОГО. КОГДА ОНО БУДЕТ СДЕЛАНО, ПЕРЕЙТИ КО ВТОРОМУ ПРОСТОМУ. И ТАК ДАЛЕЕ.
МЕТОД 3: РАССОРТИРОВАТЬ ЗАДАНИЯ ПО ПРИОРИТЕТНОСТИ. НАЧАТЬ С САМОГО ВАЖНОГО. КОГДА ОНО БУДЕТ ЗАКОНЧЕНО, ПЕРЕЙТИ К СЛЕДУЮЩЕМУ ПО ВАЖНОСТИ. И ТАК ДАЛЕЕ.
Все эти методы наверняка знакомы. Применяя метод 1, мы используем единицы времени, чтобы определять, когда переключиться с одного задания на другое. Например, у нас три набора заданий по трем различным предметам в школе, и все нужно сдать до конца недели. Можно посвятить утро одному предмету, день – второму, а вечером заняться третьим. На следующий день повторяем эту схему и так далее, пока не будут готовы все задания. Этот метод распределения времени – хороший пример того, как современные операционные системы справляются с многочисленными приложениями, и его иногда называют контекстным переключением. Диспетчер следит за текущими процессами,[33] отводит им определенное время, а потом контролирует, чтобы каждый процесс умещался в предписанный ему хронометраж.
Переключение между процессами происходит так плавно, что при наблюдении за операционной системой создается впечатление, будто они протекают параллельно. Сегодня при наличии многоядерных процессоров так оно и есть. Четырехъядерный процессор может одновременно вести четыре процесса, и контекстуальное переключение ему требуется только тогда, когда процессов запускается больше, чем у него ядер.
Это напоминает приложение параллельной обработки, которое имеет аналог в реальной жизни и называется конвейерной обработкой. Набор взаимосвязанных заданий распределяется и выполняется так, чтобы оптимизировать имеющиеся в наличии ресурсы. Например, вы с двумя вашими друзьями вдруг вспомнили, что забыли приготовить мешки с подарками для гостей, а вечеринка вот-вот закончится. Чтобы сделать как можно больше мешков в единицу времени, эффективно применить что-то вроде конвейерного метода: вы пишете поздравления на мешке, один друг складывает в него подарки, а второй – завязывает мешки лентой. Это лучше других подходов, когда один или оба ваших друга будут ждать, пока вы подпишете все мешки. Распределение заданий важно, но до определенной степени: как однажды написал Фред Брукс, девять женщин не родят ребенка за один месяц.
При современных характеристиках «железа» мы не замечаем границ возможностей контекстуального переключения. Между тем каждый раз, когда система его выполняет, ей нужно придержать состояние последнего процесса, очистить регистры и удалить передаваемые данные, а затем загрузить новое состояние процесса.[34]
Для человека когнитивная нагрузка, которая сопровождает этот тип переключения, может быть довольно серьезной. Одно из препятствий на пути обеспечения продуктивности – необходимость прервать текущее занятие, переключиться на что-то срочное, а затем вернуться к предыдущему делу. Операционная система работает подобным образом, запуская так называемый обработчик прерываний, который может временно остановить текущий процесс, чтобы либо передать ему некоторые данные, которых ждет система, либо изменить приоритетность задач.
Если время прерывания достаточно велико, мы можем побороться, приводя разум в состояние, необходимое для выполнения оригинального задания. Контекстное переключение имеет определенные преимущества – оно гарантирует, что мы поработаем по крайней мере над какой-то частью каждого задания. В то же время, когда задача имеет временные рамки, стратегия «Не пропускать ни одного задания» грозит разочарованием и переутомлением.