Разработка ПО — источник бесконечного «счастья»?
В свой книге «Поток. Психология оптимального переживания» известный американский психолог Михай Чиксентмихайи приводит восемь основных компонентов переживания радости. Попробуем разобраться, что это за компоненты и при чем здесь программирование?
Чтобы это сделать, приведу первоначальное описание автора:
А теперь попробуем разобрать каждый из компонентов и понять, как это относится к процессу написания кода.
Посильная цель — при изучении новой технологии мы (разработчики) начинаем с той ступени, которая нам может быть наиболее понятна, но не является для нас и нашего опыта чем-то очевидным. В текущем информационном пространстве каждый может выбрать формат обучения, доступный для понимания: от вебинаров и книг серии “for dummies” до мастер-классов и теоретических лекций с элементами высшей математики.
Возможность сосредоточиться — стереотипы о разработчиках и вообще об IT-специалистах говорят сами за себя. Часто программисты “отключаются” от внешнего мира, чтобы разработать сложный алгоритм, изобрести новый подход, или просто реализовать новую “фичу”.
Четкая формулировка цели — как правило, цель всегда понятна: алгоритм должен работать, сайт должен соответствовать макету пиксель-в-пиксель, сервис должен держать нагрузку N запросов в секунду. Т. е. большинство задач имеют четкие критерии приемки.
Немедленная обратная связь — за эту возможность я и многие, наверно, полюбили программирование. Меняешь пару строчек местами, запускаешь компиляцию — ошибка! Разбираешься, что-то переделываешь, опять запускаешь — работает! Такие циклы могут иметь место по нескольку десятков раз в час, что дает возможность малыми итерациями двигаться к цели.
Увлеченность — наше сознание фокусируется на одном объекте в отличие от многопоточного подсознания, поэтому любое интересное занятие позволяет забыть о других заботах и тревогах.
Ощущение контроля — текст программы полностью подвластен разработчику, особенно если говорить про задачи для обучения. Поэтому, на мой взгляд, в этом и кроется одна из проблем методологии RUP, где “кодеру” остается лишь наполнить заранее спроектированные классы кодом, что как раз лишает это занятие творческой составляющей и чувства автономности.
Личностный рост — любая тренировка и оттачивание мастерства, в т. ч. и разработка, позволяют почувствовать удовлетворение от проделанной работы. Освоен новый фреймворк, “легаси” код отрефакторен и покрыт тестами по новой технологии… Все это позволяет положить в копилку наших навыков еще один, который поможет двигаться дальше и ставить более амбициозные цели.
Восприятие времени — часто мы теряем чувство времени, т. к. занимаемся любимым делом. На этой особенности, например, построены концепции хакатонов, когда нужно кодить несколько суток не останавливаясь. Для участников такие события пролетают за одно мгновение.
Многие скажут, что большинство из этих компонентов легко воспроизводимы в других профессиях, но мне кажется, что в написании кода выбор посильной цели и немедленная обратная связь доступны наиболее широкому кругу людей, нежели в других занятиях. Вы все еще не хотите стать разработчиком и получить свой источник “бесконечной радости”?:)