Выполнение большого рефакторинга кода или внедрение новой функции в устаревшую кодовую базу - отличное мероприятие для любой команды. Даже в хорошо спроектированной кодовой базе задачи, скорее всего, будут сложными и потребуют тщательного обдумывания. Такие усилия могут длиться несколько недель или даже месяцев, требуя высокого уровня общения, понимания и согласия между командой.
Недавно команда Honeybees решила прочитать Метод Микадо и еженедельно обсуждать наши мысли в рамках книжного клуба. Цель заключалась в том, чтобы научиться новым навыкам для крупномасштабного рефакторинга, поскольку в ближайшем будущем мы планируем провести рефакторинг значительной части нашей кодовой базы. Чтобы оценить эту технику, мы решили использовать ее для изменения библиотеки ведения журнала, используемой в SQL Prompt.
Метод Микадо
Метод Микадо - это метод, используемый для изучения и понимания того, как задача может быть выполнена, определения ключевых действий для ее выполнения. Первый шаг - определить цель. Это должна быть абстрактная идея, которая должна быть достигнута, например:
«Замените регистратор на одобренную систему ведения журнала»
После определения цели на график добавляются наиболее абстрактные шаги (предпосылки) для достижения цели. После выбора первого уровня предварительных условий каждый листовой узел исследуется, чтобы обнаружить свои собственные предварительные условия. Этот процесс повторяется до тех пор, пока все листовые узлы не станут относительно тривиальными задачами. По мере удаления узла от цели задача должна становиться более конкретной. В книге говорится, что узлы можно исследовать, используя подход в первую очередь в глубину или в ширину. Для нас лучшее решение было где-то посередине - кратко изучаем каждый уровень, а когда больше нет очевидных предпосылок, мы углубляемся в один узел в глубину.
Спорная магия метода Mikado заключается в том, что от изменений кода регулярно отказываются. Во время исследования цель или предварительное условие реализуется наивно, и затем необходимо принять решение о немедленном сохранении или отказе от кода в зависимости от того, имеют ли изменения смысл и какие ошибки были внесены. Поначалу это кажется очень неестественным, поскольку вы можете потратить 15 минут на рефакторинг класса только для того, чтобы отменить изменения. Ключевым моментом здесь является то, что время не потрачено зря! Вместо этого время было использовано, чтобы узнать о структуре кода и расширить граф Микадо, тем самым создав превосходный план. Изменения кода могут быть сохранены, если они ценны, но в настоящее время вызывают нетривиальные ошибки сборки. Однако это увеличивает сложность процесса, и возможное слияние может компенсировать время, сэкономленное за счет сохранения.
«Если вы взламываете следующий шаг, вы будете основываться на предположениях и догадках. Избегайте соблазна »- цитата из нашего книжного клуба.
После того, как граф исследован в разумной степени и конечные листовые узлы представляют собой достижимые фрагменты работы, мы можем приступить к внесению изменений в код. Определитесь с наиболее логичным листовым узлом, с которого следует начать, и начните работать над достижением цели, выполняя каждое предварительное условие одно за другим. К тому времени, когда график будет завершен, вы почувствуете, с чего начать. Отметьте каждое предварительное условие, когда код будет зафиксирован.
Главное помнить, что график следует рассматривать как живой документ, поэтому внесение изменений и дальнейшее изучение во время работы приемлемо и приветствуется - в конце концов, мы живем в мире гибкой разработки!
Наши мысли
Основное внимание в методе Микадо уделяется планированию того, как можно выполнить работу. Это разумный и эффективный инструмент, но он гораздо более ценен.
Сосредоточенность
При работе над задачей, которая растягивается на несколько недель или месяцев, разработчик может потерять фокус на конечной цели или потеряться в задаче по мере добавления все большей и большей сложности. Это может привести к расползанию прицела и, в конечном итоге, к неэффективной работе. График Mikado позволяет отслеживать работу и визуализировать четкий рабочий путь.
Команды
Работа, выполненная парой или командой, будь то группа или разделение работы и асинхронное кодирование, должна быть хорошо понятна всем членам команды, чтобы результат это то, чего все ожидают. Использование графика для иллюстрации этого позволяет команде согласовать абстрактные шаги, которые необходимо предпринять, конечную цель и направление ее достижения. Это особенно важно, когда команда может работать удаленно, и быстрое обсуждение подхода может быть более сложным для координации.
Проверка кода
Использование метода Микадо позволяет четко записать мыслительные процессы отдельного человека или группы, чтобы их мог понять тот, кто не разбирается в проблеме. Это означает, что во время рецензирования кода рефакторинга, когда рецензент может столкнуться с запросом на изменение более 150 файлов, гораздо легче понять мыслительный процесс и причины, по которым был изменен фрагмент кода. Это означает, что проверка кода может быть более эффективной и быстрой.
«Метод Микадо - это то, что обычно делает опытный разработчик на подсознательном уровне, плюс дисциплина и смелость, чтобы отменить изменения» - цитата из нашего книжного клуба.
Метод Mikado - отличный инструмент рефакторинга для любого разработчика. Этот метод обеспечивает большую поддержку при выполнении более длительных задач, особенно при работе в команде. Сделать шаги к достижению успеха видимыми особенно важно в мире удаленной работы. Таким образом, метод Mikado следует рассматривать как инструмент рефакторинга и коммуникации.
Попробуйте метод Микадо и поделитесь своим графиком в комментариях! P.S. мы рекомендуем использовать онлайн-приложение для доски, такое как Mural.