Андрей Аксёнов нередко начинает свои доклады с такой самопрезентации: «воронежское быдло, интересуюсь информационным поиском». Правда, в Воронеже он уже давно не проживает, но информационный поиск по-прежнему в топе списка его интересов. Работает Андрей тимлидом в компании Avito и руководит юнитом инфраструктуры поиска. А ещё именно он создал поисковый движок Sphinx и не ограничился этим, а участвовал ещё во многих других проектах — работал в веб студиях, геймдеве (приложил руку к 10+ разных игр в начале 2000-х), немного помогал с движком Unigine, много выступал на IT конференциях. За эти заслуги его наградили Премией Highload++ в 2018 году. Мы расспросили его, что значит для него премия и как создать популярный и полезный open-source проект.

Создатель Sphinx Андрей Аксёнов
Создатель Sphinx Андрей Аксёнов

Курьёз: выступал ежегодно, но в год награждения решил отдохнуть

Это был самый первый сезон Премии. Тогда ещё программные комитеты собирались и для скорости, чтобы не опрашивать 5000 человек, опросили 576 членов программных комитетов, ведь это в 27 раз быстрее. Во время награждения я ничего особого и не почувствовал, честно говоря. Но то, что в HighLoad придумали собственную премию и хотят мне её выдать — воодушевило.

Несмотря на награду, я не ощущаю себя лидером индустрии. У премии первого сезона была двоякая цель: наградить тех парней и девчонок, которые активно участвуют в конференциях и растят комьюнити. Я на этих конференциях выступал чуть ли не каждый год, ходил как на работу с 2006 года, а как раз в 2018 решил разок пропустить и съездить в отпуск. Вот в отпуск мне и позвонили.

На мой взгляд, звание лауреата — это такой приятный бонус, признание за предыдущие 10+ лет методичного вещания различных, надеюсь, не самых плохих докладов на конференциях Highload++. Но, я думаю, в комитете премии отметили не только мои доклады, но и создание поискового движка по имени Sphinx. А может, просто то, что я — паренёк, вроде, неплохой!

Над большим проектом всегда работает команда

Проект Sphinx в один прекрасный момент был, без ложной скромности, лучшим решением на планете – по некоторым (не всем!) параметрам. Это было более чем конкурентоспособное решение среди поисковых серверов. 

С тех пор он, конечно, скукожился и превратился в никому неизвестную забытую технологию. Но в условном 2006 году среди поисковых серверов не было особого выбора. Elasticsearch ещё не придумали, Solr не масштабировался. Sphinx в этот момент работал в 10 раз быстрее конкурентов, и хотя бы на две машины криво и косо, но разрезался. Правда, с этих высоких позиций нас быстро снесли.

Но на мой взгляд странно гордиться большим проектом, в котором ты участвовал не один. Даже если, как в случае со Sphinx, довольно большой пласт кода лично мой, делал я его не совсем в одиночку. 

Да и вообще «гордость» — неправильное слово. Но одним из своих самых серьёзных личных достижений считаю участие в давно и до меня существовавшем, и после меня успешно продолжившем существовать проекте, где я немного помогал команде справиться с временными трудностями. В частности, снёс из этого проекта какое-то чудовищное количество строк мусорного кода, сотни тысяч. Миллиона там не было, там вся кодобаза, наверное, под миллион строк. Но 100, 200 или 300 тысяч строк мы тогда снесли, и это было здорово.

Кто-то до меня заботливо сидел и вручную писал массу глупого кода, который сразу надо было бы автогенерировать. Понятное дело, что за 10 лет его скопилось много и поддерживать эту массу не было уже никакой человеческой возможности. Редко когда удается настолько ярко выступить: пришел и снес 300 тысяч строк.

Sphinx, кстати, до сих пор меньше!

Всё началось с геймдева

