EaxCast S02E01 — интервью с Александром Юрченко о работе в Яндексе, проекте OpenBSD и машинном обучении

21 мая 2014

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

Слушать онлайн:
http://eaxcast.podfm.ru/_eaxcast/8/

Скачать файл:
http://eaxcast.podfm.ru/_eaxcast/8/file/podfm_eaxcast__eaxcast_201.mp3

Шоу нотес:

Голоса выпуска: Александр @stakanviski Юрченко, Сергей @kpy3 Елин, Александр @afiskon Алексеев

Фоновая музыка: The Panets — Winter Beats (Big Power Mix)

 

Александр: Всем привет, вы слушаете EaxCast, второй сезон, первый выпуск. Как вы поняли, мы успешно собрали деньги в рамках нашей кампании на BoomStarter. Об этом мы чуть подробнее расскажем, наверное, в следующем выпуске, потому что на данный момент кампания завершилась, но там еще есть всякая бумажная работа. А пока всем спасибо. Имена спонсоров, как мы обещали, пожертвовавших более 500 рублей, мы обязательно назовем, но чуть позже. А пока мы начинаем наш выпуск. Сегодня в выпуске, я Александр afiskon Алексеев, со мной Сережа Елин, привет Сереж.

Сергей: Привет!

А: И Сережа привел нам интересного гостя, Александра grange@ Юрченко. Привет.

Александр Юрченко: Привет.

А: Саш, расскажи нам немного о себе.

АЮ: Меня зову Александр Юрченко, мне 32 года. Я программист, программирую сколько себя помню. И последние лет десять я программировал операционную систему OpenBSD на добровольных началах. Правда, немного подзабросил. Сейчас работаю в Яндексе, в питерском офисе.

А: Расскажи, чем ты занимаешься в Яндексе.

АЮ: В Яндексе я занимаюсь обработкой пользовательских действий в реальном времени. Пользователь что-то ищет, куда-то кликает, что-то ему показывают. Все эти действия тщательным образом записываются, логируются. Понятное дело, анонимно. И раньше эти действия анализировались раз в сутки, потом раз в несколько часов, все с целью улучшить ранжирование, улучшить свежесть результатов. Сейчас мы анализируем их с задержкой в три секунды, что позволяет практически моментально, на лету, подстраиваться под пользователя, персонализировать для него все поведение Яндекса. Ну и саму инфраструктуру для этого разрабатываю в том числе и я.

А: То есть, речь идет не о поведенческих факторах, а об адаптации выдачи, как она называется, SERP, правильно? Под пользователя.

АЮ: Да, речь идет о реакции на действия пользователя в реальном времени.

А: Я даже не знал, что Яндекс так умеет. Какие вы там молодцы. А на чем вы все это пишете?

АЮ: Большинство кода пишется на C++, небольшие обвязочки есть на Python, но это что касается нашей группы. В других частях люди используют Java, где-то еще более экзотичные вещи.

А: Я думаю к Яндексу мы еще вернемся. Расскажи про OpenBSD, как тебя туда вообще занесло?

АЮ: С OpenBSD была смешная история. Я со школы, с детства, очень увлекался внутренностями компьютера, мне всегда нравилась именно система. То есть, когда одноклассники играли в игрушки на Агатах в школе, я все порывался написать какую-нибудь программу. Потом я узнал, что есть такая вещь — ассемблер, он меня абсолютно покорил. Я начал в этом всем ковыряться, забираться все больше в глубь. Ну и в конечном итоге, все эти изыскания, понятно дело, привели к вирусам, и вообще пониманию того, что безопасность систем, внутренности, уязвимости — это самая интересная часть компьютера, только этим и стоит заниматься. Это окончательно я осознал где-то на первом курсе.

