О себе
Максим, расскажи о себе: где учился, где работал, когда увлекся программированием, в каких проектах участвовал?
Окончил ЛЭТИ Ульянова-Ленина. Первый опыт программирования получил в 1983 году, работая над программируемым микрокалькулятором MK. Для своего времени это был продвинутый гаджет – более 10 регистров, косвенная адресация, память на 100 команд. Мой отец сам так увлекся этим устройством, что в конце концов запихнул в это подобие компьютера численное решение полиномов 9-й степени. Я очень проникся этим процессом, мы обсуждали, как освободить лишнюю пару ячеек памяти, где сделать оптимизацию, чтобы повысить степень полинома, и другие идеи. Потом были летние курсы для старшеклассников в Ленинградском университете (настоящем), где я попробовал PL/1 на СМ и ЕС ЭВМ.
Работать программистом начал с третьего курса. В начале девяностых пришлось уйти в банк с очень интересной, но практически неоплачиваемой работы программистом в «ящике». Ощущения от первой банковской зарплаты, которая превышала «оборонную» раз в десять, были у нас с женой незабываемые. Так и продолжал работать в различных банках до 2006 года. Не скажу, что работа там была ужасно интересной, но она давала время для саморазвития.
Следующим местом была компания «Петер-Сервис» (разработчик биллинговой системы «Мегафона»), где я впервые узнал на практике, что такое промышленная разработка ПО, работа в большой команде, разработка под разные серверные платформы. Именно здесь, имея доступ к различным процессорным архитектурам, всерьез начал изучать (для саморазвития) методы повышения производительности программ, что привело меня в мир lock-free и других нетрадиционных алгоритмов.
Затем работал над многими другими проектами, в том числе над обработкой речи для приложений под iOS и Android, программным обеспечением для STB (set-top box – телевизионные приставки кабельного ТВ). Теперь присоединился к команде разработчиков систем глубокого анализа трафика – VAS Experts.
О языках программирования
Почему ты выбрал С++, а не другие языки программирования?
C++ заворожил меня еще в институте, когда в 1990 году на курсе объектно-ориентированного программирования (ООП) в качестве языка преподаватель выбрал именно C++. Надо сказать, что в то время (не знаю, как сейчас) будущих прикладных математиков на кафедре системного программирования не учили языкам, а учили подходам. Для каждого подхода был свой язык, тонкости которого мы постигали сами. Так вот, ООП мы постигали на примере C++, Java тогда еще и в проекте не было. Разобравшись в C++, я сразу понял, что это мое, и до сих пор еще ни разу не пожалел о своем выборе. Даже если бы я захотел сменить язык, это было бы трудно – я сейчас уже думаю на C++.
Как относишься к Java, Python, Ruby?
К Java и Ruby я не отношусь никак, я их просто не знаю. Когда вижу стек-трейс Java, меня бросает одновременно и в дрожь, и в смех.
Python мне нравится – нравится идеология, которая в нем заложена, нравится его развитие. Я его использую там, где нужно что-то быстро и недорого набросать – тесты, служебные скрипты.
В последнее время ты увлекаешься lock-free структурами данных. Расскажи, что это такое, какую роль играет в программировании, какие перспективы и возможности дает?
Lock-free структуры данных, или конкурентные структуры данных, в общем понимании – это структуры, доступ к которым из разных потоков не надо синхронизировать, их алгоритмы содержат возможность распределять одновременные обращения. Традиционные методы синхронизации одновременного доступа – мьютексы, критические секции, conditional variable – фактически превращают нашу многопоточную программу в однопоточную, снижая производительность, иногда на порядки. Самый правильный способ многопоточного программирования – вообще не иметь разделяемых данных, тогда каждый поток работает со своими локальными данными. Но добиться такого часто не получается, появляются разделяемые между потоками данные. Здесь могут помочь конкурентные структуры.
Но вообще lock-free структуры данных – это не главное в многопоточном программировании, это лишь один из инструментов, причем весьма опасных. Главное – выбрать правильную внутреннюю архитектуру программы, методы взаимодействия составляющих ее компонентов. От этого зависит будущее вашего детища, будет ли оно вообще поддаваться развитию. Например, я заметил, что мьютекс подобен таракану: если в программе завелся мьютекс, он стремится глобализоваться, захватить под свое владение все большие и большие участки кода, он хочет, чтобы на него обращали внимание. Во избежание такой глобализации мьютекс делится на несколько отдельных мьютексов, что приводит к появлению некой стратегии их применения, о которой все постоянно забывают, так как над проектом трудится большая команда. Как результат – проект становится неразвиваемым. И причина тому – один-единственный таракан-мьютекс, который завелся в проекте года два назад из-за нехватки времени на обдумывание альтернативного решения.
Что необходимо, чтобы стать отличным программистом и работать над серьезными проектами, какие качества или стремления?
Как и в любой другой профессии – надо, чтобы твоя работа тебе нравилась. Программизм – вещь сильно меняющаяся: появляются новые подходы и новые идеи, более продвинутое железо, рождаются новые языки, а у старых появляются новые возможности – за всем этим надо следить и применять, чтобы оставаться в тренде.
О VAS Experts
В каком проекте ты сейчас участвуешь, что уже сделано и над чем ведется работа?
Команда VAS Experts создала отличное ядро системы глубокого анализа трафика (DPI) СКАТ DPI, на основе которого можно сделать очень интересные вещи. С помощью него мы можем контролировать весь трафик оператора связи и делать это очень быстро на обычном серверном железе! На это ядро можно добавлять разные функции – от контроля доступа абонента в сеть и «нарезки» трафика до обеспечения безопасности как абонента, так и провайдера – распознание и отражение сетевых атак извне/внутри сети оператора, полная поддержка систем СОРМ.
В настоящее время я работаю над функцией BRAS. Задачи BRAS очень сильно зависят от конфигурации сети провайдера. Мы поэтапно добавляем поддержку всех лучших практик, благо FastDPI многое уже умеет «из коробки», осталось это правильно и красиво упаковать.
Чем работа над телеком-проектом, таким как СКАТ DPI, отличается от прикладного программирования программного обеспечения?
Честно говоря, не знаю. Любой крупный проект – это в большей степени не программирование, а отладка готовой программы, которая занимает 80% времени и усилий. Особой специфики в разработке для телекома нет, проблемы и решения при разработке любого серверного ПО одни и те же.
А если сравнивать разработку ПО под серверы и под «домашние» компьютеры, то различия есть. В основном они выражаются в объемах и задержках. Но эта грань постепенно стирается, по-моему. Например, для Android-смартфона я применял те же самые приемы программирования, ту же внутреннюю архитектуру программы и тот же самый язык C++, что и для сервера, и все отлично работало, только масштабы были другие.
Но СКАТ DPI – это ведь сетевое устройство. Ты хорошо разбираешься в сетях и работал с ними или тут важнее понимать принципы и уметь программировать?
Никогда не причислял себя к сетевым профи, всегда относился к сетям просто как к среде распространения данных: получил, обработал, отослал. Для меня здесь главное – «обработал».
По моему мнению, отличие сетевого хозяйства от всего остального – чрезвычайная бесхозяйственность и расточительность. Обилие стандартов де-факто и стандартов де-юре, которые часто отличаются в важных деталях. Также надо отметить наличие сильных игроков на рынке «железа», которые часто искажают стандарты или вносят в них свои дополнения, делая их обязательными для всех; длительный жизненный цикл решений; высокая цена ошибок и упущений в протоколах – все это приходится учитывать и как-то под это подстраиваться. Пожалуй, это и есть основное отличие «сетевого программирования».
Какое развитие СКАТ DPI ты видишь с точки зрения разработчика? Что еще можно реализовать в новых версиях программного обеспечения?
СКАТ дает полный контроль над трафиком и в принципе может удовлетворить любые разумные фантазии как абонента или провайдера, так и государства в лице Роскомнадзора (РКН). Ключевое слово здесь – разумные. К сожалению, если фантазии провайдера, как правило, вполне прагматичны и осуществимы, то задумки РКН часто нарушают основополагающие принципы сетевого нейтралитета. Я имею в виду, например, просмотр содержимого https через mitm-атаку.
СКАТ DPI конкурирует на рынке с решениями таких производителей, как Cisco. Ты гордишься, что российская разработка стала так популярна и легко находит своих пользователей? В чем причина ее популярности, на твой взгляд?
Когда я вижу цены на устройства этих производителей, я начинаю гордиться! Причин популярности несколько. Основная, конечно же, цена. Но есть и другие: мы – компания молодая, компактная и амбициозная, мы более отзывчивы на изменения российского рынка, ведь это наш рынок. Компании-гранды, в силу своего размера и внутренних регламентов, не так поворотливы, как мы. Хотя у них есть и преимущества: если, например, Cisco скажет «делай так», все будут плакать, жаловаться, но делать именно так, а если такое скажем мы – нас мало кто послушает. Но отсюда вытекает еще одно наше преимущество – мы слышим своих заказчиков.
Как ты относишься к импортозамещению? Готовы ли российские разработчики полностью вытеснить импортные решения?
Смотря что импортозамещать и зачем. В России это превращается в какую-то самоцель. Современный глобализованный мир давно размыл понятие импорта для высоких технологий.
Что касается готовности, если мы обратим внимание на то, кто работает в Google, Oracle, Microsoft и прочих крупных компаниях, то увидим множество наших программистов. Получается, что вместо вытеснения «их» решений происходит обратный процесс – вытеснение «наших» мозгов «туда». Человек всегда ищет, где лучше, а талантливый программист – еще и «где интересней».
Так что готовы мы давно и вытеснить можем, главное – не мешать и создать в стране нормальный климат.
О профессии
На рабочий «климат» влияет нерабочее время. Чем ты увлекаешься? Помогает ли это в работе?
Очень простой вопрос – в свободное время я вот уже 10 лет занимаюсь своим проектом https://github.com/khizmax/libcds о конкурентных структурах данных. Я его называю проектом выходного дня и долгих вечеров. Иногда выступаю его популяризатором – рассказываю, что лежит в основе lock-free структур, как их применять, какие интересные алгоритмы там есть.
В работе это, конечно же, помогает – мозги уже натренированы на «мьютекс зло» и на распознание data race.
Если бы ты решил поменять профессию, то кем бы стал?
По-моему, я нахожусь на своем месте – мне нравится то, чем я занимаюсь. Если станет скучно – сменю компанию, но не профессию.
Just for fun: все тесты на профпригодность, которые я проходил, всегда на первое место ставили «военный». Мне это непонятно: два года срочной службы в советских ВС из меня пытались сделать сержанта – не получилось 😉 Так и отпустили рядовым. Видимо, те тесты подразумевали какую-то другую армию, где другие военные.
Что для тебя «быть программистом»?
Как и для любой другой профессии – гореть своим делом, получать удовольствие от работы, следить за профессиональными новостями и новыми веяниями. Хороший программист должен быть фонтаном идей и бредовых предложений. Если на очередную его бредовую идею ответить «попробуй реализовать в свободное от основной работы время» и он это сделает, – это настоящий программист!
Максим, спасибо за интервью! Думаю, благодаря таким людям, как ты, которые разрабатывают ради удовольствия, ищут новые пути для реализации своих идей и не останавливаются на достигнутом, были созданы операционная система Linux и база данных Postgres. Желаю тебе успехов в разработках для VAS Experts, чтобы потеснить Cisco, Allot, Procera, Sandvine не только на нашем, но и на западном рынке!