Разработчик Владимир Балун, успевший поработать в Тинькофф, Mail.ru, «Лаборатории Касперского», Ozon и Яндексе, назвал довольно приземленные цифры из мира highload: в Ozon его сервисы переваривали 5–7 ГБ/с входящего трафика, в Яндексе — 10–11 ГБ/с. На этом фоне разговоры про то, что язык Go — это просто «синтаксис для джунов», звучат уже не так бодро: в production у него свои правила, ограничения и вполне взрослые зарплатные ожидания.
Об этом сообщает Habr / Карьера, опубликовав большое интервью с Балуном — разработчиком на C++ и Go, бывшим тимлидом инфраструктурной команды в Яндексе и основателем собственной школы программирования. Главная мысль материала проста: Go действительно проще многих системных языков на входе, но это не тот случай, когда «выучил за выходные и пошел строить распределенные сервисы». Особенно если речь не о pet-проекте, а о трассировке, логах, метриках и сервисах, которые живут под реальной нагрузкой.
Балун пришел в индустрию через C++ и не спешит списывать этот язык в архив. По его словам, огромный пласт софта по-прежнему написан на C++, и в ближайшие годы никто не побежит массово его переписывать только потому, что на рынке появился еще один удобный инструмент. Но как первый язык C++ он скорее не рекомендует: слишком высокий порог входа, слишком много нюансов, от указателей и шаблонов до неопределенного поведения, и слишком жесткий рынок для новичков. Go на этом фоне выглядит дружелюбнее. Синтаксис проще, ключевых слов мало, стартовать легче. Но здесь, как обычно, есть сноска мелким шрифтом: простота входа не означает простоту профессии.
Переход самого Балуна с C++ на Go начался не из любви к моде, а из вполне рабочего сценария. В Mail.ru он занимался ICQ и проектом MyTeam, который позже стал VK Teams. Старый C- и C++-код там соседствовал с новыми сервисами на Go, и необходимость одновременно дорабатывать несколько частей системы стала естественной точкой входа в новый стек. Сначала, вспоминает он, Go воспринимался как «C на стероидах». Ошибка была типичной для инженера, мигрирующего из одного языка в другой: писать на Go как на слегка перекрашенном C++. Позже это пришлось лечить практикой. Уже в Ozon Балун, по его словам, всерьез прокачался как Go-разработчик, а заодно словил показательный баг из-за попытки мысленно перенести C++-паттерн RAII в модель с defer. Выяснилось то, что многие узнают чуть позже и чуть больнее: одинаковые слова про ресурс и область видимости в разных языках не означают одинаковое поведение рантайма.
В интервью много полезного именно для тех, кто смотрит на язык Go не как на очередной хайповый тег в вакансиях, а как на рабочий инструмент. Балун довольно четко очерчивает его профиль. Go лучше всего чувствует себя в веб-сервисах и IO-bound-нагрузке: сетевые операции, чтение и запись в базы данных, работа с большим количеством запросов, внутренняя инфраструктура, observability, трассировка. Не случайно среди компаний, которые активно продвигали и продвигают Go, он перечисляет Ozon, Avito, Сбер, Тинькофф, Яндекс и VK. Рынок здесь тоже сыграл свою роль: язык поддержали крупные работодатели, появились митапы, доклады, инженерный контент, а вслед за этим — вакансии и переходы разработчиков из соседних стеков.
Но интервью не превращается в рекламный буклет. Минусы Go Балун тоже формулирует без пиетета. Первый — runtime и сборщик мусора, которые могут быть лишними или нежелательными в real-time-сценариях. Второй — неидеальность для compute-intensive-задач, где сервис в основном упирается в CPU, а не в сеть или диск. Иными словами, Go — не серебряная пуля, а вполне конкретный выбор под вполне конкретный класс систем. Для разработчиков и тимлидов это, пожалуй, даже хорошая новость: меньше религиозных споров, больше инженерной гигиены. Если нужна точная работа с ресурсами и предсказуемость на уровне, где GC уже мешает, придется смотреть в другие стороны. Если нужен быстрый, понятный и достаточно эффективный бэкенд под высокую сетевую нагрузку, Go остается сильным кандидатом.
Отдельно Балун прошелся по рынку найма, и здесь цифры получились куда интереснее абстрактных рассуждений о «востребованности». По его грубой оценке, junior Go-разработчик может рассчитывать на доход до 150 тысяч рублей, middle — примерно на 150–350 или 400 тысяч, senior — от 400 тысяч рублей и выше, с большим разбросом в зависимости от компании, региона и задачи. Он оговаривается, что это не универсальная таблица для всего рынка, но добавляет важную деталь: при переходе на Go в ряде случаев можно увидеть прибавку порядка 10–30% относительно некоторых других стеков. Одновременно рынок стал жестче. Желающих «свитчнуться» в Go больше, найм местами замедляется, где-то компании открывают позиции только на замену ушедших сотрудников. Спрос на Go, по его оценке, не падает, но конкуренция заметно растет.
Для новичков и тех, кто только строит маршрут в backend, у Балуна довольно трезвый рецепт без магии «Go за 10 часов». Синтаксис сам по себе не делает человека разработчиком. Сначала — фундамент: базы данных, SQL, сети, операционные системы, архитектура компьютера. Потом — прикладной стек: HTTP, gRPC, Docker, базовое понимание Kubernetes, плюс умение читать вакансии не как список страданий, а как ориентир по реальным требованиям рынка. И еще один неприятный, но полезный тезис: первую работу проще искать не в условном big tech, а в маленькой компании, где ниже порог входа и больше шансов получить промышленный опыт, а не только красивый список пройденных курсов.
На фоне вечных споров о том, какой язык «умирает», а какой «захватывает рынок», интервью Балуна выглядит ценным именно потому, что не пытается никого обратить в веру. C++ у него не умер, Go не объявлен панацеей, а highload не романтизирован. Для русскоязычной IT-аудитории вывод, пожалуй, самый практичный: язык Go остается сильным карьерным вариантом для бэкенда и инфраструктуры, но входить в него стоит не через миф о простоте, а через понимание задач, ограничений и того, как устроен production, когда каждая лишняя абстракция внезапно начинает стоить гигабайты в секунду.