И тогда я понял, что если я хочу быть специалистом по безопасности, мне нужна очень безопасная операционная система. И тут мне на глаза попался журнал «Хакер» и там как раз была статья про OpenBSD. И там вот кто-то расписывал, какая она распрекрасная и безопасная. А на то время у меня уже стоял Линукс, что-то вроде BlackCat или как-то так. И я понял, что с Линуксом надо завязывать и переходить на OpenBSD. А времена были тогда суровые, интернет был не очень быстрый, просто так скачать релиз было нельзя. В общем, я помыкался но все-таки его нашел на каком-то локальном FTP-шнике. Скачал, поставил. Так все и началось.

А: С первого раза поставил?

АЮ: По-моему, да. В OpenBSD очень-очень простой инсталятор, чем многих подкупает, я знаю, next, next, next, и все.

С: Да, да, да, поставить OpenBSD, насколько я помню, можно всего за 10 минут.

А: У тебя же, Сереж, есть некоторый опыт с OpenBSD, если я не ошибаюсь.

С: Да, у меня есть некоторый опыт. Я одно время админил несколько серверов с OpenBSD, и поэтому немножко знаю эту систему, немножко знаком. Собственно я через эту систему и познакомился с Сашей какое-то время назад.

А: В рассылке?

С: Честно говоря, я уже не помню. А, нет, я помню, это действительно было в рассылке. Был такой проект, я не знаю есть ли он сейчас, который называется OpenBSD.ru, и в каком-то далеком прошлом я был одним из, скажем так, активистов этого проекта, пытался по мере сил двигать эту операционку, по крайней мере среди своих знакомых. И в какой-то момент к нам пришел Саша, тогда он уже был разработчиком, насколько я помню, и подхватил… Понятно, в общем-то проект маленький, рук не хватало и Саша нам тогда очень помог. Как-то так мы и познакомились.

А: Я сейчас попробовал — OpenBSD не открывается.

С: Точка ru?

А: Точка ru.

С: Ну, значит, к сожалению, проект умер. Насколько я помню, последнее время дела у него шли не очень хорошо, народ как-то потихонечку-потихонечку уходил, что очень печально. Саш, скажи пожалуйста, Саша, который grange. Насколько я знаю, команда проекта на самом деле не такая большая, не может похвастаться своей величиной, как, скажем, FreeBSD или там Linux. Если я правильно помню, то активных commiter-ов сейчас 20 человек, причем где-то, наверное, не меньше трети из России, включая тебя?

АЮ: Да, я думаю это соответствует действительности. Там около сотни человек, которые вообще хоть что-то commit-ят в течении года. И, наверное, ядро, которое commit-ит не реже раза в неделю — это, пожалуй, человек 20, максимум 30, не больше.

С: Скажи, а как попасть в проект? Вдруг то-то захочет это сделать. Насколько я знаю, это не так-то просто, то есть порог входа все таки повыше чем в другие подобные проекты.

АЮ: Ну, вообще, последнее время порог снижался, поскольку Тео, лидер проекта, явно ощущал нехватку рук. Но вот когда я приходил, порог все еще был высокий и технология примерно была следующая. Ты находишь какие-нибудь проблемы, баги, самостоятельно их фиксишь и отсылаешь патчи. Когда поток патчей от тебя становится настолько большим, что проще тебе уже дать аккаунт, вместо того, чтоб их кто-то из действующих разработчиков commit-ил, вот тебе этот аккаунт дают.

Причем какой-то конкретный разработчик тебя рекомендует, мол, вот хороший человек, шлет патчи… Точнее так: обычно ты шлешь патч в какую-то одну область, которая тебя интересует и ты как-то в ней разбираешься, и обычно за эту область отвечает один-два человека. И через несколько операций, ты этих людей находишь, и начинаешь уже непосредственно с ними контактировать и у вас как бы канал завязывается. И уже эти люди говорят: «Вот, есть тут хороший человек, надо бы ему дать аккаунт». И тогда Тео дает тебе аккаунт, и эти люди как бы менторами твоими являются первое время. Они тебя вводят в курс дела, объясняют, что да как, приглядывают за тобой первое время, просматривают твои патчи. А потом, когда ты набираешься уже опыта, более-менее становишься самостоятельный. А через некоторое время можешь и сам кого-то пригласить.

