Под рефакторингом в программировании понимается процесс изменения кода программы, при котором остаётся неизменной её функциональность, но код становиться более понятным и красивым. Проведение рефакторингов позволяет постоянно вносить изменения в программу, при этом сохраняя и даже улучшая структурность и целостность кода.
Человек, занимающийся личным развитием, постоянно изменяется. При этом важно сохранять целостность. Изменения, которые происходят в результате развития — новые привычки, отношения, представления, ценности — должны гармонично вписываться в его жизнь. Для этого развитие должно проходить в 3 фазы:
- Выявление ограничения.
- Преодоление ограничения.
- Реорганизация.
Эти же три фазы используются при разработке через тестирование и формулируются они кратко так: Red/Green/Refactor. Red — написание теста, который не проходит ввиду ограничений в программе. Тест, который не проходит, как правило, помечается красным. Green — изменение программы и предыдущих тестов так, чтобы новый тест и все предыдущие проходили. Проходящий тест помечается зелёным. Refactor — собственно, рефакторинг, т.е. изменение программы так, чтобы код стал более чистым, понятным и структурным, при этом все тесты по прежнему оставались зелёными.
Как это применить в личном развитии? На первой фазе- выявление ограничения — происходит осознание текущих пределов своих возможностей. Можешь отжаться за один подход 50 раз, но не можешь 60. Можешь заниматься любимым делом, зарабатывая 500$, но не можешь 600$. Понимаешь, как работает сила намерения, но не можешь добиться конкретных результатов, используя её. На этой фазе ты также принимаешь решение развиться так, чтобы преодолеть это ограничение.
На второй фазе — преодоление ограничения — ты делаешь всё возможное, чтобы достигнуть цели, поставленной в первой фазе: изучаешь литературу, выполняешь упражнения, осваиваешь новые инструменты, выполняешь задачи, пока не будет достигнут желаемый результат. Всё положительное, что было в твоей жизни до этого также должно остаться либо стать ещё лучше.
На третьей фазе — реорганизация — производятся небольшие изменения, так чтобы достигнутый результат гармонично вписывался в твою жизнь. Если развитие произошло в одной области, то стоит пересмотреть, какое это оказало влияние на другие. Цель этой фазы — всегда оставаться целостной личностью, улучшая ясность и согласованность различных своих проявлений — физической, социально-эмоциональной, интеллектуальной и духовной. Например, ты изучил новый инструмент тайм-менеджмента — поедание лягушки на завтрак. Теперь самое первое дело, которое ты делаешь, это небольшое, но самое неприятное из всех твоих дел. Возможно то, которое ты давно откладывал. У тебя получилось поедать лягушки на работе, и ты уже видишь пользу от этой привычки, значит с физической стороной этого вопроса всё в порядке. Теперь стоит провести следующий диалог с самим собой:
— (Голос Духа) Уверен ли ты, что тебе следует поедать лягушки?
— Да, это позволяет мне лучше сконцентрироваться на важных делах.
— (Голос Разума) Есть ли логическое обоснование, зачем тебе это нужно?
— Это нужно, чтобы выполнить дела, которые я рано или поздно должен выполнить и освободить место для новых, также это здорово развивает мою самодисциплину.
— (Голос Сердца) Нравиться ли тебе результат?
— Очень нравиться, так как с каждой съеденной лягушкой я чувствую себя свободнее и увереннее.
На стадии реорганизации можно ограничиться одним, но самым важным вопросом, включающий все предыдущие: гармонично ли вписывается достигнутый результат в мою жизнь? Честный ответ, а также действия, способствующие большей гармонизации, и будут являться рефакторингом-реорганизацией процесса личного развития.
За один цикл развития (выявление/преодоление/реорганизация) должно происходить небольшое изменение — чтобы процесс внедрения его происходил как можно лучше. Так обычно и происходит — рывки в личном развитии происходят довольно редко. (Возможно, единственное исключение — переход с одного уровня сознания на другой, да и то, это происходит не в одночасье). Минимальные, но постоянные изменения — вот к чему стоит стремиться. Например, с теми же отжиманиями: можешь отжаться 20 раз — достигни планки в 25, можешь 50 — выбери планку 60, можешь 200 — выбери планку 230. Цифры лишь для примера — ты сам определяешь границы своих возможностей и тот шаг развития, который ты веришь, что можешь совершить.
Не бойся делать маленькие шаги в развитии, особенно, когда ты только взялся за осознанное развитие себя в новой области. Как сказал Кент Бек в книге «Экстремальное программирование: разработка через тестирование»:
Если ты можешь делать очень короткие шаги, ты определённо сможешь делать шаги правильного размера. Если ты делаешь только широкие шаги, ты никогда не узнаешь, будут ли шаги покороче более подходящими.
Для проведения рефакторинга в личном развитии важно наличие системы тестов — что-то, что помогает определить, сохранились ли после очередного шага в развитии все положительные вещи в твоей жизни, которые были до этого. В качестве такой системы тестов может выступать твоя картина жизни. Как она выглядит? Это может быть лист бумаги, файл на компьютере или страничка в интернете, где присутствует твой искренний ответ на вопрос:
Какой является моя жизнь в:
- физической области (здоровье, развлечения)?
- интеллектуальной области (интеллектуальное развитие, обучение, финансы, карьера)?
- социально-эмоциональной области (отношения, характер)?
- духовной области (духовное развитие, вклад и служение)?
Альтернативные варианты определения областей жизни можно найти в статье «Области жизни» Энциклопедии Развития.
После каждого изменения в своей жизни, ты захочешь пересмотреть текущую картину, внести изменения и проверить, сохранилось ли то, что было прежде. Подобная картина жизни также помогает выявить те области, которые более всего нуждаются в развитии. Возможно, ты также захочешь описать рядом идеальную картину, чтобы видеть, к чему стремиться.
В разработке программ возникает интересная ситуация: «правильная» разработка должна вестись с нуля, постепенно развиваясь и нарастая тестами. Однако чаще всего программа уже написана в каком-то виде, нужно проводить рефакторинг, а системы тестов нет. Нужно либо садиться и заниматься только разработкой тестов, что не очень привлекает как программистов, так и пользователей/заказчиков, которые хотят новую функциональность ещё «ко вчера». Либо писать юнит-тесты для тех кусков, которые будут изменяться, постепенно покрывая всё большую функциональность.
Такая же ситуация в личном развитии — развиваться надо, а системы тестов ещё нет. Благо эта проблема решается просто — на описание твоей картины жизни может уйти всего минут 15. Может чуть больше, может меньше. И ты всегда её можешь уточнить, пополнить. Кстати, очень увлекательное занятие.
Интересно, что сам процесс описания своей текущей картины жизни, делает твою жизнь более сбалансированной и гармоничной. Ты начинаешь легко замечаешь шероховатости и недостатки, которые легко исправить. И это очень похоже на то, как написание юнит-тестов улучшает внутренний дизайн программы, как наблюдение за элементарной частицей в ядерной физике стабилизирует её.
Рефакторинг может стать одним из твоих любимых инструментов в личном развитии. Возможно, ты захочешь почерпнуть только избранные идеи. В любом случае, стоит попробовать рефакторинг в личном развитии хотя бы один раз — это позволит сделать твою замечательную жизнь ещё более полноценной и счастливой.