Почему нельзя прерывать программистов

Программисты часто сталкиваются с одной из самых раздражающих и разрушительных проблем — прерываниями. Результатом становится колоссальное снижение продуктивности.
Почему нельзя прерывать программистов

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

Эта статья позволит лучше понять, как именно работают программисты и почему прерывание работы так влияет на продуктивность. А во второй части, которая выйдет на следующей неделе, мы поговорим об инструментах и маленьких хитростях, которые позволят минимизировать негативные последствия.

Что бывает, если прервать программиста

Работу программиста могут прервать коллеги, начальство, клиенты. Но совершенно неважно, кто и по какому поводу это делает. Важно, что это существенно снижает продуктивность.

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

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

А вот если задать программисту вопрос на отвлечённую тему, или позвать в отдел кадров, или наорать на него — то он полностью отключится от выполнения задачи и сможет вернуться к ней лишь с большой задержкой. Прерывания могут возникать и по техническим причинам: отключение света, перебои с Интернетом.

Прерывания не просто отнимают время и воруют внимание, но и ухудшают результаты.

Условно говоря, выполнение прерванной задачи может потребовать в два раза больше времени, а программный код может содержать в два раза больше ошибок.

Порой даже небольшое прерывание может привести к масштабному сбою. У нас был случай, когда работа программиста была ненадолго прервана из-за отключения Интернета, а после сбоя он не смог оперативно найти строку, в которую начал вносить правки. Тогда он сохранил на сервер промежуточный вариант программного кода — и сайт перестал работать полностью.

Восстанавливать программный код пришлось из резервной копии (да, мы их делаем; поэтому общее время сбоя не превысило 10 минут). Но если бы работа не была прервана, программист не утратил бы концентрацию и не допустил ошибку.

Научные исследования вопроса

Негативные последствия прерывания работы программиста — не просто жалобы невротиков, которым «злые заказчики» и «нехорошие начальники» мешают валять дурака. Это научные факты, подтверждённые исследованиями.

И в первую очередь, нас интересует, как эти сведения применимы на практике. Для начала стоит разобраться, в каких случаях прерывания наиболее опасны.

В ходе экспериментов учёные установили, что наиболее опасны прерывания в моменты максимальной нагрузки на память.

Оказывается, уровень нагрузки на память вполне поддаётся измерениям. И не обязательно вживлять в мозг электроды или делать МРТ — достаточно фиксировать реакцию человеческого зрачка.

Изменения диаметра зрачка в зависимости от сложности задачи

Ученые также обнаружили, что существуют «удачные моменты», когда прерывание не особо вредит рабочему процессу. Речь идёт о моментах, когда нагрузка на память невелика, то есть, когда решаются не самые сложные задачи.

К сожалению, те же учёные подсчитали, что в среднем требуется не менее семи минут, чтобы перейти от высокой нагрузки к режиму низкой нагрузки.

Теперь мы можем сделать вывод, в чём ключевое отличие профессии программиста от большинства других профессий.

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

Но программист — не уборщица, а создание и редактирование программного кода — не мытьё полов.

Ключевое отличие состоит в том, что программист может в один момент времени находиться в середине нескольких процессов, требующих высокой концентрации и напряжения памяти.

Он может:  

  • редактировать код одновременно в нескольких местах или в нескольких разных окнах;
  • выполнять поиск по программному коду;
  • удерживать в голове, какие данные получает программа, и понимать, что должно быть на выходе;
  • обращаться к справочным материалам, удерживая в памяти суть проблемы, при  этом переключаясь на документацию и закрывая редактор кода;
  • делать запрос к искусственному интеллекту для поиска вариантов решения задачи.

Соответственно, возвращаясь к работе, ему приходится возвращаться не к одной прерванной задаче, а ко всем сразу, что отнимает массу времени и сил.

Возвращаясь к примеру с уборщицей: попытайтесь вообразить, что она не просто моет пол, но и разучивает «Улетай на крыльях ветра…» из оперы «Князь Игорь» для корпоративной вечеринки, в то же время изучая конструкцию новой ультрасовременной швабры и составляя месячный план по закупке моющих средств.