Первую программу я написал в начале 90-х, а первую программу, которой пользуются живые люди, в 1993 или 1994 году. Это был screen grabber ещё под DOS. Нужен он был, чтобы захватывать скриншоты (причем во всех нестандартных режимах, а их было много) и ловко их показывать. А первые деньги за программирование я заработал ещё позже, в конце 90-х на каких-то мелких контрактных работёнках: тут вебформочка, там приложение для местной телестанции.

И вот наблюдая IT вживую последние 30 лет, я избрал платформу фундаменталистского алгоритмического джихада и смело утверждаю, что за эти годы в индустрии технологии принципиально не менялись.

Ну да, ну да, увеличилось разрешение монитора, в компьютере стало гораздо больше мегагерц, а компилятор образца 2023 года гораздо приятнее, чем дерьмище, которым мы были вынуждены пользоваться в “святых” девяностых. Но несмотря на феноменальный прогресс, какого-то концептуального скачка, какого-то  «софта на новых физических принципах» с тех пор так и не произошло!

Пирамидка устройств под названием «процессор, память, диск» осталась такой же, как была. Да, теперь у меня на десктопе почти 4 ГГц, а не 8 МГц. Изменение в чуть менее чем 1000 раз. С учетом того, что всё это еще и адаптивно турбируется выше 5 ГГц, подсчитать точно даже «просто частоту» становится особенно сложно. А кроме изменения частот, местами сами инструкции, которых мы раньше делали миллионы, а теперь вот делаем миллиарды в секунду, работают до сотни раз быстрее. Итого, вычислительная мощь невероятно выросла — в тысячу, десять тысяч раз. А уж если это ещё и на количество доступных ядер помножить, то вообще снесёт крышу в сравнении с тем, что было доступно сто (в двоичной системе) лет назад.

Но ведь одновременно с этим самые базовые принципы не меняются совсем. Ну да, гигантское количество compute power стало. Но одновременно с этим память всё равно относительно compute тормозная, диск всё равно тормозной относительно памяти, появляются новые клёвые техники, но старые добрые алгоритмы даже 50-х, 60-х по-прежнему актуальны, несмотря на новое прочтение и оптимизацию под текущие архитектуры.

Концептуально же ничего пока не меняется. Продолжаем писать циклы for, сортировки и хэш-таблицы! Укладываем их на гигагерцы, кэш-линии и наносекунды, а не ферритовые барабаны и ламповые транзисторы, но концепция не меняется, математический уклад един. Именно поэтому меня, видимо, до сих пор и не уволили из индустрии. Может, с наступлением квантовых компьютеров уволят.

Про конференции и интересы

Выступать на конференциях я, кстати, начал вовсе не с Highload++ и новомодной интернет-движухи, а с доблестного геймдева. Мотивировал меня тогда, как и всех, стандартный набор: личный пиар, пиар моей компании, практика публичных выступлений. Это был призыв: смотрите, мы существуем, делаем свой интересный проект, нам есть о чём рассказать, приходите к нам работать.

Мне всегда тяжело придумать какую-то конкретную тему доклада. Это всегда мучительный процесс. Но сам процесс подготовки за это время уже довольно неплохо отладился. Подготовить какую-нибудь презентацию и что-нибудь рассказать я могу достаточно быстро. Понятное дело, это труд, но не гигантский, два месяца full-time мне не нужно. Я закладываю несколько рабочих дней и мне хватает. В экстремальных случаях может хватить 1 часа.

За 30 лет мои профессиональные интересы не изменились: я всё также занимаю «суперузкую» (нет) нишу, которая уже изменилась пять раз. Мне интересен узкий по формулировке, но достаточно широкий по сути набор вопросов: разбираться в алгоритмах, крутить производительность. Снобизма к «своим» или, наоборот, презрения к каким-то “другим” областям почти нет, хотя некоторыми мне просто скучно и неохота заниматься.

