«Если апатия приводит в Python, то конструктивный поиск ведёт к Rust или Go»
«Хтоническая логика Haskell, тяжеловесная мощь «плюсов» и грязная гибкость скриптовых языков наталкивают человека на экзистенциальный поиск. Если апатия приводит в Python, то конструктивный поиск в итоге ведёт к Rust или Go», — считает Игорь Нетай, специалист отдела перспективных исследований компании «Криптонит».
Наш следующий собеседник — математик и аналитик, изучающий нейросети. Он знает несколько языков программирования, играет на разных музыкальных инструментах и рисует на стенах заметающие кривые нового типа. Знакомьтесь: Игорь Нетай, увлечённый исследователь и человек-оркестр!
— На каких языках ты учился программировать?
— Я ведь до какого-то момента не понимал программирование, а задачи на Мехмате решал более-менее наугад, не задумываясь, что происходит, просто на интуиции. Потом подумал, что с этим непониманием пора завязывать и пошёл в Школу анализа данных (ШАД) Яндекса. Это помогло, дало больше понимания, основу культуры и базу, с которой можно эффективно развиваться уже самостоятельно. Я начал участвовать в образовательных проектах уже как программист и параллельно учился на Мехмате МГУ, в НМУ, в ШАД и посещал курсы в Математическом институте им. Стеклова. Потом у меня было программирование для нужд образования на чём попало (Python, Perl, Ruby), которое постепенно перешло в аналитику на Haskell.
— Какой язык оказал на тебя наибольшее влияние?
— Определённо Haskell. После C++ и скриптовых языков он меняет сознание, если проникнуться им достаточно глубоко, после него и на других языках начинаешь писать код иначе. Однако постепенно это изменение восприятия и образа мышления логично приводит к освоению Rust. Хтоническая логика Haskell, тяжеловесная мощь «плюсов» и грязная гибкость скриптовых языков наталкивают человека на экзистенциальный поиск. Если апатия приводит в Python, то конструктивный поиск в итоге приводит к Rust или Go.
— Каждому языку — своя область применения?
— Я не про сферы применения, где принято то или другое, и выбор может быть навязан существующими решениями, а про сравнение при равных возможностях. Как математик я ценю Haskell. Он выражает строгость и чистоту без исключений. Однако для математика-разработчика Rust решает более практическую задачу — гарантирует отсутствие многих ошибок, вводит где-то не расширенные возможности, а наоборот — сужает их таким образом, чтобы безопасность из этих ограничений следовала автоматически, это логичное и красивое решение, при этом ограничения не такие радикальные, как в Haskell.
— Игорь, как ты пришёл в «Криптонит»?
— Я попал в нашу компанию практически на старте, когда коллектив только собирался. Как раз в то время решил заняться исследованиями в ИТ, так что было очень удачное стечение обстоятельств.
— Чем ты занимаешься в нашей компании?
— Сейчас занимаюсь общими задачами, связанными с искусственными нейронными сетями. Исследую причины их сходимости или расходимости, изучаю атаки на нейронные сети, связи архитектур и обучающих данных. Основная цель — найти что-то новое, полезное и опубликовать результаты как научные статьи.
— Что помогло тебе получить столь необычную должность?
— Думаю, что получить работу помог опыт в фундаментальных исследованиях и серьёзный научный бэкграунд. Я закончил механико-математический факультет МГУ и Независимый московский университет (НМУ), получил учёную степень к. ф.-м. н. Вдобавок у меня уже на тот момент был большой интерес к прикладной области и опыт программирования на разных языках.
— Какие у тебя увлечения? Что помогает работать, или наоборот — отвлечься от работы?
— В нашем первом офисе я играл на скрипке. На обычной, акустической. Электрическую скрипку я принёс в офис уже потом, а вслед за ней появилась электровиолончель, электрогитара и гобой. Как-то к нам собеседовалась группа разработчиков. Они интересовались, нормально ли, что они обсуждают рабочие вопросы живо, эмоционально и громко. Им ответили, что громкое выражение мыслей никому не мешает. Тут один сотрудник вообще играет на скрипке прямо в офисе, и все рады. Мне соседний отдел даже делал замечания… что я слишком мало играю! Иногда люди спрашивали, кто громко включает классическую музыку. Мы отвечали, что никто не включает, я воспроизвожу не mp3, а pdf с нотами.
— Насколько для тебя подходящие условия на работе?
— Атмосфера для меня полностью подходящая. Нужен баланс между самостоятельным рабочим процессом, обсуждением его с коллегами и отвлекающими факторами. Полная удалёнка — не моё. В начале пандемии ковида я это осознал. Максимум времени в офисе — наверное, тоже не для меня. Всё же отвлекающие факторы в каком-то количестве тоже нужны. У всех свой режим, но ритм нашего отдела лично мне подходит оптимально.
— Говорят, ты чертил на стене H-кривые?
— Да. Сначала я строил нечто наподобие геохэша для пространств размерности три и больше с возможностью создавать периодичность по некоторым координатам. В итоге получилась конструкция, которая мне понравилась, и её захотелось приберечь на будущее, я даже нарисовал её прямо на стене маркером, чтобы она была перед глазами.
— Если кратко, то что это за кривые, и как они применяются в ИТ?
— Пространственные заметающие кривые полезны для построения индексов баз данных, а большие базы данных в повседневной жизни везде. Это и соцсети с мессенджерами, и медиаконтент в интернете, и ещё куча всего. Чтобы мы могли смотреть всё на смартфончике в каком-то приложении, где-то должна быстро крутиться здоровенная база данных (БД). А для любой БД ключевой инструмент — это индексы. Именно построение индексов H-кривые сильно ускоряют при сохранении прочих полезных свойств. Логика их применения в том, что сложение по модулю степеней двойки — быстрая операция, а композиции вращений пространства (как при построении кривой Гильберта) — операция не столь быстрая. Более развёрнуто можно прочитать в статье, опубликованной в нашем научном блоге. В ней можно найти ссылку на препринт в arXiv и на журнальный вариант научной статьи.
— Как ты придумал новый тип H-кривых? Это было озарение, или кропотливая проработка вариантов?
— Как ни странно, ни то, ни другое. Как обычно бывает, пригодилась конструкция, которая изначально делалась для немного другого. Вообще это довольно частая и скорее типичная ситуация, что придуманные конструкции срабатывают не только там или не совсем так, как ожидалось. В исследованиях ситуация, что «всё оказалось не так просто и очевидно», типична, потому что исследования как раз и занимаются неочевидным. В процессе решения какой-либо задачи могут появляться хорошие конструкции, которые часто могут оказаться более полезными для чего-то более общего или вовсе другого. Но полезную конструкцию надо уметь увидеть, а дальше понять, что с ней делать безотносительно того, для чего она создавалась изначально. Как решение может быть не лучшим для задачи, так и задача может оказаться не лучшей для найденного решения, И для найденного решения всегда нужно смотреть, не надо ли поменять задачу. Так получилось и с Н-кривыми.
— Что порекомендуешь тем, кто тоже хочет заниматься перспективными исследованиями, но не знает, с чего начать?
— Выбирать разные задачки (конкретные и без «ферматизма», то есть — не стремясь найти «серебряную пулю» и «формулу всего») на свой вкус и старательно прощупывать их, ковырять разными способами, не зацикливаясь на инструментах. Не надо жалеть времени на непонятное и сложное, наоборот, экономить время надо на том, что ясно и не требует размышлений, это надо автоматизировать, но опять же без фанатизма и не зацикливаясь на процессе для процесса. В любой непонятной ситуации понимать и не торопиться, а в понятной не задерживаться.
P.S. Если хотите стать коллегой Игоря, то в «Криптоните» открыта вакансия специалиста-исследователя в отделе перспективных исследователей.