А: Скажи, а по твоему опыту общения с Тео… Из конференции ruBSD, в Яндексе которая проходила, и я так понял, ты там тоже был, у меня сложилось какое-то странное впечатление о Тео. В частности, я уже не помню точно в каком контексте вопрос возник, он упоминал некие технологии, которые употреблялись в OpenBSD, перестановка страниц, что-то из этой серии. И отметил, что это влияет на работу некоторых приложений, в частности падает Firefox, но на многие приложения это особо не влияет. Получается, что часть приложений можно обезопасить таким способом, часть — нельзя. Но поскольку часть — нельзя, то мы эту фичу выключили полностью. И вот у него такая позиция, что либо мы включим ее на все, либо не включим ни на что. А повысить безопасность путем включения фичи хотя бы на процент приложений, а для тех, на которых это не работает, отключить, он на такой вариант ответил, что он вообще не годится, что это костыль, или что-то в этом роде. Тебе не кажется, что это как-то немножко фанатично, не прагматично?

АЮ: Нет, тут дело вот в чем. Тео — идеальный инженер. Строго говоря, он все делает правильно. Фича, которая не включена по умолчанию везде, она через год сломается, будьте покойны. Поэтому в OpenBSD, в частности, существует ядро generic в котором включено все, потому что стоит где-то что-то выключить и через пару циклов рефакторинга весь этот код благополучно сломается. Тео про это в курсе, и поэтому его позиция такова. Либо код должен работать на сто процентов, либо проще его удалить и не тратить силы на поддержку. Понятно, что в промышленном программировании, коммерческом программировании, написании продуктов, которые продаются и приносят солидные деньги, такой подход, мягко говоря, не допустим. В этом есть некоторое противоречие. В силу того, что Тео не занимается промышленным программированием, он занимается hobby project, то он может себе позволить делать все правильно.

А: А как на твой взгляд, OpenBSD — это экспериментальная система, исключительно такой home project, как ты его назвал? Ну там потихоньку что-нибудь портируется в другие системы, в тот же, пожалуйста, OpenSSL, который был разработан в рамках OpenBSD, если я ничего не путаю…

С: OpenSSL? Нет, OpenSSH, OpenSMTPD, OpenBGPD… Короче, многие проекты, которые начинаются с «Open», кроме LibreSSL.

А: Наоборот, LibreSSL в рамках OpenBSD, OpenSSL не в рамках.

C: Единственное исключение, пожалуй.

А: Вот вопрос заключается в следующем. На твой взгляд, OpenBSD исключительно экспериментальная система, или она может где-то использоваться, ну там на шлюзах, или еще где-то.

АЮ: Нет, OpenBSD — это, конечно, законченный, целостный проект, обладающий вполне определенным набором фич, и все фичи, которые там заявлены, они работают, и работают очень хорошо. Один из девизов OpenBSD-шников — just works, включил и работает из коробки, никаких танцев. Но из-за этого же, этих фичей, которые just works очень мало, но они есть. В частности в OpenBSD отличная криптография, отличная поддержка сетевого стека. В том смысле, что там весь роутинговый набор есть, демонов там и прочего, есть все средства для создания надежных роутеров, carp, pfsync и прочие вещи.

С: Вот, кстати, интересно. Саш, скажи, на сколько я знаю, в рамках самого проекта существуют некоторые экспериментальные ответвления. Я, в частности, помню, что некоторые разработчики пилят свою реализацию pthreads, которая rthreads по-моему называется. Которая занимает в разы меньше места в объектном коде и работает не хуже, если не лучше. Еще у них есть portable c compiler, который тоже весьма активно пилили. Ты не в курсе статуса этих проектов? Насколько я знаю, rthreads пилят уже лет 10, все никак не допилят.

