🎯 Привычки для эффективной учёбы и работы

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

Не делайте несколько дел одновременно

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

Чтобы этого избежать:

  • Дробите большую задачу на подзадачи, решайте их последовательно (для этого подойдет Trello, TODO лист в IDE, или обычный блокнот).
  • Расставляйте приоритеты, если какая-то из подзадач не относится напрямую к вашей цели здесь и сейчас - лучше записать её и выкинуть на время из головы.
  • Идя по списку задач, старайтесь разделять, где заканчивается одна подзадача, и начинается другая.
  • Постарайтесь делать понятные атомарные коммиты, которые можно ёмко описать одним-двумя предложениями. Если появляется желание написать git commit -m “Various features”, вероятно, вы уже нарушили режим однозадачности.

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

Подвергайте сомнению свои идеи

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

Качественные решения облегчают работу над проектом, некачественные - усложняют. Можно привести в пример всем известные “костыли” - объективно плохие решения, принятые ради компромисса с давящими сроками, нежеланием разбираться, или недостатком компетенций.

Частая проблема, которую я замечал у себя и других - взять на веру первую пришедшую в голову идею и сразу начать её реализовывать.

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

Решение имеет вес и ценность тогда, когда его сравнили с альтернативами и выбрали по важным для вашего проекта критериям.

Рекомендую взять за правило всегда рассматривать как минимум одну альтернативу каждому архитектурно важному решению в рамках проекта, например:

  • Структура пакетов в проекте - горизонтально или вертикально
  • Организация классов в проекте, применение тех или иных паттернов проектирования
  • Структура данных в хранилищах

И многое другое. На большинство этих задач нет единственно верного решение, что делает ещё более важным осознанный выбор того или иного подхода.

Проверяйте каждый шаг

Стандартная ситуация, когда у кода есть несколько путей исполнения. При каком-то условии исполняется одна ветка, при другом - другая. Как правило, есть один или несколько главных сценариев и какое-то количество второстепенных (обработка ошибок и исключений). Заманчиво вручную протестировать только основной сценарий, а на остальные закрыть глаза.

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

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

Быстрее всего найти и решить ошибку здесь и сейчас - пока вы в контексте решаемой задачи.

Наиболее формальный подход к этой привычке - покрывать весь свой код тестами. В большинстве случаев можно обойтись ручными проверками.

Не пытайтесь решить проблему наугад

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

Для элементарных проблем это может сработать, но для сложных - вряд ли.

Самое важное - прозрачность происходящего. Если “что-то работает не так” и вы не знаете где именно проблема на уровне кода - бесполезно идти и делать правки. Начните с того, чтобы получить больше информации о происходящем - добавьте логов, примените отладчик. Увеличивать прозрачность необходимо до момента, пока вы не увидите однозначное рациональное решение.

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

Ведите заметки или дневник обучения

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

Эта же привычка полезна не только в будущем, а и в настоящем. Изложение мыслей в текст помогает структурировать их, привить себе дисциплину (поучился неэффективно = не о чем писать).

О чем писать:

  • Что изучено - изложить новые идеи своими словами. Это помогает формализовать своё понимание нового, увидеть в нём дыры
  • Что сделано (можно перечислить пункты из своих TODO листов)
  • С какими проблемами столкнулись, как решали
  • Планы на ближайший день-два

Рекомендую писать около 300-500 слов на каждые 4-6 часов занятий. На это, обычно, достаточно 15-30 минут (чем чаще писать, тем проще получается формулировать мысли). Вести дневник можно публично, или приватно, на ваше усмотрение.

Если думаете “откуда взять на это 15-30 минут в день?” Вычесть из учёбы. Приоритет - повышать эффективность, и дневник этому способствует. В перспективе он сэкономит вам больше времени, чем вы потратите на его написание.

Как внедрять полезные привычки

Невозможно прочитать про привычку и сразу внедрить её в свою жизнь. Работающий для меня подход:

  • Решая проблему, попасть впросак по своей вине и испытать раздражение
  • Порефлексировать и понять, почему была совершена ошибка и как можно было её избежать
  • Сделать выводы и постараться более качественно решить похожую проблему в следующий раз
  • Не останавливаться в этом процессе, итеративно улучшая хорошие привычки и искореняя плохие