image

Привет! Меня зовут Герман, я backend-разработчик в команде Managed Service for Redis в компании #CloudMTS. В этой статье расскажу про свой приход в разработку на Go и поделюсь полезными ресурсами, которые мне помогли на этом пути.


Старт в ИТ


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

Я планировал делать карьеру в финансах, поэтому поступил на кафедру «Финансы и кредит» в РГГУ. Но когда писал диплом в 2019 году, о перспективах в ИТ уже говорили везде, я решил попробовать развиваться в этом направлении и планировал поступить в магистратуру на кафедру «Бизнес-информатика» в НИЯУ МИФИ.

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

Экзамены я сдал хорошо, но полученные мною баллы не гарантировали поступление на бюджет, поэтому я подал документы на другую кафедру «Финансовый мониторинг» куда проходил на бюджет со 100% вероятностью.

К счастью, в учебной программе, помимо классических финансовых/экономических дисциплин, были и технические:

  • статистика. Так я впервые познакомился с языком программирования R;
  • базы данных. На этих занятиях я узнал теорию БД, какие БД бывают, где применяются и, конечно же, изучил SQL.

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

Я проработал в продуктовой команде год, где наблюдал, чем занимаются дизайнеры, разработчики (mobile, frontend, backend), тестировщики, аналитики. Самый большой интерес у меня вызывала работа backend-инженеров.

Промежуточным этапом на пути к backend стала позиция Data Science инженера: я уже хорошо знал БД и освоил Python. Параллельно с этим я изучал разработку backend-части на Python, фреймворки Django и Flask, также работал с БД через SQLAlchemy. Даже пытался создавать свои собственные сайты. Для этого немного разобрался с HTML и CSS. Это были маленькие пет-проекты, но они позволили мне изучить базовые вещи, например:

  • что такое HTTP;
  • какие есть коды ответа HTTP;
  • что такое API и как с ним работать и прочее.

Тогда я уже точно осознавал, что хочу быть backend-инженером и снова готов пойти на стажировку, «просесть» в зарплате или даже работать бесплатно, но только заниматься тем, что мне интересно, и получить реальный опыт.

Примерно отсюда начался мой целенаправленный путь в backend-разработку.

Код на листочке и первый день в роли backend-инженера


На сборах по военной кафедре я познакомился с ребятами, которые разрабатывали на разных языках программирования. Я задавал им кучу вопросов, и их ответы помогли взглянуть на разработку под разным углом. Также у меня была с собой книга «Грокаем алгоритмы» А. Бхаргава, и так как у меня не было ноутбука под рукой, я изучал алгоритмы, придумывал задачи и решал их прямо в тетради.

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

На протяжении месяца я изучал Ruby, Elixir, Ruby On Rails, Phoenix, git, работу с API, погружался в принципы микросервисной архитектуры и SOLID. Даже сделал небольшой проект на Phoenix — это был обычный таск-менеджер с регистрацией.

По итогу я получил предложение на оплачиваемую стажировку, и с того момента я стал работать backend-разработчиком.

Go, go, go


Эта стажировка была отличной возможностью поработать на реальных проектах. Мои ожидания от позиции backend-разработчика оправдались, и команда мне нравилась, но мне нужно было еще очень многому научиться, чтобы стать сильным специалистом. Ruby и Elixir — интересные языки, но на рынке было не так много связанных с ними вакансий.

Я решил посмотреть в сторону других языков, которые бы позволили без труда найти работу в России и за ее пределами. На помощь пришел мой брат, который сейчас работает solution-архитектором — он посоветовал обратить внимание на Go: «Язык на подъеме и интересен во многих аспектах».

На третьем и последнем месяце стажировки я начал знакомиться с новым языком, писать первые программы, проходить туториалы — в том числе бесплатный курс по Go от #CloudMTS.

Я плотно изучал Go всего лишь месяц, но решил пойти на собеседование в тот же #CloudMTS. И как это было ожидаемо, полностью его провалил. На вопросах по базам данных я держался неплохо, но почти на все вопросы по Golang я не смог дать четкого ответа, хотя на собеседовании мне задавали общие вопросы по теории. Например:

  • Как реализовано ООП, инкапсуляция и наследование в Go?
  • Что такое пакеты?
  • Что такое слайс и чем он отличается от массива?
  • Можно ли выполнить несколько условий в одном операторе switch case?
  • Что будет, если писать в закрытый канал?

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

Я понимал, что реальный опыт работы позволит мне быстрее освоить язык, поэтому продолжил искать стажировки на Golang. Спустя время мне все-таки удалось найти позицию стажера в компании-разработчике CRM-платформы. Там я писал внутренний чат. За три месяца я набрался практического опыта. Также курс от МТС дал очень качественную информацию по Golang, базам данных, брокерам сообщений, шине данных и даже по архитектуре приложений. С этими знаниями и опытом я решил снова попытать счастья в #CloudMTS.