АЮ: Про rthreads могу сказать, что когда я еще за этим следил, там были какие-то серьезные проблемы, которые всплывали на больших приложениях типа Firefox. Эти проблемы никто так и не зафиксил, ну и соответственно фичу влить в trunk не смогли, и так ее и забросили.

А: А разрабатывается OpenBSD на Subversion или на чем?

АЮ: На CVS.

C: Причем, если я помню правильно, в OpenBSD есть своя версия CVS, которая называется OpenCVS.

АЮ: Да, некоторое время назад, gnu-шный CVS выпилили, и заменили in plaсe написанным с нуля кодом.

А: И как? Я имею в виду, нормально, удобно, проблем никаких не возникает?

АЮ: Проблем, очевидно, не возникает, по той простой причине, что Тео не дает включать код, который не работает, как часики. Я помню, OpenCVS около года гонялся в продакшн нагрузке, копия репозитория крутилась, и только по прошествии очень солидного времени его закатили в основную ветку и включили.

А: Скажи, а в OpenBSD есть какая-нибудь специализация. Например, один человек занимается только сетевыми какими-нибудь компонентами, кто-то занимается scheduler-ом, и так далее, или все вонзаются во все? Вот ты, в частности, чем занимаешься?

АЮ: В основном, занимался железными драйверами. Начинал с IDE контроллеров, потом немножко ковырялся в ACPI, немножко с I2C сенсорами, в общем, в основном по железной тематики. Вообще, в Open’не интересная система, там нет каких-то формальных правил, и каждый занимается тем, чем ему нравиться. Но Тео, он такой очень хитрый менеджер на самом деле. Не все это знают, но это так. И он может так исподволь мотивировать людей, положить на стол кому-нибудь красивую железячку и сказать: «Знаешь, вот на ней не работает такая штука, может ты бы посмотрел?» И тут трудно отказать.

С: Да, особенно если эта железячка какая-то такая…

АЮ: У него даже есть для этого термин, guiltware — железо, которое вызывает у тебя вину что ты его не починил.

C: А вообще, у проекта есть какая то agenda или план развития? Или все действительно происходит стихийно — понравилась тебе какая-то железочка новая и ты решил ее запилить. Ну, я имею в виду, сделать ее поддержку. Или какая-то фича на рынке вышла там, всем какая-то нужная или не нужная…

А: Я немножко переформулирую вопрос. Есть ли какое-то видение, что нас ждет в будущих релизах OpenBSD? Куда движется проект?

АЮ: В принципе, у каждого крупного разработчика есть свой личный TODO, отранжированный по важности, ну и у Тео в голове есть какие-то roadmap-ы, но каких-то формальных — таких нет. Опять же, каждый пилит то, что ему нравится, но Тео кого-то куда-то может направлять. В ту сторону, в которую ему кажется нужно. Но, опять же, это не как в коммерческих проектах, не как в Линуксах. Тяжело что-то направлять, потому что, бывает, человек commit-ит, commit-ит и пропал на год. А у него там родился, оказывается, ребенок и вообще, он уезжал. Как в таких условиях roadmap-ы строить формальные? Поэтому все так достаточно расплывчато.

С: Но, насколько я понимаю, еще одна инновация, которую я до OpenBSD нигде не видел. Возможно, изобрели ее в OpenBSD, я узнал об этом от разработчиков, я имею в виду хакатоны. И по-моему это та самая вещь, которая значительно влияет на развитие проекта. Раньше это был один хакатон в год, а сейчас их проводится очень много и весьма регулярно. Что такое хакатон, я думаю, наши слушатели в курсе. Тем, кто не в курсе, я немножко поясню. Хакатон — это такое мероприятие, когда программисты собираются вместе и решают какие-то заявленные задачи. Это может быть у OpenBSD тематический хакатон, когда, допустим, все собираются и пилят сетевой стек. А могут быть… А какие еще могут быть, кстати?

