
Мифы и реальность софтовой разработки в телекоме: что ждет начинающих специалистов
с помощью нейросети
Недавно я спросил коллег, вчерашних студентов, как они представляли себе разработку в телекоме до прихода в эту сферу. Их ответы оказались очень далекими от реальности. Многие думали, что это возня с пыльным железом на чердаках, что новые решения не внедрить из-за тонн легаси, а коллеги вокруг — бородатые деды, которые программируют паяльником и работают только по каскадной модели. Да и задачки скучные: нечего будет рассказать внукам, когда сам станешь бородатым дедом.
Рассказываю, что на самом деле происходит в разработке телеком-оборудования для сотовых сетей с точки зрения программиста — и почему эта работа чертовски вдохновляет.
Но для начала разберем три самых распространенных мифа.
- Какие есть классы задач в разработке софта для телекома
- Какие промышленные практики используются в телекоме сейчас
- Почему работа в телекоме по-настоящему вдохновляет
Миф 1. «Старое, странное, пыльное железо»
Мы, программисты, редко имеем дело с самим железом. Всё, с чем мы взаимодействуем в процессе разработки, — это серверы, виртуальные машины и эмуляторы. Причем часто код пишется еще до того, как сама аппаратная платформа будет выпущена.
Но если уж зашла речь о железе, то за последние 20 лет его быстродействие выросло примерно в 1000 раз. Причем вместе с производительностью, а порой и опережая ее, растут требования к скорости, объемам вычислений, трафику и так далее. Поэтому телеком-инфраструктуры регулярно модернизируются и прирастают новым оборудованием.
Современное железо в основном выглядит вот так. Посмотрите, какая красота.

