boat_journal wikipedia.org

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

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

  • Какую проблему я решаю
  • Какие действия планирую совершить и в каком порядке
  • Какие действия уже совершил, и к чему они привели
  • Какие у меня есть предположения о характере проблемы
  • Какие сложности и непонятки возникают
  • С кем из коллег и по какому вопросу надо поговорить
  • Что мне мешает сделать следующий шаг
  • И прочее в том же духе

В общем, стараюсь сохранять всё более-менее полезное.

Выглядит это обычно как-то так:

example

Как именно это помогает

Разгружаем голову! Чем больше мыслей нужно держать в памяти одновременно, тем меньше ресурсов остаётся на сами размышления. Записывать все планы и задачи - базовый принцип техники GTD. Для разработчиков это особенно актуально: обычно нам приходится иметь дело с очень сложными задачами, которые сложно загрузить в голову целиком. Скидывая мысли и идеи в дневник, мы освобождаем голову для размышлений.

Проще вспомнить подробности решения задачи. Для многих программистов (и для knowlege workers в целом) самым продуктивным режимом работы является “поток” - полное погружение в одну задачу. Длительная концентрация внимания на одной цели без переключений на другие. Тем не менее, рано или поздно приходится делать перерыв и заниматься чем-то другим (хоть даже домашними делами), а к текущей задаче возвращаться спустя некоторое время. С помощью дневника можно быстрее вспомнить, на чём мы остановились в прошлый раз, и куда надо двигаться дальше. Экономится время и силы на возврат в поток.

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

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

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

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

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

Недостатки дневника (или нет?)

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

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

С другой стороны, авральное состояние - вещь достаточно противоестественная для интеллектуального работника. В таком режиме сложно делать вещи качественно, очень возрастает риск где-нибудь ошибиться. Ошибки приводят к новым авралам, а там недалеко и до сваливания в смертельный штопор!

В такие моменты бывает лучше притормозить, немного подумать, чётко осознать причины проблемы - и сделать всё правильно. Не так уж редко оказывается, что первое пришедшее в голову решение правильным вовсе не является :) Думаю, вы уже поняли, к чему я веду: замедляться при решении задач бывает не только не-вредно, но и полезно. И дневник в этом только поможет!

К слову, ничто не мешает описать сделанную работу в дневнике сразу после аврального фикса.

prof

Alice Sleeping

Дублирование работы. Уверен, у многих читателей к этому времени уже созрел такой вопрос: “У нас ведь уже есть командный таск-трекер, разве его недостаточно для журналирования?

Однозначного ответа на этот вопрос у меня нет. Обстоятельства у всех разные, и было бы неправильно подходить ко всем с одной меркой. Могу сказать лишь за себя самого. В дневник я позволяю себе записывать абсолютно что угодно. Самые мелкие напоминалки для себя, вопросы “эту штуку сделал, что делаем дальше?”, ключевую фразу “я туплю” и так далее. Порой это десятки записей в день! Если всё это писать в таск-трекер, коллеги взвоют из-за объёмов спама и навечно забанят меня :)

Поэтому в трекер уходят только отфильтрованные записи. Copy & paste, copy & paste… Дублирование усилий получается, но не настолько уж большое. Суммарные преимущества дневника всё равно перевешивают.

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

Бывали и у меня периоды, когда я сдавался и временно отступал от ведения дневника. Но всё же неизменно раз за разом возвращался к этой практике, слишком уж велики её преимущества!

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

Ещё неплохо помогает формальный подход. Максимальное сопротивление мозг оказывает тогда, когда записей по задаче ещё нет, но в голове уже куча идей, и хочется поскорее все их проверить в деле. Важно в этот момент - в самом начале работы над задачей - применить волевое усилие и напомнить самому себе: “у меня есть правило, что я веду дневник”. Создать файл и записать в него все свои идеи. Остальные записи уже пойдут гораздо легче.

Полезные приёмы

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

Выбираем формат дневника. Простого plain text не всегда бывает достаточно, когда мы работаем с кодом. Сам я использую markdown и вполне им доволен: синтаксис поддерживается всеми популярными редакторами, удобно визуально выделять заголовки, код, цитаты и т.п. Но остерегусь навязывать Markdown читателю. У этого формата есть альтернативу, например: Restructured Text, Wiki, Orgmode. Главное, что требуется от формата - не вызывать раздражения при чтении и записи - ведь иначе дневник долго не проживёт!

Используем сниппеты. Некоторые операции приходится чаще других при работе с дневником. Например, я привык начинать очередную запись с отметки времени, чтобы потом проще было ориентироваться. Довольно очевидно, что вводить дату каждый раз руками слишком утомительно (порой десятки раз в день!). Здесь стоит обратиться к возможностям текстового редактора, чтобы облегчить себе труд. Я привык работать в Vim, а для него есть отличный плагин Snipmate. Теперь мне достаточно написать слово time, нажать Tab - и отметка времени генерируется автоматически! Аналогичные примочки есть, пожалуй, у каждого продвинутого текстового редактора.

Храним бэкапы. Чем дольше вы ведёте дневник, тем большую ценность начинает представлять сохранённая в нём информация. Не лишним будет позаботиться о её сохранности! Я настроил автокоммит в git и бэкап в bare-репозиторий внутри Dropbox по cron-у. Теперь можно спать спокойно и не бояться, что дневник пропадёт вместе со сдохшим диском.

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

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

Я что-то нажал, и всё сломалось :(((((

Куда полезнее будет, если в запись попадёт и конкретная страница приложения, и проблемная кнопка на ней, и текст ошибки.

В заключение

crossbow

wikipedia.org

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

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

Эта же статья на хабре.