Я вот люблю всё, что хотя бы относительно связано с интересной алгоритмикой, приличным перфомансом. Но это же настолько широкая поляна, что под неё подпадает всё подряд. Я и сегодня буду рад позаниматься геймдевом, сжатием, базами данных, алготрейдингом или компьютерным зрением, тем более оно похоже на графон, которым я 20 лет назад тоже занимался. И этот список наверняка не полон.

А вот форму для бухгалтера на 1С писать не буду. Но это не потому, что там нету места алгоритмам и оптимизациям, оно и там есть! Просто там всё обычно на русском языке, на котором я не могу программировать. Я навсегда привык, что переменные называются на английском. Разве что возьмусь написать форму для бухгалтера на 1С с идентификаторами на английском языке по небольшой ставке в 500 долларов в час ????.

Турбулентность мешает строить планы

Профессиональных мегапланов вида «обязательно планирую сделать некий новый проект X» или там «следует поработать в области Y» у меня нет. А вот интересных технических задумок вида «хочется попробовать вот эдак переделать считалку выражений» даже в рамках Sphinx как раз гигантское количество. Просто каждая пятилетка показывает, что, какие бы ты планы не строил, реализуются они совершенно не так. Пять лет назад я совершенно не представлял, где конкретно окажусь через эти пять лет и чем буду заниматься. Предсказать, наверное, возможно, но это оказалось бы гаданием на кофейной гуще. 

Точных планов «на остаток жизни» точно нет — в связи с турбулентностью прошедших, особенно последних двух, лет. Не буду фокусироваться на событиях 2020 года, после которых произошел фундаментальный тектонический сдвиг и вся индустрия наконец-то научилась работать удаленно, чем я занимаюсь ещё с 1999 года. Я не уверен даже, что в спокойном 2005 году мог подумать, что буквально через год-два неожиданно перепрыгну и займусь собственным опенсорсным проектом. У меня точно не было тогда таких планов. Тем не менее этим самым проектом я занимаюсь до сих пор. Вот чем я нагрешил?!

И даже с «простыми» техническими задумками в текущем проекте отчасти такая же история. Не все, но некоторые сугубо технические вещи неожиданно откладываются на годы (но потом делаются). Грубо говоря, это когда 5 лет собирался в очередной раз переписать хэш-таблицу, но неожиданно, это не становилось приоритетом все 5 лет (но потом стало). Некоторые наоборот, неожиданно, стремительно, вжух, пробуешь и делаешь, и наносишь пользу. Хотя еще месяц назад про них даже не задумывался никто. Планов, в общем, громадьё, но они постоянно меняются и корректируются – говорят, это какой-то agile.

