Месяц назад мы вместе с Хабром спросили у Go‑разработчиков, чем они живут, над какими задачами работают и где черпают полезную информацию о Go. В этом посте расскажем об основных инсайтах, а также узнаем, почему многие Go‑разработчики знают Python и мечтают выучить Rust.
Сферический Go-разработчик: микрокоманда, пара лет опыта и карьерный пивот
Всего опросник заполнили 1,5 тысячи практикующих Golang‑разработчиков. В основном это молодые программисты, работающие в небольших командах, для которых Go — единственный или основной язык программирования. Больше всего специалистов с опытом 1–3 года или 10 лет в коммерческой разработке, — эти когорты набрали более 20%. После них с 18% идёт группа тех, у кого пока совсем нет опыта коммерческой разработки. Но в целом разброс значений между всеми шестью группами небольшой. Это показывает, что Golang востребован у широкого круга разработчиков, от начинающих до опытных.
![](https://habrastorage.org/getpro/habr/upload_files/774/e63/3f3/774e633f3567f3030285ef11b9d60d31.jpg)
При этом опыт коммерческой разработки именно на Go в среднем гораздо меньше опыта в разработке в целом: явно лидируют группы 1–3 года (33%), меньше года (26%) и нет опыта (23%). Интересно, что 2% программистов вкатились в Go практически сразу после его релиза в 2009 году, и сейчас у них накопилось уже больше 10 лет опыта.
![](https://habrastorage.org/getpro/habr/upload_files/016/04d/193/01604d1933a4fa8e57deb5c2f96a12e7.jpg)
Получается, среднестатистический Golang‑разработчик стартовал в программировании с другого языка, через несколько лет попробовал Go и со временем перешёл на него полностью, забросив другие языки.
Это неудивительно, ведь Golang появился лишь 10 лет назад, а популярность обрёл совсем недавно. Сейчас на Go переписывают как старые проекты, так и новые, поэтому спрос на Go‑разработчиков превышает предложение и в коммерческую разработку можно попасть с небольшим опытом. Например, мы в СберМаркет Tech в 2020 и 2021 году переучивали на Go Ruby‑разработчиков.
![](https://habrastorage.org/getpro/habr/upload_files/cbe/1cf/54e/cbe1cf54e6af2d12dc896bd23281f5f4.png)
Софья Михайлова
Golang-разработчик в СберМаркет Tech
Количество Go‑разработчиков в компаниях, судя по опросу, чаще всего небольшое: 29,9% отметили, что у них до 10 человек, а 28% — что они у себя одни пишут на Go. Правда, 15% выбрали вариант «А гофер его знает!» — но тут уже неудобные размышления подкидывает логика: ведь они же и сами гоферы, следовательно, должны это знать. В общем, что‑то не сходится.
![](https://habrastorage.org/getpro/habr/upload_files/a4b/356/9f4/a4b3569f4b0a38994f5f0585493a8720.png)
Как компания, находящаяся в самом пекле микросервисной трансформации и имеющая в штате 100+ Go‑разработчиков и полноценную PaaS‑команду, рискнём предположить, почему так происходит. Стратегическое решение по распилу монолита требует много трудозатрат и ещё больше экспертизы, и когда оно принято, количество Go‑разработчиков стремительно растёт от 50 до 100, а затем и до бесконечности.
![](https://habrastorage.org/getpro/habr/upload_files/e89/202/83b/e8920283b6ed4476bf3a895e34ae8ef6.png)
Максим Исаченко
Golang-разработчик в СберМаркет Tech
Землю — крестьянам, фабрики — рабочим, Golang — микросервисам и веб-приложениям
Два главных направления, в которых используется Go, — создание веб‑приложений и микросервисов. Они набрали 29% и 46% соответственно. Обработка данных, создание консольных утилит и управление IT‑инфраструктурой — не такие популярные сферы применения Golang, они набрали по 5–7% голосов.
![](https://habrastorage.org/getpro/habr/upload_files/f50/ce2/7ca/f50ce27caa4055e97a6bb85216c06b35.png)
Go слегка отстаёт от С++ по производительности, зато позволяет разрабатывать продукт гораздо быстрее, благодаря чему и стал популярен в высоконагруженных сервисах. А если не надо поддерживать большие нагрузки, то быстрее написать код на Python.
![](https://habrastorage.org/getpro/habr/upload_files/b23/c42/128/b23c42128ec042e2880c489a5ace7d64.png)
Софья Михайлова
Golang-разработчик в СберМаркет Tech
Для 53% участников опроса Go — основной язык разработки, причём 40% респондентов из этой группы используют в работе только его.
![](https://habrastorage.org/getpro/habr/upload_files/cc1/406/11a/cc140611ade4eb4cb1e5c2167ff8b2de.png)
При этом 61% разработчиков, для которых Go — основной язык, хотят расширить свой стек, а 36% полностью устраивает уже изученный набор технологий.
Тут нам стало интересно: то ли эти 36% уже постигли всё, что нужно, и даже больше, то ли им просто хорошо живётся в своём аскетичном Golang‑мирке. Мы закопались в ответы и выяснили, что всего у 5% респондентов Go — единственный рабочий инструмент и они не хотят освоить ещё какие‑то технологии. И все они работают с ним не более трёх лет. Бинго!
![](https://habrastorage.org/getpro/habr/upload_files/22b/b9e/f63/22bb9ef6337fb9554522d95efbbfdffe.png)
Самые популярные языки в связке с Go — это Python и JavaScript. Немного отстаёт от них PHP (но с ним всё понятно — на многих проектах Go как раз его и заменяет, так что PHP необходим для поддержки легаси‑кода). Ещё участники отметили C++, Java, C# и Rust — но использует их совсем немного гошников. Есть и совсем экзотика — кто‑то умудряется «поженить» Go с Clojure, Lua, Elixir и даже Pascal!
![](https://habrastorage.org/getpro/habr/upload_files/0b3/c64/ec6/0b3c64ec6776676f9e6f3b1f0524b653.png)
Здесь у нас появилось две гипотезы, почему первые места за Python и JS:
• Именно они (плюс идущий третьим PHP) чаще всего используются в проектах, которые решают разделять на микросервисы. Значит именно на этих языках раньше писали ребята. А первая любовь не забывается никогда.
• Python изучают для тестирования, разработки утилит и прототипов, чтобы быстро писать код без оглядки на производительность. А JavaScript выглядит логичным продолжением для фулстек‑разработки.
![](https://habrastorage.org/getpro/habr/upload_files/df1/550/34f/df155034f7d947b2b0aad191e11d99bc.png)
Максим Исаченко
Golang-разработчик в СберМаркет Tech
Те же 42% респондентов, которые отметили, что Go для них дополнительный инструмент, чаще всего используют уже знакомые нам Python, PHP и Java. Правда, к этим лидерам добавился JavaScript (неужели и сюда забрёл кто‑то, кто путает Java и JS?!). Близки к группе лидеров и два «си» — C++ и C#.
Но и здесь попадается экзотика — например, Go иногда используют в дополнение к Swift, Perl, Dart, Haskell. Причём Swift и Dart как бы намекают, что кто‑то одной рукой пилит бэк на Go для мобильных приложений, а второй рукой — сами эти мобильные приложения.
![](https://habrastorage.org/getpro/habr/upload_files/783/cfd/45a/783cfd45af87d00563fed2b5a5f496a2.png)
Интересно, что в целом Go нравится разработчикам: лишь 5% участников опроса спят и видят, как бы перейти на другие технологии. Основная же часть гошников хочет всего лишь обогатить текущий стек.
![](https://habrastorage.org/getpro/habr/upload_files/dec/6a5/deb/dec6a5debac5fa8bcb41e58f0934eccf.jpg)
А вот конкретные интересы в расширении стека расходятся с реальными рабочими задачами — тут с большим отрывом лидирует любимчик и фаворит опросов Stack Overflow последних лет Rust (который, как и Go, должен был стать «убийцей C++», но тоже нашёл свою собственную нишу). За ним в топе идут уже логично вытекающие из популярных рабочих задач Python, JavaScript и его менее злой брат‑близнец от «Майкрософта» TypeScript.
Можно было бы сказать, что чистого Go разработчикам не хватает и его хотят дополнить другими полезными инструментами вроде Rust, Python и JS, но есть нюанс. Нередко разработчики абстрактно хотят поизучать разные языки. Поэтому надёжнее было бы ориентироваться на те языки, которые на практике используются вместе с Go.
Тот же Python, например в вебе, микросервисах и контейнерах, используется повсеместно, причём не только с Go, но и с другими бэкенд‑языками. JS же, кроме того, что практически безраздельно правит во фронтенде, который бэкендерам так или иначе иногда приходится трогать, так же распространён и на бэке — благодаря node.js. А значит, писать новые микросервисы на Go и параллельно поддерживать легаси‑код на JS и PHP вполне реально.
![](https://habrastorage.org/getpro/habr/upload_files/ce7/6d9/eb0/ce76d9eb00e3f7f4e435adf40ab6072e.png)
Либо ошибки, либо ничего: что бесит в Go
Есть в Go и раздражающие моменты. В топе — обработка ошибок, а скорее, необходимость делать это явно и всегда.
Ещё часть разработчиков бесит синтаксис, отсутствие конкретного функционала (пожалуй, стандартная претензия практически любому универсальному языку — тому же Kotlin за это достается регулярно), многословность и маленькая стандартная библиотека. Но, кажется, это те самые принципы, на которых Go основан, и он не был бы собой, будь эти моменты устроены по‑другому. Некоторым даже не нравятся дженерики — только непонятно, что имеется в виду: что их долго не было или что они как‑то криво реализованы.
![](https://habrastorage.org/getpro/habr/upload_files/5a8/fb9/1c8/5a8fb91c872a39e07308be56d24f3e27.png)
Хотя Go — это С‑подобный язык, некоторые особенности его синтаксиса непривычны разработчикам, которые только-только вкатываются в Go или используют его в связке с другими языками. Например, тип данных объявляется после названия переменной, а обработка ошибок требует чуть больше кода. Из‑за таких мелочей некоторые программисты и плюются.
![](https://habrastorage.org/getpro/habr/upload_files/d06/624/e48/d06624e48bc18714c2dc470819de858b.png)
Софья Михайлова
Golang-разработчик в СберМаркет Tech
RTFM, тележечка и Хабр: как разработчики прокачиваются в Go
Основная часть респондентов ищет новую информацию о Go на Хабре — весьма неожиданно для опроса, который проходил на Хабре. На втором месте — телеграм‑каналы, а вслед за ними — официальный сайт и документация языка (которую многие гошники чуть ли не боготворят, настолько классно она спроектирована). Чуть меньше пользуются спросом книги.
Другие источники информации не особо популярны — тот же популярный в англоязычной среде medium оказался где‑то в хвосте (видимо, читать на русском языке отечественным разработчикам пока что привычнее и проще).
Поисковики тоже не в топе — но тут, скорее всего, дело в формулировке вопроса: где ищешь интересную информацию о Go. Как правило, именно интересную и новую информацию загуглить невозможно. Всё‑таки поисковики больше подходят для решения конкретных задач и поиска ответов на том же Stack Overflow.
![](https://habrastorage.org/getpro/habr/upload_files/693/fe2/517/693fe25179d1669b8753138ff6476692.png)
А вот рекомендации от участников опроса — блоги, телеграм-каналы и подкасты, из которых они черпают информацию.
Блоги и сайты
YouTube
Телеграм-каналы
Среди тем, которые вызывают наибольшие сложности или интерес, участники опросы особенно выделили best practices и кейсы, материалы по архитектуре приложений и разработке систем, сервисов и приложений. При этом довольно большая часть респондентов считает, что уже доступных материалов и так хватает.
![](https://habrastorage.org/getpro/habr/upload_files/ebc/bab/ec3/ebcbabec310b94b2eed1a3105331379f.png)
В Go не так уж много подводных камней. На собеседованиях специфичные вопросы по Go вызывают меньше трудностей, чем общие вопросы по Computer Science, в особенности по структурам данных. Вот вопросы по Go, о которые частенько спотыкаются кандидаты:
• Использование конкатенации строк вместо strings.builder (может превратить алгоритм создания строки из линейного в экспоненциальный).
• Ошибки синхронизации горутин: дедлоки, неиспользование WaitGroup и Mutex.
• Ошибки при работе со срезами: неправильная передача среза в функцию по указателю или не использование опционального параметра capacity при использовании slice expression (arr[2:4:4]).
![](https://habrastorage.org/getpro/habr/upload_files/667/fb9/bae/667fb9bae8ce39db171cdc06cc880c75.png)
Эмиль Шарифуллин
Старший 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).
![](https://habrastorage.org/getpro/habr/upload_files/c6a/3a3/307/c6a3a330731ac0488e0331afbe12e28a.png)
Эмиль Шарифуллин
Старший Golang-разработчик в СберМаркет Tech
Маленький незаметный раздел для тех, кто дочитал до конца
Псс, прямо сейчас в telegram-канале SberMarket Tech мы разыгрываем билет на одну небезызвестную онлайн-конференцию по Go. Если ты ещё здесь, значит Go — определённо в топе твоих интересов. Приглашаем поучаствовать.