Вообще само упражнения мне Капустин рассказывал, причём раза два, а толку было ноль. Видимо, это такое сильное колдунство, которое только тогда работает, когда сам его добыл. Видимо, актуально перфекционистам в первую очередь. Суть такова.
1. Берём задачу, которую непонятно как решать. Например, в процессе решения был открыт фейсбучек. Или больше часа продолжаются копания, с неизвестным пока результатом. Думаю, фейсбучек (жж, другой сайт, нужное подчеркнуть) - хороший маркер.
2. Пишем на чистом листе бумаги:
"Чего мне не хватает, чтобы продемонстрировать готовое решение прямо сейчас?". Тут что важно - демонстрация - это не только готовая фигня, но и объяснение, что это за фигня и зачем. Заказчику, "граду и миру" или резиновой уточке - но так, чтобы было понятно.
3. Пишем пронумерованный список чего, собственно, не хватает. Там могут быть элементарные вещи - типа "выяснить то-то и то-то" или "запилить кусок кода от забора до обеда" - и все остальные. Вот все неэлементарные надо аналогично разбивать. Т.е. получается некое дерево зависимостей, плюс оценка сложности.
4. Всё? Нифига. Это только начало. Вот то, что там сверху описано - не работает! На самом деле это упражнение. Его надо делать несколько раз, у меня первые пару заходов было по два пункта, и дальше я зависал - это не страшно. У меня ушло три недели на то, чтобы не зависать над списком. (Интересно, самоприменим ли алгоритм?)
Интересно ещё сравнивать список в начале задачи и в конце. Да, если задача на несколько дней, то надо делать разбивку раз в день минимум. Не садиться делать, не записав. А записав, делать одно элементарное действие. Желательно, ещё и в фейсбук не садиться, не записав, но это уж как повезёт :)
5. Видимо, чем дальше, тем больше мозг натренировывается видеть вот эти недостающие детали - и сваливается со ступора.
6. Что ещё? Демо. Я представлял себе, что веду онлайн-трансляцию компьютерной игры. Hello, this is Frostbitten bringing you another Warcraft 2 audio commentary.
Вообще для разработчика, насколько я понял, было бы полезно записать пару раз демо для клиента - чисто для опыта.
UPDATE. Здесь, думаю, есть пара существенных и неочевидных моментов.
1) Большинство читателей данного блога, скорее всего, имеют навык разбивания задач на подзадачи, и пользуются им неосознанно. Говорить "надо разбить задачу" - всё равно, что советовать поочерёдно поднимать и опускать ноги, чтобы ходить. Но танцмейстеры на танцах, кстати, так и говорят - попеременно поднимайте и опускайте ноги!
2) Тем не менее, если человек берётся за задачу, а вместо этого тупит в фейсбук (фейсбук тут собирательный образ зла, конечно, можно и в шахматы тупить не хуже), имеет смысл предположить, что навык дал сбой. Предлагаемая техника скорее способ калибровки уже существующего навыка, чем развитие нового.
3) Перфекционист, будучи предоставлен сам себе, может начать рыть дерево возможностей на бесконечную глубину. То есть, при задаче "сделать поиск на сайте", он уйдёт в процесс сравнения возможностей поисковых движков и никогда не доберётся до пункта "поле для ввода текста", пока его не ткнут туда носом.
Данная же техника, во-первых, заменяет поиск в глубину поиском в ширину. Во-вторых, абстрактно-наблюдающая фигура града и мира ака резиновой уточки не даёт упустить из виду вот такие "несущественные" детали.