Но если вы вдруг хотите именно «Зопланироваць и потом еще и Зделать что-то Значимое для всей Зямли», то замечу: возможно, это вовсе не то, за что номинируют на премии. Что мы считаем значимым? Вспомним нашумевшую историю с библиотекой для JavaScript (если не ошибаюсь, core-js). Которую миллионы человек используют (и конечно же, ни один за это ни доллара не платит разработчику, как это принято и веками освящено в мире open-source. Хочется вам таким заниматься? Мне, пожалуй, нет. Это потому что я ничего не знаю про JavaScript, и мне банально неинтересно делать так, чтобы 100 разных функций какого-то там JavaScript одинаково работали на 40 разных видах браузеров, которые ещё пока не вымерли, это звучит скучно. Тем не менее – деятельность значимая и важная, хрен поспоришь. А что интересно и значимо для вас? 

Не всё ещё открыто и придумано

Кажется, что всё уже давно открыто, деды все придумали ещё в Computer Science 101 ещё к 1970 году, ещё до наступления эпохи UNIX time, а с тех пор деградация одна, и только новые поколения Лунтиков танцуют в ТикТоках танец пузырьковой сортировки. Но если минимально следишь за публикациями и новыми клёвыми алгоритмами и техниками, то постоянно, как минимум раз в год, убеждаешься, что это не так. Более того, если следишь недостаточно плотно, как я, то убеждаешься, что человечество постоянно изобретает что-то настолько новое и крутое, что может изменить твои воззрения на мир и раздвинуть границы возможного, прямо как шоу Cirque du Soleil.

Я вот, например, только в этом году с задержкой на три года узнал, что человечество научилось делать магию, которая мне ранее казалась физически невозможной, — сжать супер-короткие строки по отдельности, независимо. Делать так, чтобы у тебя в базе данных в колонке каждую конкретную строку можно было сжать независимо от других и разжать её тоже независимо от других. Например, взять и очень короткую строку типа названия города в семь байт умудриться сжать до пяти байт.

Вот спросили бы меня буквально три месяца назад, до того, как я набрёл на соответствующую статью, и я бы сказал: это невозможно. Я и не специалист в сжатии коротких строк, но вот мне кажется, что единственное возможное решение — позаниматься препроцессингом, построить достаточно большой словарь и с его помощью сжать. Но, скорее всего, получится плохо. Такое бы сказал.

Внезапно выяснилось, что человечество придумало, как это делать очень-очень быстро. И пользуясь словарем крохотным, а не большим, размером в несчастные две сотни байт. И получилось хорошо, а не плохо! Узнал я об этом только в 2023, а придумали в 2020. Называется FSST, кому интересно. Три года пинг! А ведь это мне еще и по должности положено за таким следить!

Ты не можешь уследить за всем. Это невозможно, поэтому выбираешь для себя интересные зоны и подиндустрии, и следишь за ними. Например, не отслеживаешь, что происходит в мире 1С и Haskell, но зато смотришь, что происходит в мире APL и C++. 

Я маловато знаю про машинное обучение, всякие AI и так далее, поэтому весь тот вал исследований, что публикуется в последние годы, не читаю. Хотя у себя в поиске мы постоянно эти технологии применяем, и про общие концепты, естественно, в курсе все. Про ChatGPT в курсе вообще весь мир, даже те, кто до этого ничего про ML и AI не знал.

Но за публикациями по особо интересным мне в данный момент условным базам данных, сжатию и прочему high-performance computing я слежу более плотно. Соответственно, знаю какие-то “свои” странные вещи, например, про сжатие коротких строк.

Может быть, даже когда-то получится сделать и свою 1 достойную публикацию – такую, чтобы целых 100 цитат за следующие 20 лет, то есть “основополагающую работу”, как это называется. Но и это не план-план, а так, пожелание к колесу кармы.

Советы замшелых дидов

Мой совет грядущим лауреатам: щеглы, выпрыгивайте из своей собственной кожи и всё получится!

Пишите код, который раньше не писали никогда. Пробуйте новые незнакомые задачи, языки, железки.

Пишите его так, как раньше никогда не пробовали. Пробуйте новые незнакомые алгоритмы, структуры данных, парадигмы. Банально попробуйте другой синтаксис и форматирование.

Выбирайте особо интересные вам области в индустрии и пристально следите за ними. Пробуйте новый незнакомый софт, библиотеки, статьи: и научные, и в бложиках.

Считаю, что именно такая возможность постоянного выпрыгивания “из собственной кожи”, из привычного мирка рутины во что-то новое и интересное – и делает это наше программирование и прочее IT особо замечательным местом.

И если мы этой сверхспособностью никак не пользуемся – то зачем вообще мы здесь?!

Комментарии (2)


  1. f_s_b_37
    24.11.2023 16:01

    Когда-то определенный мировозренческий сдвиг вызвало юмористическое выступление Андрея с заголовком "как перестать писать код".

    Было это лет 15 назад, судя по всему, но тезисы выступления я помню до сих пор неплохо, и кроме того, спустя годы могу сказать: ВСЕ ТАК.


  1. napolskih
    24.11.2023 16:01

    А кто то может рассказать чем сейчас Андрей в Авито занимается? Сфинкс докручивает или что-то большее ? интересно. Много лет пользовались сфинксом, нравилось. Даже частную консультацию брали у Андрея.