Зачем ВКонтакте инвестирует в обучение Go и как это меняет команду
Не так давно ВКонтакте стартовала масштабная технологическая трансформация: соцсеть переходит на сервисную архитектуру, создаётся единая платформа разработки. Этот процесс потребовал значительных ресурсов и новых подходов к развитию команды. Мы усилили наём внешних Go-разработчиков и запустили внутреннюю программу переобучения сотрудников.
Я Павел Микушин, руководитель группы бэкенд-разработки направления музыкальных сервисов ВКонтакте. Недавно прошёл курс переобучения с языка РНР на Go в первом потоке, в этой статье расскажу про свой опыт.
Зачем трансформация и почему Go
Когда-то ВКонтакте разработала собственный форк PHP (форк — это создание новой независимой копии программного проекта, которая развивается отдельно от оригинала), чтобы быстро запускать новые фичи и масштабировать продукт. Но время идёт, ранее эффективная монолитная архитектура сегодня не позволяет гибко внедрять инновации, усложняет масштабирование и поддержание стабильности. Поэтому мы решили перейти на сервисную архитектуру, чтобы каждая команда могла разрабатывать и сопровождать свою часть продукта независимо от других.
Для новой архитектуры мы выбрали язык программирования Go (Golang). Он подходит для построения высоконагруженных распределённых систем. Среди его плюсов: производительность, простота синтаксиса и встроенная поддержка параллелизма. Go широко используется для разработки масштабируемых сервисов.
Но был нюанс: часть разработчиков ВКонтакте пишут на PHP.Чтобы реализовать новую стратегию, компания поставила перед собой большую задачу — переобучить сотрудников на новый язык. Для разработчиков организовали возможность освоить Go внутри компании.
Программа переобучения: принципы и этапы
Программа переобучения разрабатывалась с нуля под специфику ВКонтакте. Занятия были адаптированы под реальные кейсы и процессы внутри компании, а преподавали практикующие Go-разработчики ВКонтакте.
В основе материала и методики — базовые принципы, которые в итоге помогают участникам сразу вливаться в новые рабочие задачи:
- «Не обучаем Go с нуля», — так сказали эксперты на первой встрече с участниками. Это значит, что разработчики сами осваивали нужную базу: например, самостоятельно вне курса изучали синтаксис Go. Такой подход позволил сразу сфокусироваться на более сложных и практических аспектах. Как выпускник курса замечу: считаю такой подход правильным. Инженер должен уметь решать задачи, а не фанатеть от инструментов
- Фокус на архитектуре и инфраструктуре. Особое внимание на курсе уделялось вопросам построения архитектуры сервисов и особенностям инфраструктуры на Go при работе с высоконагруженными системами. Курс был ориентирован на подходы и принципы, сформированные внутри ВКонтакте, а его логика была синхронизирована со спецификой внутренней PaaS-платформы, что позволяло максимально учитывать особенности корпоративной среды
- Практический подход. В центре программы — выполнение проекта: каждый участник разрабатывал каркас микросервиса, максимально приближенный к реальным задачам компании
Как разработчику и руководителю мне было важно, чтобы я и команда как можно скорее могли браться за реальные микросервисы на новом языке. На курсе мы поэтапно погружались в Go и разные процессы:
вникали в архитектуру сервисов и проектирование кода
узнавали, как обрабатывать ошибки, разделять техническую и бизнес-логику, работать с базой данных, асинхронным программированием и тестированием
изучали информационную безопасность, организацию окружения (Docker, Makefile, логирование), межсервисное взаимодействие и интеграции с внутренней инфраструктурой ВКонтакте
В конце обучения каждый участник защищал индивидуальный проект.
После курса: работа на Go и изменения в команде
Новые архитектурные подходы мы с командой начали применять сразу после переобучения. В первый месяц скорость разработки, конечно, замедлилась — это закономерно. Но у нас есть и PHP-разработчики, и специалисты с опытом на Go, и мы не делили задачи на старые и новые. Переход на микросервисы — общий челлендж и зона роста. Так что совместная практика и поддержка друг друга помогли постепенно набрать привычный темп и ускорить процесс разработки. Мы освоились в новой парадигме асинхронности и научились лучше управлять рабочими потоками.
Если в целом говорить о влиянии программы на команду, могу выделить несколько мыслей. Есть мнение, что такие программы — формальность для корпоративной галочки. Но по своему опыту ощущения другие:
- Мы как специалисты развиваемся стратегически вместе с компанией. Наши знания о продукте, наш опыт в том, как его улучшать, командная работа, — всё это осталось базовой ценностью для компании. Вместо массового найма с рынка ставка сделана на неё. И профит получается общим: накопленные знания сохраняются внутри компании и развиваются в новом технологическом контексте
- Чувствуем профессиональную уверенность. Как уже сказал, мы через программу обучения логично встроились в стратегию развития компании. Так инженеры получили не только новый рабочий инструмент, но и понимание, как наш рост синхронизируется с верхнеуровневыми целями бизнеса. Всё это даёт чувство стабильности и мотивирует развиваться дальше
- Изменение майндсета. Освоение Go и сервисной архитектуры изменило подход к решению задач — мы перешли к другому типу мышления. Команда стала более самостоятельной в принятии технических решений
Программа внутреннего обучения продолжается: к финальной защите проектов подходит второй поток. Вместе с его выпускниками получится более 140 разработчиков, готовых к новым челленджам.