Проблема чистого листа
Одна из часто встречающихся проблем среди писателей, журналистов и прочих «работников пера» — это проблема «чистого листа». Это когда тебе нужно что-то написать, но всё, что на данный момент имеется — пустая страница. На которой нужно начать что-то писать. Мысли, вроде бы, есть, и время тоже есть, но написать первое слово, предложение — трудно. Кажется, что именно они определят весь последующий текст, сразу и напрямую повлияют на качество результата. И поэтому написать их — страшно.
Для программистов проблема «чистого листа» выглядит по-своему. Вот приходишь ты с утра на работу. Вчера был сложный, насыщенный день. Ты многое сделал, с последним багом разбирался полтора часа уже после окончания официального рабочего дня —, но это нужно было сделать! Ведь ваш продукт делается по качественным современным процессам, у него есть обязательные ночные сборки и было очень важно исправить баг вовремя, чтобы сегодня тестировщики уже могли работать с новой версией продукта. Ты вчера успел, ты молодец, сборка прошла успешно — и это самое важное. Ведь запоротая по твоей вине сборка — это позор.
Но вот сегодня утром — всё как-бы спокойно. Вчерашний баг закрыт, продукт собирается нормально. Ты включаешь компьютер, логинишься — и перед тобой «чистый лист». Да, задач ещё много, но в данный момент ты ещё не приступил ни к одной. Тянет почитать почту, проверить новости. Ты ещё не «в контексте» работы. Вот уж когда начнёшь работать — тогда только держись! Но ещё ведь не начал. Ну и дальше стандартное «Хабр, новости, друг скинул ссылку на смешное видео, надо попить чаю, ой уже скоро обед» и т.д.
Что же делать?
Всё очень просто. Если проблема чистого листа есть — значит, нужно, чтобы по приходу на работу этого самого чистого листа не было. Да, запороть ночную сборку — плохо. Да, в репозиторие должен быть рабочий, компилирующийся код. Но на собственном-то компьютере программист волен делать что-угодно! Технический прогресс дал нам системы контроля версий, а значит локально мы можем творить любой удобный нам хаос, если он поможет быть продуктивнее — почему бы и нет?
Моя мысль очень проста. С теми же силами и целеустремлённостью, с которой перед уходом с работы мы стараемся привести код в репозиторие в рабочее состояние нужно сделать ещё одну вещь — привести код проекта на своём личном компьютере в СЛОМАННОЕ состояние.
Вы ведь знаете примерно, чем будете заниматься завтра? Начните это сегодня. Нет, я не прошу вас задерживаться после работы ещё дольше! Потратьте на это 30 секунд. Начните задачу сегодня — минимумом усилий. В продукте есть баг? Отлично, запустите его под отладчиком и остановитесь на брейкпоинте в подозрительном методе. Багов нет, но есть новая задача? Отлично, напишите в любом подходящем месте прототип интерфейса\класса\метода, который будет её решать. Не старайтесь в конце рабочего дня слишком много думать о том, чтобы сделать это хорошо и верно. У вас не получится. Более того, чем хуже вы это сделаете — тем лучше. Код не должен компилироваться. Запустите сборку, получите сообщение компилятора об ошибке, выделите его курсором — и идите домой.
Не выключайте компьютер, та пару сотен ватт электоэнергии, которые он скушает за ночь, не стоят тех часов, которые вы сэкономите на «вхождение в поток».
А теперь смотрите, что же будет завтра. Вы приходите на работу. Включаете монитор (логинитесь) — и у вас уже нет «чистого листа»! У вас есть баг или задача УЖЕ В ПРОЦЕССЕ РАБОТЫ НАД НЕЙ. Что-то уже сделано, уже есть какой-то прогресс. Мало какой программист сможет с чистой душой свернуть окно IDE с некомпилирующимся проектом и пойти смотреть картинки с котиками и видео со смешно падающим пуделем. Отладчик на брейкпоинте — ещё более стимулирующая штука — можно ведь вот прямо сейчас посмотреть значение вот этой переменной, так, а что вернёт эта функция и вот ещё… Смотрите, вы уже в работе! Нет никакого раскачивания, никакого «попить чаю», никаких новостей и анекдотов. Спустя 30 секунд после начала рабочего дня вы уже в контексте текущей задачи. Вполне возможно, что к обеду вы её закончите, и тогда после обеда уже можно будет начать следующую. За день будет сделано больше, время будет потрачено эффективнее.
А в конце рабочего дня самое главное — не забыть снова поломать весь проект к чертям.