Дэн Мур всегда рад приглашенным авторам; он принял то, что я написал: Развивайте навык безраздельного внимания, или «Глубокая работа (Письма новому разработчику)». Он попал в Hacker News с сотней комментариев. Я написал это еще в декабре 2019 года, забыл опубликовать здесь до сих пор.

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

Уважаемый новый разработчик,

Вы знаете, что существует пропасть между вашим уровнем навыков и уровнем мифического «старшего разработчика программного обеспечения».

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

Не нужно составлять этот список самостоятельно! Я сделал это для вас.

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

  • Разбиение сложных неизвестных на более простые неизвестные, которые затем можно разделить на отдельные билеты.
  • Добавление тестов к сложному устаревшему коду для проведения дальнейшего рефакторинга указанного кода.
  • Использование grep для просмотра журналов сервера для диагностики проблемы, которую трудно идентифицировать и воспроизвести.
  • Предоставление новых серверов
  • Создание сценариев bash для автоматизации сложных рабочих процессов.
  • Копание в исходном коде драгоценных камней, чтобы избавиться от зависимостей драгоценных камней, сохраняя при этом определенные функции.
  • Понимание индексации достаточно хорошо, чтобы видеть, что некоторые запросы, которые, как мы думали, использовали индексы, не были таковыми, и исправлять этот контрольный индекс на лету, не вызывая никаких проблем с доступностью.

По каждой из этих статей написано много книг по этой теме.

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

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

Это может показаться пугающим и для вас.

Опережающие и запаздывающие индикаторы

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

Джош, что это за «запаздывающий и опережающий индикатор»?

Отличный вопрос!

Запаздывающий индикатор — это «свидетельство того, что что-то уже произошло».

Если вы получили пятерку за тест, это свидетельствует о том, что вы усвоили материал.

Опережающим индикатором является «доказательство того, что что-то, вероятно, произойдет».

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

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

Вместо того, чтобы сосредотачиваться на списке вещей, которым научились другие разработчики, и нацеливаться на этот список, я скромно предлагаю использовать ведущий показатель приобретения такого рода знаний как «часы в неделю, проведенные в состоянии преднамеренного глубокого Работа".

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

Опережающие индикаторы являются «предсказательными» в том смысле, что если вы можете правильно определить эти индикаторы, вы можете предсказать исход рассматриваемой проблемы.

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

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

Я бы посоветовал вам прочитать Глубокая работа: правила сфокусированного успеха в рассеянном мире. Автор приводит доводы в пользу того, что глубокая работа играет ключевую роль в успехе работников умственного труда (что включает в себя многие виды работы, включая, конечно же, разработку программного обеспечения).

Если вы не хотите читать книгу, вот суть из этого краткого изложения книги:

  • Чтобы создать абсолютно лучший материал, на который вы способны, вам нужно посвятить себя глубокой работе.
  • Способность быстро справляться со сложными вещами и способность производить на элитном уровне, как с точки зрения качества, так и скорости, являются двумя ключевыми способностями для процветания в современной экономике.
  • «Чтобы быстро научиться сложным вещам, вы должны интенсивно сосредоточиться, не отвлекаясь».
  • «Ваша работа — это ремесло, и если вы оттачиваете свои способности и применяете их с уважением и заботой, то, подобно опытному колесному мастеру, вы можете придать смысл своим повседневным усилиям в своей профессиональной жизни».
  • «Ключом к выработке глубокой рабочей привычки является выход за рамки добрых намерений и добавление рутины и ритуалов в вашу рабочую жизнь, призванных свести к минимуму количество вашей ограниченной силы воли, необходимой для перехода в состояние непрерывной концентрации и поддержания его».
  • Представьте себе двух одинаково хорошо осведомленных начинающих разработчиков программного обеспечения. У них точно такие же навыки на 1 января 2020 года. Если первый разработчик программного обеспечения тратит четыре часа в неделю на глубокую работу, а второй разработчик программного обеспечения тратит пятнадцать часов в неделю на глубокую работу, их траектории будут совершенно разными, и этот второй разработчик быстро приобретет технические знания и навыки.

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

В этот момент вам пригодится оценка Питера Друкера:

Что измеряется, то улучшается.

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

В заключении

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

Удачи!

-Джош

Эта статья изначально была размещена на https://josh.works.