Как и любые профессионалы, программисты стремятся быть лучшими в своей области. Будь то изучение алгоритмов, изучение новых языков программирования или работа с новыми библиотеками и их создание, наша карьера предполагает обучение на протяжении всей жизни. Однако сегодня я хочу обсудить аспект программирования, который выходит за рамки знаний: производительность.

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

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

Вместо этого ответ может заключаться в концепции, взятой из психологии. В 1990 году психолог Михай Чиксентмихайи (примерно произносится как «цыпленок послал меня кайфом») опубликовал книгу под названием Поток: Психология оптимального опыта, в которой он описал то, что он считал «потоком» состояния. разум. Для Чиксентмихайи поток - это состояние полной поглощенности поставленной задачей - когда человек настолько поглощен деятельностью, что кажется, что все остальное не имеет значения. В просторечии известное как «в зоне» или «в канавке», состояние потока - это чувство большого удовлетворения, мастерства и вовлеченности.

В интервью Wired в 1996 году Чиксентмихайи охарактеризовал Flow как« полностью вовлеченный в действие ради самого себя. Эго отпадает. Время летит. Каждое действие, движение и мысль неизбежно следует из предыдущего, как джаз. Вовлечено все ваше существо, и вы максимально используете свои навыки .

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

Итак, как нам достичь состояния потока и потенциального программирования Нирваны? Чиксентмихайи обозначил три ключевых критерия, которые должны быть выполнены для возникновения потока. Во-первых, нужно участвовать в деятельности с четким набором целей и прогресса. Иногда это может быть затруднительно, когда человек программирует самостоятельно - если мы просто бесцельно играем, поток не может возникнуть. Вот почему существуют такие структуры, как разработка через тестирование и парадигма «от скейтборда к гоночному автомобилю»; они позволяют нам разбить наши задачи на ряд достижимых целей, на которых мы можем сосредоточиться.

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

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

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

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