31 August 2011

Что делать, если вы застряли с Большой и Сложной Программистской Задачей?

GTD
Translation
Original author: Andriy Solovey
image

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

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

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

Предварительные условия


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

Итак, мы отталкиваемся от того, что вы знаете что делать, но интеллектуально подавлены задачей, не знаете как к ней подступиться и с чего начать.

Моя стратегия состоит из 3 последовательных шагов, позволяющих расправиться с трудной задачей:
  1. Троньтесь с места — начните движение, поверьте в свои силы;
  2. Получите контроль — окончательно поборите нерешительность, составьте карту пути;
  3. Ускорьтесь — обретя уверенность, увеличьте скорость до максимальной

Троньтесь с места


“Писать роман — это как вести машину ночью. Вы видите дорогу только на расстоянии включенных фар, но даже таким образом вы можете осилить весь путь”Э.Л.Доктороу

25-минутный рывок

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

Срывайте фрукты, висящие ниже всего

Большая Сложная Задача будет пытаться выбросить вас из седла (стула) и обездвижить. Но чтобы добиться прогресса, необходимо твердо и уверенно двигаться вперед. Погрузитесь в программирование настолько, насколько сможете. Возьмите небольшую подзадачу, которую вы знаете как выполнять. Пусть не целиком, но хотя бы на несколько шагов вперед. Следующие шаги станут очевиднее в процессе работы над текущими. “Срывайте” один “фрукт” за другим, перемещайтесь от одной небольшой задачки к следующей, набирая таким образом обороты. Удерживая цепь из этих задач, упрямо продвигайтесь вреред через ветра и волны прокрастинации.

Copy & Paste

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

Разведка боем

Оцените территорию вашей задачи на наличие возможных путей решения и потенциальных преград. Не вступайте в открытый бой с задачей, пока вы еще не встали твердо на ноги. Приступайте к работе над подзадачей только в том случае, если она простая, в противном случае просто оцените ее степень сложности и запланируйте на потом. Чтобы лучше думалось, попробуйте:
  • Поискать идеи реализации в интернете
  • Пообщаться с кем-нибудь, кто может подсказать решение (неважно, на работе или в онлайне), на худой конец поговорите с Резиновой Уткой
  • Загрузите информацию в мозг и забудьте на какое-то время о проблеме — позвольте подсознанию работать над задачей, озарение может придти в момент, когда вы будете заняты чем-то другим.


Важный вопрос: вы готовы к наступлению?

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

Результаты фазы: вы вышли на дорогу и готовы отправиться в путь

Получите контроль


«Шанс благоприятствует подготовленному уму»Луи Пастер

Менеджер проекта на пару с заказчиком стоят у вас над душой и нервно спрашивают: “Когда ты уже собираешься закончить это гребаное задание?”. Слишком долгая поездка в потемках небезопасна — вы можете опоздать или вообще заехать не туда. Как только ваше сознание прекратит сопротивляться и начнет сотрудничать, вы должны взять контроль в свои руки и сформировать более четкое представление о том, как именно решить задачу и какие именно усилия для этого нужны.

Тут может возникнуть вопрос: “А почему бы не взять контроль в свои руки с самого начала — спланировать все шаги наперед и дисциплинировано следовать плану?”. Я считаю, что для качественного планирования, необходимо сперва разведать территорию и подготовить свой ум к этому планированию. Кроме того требуется некоторое время, чтобы “покрутить задачу в руках”, согласовать мысли с коллегами, утвердиться с функциональными требованиями, технологиями, инструментами.

Вот почему “Троньтесь с места” является необходимым этапом для программистского ума, оробевшего перед Большой и Страшной Задачей.

Дробите задачу

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

Стреляйте трассирующими пулями

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

Избегайте преждевременных сражений: большого редизайна, рефакторинга или оптимизации

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

Признаки того, что вы обрели контроль:
  • Вы знаете все основные шаги, необходимые для завершения задачи
  • Вы можете оценить время, усилия и риски этих шагов
  • Есть понимание того, что именно вам неизвестно и понимание как с этим бороться


Результаты фазы: у вас есть план действий, необходимые оценки, а также каркас для на который будет наращиваться функционал.

Ускорьтесь


“Хороший план, реализованный сегодня — лучше чем великолепный план, реализованный в какой-нибудь неопределенный момент в будущем” — генерал Джордж Паттон

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

Маленькие чистые победы

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

Погружение

Войдите в состояние Потока — “психическое состояние, в котором человек полностью погружен в то, чем он занимается, полностью сосредоточен и нацелен на успех”
Условия для состояния потока:
  • Четкие цели, задающие направление движения
  • Задачи, адекватные навыкам — вы чувствуете способность решить задачу, пусть это и не легко
  • Немедленная обратная связь — вы можете быстро корректировать свои действия, основываясь на результатах работы и изменяющихся условиях


Анти-перфекционизм

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

Результаты фазы: ваш поезд мчится к пункту назначения на полной скорости точно по расписанию и ничто не сможет вас остановить :)


Спасибо за ваш интерес к статье, с удовольствием выслушаю ваши стратегии по преодолению нерешительности перед сложной задачей.
Tags:продуктивностьпрограммированиеgtdпрокрастинация
Hubs: GTD
+132
3.9k 297
Comments 38