golang

Бесит, что err != nil: главные инсайты из опроса Go-разработчиков

  • вторник, 31 января 2023 г. в 00:41:49
https://habr.com/ru/article/713190/
  • Блог компании СберМаркет
  • Go
  • Исследования и прогнозы в IT


Месяц назад мы вместе с Хабром спросили у Go‑разработчиков, чем они живут, над какими задачами работают и где черпают полезную информацию о Go. В этом посте расскажем об основных инсайтах, а также узнаем, почему многие Go‑разработчики знают Python и мечтают выучить Rust.


Сферический Go-разработчик: микрокоманда, пара лет опыта и карьерный пивот

Всего опросник заполнили 1,5 тысячи практикующих Golang‑разработчиков. В основном это молодые программисты, работающие в небольших командах, для которых Go — единственный или основной язык программирования. Больше всего специалистов с опытом 1–3 года или 10 лет в коммерческой разработке, — эти когорты набрали более 20%. После них с 18% идёт группа тех, у кого пока совсем нет опыта коммерческой разработки. Но в целом разброс значений между всеми шестью группами небольшой. Это показывает, что Golang востребован у широкого круга разработчиков, от начинающих до опытных.

При этом опыт коммерческой разработки именно на Go в среднем гораздо меньше опыта в разработке в целом: явно лидируют группы 1–3 года (33%), меньше года (26%) и нет опыта (23%). Интересно, что 2% программистов вкатились в Go практически сразу после его релиза в 2009 году, и сейчас у них накопилось уже больше 10 лет опыта. 

Получается, среднестатистический Golang‑разработчик стартовал в программировании с другого языка, через несколько лет попробовал Go и со временем перешёл на него полностью, забросив другие языки.

Это неудивительно, ведь Golang появился лишь 10 лет назад, а популярность обрёл совсем недавно. Сейчас на Go переписывают как старые проекты, так и новые, поэтому спрос на Go‑разработчиков превышает предложение и в коммерческую разработку можно попасть с небольшим опытом. Например, мы в СберМаркет Tech в 2020 и 2021 году переучивали на Go Ruby‑разработчиков.

Софья Михайлова

Golang-разработчик в СберМаркет Tech

Количество Go‑разработчиков в компаниях, судя по опросу, чаще всего небольшое: 29,9% отметили, что у них до 10 человек, а 28% — что они у себя одни пишут на Go. Правда, 15% выбрали вариант «А гофер его знает!» — но тут уже неудобные размышления подкидывает логика: ведь они же и сами гоферы, следовательно, должны это знать. В общем, что‑то не сходится.

Как компания, находящаяся в самом пекле микросервисной трансформации и имеющая в штате 100+ Go‑разработчиков и полноценную PaaS‑команду, рискнём предположить, почему так происходит. Стратегическое решение по распилу монолита требует много трудозатрат и ещё больше экспертизы, и когда оно принято, количество Go‑разработчиков стремительно растёт от 50 до 100, а затем и до бесконечности.

Максим Исаченко

Golang-разработчик в СберМаркет Tech

Землю — крестьянам, фабрики — рабочим, Golang — микросервисам и веб-приложениям

Два главных направления, в которых используется Go, — создание веб‑приложений и микросервисов. Они набрали 29% и 46% соответственно. Обработка данных, создание консольных утилит и управление IT‑инфраструктурой — не такие популярные сферы применения Golang, они набрали по 5–7% голосов.

Go слегка отстаёт от С++ по производительности, зато позволяет разрабатывать продукт гораздо быстрее, благодаря чему и стал популярен в высоконагруженных сервисах. А если не надо поддерживать большие нагрузки, то быстрее написать код на Python.

Софья Михайлова

Golang-разработчик в СберМаркет Tech

Для 53% участников опроса Go — основной язык разработки, причём 40% респондентов из этой группы используют в работе только его.

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