АЮ: На моей памяти был hardware хакатон, я по-моему в 2007 там был. Это был хакатон, посвященный исключительно драйверам, ну вот на нем я за 10 дней написал с нуля драйвер для IBM-кого серверного RAID контроллера. Был хакатон, посвященный портам. Пацаны сели и что-то там очень мощно запортировали, зафиксили. Сейчас там, по-моему, их целая куча, и сетевой хакатон и хакатон по шифрованию, в общем — много.

А: А вот такой вопрос. Допустим, наши слушатели, воодушевленные выпуском EaxCast, разом решили поддержать проект OpenBSD, и сделать туда очень и очень много commit-ов. Что бы ты им посоветовал для того, чтобы начать? Литературу, мануалы, туториалы… Например, есть книжка Absolute OpenBSD, она как на твой взгляд хороша или плоха?

АЮ: Я ее полистывал ради любопытства, вроде там все правда написана. Но это ведь книжка для пользователя, не для kernel хакера. Поэтому с этой точки зрения она мне кажется бесполезна. А вообще, если человек достаточно новый в программировании, и в разработке операционных систем, особенно ядер операционных систем, то обычно путь такого человека начинается с портов. Ставят себе на laptop OpenBSD и обнаруживают, что какой-то любимой софтины в портах нет. Тогда берется в руки любимый текстовый редактор и эта софтина портируется. Потом еще что-то портируется, потом выясняется, что некоторые порты, которыми он пользуется, они давно устарели, а maintainer пропал. Тогда эти порты человек может забрать себе и стать их maintainer’ом. И так человек начинает вариться в этом соку, переписываться с разработчиками и непременно будет уже сталкиваться и с кодом самой системы. Затем возможен такой плавный переход, плавный рост скилов, и, там, за год человек запросто может из porter-а перейти в kernel developer’ы. Примеры были.

С: Насколько я знаю, есть еще один путь. По OpenBSD есть публичный список bug-ов и человек, который желает помочь проекту, может начать с исправления каких-то мелочей, присылая патч разработчикам. Так постепенно втянуться.

АЮ: В теории — да. Но на практике те баги, которые висят и не закрыты, это очень тяжелые старые баги, которые вообще не известно, можно ли пофиксить. Я не припомню, чтобы пришел человек с улицы и начал закрывать все эти problem report’ы, прям один за одним. Да, бывает, что люди не из команды закрывают какие-либо problem report’ы, но я не могу сказать, чтоб это носило какой-либо систематический характер. Обычно быват так, что, вот как у меня было, я тоже хотел что-нибудь запатчить, что-нибудь пофиксить, но никак не мог придумать, что. А затем оказалось, что просто достаточно плотно пользоваться системой и баги начнут всплывать сами один за одним. И чем больше ты пользуешься, чем больше у тебя наметывается глаз. Ты сразу начинаешь понимать, что есть баг, что есть фича. Тем больше этих багов тебе вылазит. И тут уже просто не ленишься и начинаешь их фиксить. И работа сама тебя находит.

С: Да, да, вспоминается внутренний редактор, если я не ошибаюсь, называется mg, в котором куча всяких подсказок на тему слакера.

АЮ: Да, Тео-мод…

С: Я, Саше и нашим слушателям поясню. Ребята из проекта запилили в свой внутренний editor много всяких мотивирующих выражений, и их забавно читать просто сами по себе вне контекста всей системы. Надписи, типа «Эй, давай не ленись, пойди там что-нибудь пофикси». Ну и все в том же духе.

А: Забавно. А правда, что в OpenBSD очень простой и понятный код? Что он пишется максимально тупо и в одном стиле из соображений, что так легче поддерживать, и так труднее наделать ошибок.

АЮ: Да, конечно. Это чистая правда, в OpenBSD очень чистая кодовая база. Особенно весь код, который новый. Есть специальная man-страница man 9 style, в которой описан принятый стиль кодирования. В принципе, сейчас стилем кодирования никого не удивишь, в любой более-менее крупной компании такой стиль обязательно есть. Так что, когда ты читаешь чужой код, твой глаз не должен спотыкаться о чужие скобочки. И да, есть какие-то стандарты на именно конструкции, на безопасные конструкции, некоторые небезопасные конструкции выпилены из API, на некоторые GCC специальным образом подхачили, чтоб он ругался, и так далее. Да, в OpenBSD очень большое внимание уделяют именно качеству исходного кода.

