Сегодня на рынке много IT-продуктов, и каждый хочет обойти конкурентов. Кто быстрее написал, протестировал и выкатил фичу, тот скорее занял нишу на рынке. В такой реальности писать код долго и длинно — роскошь. Популярными становятся языки с простым синтаксисом, более низким порогом вхождения, высокой производительностью. Go — один из них. Именно поэтому так востребованы специалисты, владеющие этим языком.
В статье расскажем, кто такой разработчик Go, где используется этот язык и сколько получает специалист, который пишет на голанге.
Какие задачи решает Go?
В 2009 году компания Google представила язык Golang, сокращенно Go. Он разрабатывался как проект с открытым исходным кодом и за время своего существования стал одним из самых популярных языков — занял шестое место по популярности в первом квартале 2024 года.
Язык Go объединяет в себе простоту написания кода на Python и скорость программирования на C++. Создатели языка искали решение для быстрого написания микросервисов. Так, в большом продукте микросервис или модуль выполняет конкретную функцию, а при объединении с другими складывается в полноценную и работающую систему. Например, в супер-апп-приложении, где можно заказать такси, найти каршеринг, заказать доставки, над каждым конкретным модулем работает отдельная команда программистов. И почти всегда для создания модуля используют язык Go.
Голанг позволяет быстро формировать высокопроизводительные приложения, способные работать на различных платформах: Linux, macOS и Windows. Кроме того, Go обладает мощными инструментами для работы с многопоточностью и асинхронным кодом, что опять-таки делает его идеальным для написания микросервисов. В целом, голанг применим для разных сфер программирования, но лучше всего он прижился на бэкенде — в серверной части приложений. Ведь именно там происходит обработка данных, вычисления, работа с базами данных, которые легко обрабатываются кодом на Go.
Сам язык Go строго типизирован, у каждой переменной есть свой тип, и его нельзя менять. Несмотря на это, голанг — простой, гибкий язык, в нем мало ключевых слов и неявных элементов. Основной упор сделан на эффективное использование вычислительных ресурсов при минимальных затратах и на написание кода благодаря встроенным в язык примитивам многопоточности.
Работая над голангом, разработчики хотели создать синтаксис, с помощью которого программисты не тратили бы время на рутинные задачи — под них в Go сразу сделали встроенные инструменты.
Для чего и как пишут код на Go?
Голанг задумывался как язык, который можно использовать для модулей или микросервисов. Поэтому если нужно писать код многопоточно, то отлично подойдет Go — у него много примитивов для обработки таких задач. Кроме того, с голангом удобно работать с HTTP, на нем можно быстро создавать API, а также мелкий портативный тулинг. Но чаще всего его используют для серверных приложений и сервисов, где есть сложные вычисления, многопоточные системы, парсеры.
Голанг подходит:
- для создания облачных и серверных приложений, веб-сервисов;
- DevOps и автоматизации процессов;
- создания приложений для работы с командной строкой;
- машинного обучения, работы с нейросетями и большими данными;
- программирования микроконтроллеров и робототехники.
На Golang были написаны многие популярные инструменты: Docker, Kubernetes, GitHub CLI и другие.
Среди множества фич, за которые Go получил признание среди разработчиков, особенно выделяют несколько:
- Облегченный синтаксис. Именно он позволяет писать код быстрее. Например, компилятор в языке сам расставляет точки с запятыми в нужных местах.
- Автоматическое создание документации с помощью команды в коде Go.
- Отслеживание устаревших конструкций в коде, подсвечивание их для удобства разработчика.
- Наличие инструментов тестирования. Внутри Go уже есть инструменты для тестирования: например, команды для упрощения сложных конструкций, поиска уязвимостей в коде, проверки соответствия типов в коде.
- Автоматическое управление памятью и сбор мусора.
Кроме того, язык поддерживается сообществом разработчиков. А это гарантирует наличие большого количества библиотек, инструментов и документации.
За моими плечами уже около 10 лет работы в бэкенд-разработке. За это время я программировал на Java, Scala, NodeJS, и сейчас на Go. К Golang я пришел со временем и это был осознанный выбор. Так что я могу сказать, что немного завидую тем, кто сразу начинает писать на Go.
Сейчас в мои обязанности входит ревью кода задач коллег — это довольно сложный навык, я считаю, что его можно наработать только с опытом, вряд ли этот навык вы сможете развить до начала работы. Здесь требуется понимать сложность решаемой бизнес-задачи и написанного кода, уметь адекватно текущей стадии проекта оценить качество реализации и поддерживаемости кода и при этом не потратить много времени.
Следующее ежедневное занятие — это написание кода для текущих задач. Бывает несколько уровней сложности в написании кода. Когда задача уже разделена на более мелкие задачи и вы добавляете код к текущей кодовой базе, это довольно легко, хотя порой тоже приходится подумать. На данном этапе существует много шаблонных решений, или так называемых «best practices» — как реализовывать API, как сделать кэш, ленивую инициализацию, реализовать синглтон, и так далее.
Все это — стандартные паттерны программирования, которые будут ожидать от начинающего разработчика. Понимание сложности алгоритмов, знание структур данных, умение работать с SQL или NoSQL базой данных, навыки работы с многопоточностью также являются базовым уровнем навыков для подобного рода задач.
Другой уровень сложности в написании кода — это реализация новой функциональности, требующей разработки или доработки существующей архитектуры приложения. Зачастую тут требуется понимать всю бизнес-логику приложения, чтобы сделать расширяемое и поддерживаемое решение, при этом не перегрузив его абстракциями.
Также на этом этапе обычно требуется понимание устройства внутренней работы системы или платформы, которая будет использоваться для реализации нового функционала. Задача часто состоит в том, чтобы найти баланс между сложностью предлагаемого решения и, как результат, стоимостью его поддержки в будущем, и временем, затраченным на реализацию. Можно сделать супер-крутое расширяемое решение, но потратить на это 2-3 месяца и в итоге бизнес не успеет предложить конкурентное решение и закроется.
Если сделать слишком просто и в лоб, то через полгода с данным кодом будет невозможно работать и будет тратиться огромное количество времени и страданий на его поддержку. Из навыков здесь чаще требуется хорошее знание многопоточности, понимание ограничений распределенных систем, хорошее умение абстрагировать и разделять и организовывать приложение на независимые части, выбирать подходы, которые заложат дальнейшее развитие сервиса на много лет вперед.
Еще один уровень задач, с которыми приходится сталкиваться — это проектирование архитектуры системы и разработка новых сервисов с нуля. Такого рода задачи появляются реже, но они и самые ответственные и сложные. Нужно уметь разобраться со всеми бизнес-требованиями, потенциальными ограничениями и усложнениями логики в будущем, придумать архитектуру системы, выбрать формат и тип передачи данных, спроектировать схемы базы данных и сообщений, договориться со смежными системами о взаимодействии, а также обсудить с заказчиками все проблемы, договориться о компромиссах и оценить сроки.
На данном уровне начинают преобладать навыки проектирования систем (больше одного сервиса), опыт работы с микросервисами и распределенными системами, шинами данных и внешними кэшами, умение общаться с заказчиками, доносить до них технические проблемы, находить компромиссы и договариваться о сроках.
Какие технические навыки нужны, чтобы начать программировать на Go?
Погружение в голанг у каждого происходит по-разному. Иногда разработчик осваивает его в качестве второго языка, иногда начинает изучать разработку с него.
По словам создателя Go Роба Пайка, у языка есть много общих черт с C, C++ или Java, поэтому освоить голанг в качестве второго языка тем, у кого есть база из этих языков, будет несложно. Go не станет чем-то абсолютно новым, но даст новые инструменты и сократит длительность разработки. Если голанг — первый язык, стоит сначала получить базовое представление о C, C++, Java или Python.
Само изучение Go не отличается от изучения других языков. Отталкиваться лучше от позиции: учить Go — значит учить язык для бэкенда. Потом, когда освоите его и будете уверены в своих умениях, можете попробовать использовать его в других сферах разработки.
Краткий план освоения Go:
- Общие принципы backend-разработки.
- Основы разработки микросервисов.
- Работа в Linux.
- Базовые навыки по работе в Git.
- Основные функции, операторы и типы данных языка Go.
- Базы данных и умение формировать запросы.
- Принципы работы с протоколом HTTP.
- Основы многопоточности.
- Тестирование качества кода.
Что же касается технических навыков, на которые смотрят при приеме на работу, то часто у специалистов проверяют:
- Опыт работы с системами контроля версий, такими как Git.
- Понимание принципов объектно-ориентированного программирования и умение их применять.
- Навыки работы с базами данных, такими как MySQL или PostgreSQL.
- Знание основ сетевого программирования.
- Умение работать с API различных сервисов и программ.
- Опыт разработки веб-приложений с использованием фреймворка вроде Gin или Echo.
- Навык тестирования и отладки кода.
- Опыт работы с облачными сервисами, такими как Amazon Web Services или Google Cloud Platform.
- Знание принципов работы с контейнерами, такими как Docker.
- Владение инструментами для непрерывной интеграции, такими как Jenkins или GitLab CI/CD.
- Опыт работы со средствами мониторинга и логирования, такими как Prometheus, Grafana и Loki.
А нужны ли soft skills?
Знать Go и писать на нем — это лишь половина успеха для программиста. Узкие профессиональные знания не перекрывают и не компенсируют замкнутость, недостаток эмоционального интеллекта и отсутствие других soft skills. ИТ-компании предпочитают кандидатов, которые могут и хотят коммуницировать. HR-менеджеры и тимлиды при подборе кандидатов уделяют особое внимание их способности работать в команде, лидерству, навыкам эффективного взаимодействия с клиентами и адаптивности.
Также важна готовность постоянно учиться и критически оценивать свое обучение, задавать вопрос: «Как повлияет новое обучение на мой уровень зарплаты или мое развитие?»
Кроме этого, навыки тайм-менеджмента и приоритизации задач также остаются востребованными среди работодателей — никому не хочется напоминать о дедлайнах. Умение приоритизировать задачи и управлять своим временем — ключевой навык в эпоху непрекращающегося потока работы.
Фундаментальный hard-skill для Go-разработчика — это, конечно, владение синтаксисом языка на высоком уровне.
Помимо синтаксиса важно понимать алгоритмы и структуры данных — массивы, списки, хеш-таблицы и деревья, а также алгоритмов сортировки и поиска. Это поможет в разработке эффективных и оптимизированных решений. Необходимо знать и инструменты разработчика, уметь работать с системами контроля версий Git, командной строкой (CLI) и системой сборки golang.
Начать путь в Go-разработке можно с самостоятельного изучения. Официальный сайт Go предлагает обширную документацию и руководства, которые помогут освоить этот язык.
При изучении Go не лишним будет чтение специализированной литературы. Например, пособие «Паттерны разработки», которое поможет понять практики разработки и применение шаблонов проектирования. Полезны также будут книги Роберта Мартина «Чистый код» и Эрика Фримана «Head First. Изучаем Go».
И, разумеется, практика — неотъемлемая часть процесса становления Go-разработчиком.
Зарплата Go разработчиков
По подсчетам сервиса Stack Overflow за 2023 год, Go-разработчик может зарабатывать в среднем в мире $92 тыс. в год — это десятая позиция по прибыльности среди существующих языков. Если же обратиться к популярным языкам, то средняя зарплата Python-разработчика — $78 тыс. в год, JS-разработчика — $74 тыс. в год, а Java-программиста — $72 тыс. в год. Go давно используют ряд таких гигантов, как Amazon, Microsoft, Cisco Systems, Netflix, Spotify, Apple.
Что же касается российского рынка голанг-разработчиков, то на середину апреля 2024 года на сайте HeadHunter была 1601 вакансия с упоминанием языка программирования Go. Зарплата начиналась от 50 тыс. рублей, при этом есть около 50 вакансий, где доход стартовал от 500 000 тыс. рублей в месяц. Уже сегодня российские компании пишут часть кода на голанге. Например, его используют в Mail.ru Group, Avito, Ozon, Lamoda, «Ростелекоме».
По исследованию рынка IT-вакансий Habr, в 2023 году вырос спрос на backend-разработчиков. Самыми быстрорастущими стеками стали Python (30%), Java (17%), С++ (15%) и Golang (13%). Авторы отмечают, что если интерес к Python традиционно высокий, то к Go он значительно вырос, так как этот язык быстрее Java и PHP и многие компании либо запускают новые проекты на Go, либо переписывают на нем старые продукты. Go привлекает все больше внимания благодаря своей производительности, простоте использования и поддержке параллельных вычислений, нo остается нишевым языком. Поэтому пока спрос на таких специалистов превышает предложение.