Тут нам стало интересно: то ли эти 36% уже постигли всё, что нужно, и даже больше, то ли им просто хорошо живётся в своём аскетичном Golang‑мирке. Мы закопались в ответы и выяснили, что всего у 5% респондентов Go — единственный рабочий инструмент и они не хотят освоить ещё какие‑то технологии. И все они работают с ним не более трёх лет. Бинго!

Самые популярные языки в связке с Go — это Python и JavaScript. Немного отстаёт от них PHP (но с ним всё понятно — на многих проектах Go как раз его и заменяет, так что PHP необходим для поддержки легаси‑кода). Ещё участники отметили C++, Java, C# и Rust — но использует их совсем немного гошников. Есть и совсем экзотика — кто‑то умудряется «поженить» Go с Clojure, Lua, Elixir и даже Pascal!

Здесь у нас появилось две гипотезы, почему первые места за Python и JS:

Именно они (плюс идущий третьим PHP) чаще всего используются в проектах, которые решают разделять на микросервисы. Значит именно на этих языках раньше писали ребята. А первая любовь не забывается никогда.

Python изучают для тестирования, разработки утилит и прототипов, чтобы быстро писать код без оглядки на производительность. А JavaScript выглядит логичным продолжением для фулстек‑разработки.

Максим Исаченко

Golang-разработчик в СберМаркет Tech

Те же 42% респондентов, которые отметили, что Go для них дополнительный инструмент, чаще всего используют уже знакомые нам Python, PHP и Java. Правда, к этим лидерам добавился JavaScript (неужели и сюда забрёл кто‑то, кто путает Java и JS?!). Близки к группе лидеров и два «си» — C++ и C#.

Но и здесь попадается экзотика — например, Go иногда используют в дополнение к Swift, Perl, Dart, Haskell. Причём Swift и Dart как бы намекают, что кто‑то одной рукой пилит бэк на Go для мобильных приложений, а второй рукой — сами эти мобильные приложения.

Интересно, что в целом Go нравится разработчикам: лишь 5% участников опроса спят и видят, как бы перейти на другие технологии. Основная же часть гошников хочет всего лишь обогатить текущий стек.

А вот конкретные интересы в расширении стека расходятся с реальными рабочими задачами — тут с большим отрывом лидирует любимчик и фаворит опросов Stack Overflow последних лет Rust (который, как и Go, должен был стать «убийцей C++», но тоже нашёл свою собственную нишу). За ним в топе идут уже логично вытекающие из популярных рабочих задач Python, JavaScript и его менее злой брат‑близнец от «Майкрософта» TypeScript.

Можно было бы сказать, что чистого Go разработчикам не хватает и его хотят дополнить другими полезными инструментами вроде Rust, Python и JS, но есть нюанс. Нередко разработчики абстрактно хотят поизучать разные языки. Поэтому надёжнее было бы ориентироваться на те языки, которые на практике используются вместе с Go.

Тот же Python, например в вебе, микросервисах и контейнерах, используется повсеместно, причём не только с Go, но и с другими бэкенд‑языками. JS же, кроме того, что практически безраздельно правит во фронтенде, который бэкендерам так или иначе иногда приходится трогать, так же распространён и на бэке — благодаря node.js. А значит, писать новые микросервисы на Go и параллельно поддерживать легаси‑код на JS и PHP вполне реально.

Либо ошибки, либо ничего: что бесит в Go

Есть в Go и раздражающие моменты. В топе — обработка ошибок, а скорее, необходимость делать это явно и всегда.

Ещё часть разработчиков бесит синтаксис, отсутствие конкретного функционала (пожалуй, стандартная претензия практически любому универсальному языку — тому же Kotlin за это достается регулярно), многословность и маленькая стандартная библиотека. Но, кажется, это те самые принципы, на которых Go основан, и он не был бы собой, будь эти моменты устроены по‑другому. Некоторым даже не нравятся дженерики — только непонятно, что имеется в виду: что их долго не было или что они как‑то криво реализованы.