А: Но это по сравнению с каким-нибудь Линуксом, видимо, делает намного меньше порог вхождения в проект. А скажи, лично тебе что дает участие в проекте OpenBSD? Ты чувствуешь какой-то свой профессиональный рост за этот счет? Или это просто такое хобби интересное? Или это дает ощущение, что ты пользу миру принес?

АЮ: Это дает колоссальный опыт. Я, пожалуй, не совру, если скажу, что почти все, что я знаю и умею сейчас, я получил в OpenBSD. Тут и технические навыки, и именно кодирование, тонкости языка, тонкости работы программ внутри *nix. Тут и навыки проектировщика архитектур. Внутри ядра OpenBSD все известные шаблоны проектирования встречаются в том или ином виде. Тут и навык командной работы, работы с системой контроля версий, и релиз-цикл и все-все. Будучи членом команды OpenBSD ты буквально на халяву находишься внутри высококлассной команды, которая функционирует по достаточно высоким стандартам качества отрасли. И потом, придя в какую-то коммерческую организацию, ты обнаружишь, что у тебя очень неслабый запас за плечами оказывается, хотя ты, допустим, никогда до этого за деньги код не писал.

А: А еще такой глупый вопрос. На ruBSD у Тео на его ноутике, у него был какой-то хардкорное десктоп окружение. Я не смог опознать. Ты не знаешь, что это такое?

АЮ: ну это что-то из разряда fvwm и сwm или что-то такое. Это оконный менеджер из 80-х слегка допиленный для нужд сегодняшних дней.

С: Что-то совсем легковесное.

АЮ: Да, да, конечно. Потому что тратить драгоценные мегабайты на window manager это глупо, лучше их отдать компилятору и линкеру, чтобы побыстрее пересобрать ядро, и побыстрее проверить свои патчи.

А: А расскажи немного о работе в Яндексе. Большая ли у вас команда, какую систему контроля версий вы используете и насколько… Мне всегда было интересно, правда ли говорят, что в Яндексе кровавый энтерпрайз, и вообще все очень жестко.

АЮ: В Яндексе соблюдается баланс между нормальными техническими отношениями и энтерпрайзом. Это понятно, Яндекс не богадельня, он зарабатывает деньги, поэтому некоторый энтерпрайз должен наличествовать. Но я не могу сказать, что мне как-то плохо, душно и ужасно. Нет, мне очень комфортно, все нравится. У нас небольшая команда в несколько человек, точнее несколько человек — наша группа, и мы входим в более большую команду, человек 20. Мы используем попеременно Svn и Git, это связано с историческими причинами.

А: А вот, для решения своих задач, для адаптации SERP-а под пользователя, вы используете какие-то хардкорные алгоритмы и нужно быть большим зубром в математике? Или это такие методом подгона подобранные методы, и любой чувак, который в highload годик-другой посидел, с этим справиться? То есть, какие алгоритмы вы применяете?

АЮ: Используются две основные вещи. Первая — это, как ты сказал, highload, нечто, что позволяет обработать большой объем данных быстро, надежно и отказоустойчиво. И вторая сущность — это все, что связано с машинным обучением. Большие объемы данных в настоящее время обычно обрабатываются с помощью машинного обучения. Придумывают некоторые модели, обучают их, тренируют под какую-то целевую функцию, и дальше пользуются результатом.

Тут недавно на Хабре статья пробегала, что генетический алгоритм придумал электронную схему, которая работает очень хорошо. Или алгоритм TCP, или то и другое, не важно. В общем, генетический алгоритм или нейронная сеть, или что-то такое, придумало, что работает прекрасно. Но живые люди, разработчики, глядя в сгенерированный код, не понимают, как он работает. И вот это очень хорошо отражает суть нынешнего подхода к обработке каких-то сложных вещей. Мы просто берем огромный массив обучающих данных, строим какую-то модель, дальше мы ее обучаем, и она выдает какой-то результат. И он, обычно, правильный. Но как она это делает, уже не очень понятно.