И тут приходите вы и просите написать автобиографию в трёх экземплярах для отдела кадров. По-вашему, как скоро она сможет вернуться к тому, чем занималась?

Факты о прерываниях

Изучив записи о 10 тысячах сеансов написания программного кода, а также на основании опроса 416 программистов учёные установили:

  • программистам требуется от 10 до 15 минут, чтобы вернуться к работе с программным кодом после прерывания;
  • только в 10 % случаев прерванным программистам удаётся вернуться к написанию функции (так называется важная часть программы, которая может многократно вызываться из других частей программы) менее, чем за минуту;
  • программисту удаётся поработать, не будучи прерванным, не более 2 часов в день.

Последний факт удручает. Но благодаря этой информации мы теперь можем понять, почему скорость и качество работы программиста может снижаться, а также почему работа не всегда выполняется в ожидаемые сроки.

И вот тут хочется обратиться к руководителям и заказчикам: да, мы понимаем, как для вас важно поддерживать живое общение с исполнителями. Но в общении надо знать меру и понимать негативные последствия.

Новички и эксперты: в чём отличие

Безусловно, следует учитывать, что последствия прерываний будут отличаться для новичков и опытных специалистов: это подтверждают и учёные.

Проще всего понять это на примере с музыкантами.

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

В то же время опытный музыкант обладает также и мышечной, и концептуальной памятью. Мышечная память позволяет ему играть, не задумываясь — он видит ноту на бумаге и сразу играет её без особых сознательных усилий.

И даже если мышечная память по какой-то причине откажет (допустим, он месяц провёл в отпуске, и «руки забыли») — на помощь придёт концептуальная память, а именно, глубокое понимание того, как музыка устроена В ОБЩЕМ. Опытному  музыканту не обязательно всегда смотреть в ноты, чтобы знать, какой аккорд будет дальше, равно как и не обязательно помнить конкретные движения рук — он просто ПОНИМАЕТ, как устроена музыка и как извлекают звуки из инструмента.

То же самое происходит и у опытных программистов. Их руки уверенно работают с клавиатурой и мышью, управляя привычными средствами разработки. Их глаза на автомате смотрят именно туда, где возникнет нужное сообщение. И даже если какая-то команда языка программирования забудется, специалист будет ПОНИМАТЬ, что такая команда в принципе существует, и будет ЗНАТЬ, где получить справку.

Поскольку для эксперта многие задачи будут менее сложными, чем для новичка, то эксперт, даже если его отвлечь, вернётся к сознательной работе намного быстрее, чем новичок.

Эксперты и новички используют разные виды памяти в процессе работы, поэтому переключение с одной задачи на другую происходит у них по-разному.

Но и тут есть нюанс: если профессионального пианиста посадить за барабаны, он не перестанет быть обученным музыкантом и наверняка в той или иной степени справится с новой задачей. Вот только она потребует больше внимания, а если его отвлечь, он собьётся.

У нас был такой случай. Однажды мы попросили знакомого солиста Мариинского театра (а в солисты Мариинского театра кого попало не берут!) спеть на корпоративной вечеринке эстрадную композицию. На репетициях он хорошо справлялся, но, оказавшись на сцене, сбился и начал петь «оперным голосом», который в данном случае был совершенно неуместен. Этот певец никогда не занимался эстрадным вокалом и не имел никакого опыта работы с микрофоном, а несколько репетиций не смогли дать того же эффекта, что дают десятилетия обучения и практики.

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

И это означает, что мозг опытного специалиста порой может реагировать на прерывания подобно мозгу новичка.

Во второй части этой статьи, которая выйдет через пару дней, мы предложим практические советы, которые позволят минимизировать влияние прерываний. Это может быть полезно и самим программистам, и менеджерам, и заказчикам.

Также мы рассмотрим инструменты, которые могут помочь в сохранении концентрации и предотвращении прерываний.