Как стать junior-разработчиком (Часть 1) | Общая информация

Mikhail Aleksseev
8 min readMay 20, 2020

--

Введение

Для новичка мир программирования кажется необъятным и войти в него достаточно сложно. На момент написания данной статьи мой опыт как Java разработчика составляет более трех лет. Часто знакомые интересуются как стать программистом. Что для этого необходимо знать и с чего лучше начинать? Данная статья была написана с целью дать ответы стандартные вопросы. Все написанное в статье основывается на моем личным опыте и отражает мое видение ситуации.

Данная статья первая в цикле про то, как стать junior-разработчиком.

Как стать junior-разработчиком (Часть 1) | Общая информация
Как стать junior-разработчиком (Часть 2) | Как устроен процесс найма, где искать работу и как правильно составить резюме
Как стать junior-разработчиком (Часть 3) | Прохождение собеседования
Как стать junior-разработчиком (Часть 4) | Изучение языка и Pet Project на примере Java

Градации разработчиков

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

  • Intern (Стажер) — знает синтаксис языка и имеет представление о структурах данных, умеет решать простенькие задачки. Часто нанимают для обучения и первые несколько месяцев стажер решает только учебные задачи. Можно сказать, что это похоже на курсы, за которые платят зарплату.
  • Junior (Младший разработчик) — знает синтаксис языка, структуры данных, наиболее популярные алгоритмы (часто спрашивают на собеседованиях), имеет представление о базах данных, фреймворке, с которым будет работать, и системе контроля версий. Как правило, джуны выполняют достаточно простые задачи или фиксят баги. В отличие от стажера, очень желательно иметь опыт работы или несколько своих проектов.
  • Middle (Разработчик) — требования, как к джуну, но знания по всему перечисленному должны быть достаточно глубокими. Необходимо иметь от года опыта и уметь самостоятельно выполнять задачи, разрабатывать сервисы и задумываться об архитектуре.
  • Senior (Старший разработчик)—обширный опыт, глубокие знания в предметной области, понимание, что может пойти не так, и умение предвидеть ошибки, выстроить правильную архитектуру, а также хорошие коммуникативные навыки.

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

Какой язык выбрать?

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

  1. Предполагаемая сфера деятельности.
    Фронтенд — графическая оболочка, то, что мы видим в браузере. Тут все просто и по сути только один распостраненный язык — JavaScript.
    Бэкенд — выполняется на сервере, зачастую графической оболочки нет, работа происходит “через терминал”, отправили набор данных, получили другой набор. Список языков, используемых в бэкенде, достаточно обширен, но наиболее популярными являются: Java, C#, Python, PHP, Ruby, Go, Rust, JavaScript.
    Мобильная разработка — зависит от платформы:
    iOS — Swift/Objective C
    Android — Java/Kotlin
    Возможна кроссплатформенная разработка на JavaScript с такими фреймворками, как ReactNative и NativeScript.
  2. Сложность настройки окружения для запуска первого приложения. Если для обучения JavaScript можно пользоваться блокнотом и запускать код в браузере, то для запуска проекта на питоне придется научиться настраивать виртуальное окружение, решать конфликты с путями и зависимостями, а также освоить навык пользования консолью. Это не плохо, но может забрать пару вечеров, главное в такие моменты не сдаться и не забить.
  3. Популярность языка.
    Чем выше популярность, тем больше комьюнити и выше шанс, что возникшая проблема уже была кем-то решена и, вероятно, достаточно вбить ошибку в строку браузера и решение будет доступно по первой ссылке. Как правило, чем больше комьюнити, тем больше различных инструментов существует для данного языка, и тем выше их качество.
Рейтинг языков программирования TIOBE: январь 2020

Стоит учитывать, что в различных языках разный порог входа. На мой взгляд, тяжелее всего с нуля попасть в мобильную разработку, java и C#. Походив по собеседованиям по java без опыта работы, я понял, что устроиться будет достаточно сложно и можно месяцами готовиться для успешного прохождения собеседования. Вместо этого я устроился в компанию, где пишут на Java, как PHP разработчик и через несколько месяцев перешел в проект на Java.

Подготовка к собеседования по PHP

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

Опять же, на мой взгляд, стоит остановиться на одном из трех языков: JavaScript, Python или PHP. Они достаточно зрелые и имеют достаточно развитую экосистему. У них огромное сообщество, это приводит к тому, что можно легко найти документацию на любую функцию и библиотеку, есть множество тем на форумах с обсуждением ошибок, встречающихся при разработке. Большое количество книг/статей/видеоуроков. Относительно просто настраивается окружение для разработки.

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

