19 August 2011

Обломовщина

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



Кто виноват и что делать?

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

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

Мотивация

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

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

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

Помоги себе сам

Предположим, что с мотивацией в общем и целом все ок, но работа все равно не идет.
Бывает такое -- то ли в работе попадается какой-то на редкость скучный или рутинный кусок, то ли вообще что-то совершенно непонятное... Что делать?

Первое -- здорово, если есть возможность переключиться на другую задачу.

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

Второе -- при пробуксовке очень важна возможность видеть прогресс.

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

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

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

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

Четвертое -- планирование.

Разделяй и властвуй -- гениально сформулированная древнеримскими программистами самая суть процесса создания программ.

Когда перед тобой стоит большая и сложная задача, обычно ты даже не знаешь с какой стороны к ней подступиться. А если еще и твой организм пребывает в состоянии апатии -- вообще хана.
Именно поэтому смертельно важно сделать следующую штуку -- раздробить задачу на большое количество маленьких и очень конкретных шагов (подзадач). Даже когда настроения что-то программировать нет совсем, шансы усилием воли заставить себя закрыть пунктик, который требует от тебя каких-то десять-пятнадцать минут на решение, становятся отнюдь не нулевыми. И вот так, шаг за шагом, в режиме точащей камень воды, ты все-таки продвигаешь вперед и решаешь задачу. Даже когда этого делать совсем не хочется.

Враги

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

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

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

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


Потрепаться с кем-то в аське. 
Почитать хабр. 
Проверить почту. 
Посмотреть что творится в твиттере. 
Зайти на страничку в социальной сети. 

Продолжать этот список можно просто до бесконечности. 
В этих всех отвлечениях -- корень зла. С этим надо уметь бороться. Лично я, например, когда работаю в IDE, почти всегда предварительно закрываю браузер. Иногда помогает. 

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

В здоровом теле...

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

Извините за морализаторство и капитанство, но я, все-таки, озвучу все эти прописные истины.

Надо отдыхать и использовать отпуск для "перезагрузки", а не для работы или активного потребления контента. Обязательно надо отдыхать после работы, а не торчать весь вечер и ночь дома за компом, просиживая часы в WoW или какой другой заразе.
Надо нормально питаться. Не фэстфудом, пельменями и чипсами, а овощами-фруктами.
Обязательно нужно заниматься спортом. Этот чертовски важно. Кстати, даже если вы и не программист.
Нужно высыпаться.
Нужно гулять, двигаться и проводить максимум времени на свежем воздухе.
Надо правильно понимать эффект от потребления алкоголя -- эта штука дает мнимый прилив сил, за которым потом всегда следует их жесткий упадок.
Вы курите? Бросайте на хуй!

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

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

Такие вот соображения.

А как вы решаете проблему нежелания работать?

No comments:

Post a Comment