Я считаю, что опытного разработчика отличает не только набор его знаний и навыков, а и выработанные с течением времени привычки. В этой статье я опишу топ 5 своих привычек, и то, как вы можете внедрить их в свой учебный и рабочий процесс.
Не делайте несколько дел одновременно
Обычная ситуация - вы работаете над новым функционалом в проекте. Создание одних классов тянет за собой создание других. Эти классы ссылаются на третьи, в которых, оказывается, надо бы сделать несколько изменений. Одна правка тянет за собой другую, контекст размывается, и за цепочкой этих зависимостей уже не видно изначальную задачу, с мыслью о которой вы сели за проект.
Чтобы этого избежать:
Дробите большую задачу на подзадачи, решайте их последовательно (для этого подойдет Trello, TODO лист в IDE, или обычный блокнот).
Расставляйте приоритеты, если какая-то из подзадач не относится напрямую к вашей цели здесь и сейчас - лучше записать её и выкинуть на время из головы.
Идя по списку задач, старайтесь разделять, где заканчивается одна подзадача, и начинается другая.
Постарайтесь делать понятные атомарные коммиты, которые можно ёмко описать одним-двумя предложениями. Если появляется желание написать git commit -m “Various features”, вероятно, вы уже нарушили режим однозадачности.
В облегчении однозадачности заключается ценность чистого кода, чем он чище - тем более узким можно сохранять контекст при работе над ним. В таких условиях проще и быстрее вносить правки и исправлять ошибки.
Подвергайте сомнению свои идеи
При работе над цельными проектами вы постоянно принимаете решения по проектированию различного масштаба, от именования переменных и методов до формализации функционала.
Качественные решения облегчают работу над проектом, некачественные - усложняют. Можно привести в пример всем известные “костыли” - объективно плохие решения, принятые ради компромисса с давящими сроками, нежеланием разбираться, или недостатком компетенций.
Частая проблема, которую я замечал у себя и других - взять на веру первую пришедшую в голову идею и сразу начать её реализовывать.
Обычно это происходит подсознательно, и у новичков не хватает опыта, чтобы сразу начать задумываться о слабых местах своего решения и его альтернативах.
Решение имеет вес и ценность тогда, когда его сравнили с альтернативами и выбрали по важным для вашего проекта критериям.
Рекомендую взять за правило всегда рассматривать как минимум одну альтернативу каждому архитектурно важному решению в рамках проекта, например:
Структура пакетов в проекте - горизонтально или вертикально
Организация классов в проекте, применение тех или иных паттернов проектирования
Структура данных в хранилищах
И многое другое. На большинство этих задач нет единственно верного решение, что делает ещё более важным осознанный выбор того или иного подхода.
Проверяйте каждый шаг
Стандартная ситуация, когда у кода есть несколько путей исполнения. При каком-то условии исполняется одна ветка, при другом - другая. Как правило, есть один или несколько главных сценариев и какое-то количество второстепенных (обработка ошибок и исключений). Заманчиво вручную протестировать только основной сценарий, а на остальные закрыть глаза.
Не проверенный код должен по умолчанию считаться нерабочим.
Попытка сэкономить время и быстрее закрыть задачу выходит боком, и на решение проблем, которые можно было решить здесь и сейчас, уйдет кратно больше времени в будущем.
Быстрее всего найти и решить ошибку здесь и сейчас - пока вы в контексте решаемой задачи.
Наиболее формальный подход к этой привычке - покрывать весь свой код тестами. В большинстве случаев можно обойтись ручными проверками.
Не пытайтесь решить проблему наугад
Когда что-то идёт не по плану, возникает чувство раздражения. Хочется, чтобы проблема решилась сама собой. Появляется соблазн угадать решение - попробовать что-то поменять здесь и там, поиграть с настройками и параметрами.
Для элементарных проблем это может сработать, но для сложных - вряд ли.
Самое важное - прозрачность происходящего. Если “что-то работает не так” и вы не знаете где именно проблема на уровне кода - бесполезно идти и делать правки. Начните с того, чтобы получить больше информации о происходящем - добавьте логов, примените отладчик. Увеличивать прозрачность необходимо до момента, пока вы не увидите однозначное рациональное решение.
Если желание начать угадывать решение связано с усталостью или недостатком времени - лучше отложить проблему на следующий день.
Ведите заметки или дневник обучения
Последние 5 лет я занимаюсь журналированием своей работы, и считаю это эффективным способом повышать эффективность рабочего и учебного процесса. В накопленных за года заметках я могу найти свой опыт решения проблем, причины тех или иных принятых решений - всё то, что забывается, но может пригодиться.
Эта же привычка полезна не только в будущем, а и в настоящем. Изложение мыслей в текст помогает структурировать их, привить себе дисциплину (поучился неэффективно = не о чем писать).
О чем писать:
Что изучено - изложить новые идеи своими словами. Это помогает формализовать своё понимание нового, увидеть в нём дыры
Что сделано (можно перечислить пункты из своих TODO листов)
С какими проблемами столкнулись, как решали
Планы на ближайший день-два
Рекомендую писать около 300-500 слов на каждые 4-6 часов занятий. На это, обычно, достаточно 15-30 минут (чем чаще писать, тем проще получается формулировать мысли). Вести дневник можно публично, или приватно, на ваше усмотрение.
Если думаете “откуда взять на это 15-30 минут в день?” Вычесть из учёбы. Приоритет - повышать эффективность, и дневник этому способствует. В перспективе он сэкономит вам больше времени, чем вы потратите на его написание.
Как внедрять полезные привычки
Невозможно прочитать про привычку и сразу внедрить её в свою жизнь. Работающий для меня подход:
Решая проблему, попасть впросак по своей вине и испытать раздражение
Порефлексировать и понять, почему была совершена ошибка и как можно было её избежать
Сделать выводы и постараться более качественно решить похожую проблему в следующий раз
Не останавливаться в этом процессе, итеративно улучшая хорошие привычки и искореняя плохие