А: Это не единственный подход, есть и другие. Я не специалист, правда, но, там фреймы и так далее. Очень большая проблема генетических алгоритмов и нейронных сетей в том, что они не могут объяснить результат. У тебя в ряде задач интеллектуальная система, когда ты ее спрашиваешь и она дает тебе ответ, ты можешь спросить «А почему?» И она должна тебе хоть какую-то трассировку показать. Есть и другие подходы, и эта проблема, в принципе, решаема.

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

А: Про программистов на C++ ходит такой еще слух (нам, сторонним людям, очень интересно, что ты скажешь о слухах, которые ходят о Яндексе), что у вас там сплошные шаблоны на шаблонах, и метапрограммирование на шаблонах, ехал шаблон через шаблон. Это правда, или это в другом отделе, или этого вообще нет?

АЮ: Там есть стандартная библиотека своя. И в самих нутрях ее, конечно же, шаблоны, иначе ей невозможно пользоваться. И, порой, шаблон на шаблоне. А иногда и шаблон на шаблоне на шаблоне, это понятно. Но снаружи это не особо видно. То есть, один раз этот код написан. Он сложный, он шаблонизирован, но он отлажен, покрыт тестами, и, в принципе, на этом заканчивается. В прикладных программах, у тебя один шаблон, в смысле, вложенность. Ну, две, но не больше. Плюс, использование шаблонов, как замена функциональному программированию, особо не приветствуется из-за сложности отладки.

А: Метапрограммированию, наверное?

АЮ: Ну, и это тоже, да.

С: Раз уж мы заговорили о функциональном программировании. Я слышал или читал где-то, что ты иногда балуешься Хаскелем.

АЮ: Скажем так, я пытаюсь дочитать книгу, Learn You a Haskell for Great Good, остановился на монадах. На этом, пожалуй, все. Еще я пишу на Питоне в функциональном стиле. Причем меня очень радует, что синтаксис Питона то ли с самого Хаскеля слизан, то ли inspired Хаскелем. В общем, можно особо не знать Питон, но, помня, как это выглядело в Хаскеле, достаточно уверенно писать.

А: Ммм… нет, я не буду поднимать холиварную тему, я спрошу другое. Если не ошибаюсь, в Яндексе есть библиотечка для C++. По сути, это Эрланг, переписанный на C++. Ты об этом ничего не знаешь? И не используете ли вы это в проекте. Я это на какой-то конференции слышал из последних, в прошлом году.

АЮ: Не знаю. Все, что я знаю — в стандартной библиотеке, про которую я говорил, есть корутины. Это все, что я знаю.

С: Скажи, а насколько широко и глубоко вы используете стандартные библиотеки, и вообще стандарт C++?

А: Boost, STL, такие вещи.

C: Насколько я знаю, у вас достаточно много ограничений?

АЮ: У нас нету boost-а, и у нас своеобразный STL. Но это связано с тем, что Яндекс писался в начале 90-х, когда почти ничего не было. Когда даже класс String нужно самому было делать. И сейчас уже огромная кодовая база на всем этом, поэтому никто не спешит ничего менять. Но еще раз повторю, boost-а нет, STL есть в некотором виде, там некий порт STL-а. Но, в принципе, вся функциональность, она наличествует, и особых проблем, что чего-то не хватает, не возникает.

А: А это C++89, если я не ошибаюсь. То есть, явно не C++11? На чем, на каком C++ вы пишете?

АЮ: Да, пожалуй, 89. На 11 хотят как-то переходить. Но, опять же, это все не быстро, потому что компиляторы, платформы, и все такое, одинаковая поддержка везде.

А: А на серверах у вас что, Фряха, какой-нибудь Линукс?

