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

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

1. Изучите основы

Допустим, вы только в начале своего пути. Что вы начнете изучать? От нехватки языков программирования и фреймворков сфера разработки не страдает. Индустрия переполнена всевозможными терминами — Data Science, машинное обучение, микросервисы, облачные вычисления, NoSQL, DevOps, блокчейн и многое другое… А есть еще и аббревиатуры… Очень. Много. Аббревиатур… UI, UX, API, ООП, IoT, CMS, CDN, PaaS, SaaS — что они значат?

К примеру, вы заинтересовались экосистемой JavaScript или фронтендом. Если у вас нет опыта в компьютерных науках или ИТ, то, возможно, вы даже не знаете разницу между frontend и backend. А есть ли она вообще? Тогда кто же такой fullstack-разработчик? Я, например, этого не знал. Возможно, вы удивитесь количеству фреймворков JavaScript, которые кажутся одинаковыми. Это суровая реально почти для каждого популярного языка программирования. Выше популярность — больше бесполезных фреймворков.

А как выбрать язык программирования? В какой-то статье вы узнали, что будущее за JavaScript. А другой автор утверждает, что веб-конструкторы заменят JavaScript. А может стоит взяться за Java? Кажется, что каждая компания нуждается в Java-разработчике. Но потом вы слышите от друга, что Kotlin заменит Java. Кому доверять? По какому принципу выбирать язык? Чтобы впечатлить работодателя? А что будет, когда на смену этому языку придет другой?

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

Некоторые языки дружелюбнее к новичкам. Я бы ни за что не порекомендовал начинающему JavaScript или С++. Выберите язык вроде Java, Python или Си и хорошенько его изучите. Когда придет время, вы с легкостью сможете освоить новый язык программирования. Не тратьте время на изучение фреймворков — это лишнее. Ни одна команда разработчиков не ожидает от джуниора глубоких познаний в фреймворках. Вы можете изучить их прямо на работе.

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

2. Отсутствие диплома — не проблема

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

Работать в сфере, где можно получить диплом, эквивалентный степени бакалавра — большая удача. Coursera предлагает множество отличных курсов, которые вы можете изучить бесплатно. К тому же существуют общедоступные курсы от MIT, edX… В отличие от других точных наук, ваше изучение программирования не будет страдать из-за отсутствия лаборатории. Ваш ноутбук — сам по себе лаборатория. Пользуйтесь этой возможностью, но не недооценивайте ценность хорошего образования.

3. Темы, которые вам необходимо изучить

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

  • Структуры данных и алгоритмы.
  • Объектно-ориентированное программирование.
  • Языки программирования.
  • Операционные системы.
  • Аппаратное и системное программирование (C/C++).
  • Устройство и архитектура компьютера..
  • Компиляторы.

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

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

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

  • Линейная алгебра.
  • Многомерный анализ.
  • Математическая статистика.
  • Машинное обучение.
  • Компьютерное зрение.
  • Глубокое обучение.
  • Обработка естественного языка.

4. Изучаете новые фреймворки? Узнайте, что можно реализовать с их помощью и в какой сфере их применяют

Большая часть работы — чтение документации. Нет смысла запоминать все фичи и функции библиотек и фреймворков. Знания о фреймворке придут с опытом работы с ним. На начальном этапе вам нужно знать лишь сферу его применения, что с помощью него можно реализовать. Этот совет я получил от сеньора на своей первой работе и он очень помог мне в будущем.

5. Не тратьте время на написание фреймворков и библиотек

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

Я работаю консультантом по стеку веб-разработки. Часто мне приходится переключаться между различными проектами. Когда я работаю над фронтендом, мне приходится переключаться между фреймворками, как мне кажется, каждый день. Единственное, что помогает мне не сойти с ума во время переключениям между React, React Native, Vue, Angular, jQuery, LWC, Aura, VisualForce, Redux, Redux Sagas, Apollo Client — мои твердые знания в JavaScript. Знание языка, лежащего в основе этих фреймворков и библиотек, помогает мне очень быстро изучать новые фреймворки.

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

6. Наслаждайтесь сегодняшним днем

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

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

Перевод статьи: Advice to Junior Developers