⏱🏅 Как стать мидлом за 3 года: 12 советов джунам

⏱🏅 Как стать мидлом за 3 года: 12 советов джунам

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

Автору оригинала этой подборки удалось пройти путь с нуля до продвинутого мидла за 3 года – каждый совет выведен из практики и личного опыта.

Навыки и опыт важнее, чем официальный грейд: если вы успешно решаете задачи, никто не будет интересоваться, как долго вы работаете в ИТ, откуда пришли, какое у вас образование и как именно называется ваша позиция. А поскольку деление на грейды не имеет особого значения, никогда не откладывайте на будущее изучение какой-либо технологии, которая вам интересна, но считается слишком сложной для вашего уровня: никогда не знаешь, с чем будет связан следующий проект – вполне возможно, эта продвинутая тема понадобится вам гораздо раньше, чем кажется.

Не стремитесь запомнить все наизусть 
Не стремитесь запомнить все наизусть 

Не нужно зубрить все подряд. Что действительно нужно сделать – так это научиться быстро искать нужную информацию. Речь не о ChatGPT и Stack Overflow, а об официальной документации и спецификациях. Ничего страшного не случится, если вы забыли, какой символ идет первым в условном операторе JavaScript – ? или :. Главное, вы знаете, что такой оператор есть, эти символы в нем используются, а как именно – всегда можно посмотреть в документации.

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

💻 Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста»

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

  • Чем лучше вы знаете язык-основу, тем проще понять принципы работы фреймворка.
  • Чем лучше вы знаете функциональность одного инструмента, тем проще изучить второй, третий и так далее.
  • Знакомство (хотя бы поверхностное) со всей основной функциональность фреймворка/библиотеки избавит вас от изобретения велосипеда – вы не будете впустую тратить время на реализацию функции, которая уже есть в этом инструменте.
Развивайте системное мышление 
Развивайте системное мышление 

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

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

Системное мышление – это навык, который требует практики. Начните с небольших шагов:

  • Визуализируйте архитектуру кода. Рисуйте диаграммы, схемы и карты, чтобы наглядно представлять себе, как различные компоненты системы взаимодействуют друг с другом. Это помогает понять, как изменения в одной части могут повлиять на другие.
  • Практикуйте декомпозицию. Разбивайте сложные задачи и алгоритмы на более мелкие, простые и понятные части.
  • Моделируйте различные сценарии. Представляйте себе, что произойдет, если вы внесете изменения в определенные части кода, как это повлияет на другие компоненты системы. Это помогает предвидеть потенциальные проблемы.
  • Анализируйте существующие системы. Изучайте архитектуру и дизайн других приложений, чтобы понять, как они устроены и как различные части взаимодействуют друг с другом.
  • Задавайте вопрос «почему». Когда сталкиваетесь с проблемой, не останавливайтесь на первом очевидном решении. Задавайте себе вопросы – почему это происходит, что стоит за этим. Это помогает найти первопричины.
  • Работайте в команде. Обсуждайте проблемы и архитектурные решения с коллегами. Обмен идеями и точками зрения помогает увидеть систему с разных углов.

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

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

6. Каждая строка кода – это обязательство

Каждая строка кода – это обязательство 
Каждая строка кода – это обязательство 

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

  • Пишите код так, как будто кто-то другой (возможно, вы сами через полгода) будет его поддерживать и исправлять.
  • Устанавливайте библиотеки и пакеты, отдавая себе отчет в том, что придется их регулярно обновлять.
  • Документируйте сложные решения, чтобы не сломать случайно что-то в будущем.
  • Досконально изучайте особенности используемых инструментов, прежде чем делать их неотъемлемой частью системы – чтобы позже не обнаружить, что специфика этих технологий расходится с функциональностью и назначением приложения.

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

  • Тратить большую часть времени на исправление и добавление новых функций в существующую кодовую базу.
  • Больше читать чужой код, чем писать собственный.

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

  • Большая часть реальной работы программиста заключается в поддержке и улучшении существующих систем, а не в создании приложений с нуля.
  • Чтение и понимание чужого кода развивает аналитические навыки и способность работать с незнакомыми кодовыми базами.
  • Рефакторинг существующего кода требует глубокого понимания системы и тщательного подхода.
Тесты, тесты, и еще раз – тесты 
Тесты, тесты, и еще раз – тесты 

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

Во время работы вы будете получать тикеты – задания. Например, «Добавьте кнопку на страницу, которая открывает модальное окно и позволяет пользователю редактировать эти данные». Если задача звучит непонятно, то выяснение того, что именно надо сделать, будет вашей обязанностью. Дальнейшие шаги по реализации запроса включают написание кода, тестирование, отправка в систему контроля версий, код-ревью, QA-тестирование и деплой. Чтобы попрактиковаться в реализации всех этих шагов, стоит принимать участие в опенсорных проектах.

Найдите наставника и сообщество для поддержки 
Найдите наставника и сообщество для поддержки 

В соцсетях трудно получить совет, поддержку, объективное мнение. Вам нужен человек, который действительно может помочь с решением проблем, а еще лучше –дружное сообщество разработчиков с разнообразным бэкграундом. Нужно найти ментора, необходимо заниматься нетворкингом. Для этой цели стоит посещать местные встречи разработчиков и конференции. Так можно познакомиться с опытными разработчиками, которые в случае чего смогут поделиться своей точкой зрения на решение вашей задачи.

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

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

Не стоит зацикливаться на сравнении своего карьерного пути с карьерными траекториями других разработчиков:

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

    Автор: Наталья Кайда
  • Вакансии по data science, анализу данных, аналитике, искусственному интеллекту @datajob
  • Вакансии для java-разработчиков @javadevjob
  • Вакансии по питону, Django, Flask @pydevjob
  • Вакансии по фронтенду, джаваскрипт, React, Angular, Vue @jsdevjob
  • Вакансии по C#, .NET, Unity @csharpdevjob
  • Вакансии по C++ — си-плюс-плюс, cpp, Си, C, STL, Boost @cppdevjob
  • Вакансии по Go @godevjob
  • Вакансии по PHP, Symfony, Laravel @phpdevjob
  • Вакансии для мобильных разработчиков @mobiledevjob
  • Вакансии по DevOps & SRE @devopssjob
  • Вакансии по QA тестированию @testerrjob
  • Вакансии по информационной безопасности @hackdevjob
Начать дискуссию