Миф 2. «Легаси везде»
Телеком-разработчикам, конечно, приходится работать с большими кодовыми базами. Но этот код покрыт тестами и не устаревает, а принцип «работает — не трогай» больше не актуален. Неподдерживаемое легаси практически исчезло. На мой взгляд, это произошло по двум основным причинам.
Постепенная унификация оборудования
В начале 2000-х все глобальные вендоры телеком-оборудования, такие как Motorola, Siemens, Ericsson, сами производили аппаратное обеспечение. Они исповедовали «коробочный» подход: бóльшую часть функционала делали в железе, а код почти всегда писали один раз под конкретное оборудование, тестировали и поставляли как конечное изделие или продукт.
В середине 2000-х начался процесс унификации: появился стандарт ATCA, а вскоре появились и производители off-the-shelf-компонентов под него. Как следствие, снизилось разнообразие аппаратных платформ, появилась возможность переиспользовать код.
В начале 2010-х завершился перевод телеком-оборудования с cell-switched-сетей на IP-сети. Это позволило отказаться от специфичных транспортных протоколов (например, ATM), малоизвестных инженерам, которые не заняты в телеком-разработке. Так началась разработка телеком-оборудования на железе общего назначения и в облаках. Код теперь может жить очень долго, потому что такое аппаратное обеспечение, как правило, имеет долгую обратную совместимость.
Внедрение CI-практик в разработку
Еще не так давно при любом изменении кода нужно было проводить полный цикл тестирования в лаборатории: многие ошибки можно было обнаружить только на этом этапе, а затем исправлять и снова проводить полный цикл тестирования.
С появлением CI-практик широкая автоматизация тестирования позволила находить ошибки на более ранних этапах и исправлять их быстрее. Как следствие, снизились стоимость и сложность внесения изменений в код. То, что раньше боялись трогать, теперь можно относительно быстро отрефакторить и быть уверенным, что цикл «тестирование-поиск ошибок-тестирование» не затянется на годы. Это тоже способствует более долгому времени жизни кода, упрощает его поддержание в рабочем состоянии и переиспользование.
Миф 3. «Бородатые деды с паяльниками»
Телеком — это гонка, и надо постоянно «бежать со всех ног, чтобы только оставаться на месте». Конкуренты не дремлют, а операторы хотят получать новые фичи вчера, а еще лучше — позавчера. Поэтому команды разработки непрерывно растут, а кодовые базы модернизируются. Старых технологий в стиле «программирование паяльником» теперь в телеком-области нет: ассемблер не видел ни разу в жизни, чистого С здесь тоже почти нет.
Основной язык разработки в телекоме — это С++, кое-где встречаются Go и Python. Старые промышленные практики, которые ассоциируются с телекомом, в частности «водопад», сейчас тоже почти нигде не используются.
В 2008 году я пришел в большую международную телеком-компанию, которая работала еще по старым принципам. На фичу из 20 строчек кода (это я точно помню) закладывали три месяца, потому что:
- сначала эту фичу надо обдумать,
- написать под нее документацию,
- потом архитектор должен ее одобрить,
- затем надо подумать над ее тест-планом,
- написать тест-план,
- его должны одобрить,
- потом нужно написать план разработки,
- его тоже должны одобрить,
- только потом ты пишешь код,
- тестируешь его,
- снова получаешь одобрение,
- и, наконец, фича оказывается в проде.
Эта большая международная телеком-компания вскоре перестала существовать. Вся остальная отрасль перестроилась и перешла на современные практики: Agile подход, CI/CD, код-ревью и постоянный рефакторинг.
А что касается бородатых дедов, то я специально прикинул: в моей команде примерно 50 человек, их средний возраст — менее 30 лет. Конечно, у нас есть и сотрудники, которые застали времена работы с 2G. Но, во-первых, их опыт бесценен, потому что они многое повидали, ведь разработке серьезных решений часто многое идет не так, как задумано. А во-вторых, их знания актуальны и сейчас. Проникновение 2G в России до сих пор высокое — его используют старые телефоны, шлагбаумы, модемы, сигнализации, банкоматы. В других сетях они просто не будут работать.
Чем на самом деле софтовые разработчики заняты в телекоме
Самое глубокое и распространенное заблуждение в том, что мы все тут занимаемся перекладыванием байтиков. Это не так. Давайте разберемся, где в телекоме можно развернуться инженерам, разработчикам и архитекторам.
Антенный радиотракт: радиофизика, электроника, схемотехника и FPGA
Это самая «железная» часть работы. Если что-то в телекоме и можно назвать программированием паяльником — то да, это оно. Современная антенна — это не просто пассивная железка, которая что-то куда-то излучает. Это довольно хитрое устройство, которое занимается синтезом, декодированием и оцифровкой радиосигнала. Для разработки антенного радиотракта нужно профильное образование в области радиофизики, хорошие знания цифровой и аналоговой электроники, схемотехники и FPGA. Программирования в привычном смысле здесь почти нет.
Разработка базовой станции: real-time, C++ и немного Go
Это массовый продукт, который производят и покупают десятками и сотнями тысяч. С точки зрения программиста, базовая станция состоит из нескольких разных плат и вычислительных модулей, которые объединены между собой внутренней сетью. Считайте это просто средой исполнения и особенностями вашей платформы. Вот где здесь нужен код:
- Байтодробилки— это условное название модулей, которые обрабатывают физический и канальный уровни протокола связи между базовой станцией и мобильным устройством. Сюда же относится планировщик — инструмент для распределения ресурсов в сотовой сети. Для программиста это вычислительные железки, которые обрабатывают большие объемы цифровых данных. Они кодируют и декодируют радиосигналы от множества абонентов, распределяют их по доступным ресурсам и планируют передачу ответов. В работе с ними используют жесткий real-time — нужно делать множество операций за ограниченное время. Как следствие, в качестве инструмента — сильно ограниченный С++, нет операционной системы, а бóльшая часть задач связана с тем, чтобы применять к данным специализированные алгоритмы.
- Модуль управления мобильными устройствами. Здесь используется железо общего назначения, с которым сталкивались почти все разработчики на базе распространенных архитектур — ARM или x86. Пишут всё это на С++. Единственная специфическая особенность программирования здесь — обработка бинарных протоколов, по которым мобильные устройства общаются с базовой станцией. Обычно с этим разработчики впервые сталкиваются уже после прихода в телеком.
- Модуль управления базовой станцией. Его используют операторы, чтобы через API отправлять команды и менять конфигурации, вести мониторинг и статистику. Здесь меньше всего специализированных технических задач. Обычно используют C++ и Go.
Ядро сети: C++, базы данных и REST API
Ядро сети — это коллекция сетевых сервисов, с которыми общается базовая станция. Вместе они дают тот набор услуг, который нужен абонентам от мобильного устройства и сети: аутентификацию, управление услугами и политиками доступа (например, какую скорость интернета оператор может предоставить этому абоненту), выставление счетов, маршрутизацию пользовательского трафика внутри сети оператора.
В наши дни всё это работает на облачных технологиях и пишется на С++, который дает нужное быстродействие. Работа с ядром отличается от других задач в телекоме большим числом операций по кратко- и долгосрочному хранению данных. В опорной сети 5G сервисы общаются по REST API — на базе облачных платформ удобно реализовывать ядро сети, тогда как в предыдущих поколениях связи использовались бинарные протоколы.
Весь этот набор сервисов сейчас пишут под аппаратные платформы общего назначения. Исключение — сервис по маршрутизации пользовательского трафика. Его делают либо на специализированном железе, либо на обычных серверах с особо мощными сетевыми карточками, которые умеют обрабатывать сотни гигабит в секунду.
Система управления сетью и бизнес-поддержка системы: JavaScript, Python, Go
К системе управления сетью относятся поддерживающие сервисы, которые видны клиенту, партнерам или сотрудникам этой сотовой сети. Например, работа с клиентами, продажа сим-карт и личный кабинет, который должен работать на любом телефоне.
Эта система — очень разношерстная коллекция сервисов, которые общаются между собой и с сотовой сетью через API и традиционно разделяются на фронтенд и бэкенд. Их можно писать на любом языке — JavaScript, Python, Go. В этом классе задач вы встретите меньше всего специфики, связанной с передачей данных.
Что ждет начинающих разработчиков ПО в телекоме
Чтобы попасть в компанию, которая занимается телеком-разработкой, нужно хорошо владеть современным С++, уметь программировать под Linux и неплохо разбираться в том, как работает сеть, какие бывают протоколы, как они устроены и как передаются пакеты. Остальному учат в процессе работы: никто не ожидает от вчерашних студентов специализированных знаний.
Всё объяснят, плавно введут в эту область, расскажут, что нужно подучить и подтянуть, чтобы успешно развиваться. Я это точно знаю, потому что и сам обучаю начинающих специалистов.
Чего еще можно ожидать, если вы пришли в телеком?
- Промышленные подходы к разработке. Только на практике можно ощутить и понять, какие подходы придумали компании, чтобы код был надежным, легко поддерживался и зарабатывал деньги.
- Специфичные отраслевые знания. Придется много и быстро учиться. Вас ждут десятки тысяч страниц спецификаций и стандартов, о которых вы до этого даже не слышали.
- Долгоиграющие проекты. Среднее время смены технологий сотовой связи — 10 лет. Проекты в телекоме длятся 5−10 лет, причем повторяющихся и однотипных среди них нет.
- Высокий темп разработки. Проекты живут долго, но операторы хотят получать новые фичи как можно скорее. Поэтому мы создаем минимальный рабочий продукт, выкатываем его в поля и дорабатываем.
Оказалось, что в аэропорту был трап с сотовым модемом. Он периодически приезжал в зону действия сети, пытался в нее зайти, вызывал сбой — а потом уезжал. Поиски этого трапа заняли несколько месяцев, но, к счастью, мы его вычислили и сделали так, чтобы он больше не ронял нашу сотовую сеть.
Приходите к нам в телеком, здесь интересно. У нас разные масштабные задачи и современные технологии, ведь это действительно передний край разработки.
В YADRO мы создаем телекоммуникационное оборудование для беспроводных мобильных сетей и сопутствующих услуг. Приглашаем в нашу команду! Мы активно растем, поэтому ждем специалистов разных направлений. А если вы пока в начале карьерного пути, приходите на стажировку. Вот ссылки.
Телеком — это долгосрочные проекты и уникальная возможность увидеть, как ошибки проектирования на начальных этапах могут потом больно укусить вас. А потом мучительно (и победоносно) исправлять их.
Телеком — это очень требовательная профессиональная среда, поэтому навыки, которые вы получите здесь, пригодятся и в других смежных областях. По своему опыту знаю, что телеком-разработчики высоко ценятся на рынке, даже если в дальнейшем работают в другой области.
И, наконец, телеком — это прямая, ощутимая каждому польза. Системами, в создании которых вы поучаствуете, будут пользоваться сотни тысяч, а может и миллионы людей. Когда я звоню или отправляю какие-то данные, я понимаю, что это происходит через сервисы, к появлению которых я приложил руку. Это довольно интересное и приятное чувство. Я думаю, что вам оно тоже понравится.