Хотя Go — это С‑подобный язык, некоторые особенности его синтаксиса непривычны разработчикам, которые только-только вкатываются в Go или используют его в связке с другими языками. Например, тип данных объявляется после названия переменной, а обработка ошибок требует чуть больше кода. Из‑за таких мелочей некоторые программисты и плюются.

Софья Михайлова

Golang-разработчик в СберМаркет Tech

RTFM, тележечка и Хабр: как разработчики прокачиваются в Go

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

Другие источники информации не особо популярны — тот же популярный в англоязычной среде medium оказался где‑то в хвосте (видимо, читать на русском языке отечественным разработчикам пока что привычнее и проще).

Поисковики тоже не в топе — но тут, скорее всего, дело в формулировке вопроса: где ищешь интересную информацию о Go. Как правило, именно интересную и новую информацию загуглить невозможно. Всё‑таки поисковики больше подходят для решения конкретных задач и поиска ответов на том же Stack Overflow.

А вот рекомендации от участников опроса — блоги, телеграм-каналы и подкасты, из которых они черпают информацию.

Блоги и сайты
Курсы

Курс по Go от МФТИ на Coursera (сейчас недоступен)

Курсы от Rebrain

Курсы на Stepik

Уроки по Golang

Курсы go101

YouTube
Конференции
Телеграм-каналы
Подкасты

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

В Go не так уж много подводных камней. На собеседованиях специфичные вопросы по Go вызывают меньше трудностей, чем общие вопросы по Computer Science, в особенности по структурам данных. Вот вопросы по Go, о которые частенько спотыкаются кандидаты:
Использование конкатенации строк вместо strings.builder (может превратить алгоритм создания строки из линейного в экспоненциальный).
Ошибки синхронизации горутин: дедлоки, неиспользование WaitGroup и Mutex.
Ошибки при работе со срезами: неправильная передача среза в функцию по указателю или не использование опционального параметра capacity при использовании slice expression (arr[2:4:4]).

Эмиль Шарифуллин

Старший Golang-разработчик в СберМаркет Tech

Выводы

Go-комьюнити достаточно молодое — основная часть разработчиков используют язык не больше трёх лет. При этом самая большая группа гоферов — это опытные программисты с более чем 10-летним стажем.

Чтобы прокачать карьеру, рекомендуем дополнительно к Go посмотреть Python, JavaScript и Java — они часто идут в дополнение к Go или, наоборот, тянут его за собой.

Сам язык большинству участников опроса нравится, что бьётся и исследованием Stack Overflow, где у Go очень неплохие показатели: 65% loved против 34% dreaded. При этом некоторые фишки, лежащие в основе языка, разработчиков раздражают — к ним относится обработка ошибок и скудость стандартной библиотеки, которая приводит к необходимости самостоятельно писать то, что в других языках уже реализовано «из коробки».

Несмотря на то, что в реальных задачах вместе с Go Rust практически не используется, большинство участников опроса указали, что именно его они хотели бы выучить дополнительно к Go.

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

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

Что касается будущего Go, ежедневно в языке появляются новые библиотеки и фреймворки, которые, например, позволяют добавлять GUI, писать игры и даже мобильные приложения. Однако вряд ли Go внезапно превратится в лучший язык для настольных приложений или пошатнет C++ в сфере разработки игр. У Go есть своя ниша, поэтому его популярность только продолжит расти. Вангуем, что в 2023 количество проектов и вакансий на Go будет планомерно увеличиваться (в том числе и у нас в СберМаркет Tech). 

Эмиль Шарифуллин

Старший Golang-разработчик в СберМаркет Tech

Маленький незаметный раздел для тех, кто дочитал до конца

Псс, прямо сейчас в telegram-канале SberMarket Tech мы разыгрываем билет на одну небезызвестную онлайн-конференцию по Go. Если ты ещё здесь, значит Go — определённо в топе твоих интересов. Приглашаем поучаствовать.