АЮ: Фряха и Линукс, где как.

С: С твоей точки зрения, с чем удобнее работать, с Фряхой или с Линуксом. Такой, конечно, вопрос провокационный.

АЮ: Ну, я, честно говоря, вообще не знаю, зачем нужна Фряха. По-моему, всем достаточно очевидно, что Линукс окончательно победил. И если тебе надо зарабатывать деньги, ты берешь Линукс. Если тебе деньги не надо зарабатывать, ты можешь брать все, что угодно.

А: Ну, тут ты меня успешно потролил. Я, как кое-кто из слушателей знает, лет 5 юзал FreeBSD на десктопе. И я с нее, конечно, в итоге перешел, потому что прагматизм победил. Потому что есть железка, на ней должен быть рабочий некий *nix. Но, тем не менее, в зависимости от задач, вполне можешь применить или не применить Фряху. Вот, например, в WhatsApp, у них очень интересно сделано, у них повсюду Фряха, на Фряхе виртуальная машина Эрланга, и больше ничего. То же самое, если тебе, например, нужен, там, сервер, СУБД. Ты поднимаешь PostgreSQL на Фряхе. И там, не знаю, что-нибудь на тех же самых плюсах пишешь под эту Фряху. И пишешь так свою приложеньку, почему нет? Но надо признать, что да, когда у тебя приехал новый ультрабук, у тебя нет особого времени или желания разбираться, как там нем завести Фряху, хочется просто поставить, воткнуть флешку с Бубунтой и чтобы она встала.

АЮ: Я к холиварам вообще равнодушен, и у меня позиция очень простая. Мы, например, когда перевели свой сервер с нашим приложением с Фряхи на Линукс, у нас rps вырос в два раза. Наверное, у нас был кривой код, или не натюненная Фряха, я не спорю. Но просто вот такой факт, я его знаю. И исходя из этого факта я дальше строю свое поведение, никому не навязывая.

А: Сереж, тебе последний вопрос, и быстро закругляемся.

С: Насколько я знаю, Саш, ты не только хороший инженер, но еще и весьма неплохой музыкант. Я, например, слышал по-моему не выпущенный альбом твоей группы. Еще институтской даже, и на мой взгляд он весьма неплох. Скажи, ты продолжаешь заниматься музыкой?

АЮ: Да, я сейчас активно пытаюсь начать какие-то новые проекты, записать новый материал, найти каких-то музыкантов, вот новый бложик кропаю по вечерам. В общем, да, тема эта меня не отпускает, музыка так и осталась страстью. Что-то делается, что-то есть. Правда, это совсем не то, что было в студенчестве, какие-то другие формы привлекают.

C: Тем не менее, интересно было бы послушать. Я надеюсь, ты выкладываешь куда-то свои произведения?

АЮ: Да, я выкладываю, вот пользуясь случаем могу прорекламировать свой мини проектик. Tintun.es — это рингтончики, которые я записываю на фортепиано.

А: Мы обязательно все ссылочки приложим, кидай мне их в скайпик, я их в черновичок положу, и в show notes их обязательно предъявим. У нас, к сожалению, катастрофически кончилось время, поэтому я вынужден выпуск завершить. Спасибо, что зашел, Саш, было очень интересно с тобой поговорить.

АЮ: Спасибо, что позвали.

А: На сегодня у нас все, не забывайте, пожалуйста, делиться ссылкой на выпуск в социальных сетях, у нас есть кнопочки Twitter, Google+, можно подписываться, подписываться по e-mail, подписываться по Google+, по Твиттеру, мы есть в iTunes. И спасибо, что слушали. Не забывайте писать комментарии. Всем пока.

С: Пока.

АЮ: Пока.

Дополнение: EaxCast S02E02 — интервью с Романом Душкиным об управлении проектами, функциональном программировании, квантовых вычислениях и краудфандинге

Метки: , , , .

Подпишись через RSS, E-Mail, Google+, Facebook, Vk или Twitter!

Понравился пост? Поделись с другими: