Три года назад я столкнулся с жестокой правдой.
До этого момента я писал десятки строк кода. Но, когда меня просили решить конкретные технические вопросы, я часто понимал, что застреваю на элементарных вещах.
Суровая реальность заключалась в том, что мне не хватало фундаментальных знаний в области программного обеспечения.
Вы знаете, о чем я говорю. Это обзор кода, когда все смотрят на вас в поисках ответа, а вы не можете найти слов, чтобы описать код, на создание которого вы потратили 15 часов.
Или шок от возвращения к библиотекам, которые вы используете каждый день (React Hooks, Redux, TypeScript), и осознания того, что вы едва понимаете, как они работают под капотом.
В такие моменты вы сталкиваетесь с горькой реальностью сегодняшней жизни разработчика программного обеспечения: технологии развиваются слишком быстро, и мы проигрываем в борьбе со временем.
Однако, в отличие от процессоров в наших ноутбуках, чья вычислительная мощность только растет, наш мозг, доставшийся нам в наследство от предков, ограничен. Он может обрабатывать только ограниченное количество информации.
Поэтому еще в те времена, когда я писал код, я спрашивал себя: «Есть ли лучший способ освоить разработку программного обеспечения?».
Я потратил последние 4 года на изучение лучших методов улучшения технических навыков разработчика, прослушал сотни онлайн-курсов и экспериментировал с различными инструментами.
Оглядываясь назад на свою работу в качестве full-stack разработчика и свою учебную деятельность, я начал замечать некоторые закономерности. Если я хотел перейти на руководящий уровень и ускорить процесс обучения, мне нужно было исправить следующее:
- Я тратил 14 часов в неделю на «обучение» на Udemy или YouTube (не получая практически ничего взамен)
- 80% моего времени уходило на просмотр одного и того же кода.
- Я выбрасывал большую его часть, потому что он быстро менялся через пару дней.
Мне нужна была система, которая помогла бы мне стать лучшим разработчиком JavaScript и лучшим инженером-программистом.
Чтобы разработать такой процесс, я задал себе следующие вопросы:
- Какие вещи не меняются при разработке программного обеспечения?
- Можно ли превратить отсутствие у меня степени в области компьютерных наук в достоинство, а не в недостаток?
Мне нужна была система, которая могла бы:
- Позволить мне понять конкретные технические пробелы в моих знаниях (чтобы я мог сосредоточиться на том, что важно)
- Заложить прочные основы, чтобы мои навыки программирования оставались актуальными на протяжении десятилетий
- Понять общую картину и ускорить переход от «кодера» к «инженеру-программисту».
Переходим к настоящему времени. Каждую неделю я получаю сообщения на Linkedin от разработчиков, которые спрашивают меня, как они могут создать для себя такую систему, чтобы перейти на средний/старший уровень? Это было бы немыслимо 3 года назад, когда я был едва в состоянии выполнить код на JavaScript.
Или разработчики, обращающиеся ко мне за услугами наставника, когда несколько лет назад именно я отчаянно искал наставника. Это позволило мне оставить должность full-stack разработчика и полностью посвятить себя наставничеству над разработчиками программного обеспечения, которые хотят выйти на новый уровень.
В результате моей системы обучения более 110 разработчиков по всему миру уже достигли среднего/старшего уровня. При этом 9 наших подопечных уже перешли на старший уровень. Мой почтовый ящик полон благодарственных сообщений.
Я заметил, что большинство статей и руководств посвящены изучению новых фреймворков, но я не смог найти ничего о том, как стать лучше в основах программного обеспечения. Это странно, поскольку в конечном итоге наши навыки как разработчиков хороши лишь настолько, насколько хороши наши технические основы. Эти принципы могли бы помочь тысячам разработчиков, но большинство из них скрыты за нечитаемыми книгами по программированию и неразборчивым техническим жаргоном. Однако только обмениваясь знаниями, мы можем улучшить и усовершенствовать их.
В этой статье я поделюсь своими главными знаниями о том, как быстрее достичь уровня среднего/старшего звена в качестве разработчика JavaScript. Это не простое чтение, используйте список ниже, если хотите перейти к конкретному пункту:
- Вы уже впереди
- Найдите пробелы
- Делать больше с меньшими затратами
- Овладеть основами
- Видеть дальше «кода»
- Бесплатные ресурсы, которые помогут вам эффективно устранить технические пробелы >>
Теперь давайте приступим к первому изменению мышления, через которое вам необходимо пройти…
Урок №1: Вы уже впереди всех
Хорошая новость заключается в том, что если вы уже некоторое время пишете код, то у вас уже есть значительное преимущество.
«Согласно 20-му изданию отчета State of the Developer Nation, в конце 2021 года в мире будет 26,8 млн активных разработчиков программного обеспечения. Это ± 0,34% населения планеты».
Неважно, как вы к этому пришли.
Может быть, вы самоучка и потратили часы на побочные проекты и курсы. А может быть, вы прошли Bootcamp и потратили месяцы на совершенствование своих навыков программирования.
Независимо от этого, поскольку вы уже начали, вы уже опережаете всех, кто до сих пор не программирует.
Давайте посчитаем: чтобы создать простое приложение на React, вам нужно потратить несколько сотен часов на кодинг. Кроме того, на своей работе вы наверняка видели много кода.
Ключевое слово здесь — «интеграция».
Да, вместо того, чтобы изучать что-то новое, вам нужно «интегрировать фундаментальные» знания по разработке программного обеспечения в уже имеющиеся навыки. Этот образ мышления очень важен, поскольку он позволит вам перестать думать о старшем уровне как о чем-то, что вы получите в один прекрасный день, а как о чем-то, над чем вы можете начать работать прямо сейчас.
Большинство разработчиков сравнивают себя со старшими разработчиками в своих командах. Что происходит потом? Начинается синдром самозванца, они начинают чувствовать себя все менее и менее уверенными в своих технических навыках и перестают делать что-либо для их улучшения.
Большинство разработчиков не видят десятки людей, которые отстают от них на кривой обучения. И сотни вещей, которые они уже знают.
Моя задача, как преподавателя, наставника и тренера в области программного обеспечения, заключается в том, чтобы показать перспективу и помочь вам извлечь максимум из того, что у вас уже есть.
Теперь, когда вы поняли суть проблемы, давайте перейдем к наиболее фундаментальному изменению мышления для перехода на следующий уровень…
Урок №2: Найдите пробелы
Идея о том, что прежде чем начать путешествие, нужно сначала понять, на каком этапе вы находитесь, увековечена с самого начала современной истории.
Например, более 300 лет британский флот имел самые совершенные корабли и самых опытных моряков. Тем не менее, они продолжали тонуть.
Почему?
Потому что они не могли точно определить свое местоположение на карте (точнее долготу).
Ошибки в определении широты приводили к потере тысяч человеческих жизней.
Только после того, как Джон Харрисон разработал надежный хронометр, проблема была решена (он был плотником-самоучкой, и ему понадобилось около 40 лет, чтобы сделать это).
Подобно морякам британского флота, большинство разработчиков сегодня имеют доступ к бесчисленным ресурсам.
Тем не менее, многие из них застряли.
Потому что они не могут ответить на один простой вопрос: «Каков мой технический уровень?».
Пока вы это не выясните, не имеет значения, сколько часов вы потратите. Или сколько побочных проектов или онлайн-курсов вы начнете, потому что…
«Если вы не знаете свои технические пробелы, вы стреляете в темноту».
Лучший способ начать путешествие — это сначала понять, где вы находитесь и куда хотите попасть. Это основополагающий шаг в достижении мастерства, и если вы поймете это правильно, остальное — вопрос исполнения.
После нескольких месяцев поисков надежного метода оценки навыков разработчика мы с Богданом не смогли найти ни одного работающего решения. Поэтому мы поступили так, как поступил бы любой умный разработчик… Мы создали свой собственный!
Чтобы сделать его еще лучше, мы открыли его миру, так что вы тоже можете понять, на каком уровне вы сейчас находитесь как разработчик (проверьте ссылки в конце статьи).
Но даже если некоторые разработчики имеют приблизительное представление о своих пробелах, они все равно испытывают трудности.
Это подводит нас к следующему основополагающему уроку в этой статье…
Урок №3: Делать больше с меньшими затратами
Весь процесс поиска технических пробелов призван показать вам недостающие части ваших знаний. Однако если вы не знаете, на чем сосредоточиться и начать действовать, эти знания буквально ничего не стоят (они могут даже навредить вам).
На этом этапе большинство разработчиков сбиваются с пути. У них «школьный» менталитет. Они пытаются научиться всему одновременно. Это рецепт выгорания, путаницы и короткой карьеры разработчика.
Вот как следует об этом подумать: ваша ценность как разработчика заключается не в ваших знаниях. По мере того, как меняются технологии, будет меняться и то, как мы внедряем те или иные вещи. Библиотеки будут меняться, фреймворки будут меняться, даже языки будут меняться. Если вы сосредоточитесь на этих вещах, вы попадете в ловушку «колеса фреймворка».
Когда большинство разработчиков пытаются улучшить свои навыки, они начинают 7 различных онлайн-курсов и 3 различных побочных проекта. Если это ваш список дел, удачи! Вы никогда не закончите.
Между тем, на рынке единственное, что имеет значение, — это ваша способность доводить дело до конца. Выпускать чистый код, создавать высококачественное программное обеспечение. Качество означает жертву. Это значит перестать спрашивать «сколько?» и начать спрашивать «как глубоко?».
В разработке программного обеспечения, как и в жизни, навыком, позволяющим создать что-либо ценное, является расстановка приоритетов. Определение приоритетов, какие навыки вам следует изучать, а о каких лучше забыть. Вы расставляете приоритеты на основе ценности, а не текущей важности.
Что такое ценность с точки зрения технических навыков? Это подводит меня к следующему пункту…
Обучение № 4: Освоить основы
Давайте на мгновение вернемся в прошлое…
Помните, как в детстве вы строили замки из песка на пляже? Только для того, чтобы вернуться через несколько часов и увидеть, что все это смыто?
Вы также, вероятно, помните, что проблема была в фундаменте. Оказывается, песок не очень долго держится вместе, особенно если добавить воды.
Это именно то, что большинство разработчиков пытаются сделать в наши дни. Они изучают фреймворк за фреймворком, постоянно добавляя что-то новое поверх слабого фундамента.
Но каким бы высоким ни был замок, если фундамент построен из песка, его размоет в считанные секунды.
Хорошо известно, что настоящие мастера в своей области сосредотачиваются на принципах, а не на процедурах. В разработке программного обеспечения принципы — это то, что не меняется.
Например, сколько бы новых блестящих JavaScript-фреймворков мы ни увидели, основополагающим компонентом все равно будет JavaScript-пакет, который передается браузеру через HTTP.
Эффективное понимание протоколов и процессов, лежащих в основе этого процесса, позволит вам оставаться на вершине с минимальными усилиями. В этом и заключается сила фундаментальных знаний, а не просто каких-то деталей реализации, которые постоянно меняются.
Я знаю, что это полная противоположность тому, что делает «сообщество». Большинство влиятельных людей в Twitter кормят вас новыми советами и трюками.
И в то время как большинство разработчиков одержимы новейшим фреймворком JavaScript, плагином VS Code, GitHub Co-pilot… Некоторые умные разработчики смотрят в другую сторону (и если вы хотите добиться успеха в этой области, вы должны делать то же самое).
Они знают, что сколько бы новых вещей вы ни добавили на слабый фундамент, это приведет к катастрофическому краху. Чтобы обрести полную уверенность в своих технических навыках, вы должны сначала изучить основы.
Это подводит нас к следующему пункту…
Урок №5: Смотрите дальше «кода»
Исследователь Линдси Е. Ричланд изучает познание и обучение, в частности то, как студенты всего мира изучают математику.
В чем разница между теми студентами, которые действительно добились успеха, и теми, которые не добились? Были ли это разные учебники? Или учитель?
Вы будете удивлены.
Оказывается, те студенты, которые испытывали трудности, изучали математику как набор инструкций. На экзаменах они полагались на память, чтобы сдать экзамен.
С другой стороны, у преуспевающих учеников была одна общая черта. Они были способны рассматривать математику как взаимосвязанную систему. Они были способны видеть полную картину и устанавливать правильные связи при оценке.
Звучит знакомо?
К сожалению, именно так сегодня преподают разработку программного обеспечения. Смотрите видеоуроки. Код. Повторяйте.
Неудивительно, что большинство разработчиков испытывают трудности.
Когда вы учитесь подобным вещам, вы становитесь полностью привязаны к коду, с которым работаете. Как только вас выдергивают оттуда, вы замираете.
Такой тип обучения «обезьяна видит, обезьяна делает» никогда не приведет никого к старшему уровню, потому что это противоположность тому, что должен делать старший разработчик.
После младшего уровня подражание перестает быть эффективной стратегией обучения. (Image Credits: Shutterstock)
Когда вы изучаете программирование как набор инструкций, легко упустить общую картину.
Однако в реальной жизни, если вы не можете довести дело до производства, у вас связаны руки. Вы всегда будете зависеть от помощи старшего разработчика и не сможете довести дело до конца. Это подрывает доверие.
Видеть дальше кода означает понимать, что в создании программного обеспечения есть гораздо больше, чем просто кодирование. Это означает способность видеть полную картину и возможность реализовать все необходимые шаги для того, чтобы ваш код попал в производство.
От тестирования до интеграции и развертывания, вы сможете пройти полный жизненный цикл программного обеспечения. Вы должны уметь доводить работу до конца.
Как извлечь максимальную пользу из этих знаний:
Даже если принципы, лежащие в основе этой Системы, уже опробованы и проверены десятками разработчиков, вы столкнетесь с некоторыми общими проблемами, когда начнете их применять. Вот как с ними справиться:
- Скорость: «У старших на моей работе многолетний опыт. Даже если я реализую эти шаги, я не думаю, что добьюсь успеха намного быстрее». - То, что вы 12 лет греете кресло, не делает вас старшим разработчиком. Опыт имеет значение, но мы можем быть более эффективными в вашем способе получения опыта. Сделайте половину из вышеперечисленного и вернитесь ко мне через несколько месяцев.
- Нехватка времени: «После целого дня написания кода на работе у меня не остается сил на обучение» — когда вы внедрите такую систему, вам понадобится всего 5 часов в неделю (причем половину этого времени можно будет проводить на работе).
- У меня сейчас много дел: «Да, я хочу поднажать на себя и выйти на новый уровень, но у меня сейчас много дел в личной жизни, я займусь этим позже» — угадайте что? Мы все так делаем. Всегда найдется что-то, что отвлечет вас от действий. Когда наступит подходящий момент, чтобы поставить то, что вы хотите, на первое место?
Знаете ли вы, что отличает разработчиков, которые действительно добиваются успеха, от тех, кто просто сводит концы с концами?
После того, как я сам был разработчиком в течение последних 8 лет и помог 110+ другим разработчикам выйти на новый уровень, я могу дать вам представление об этом.
Это не степень в области компьютерных наук, не начало работы над кодом в раннем возрасте, не врожденный талант, не гениальность, не причудливые знания.
Дело в том, что великие разработчики живут в СЕЙЧАС.
Если код не чист, они чистят его сейчас. Если трубопровод не работает, они чинят его сейчас. Если они чувствуют, что им недоплачивают, они ведут переговоры сейчас. Если они чувствуют, что у них есть пробелы, они ищут ответы сейчас. Они находят человека, который решил эту проблему, и получают его совет сейчас.
Хорошая новость заключается в том, что вы можете начать прямо сейчас. Я собрал для вас серию ресурсов, чтобы вы могли начать. Чтобы получить доступ, выполните следующие действия:
- Узнайте свои технические пробелы с помощью нашей бесплатной технической оценки, нажав здесь
- Посмотрите технический тренинг, где вы узнаете, как быстрее достичь среднего/старшего уровня, эффективно улучшив свои технические навыки с помощью системы 5 шагов.
Если вы хотите обрести полную уверенность в своих технических навыках, быстрее перейти на средний/старший уровень и больше зарабатывать как разработчик, я приглашаю вас посмотреть наш бесплатный тренинг и связаться со мной.
Мы точно поймем, на каком техническом уровне вы сейчас находитесь как разработчик, и составим для вас пошаговую техническую дорожную карту для перехода на следующий уровень.
PS. Это первая статья, которую я готовлю в 2022 году (в будущем будет много других). Чтобы быть уверенным в том, что вы будете получать подобные статьи, подпишитесь на мой канал YouTube Chanel.
PS. Вы уже посмотрели этот тренинг? 🙂