Что необходимо знать?

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

  • Синтаксис языка.
    Достаточно посмотреть видеоуроки на ютубе, чтобы в целом понять синтаксис и самостоятельно уметь выполнять простейшие операции. Более глубокие знания лучше получать из книг или в процессе решения задач гуглить неизвестные конструкции.
  • Типы и структуры данных.
    Необходимо понимать, какие есть структуры данных, чем они отличаются, и что будет при их взаимодействии, например, что будет, если сложить число и строку.
  • ООП.
    Ответы на три первых пункта есть в книгах, однако, если хочется ускорить процесс, то они хорошо гуглятся и на эти темы много статей и видео.
  • Как работает сборщик мусора и компилятор.
    Этот вопрос один самых часто задаваемых на собеседованиях. Достаточно прочитать статью о том, как происходит выполнение кода и сборка мусора в выбранном языке. Точных подробностей никто ждать не будет, но представление иметь желательно.
  • Решение задач.
    Гуглится по запросу: задачи с решением //Выбранный язык//.
  • Базы данных.
    Почитать про нормализацию, про проектирование баз данных и индексы. Уметь писать простые запросы с несколькими объединениями. Неплохая статья https://habr.com/ru/post/480838/.
  • Работа с консолью.
    Крайне желательно не пугаться открытия терминала и выполнения операций в нем.
  • Система контроля версий (Git).
    Видеоуроки о работе с гитом.
    Официальная документация, более полная и, возможно, кому-то более понятная инструкция по работе с гитом.
  • Алгоритмы.
    Знание алгоритмов применяется на практике достаточно редко, однако, оно позволяет задумываться о производительности написанного кода и расширяет кругозор. На собеседованиях, как правило, вопросы ограничиваются алгоритмами сортировки. Чаще всего просят реализовать пузырьковую сортировку или быструю сортировку. Также важно уметь оценивать временную сложность алгоритмов.
  • Фреймворки.
    Поскольку мало кто пишет проекты с нуля, практически всегда используются различные фреймворки, значительно упрощающие работу. От стажера и джуниора собеседующий не будет ожидать глубокого понимания, однако, желательно попробовать сделать самостоятельный проект. Самым простым способом изучения, на мой взгляд, является разработка проекта по образу и подобию. На ютубе достаточно много видеоуроков, в которых показывается разработка проекта и объясняются тонкости работы.

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

Откуда брать информацию?

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

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

Если знаний по выбранному языку нет совсем, то проще всего будет начать с видеоуроков. После них будет понятно хотя бы, как можно запустить написанную программу, а иногда это действительно вызывает сложности. Достаточно неплохой канал “Гоша Дударь”, у него есть видео почти по всем популярным языкам, которые называются “с нуля до профи”. Понятно, что посмотрев десяток видео и научившись писать простенькие программы, профи не стать, но понимание синтаксиса и основных операций появится. Примеры лучше писать один под другим, закомментировав старые, не стирая их. Чтобы через пару недель можно было открыть файл и быстро вспомнить, если что-то забудется.

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

После этого желательной перейти к книгам, поскольку в хорошей книге все последующие пункты будут описаны. По питону достаточно неплохая книга Эрика Мэтиза “Изучаем Python”, по PHP Линна Бейли, Майкла Моррисона “Изучаем PHP и MySQL”, по Java Бэрта Бейтса “Изучаем Java”. Указанные книги легко читаются, материал преподносится неплохо, и примеры достаточно интересные, пусть и несколько устаревшие. По SQL достаточно основательная книга Алана Бьюи “Изучаем SQL”, но читается тяжело, я проходил по 20 страниц в день.

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

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

Плюсы платных курсов:

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

Минусы платных курсов:

  • Главным минусом является длительность курсов. Хорошие курсы идут полгода/год. За это время можно научиться решать задачки, устроиться стажером и получить полгода/год реального рабочего опыта. Если работу совмещать с обучением по книгам, статьям и курсам на ютуб, то за это время можно стать очень крепким джуном. И претендовать на заработную плату по верху рынка. И, опять же, лучше работать стажером и получать пусть и маленькую, но зарплату, чем платить аналогичные деньги за курсы.
  • Самым ценным умением программиста является навык работы с информацией (“гугления”), поэтому стоит с самого начала стараться все неизвестные вопросы решать самостоятельно.
  • Существует большое количество телеграмм каналов, групп Вконтакте и форумов. В них можно найти ментора, который будет подсказывать, и единомышленников. Часто ребята объединяются и вместе начинают изучать язык, помогают друг другу с непонятными темами.
  • Ну а по поводу мотивации, когда я проходил книгу “изучаем Java”, в послесловии автора были такие слова “Если вы освоили весь материал, то после выхода на работу вы сможете легко позволить себе поездку на море”. После прохождения книги и перехода на Java я действительно перешел на другой проект и поехал в отпуск, так что, возможно, это будет мотивировать.

Резюмируя

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

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

--

--