Собеседование длилось около 2 часов, большая часть времени была посвящена технической части. В этот раз я готовился по шпаргалке, которой с нами поделился куратор курса. Это был список тем, которые, по опыту, чаще всего спрашивают на собеседованиях Go-разработчиков. Он включал в себя вопросы не только по Go, но и по технологиям вокруг — базам данных, Kafka, gRPC, микросервисной архитектуре и прочему. В целом на собеседовании было все, что мы так или иначе затрагивали на курсе. Были и задачки, но они были несложными и применимы к реальной жизни, и я достаточно быстро встретился с ними на практике.

В итоге вторая попытка оказалась успешной, собеседование в #CloudMTS я прошел и вот уже больше года работаю над интересными и сложными проектами в подразделении DBaaS. На данный момент мы с нуля написали Redis в облаке и продолжаем его совершенствовать, сейчас он уже доступен для реальных пользователей.
В команде я уже больше года и на текущий момент оцениваю свой уровень как middle/middle+. Быстро вырасти мне в том числе помогли коллеги по команде, которые терпеливо менторили меня.

Что почитать/посмотреть желающему стать Go-разработчиком


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

  1. На мой взгляд, главное — как можно скорее начать писать код, делать что-то руками. Когда я изучил основы Go (структуры, маппы, слайсы, интерфейсы, объявление переменных и прочее), то сразу начал создавать сервисы, «ручки» и уделял много времени дебаггингу, чтобы понять, как код работает с данными. Уже потом я сосредоточился на синтаксисе языка, на низкоуровневых вещах, чтобы глубже понять, как работает код с железом.
  2. Чтобы систематизировать свои знания по Go, я обращался к курсам. Помимо курса от #CloudMTS, мне также понравился туториал по Go от Rebrain. И обязательно к прохождению Tour of Go от Google — авторов языка. Это бесплатный инструмент, который научит почти всему, что нужно знать о синтаксисе. Он на английском, но в этом и плюс — сразу учишь названия технологий на языке документации.
  3. Из литературы рекомендую три книги — «Чистый код», «Чистая архитектура» и «Грокаем алгоритмы». Первая книга учит, как правильно объявлять переменные и методы, как писать код, когда работаешь в команде. «Правило бойскаута» является одним из моих любимых. Я считаю, что эту книгу стоит прочесть всем начинающим разработчикам, вне зависимости от языка программирования.

    «Чистая архитектура» дала понять, какие подходы есть при построении приложений и систем в целом. Эти знания пригодились, когда мы только начинали проектировать Managed Redis. Обязательно к прочтению.

    В сообществе о книге «Грокаем алгоритмы» сложилось неоднозначное мнение, однако она помогла мне познакомиться с классическими алгоритмами. Они не всегда применяются в работе, но, на мой взгляд, их полезно знать. В любом случае на собеседованиях очень любят спрашивать алгоритмы. Чтобы закрепить знания, я расписывал код из книги на бумаге, дополнял его своими комментариями или собственными решениями.
  4. Также есть очень много статей по Go. Например, блог-пост «50 ошибок начинающих разработчиков на Go» — затрагивает много нюансов в контексте взаимодействия с железом и управлением указателями. Что-то из этого могут спросить в качестве каверзного вопроса на собеседовании.
  5. Стоит также ознакомиться с книгами по системной архитектуре. Например, начать можно с System Design Алекса Сюя.
  6. Дальше уже на вкус и цвет, смотря чем человек хочет заниматься. На YouTube множество интересных каналов — я изучал контент BACKEND NINJA, The Art of Development и TutorialEdge. Много видеоруководств собрано на сайте GolangResourses. Авторы рассказывают обо всем, вплоть до архитектуры Go-приложений и лучших практик написания кода — хотя каждая компания формирует собственные ADR. Например, мы в команде не используем сокращения, поэтому репозиторий всегда repository, а не repo, а запрос — request, а не req.

Кроме синтаксиса и особенностей Go, следует обязательно изучить несколько технологий из смежных сфер: SQL и теория баз данных, Apache Kafka, gRPC и протокол Protobuf.

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

Комментарии (5)


  1. whtmst
    00.00.0000 00:00
    +3

    Большое спасибо за ссылочки BACKEND NINJAThe Art of Development и GolangResourses мне как полному новичку они очень пригодятся. А вам удачи :)


    1. german_lepin Автор
      00.00.0000 00:00

      Супер! Очень рад, что статья помогла! И вам удачи!


  1. musk_2003
    00.00.0000 00:00
    +2

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


    1. german_lepin Автор
      00.00.0000 00:00
      +1

      Абсолютно согласен. Мок интервью крайне полезны и позволяют довольно быстро и эффективно подготовиться к реальному собеседованию!


      1. musk_2003
        00.00.0000 00:00
        +2

        Спасибо за вашу историю