Хабрахабр

Интервью с Виталием Брагилевским: «Мир, в котором все будут программировать на Haskell — это вряд ли хороший мир»

Также, дает выездные курсы в других городах, является редактором и переводчиком множества книг о Haskell и функциональном программировании, состоит в комитетах Haskell 2020 и компилятора GHC и активно выступает на конференциях. Виталий Брагилевский (@_bravit) пока что еще преподает в ЮФУ курсы по Haskell и теории алгоритмов. К примеру, он прочитает краткий курс компиляторостроения на Haskell на функциональной конференции FPURE в Казани.

Ниже читайте ее текстовую расшифровку, где Виталий рассказывает о плюсах карьеры преподавателя, множестве книг о Haskell и не только и, конечно же, о самом Haskell, и нужно ли быть гением, чтобы писать на этом языке.
— Как у тебя получилось стать преподавателем? Ввиду такого огромного количества активностей, итоговая запись вышла почти на целый час (ссылка на аудио)! По твоей активности, количеству выступлений на конференциях, ты не похож на обычного преподавателя.
В моем прошлом преподаватели были не такими.

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

А когда закончил учиться в университете, начал преподавать в университете. Когда я учился на третьем курсе университета, начал преподавать в школе-лицее, который я заканчивал. Поэтому для меня этот путь простой, прямой, и никаких вариантов у меня не было: мне всегда этого хотелось, и начал преподавать. Такой был очень естественный путь, и я тогда себя никем другим не представлял.

Специальность, на которой ты обучался, была связана с программированием? — А как дело дошло до института?

— Я заканчивал Ростовский государственный университет по направлению “Прикладная математика и информатика”.

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

Многие мои однокурсники, которые пошли по программистской линии, сейчас работают какими-то программистскими начальниками.

— Вы потом там же и остались и пошли в аспирантуру?

Я не учился в аспирантуре. — Да, я в том же университете остался. Были какие-то попытки, но сказать, что я занимался целенаправленно наукой, я не могу. И я не занимался научной деятельностью. Тут еще накладывалось то, что тех областей науки, которые мне были интересны, у нас в стране не было. У меня все время находились дела, которые казались мне более интересными, чем занятия наукой. А заниматься наукой удаленно, без руководства, самостоятельно, практически я не смог. И можно сказать, что нет до сих пор.

— А из практики если взять, у нас только в Новосибирске есть что-то связанное с компиляторами?

Компиляторная школа у нас в стране довольно сильная, но мне были интересны вещи более теоретические. — Компиляторы — это немножко другое все-таки. Например, связанные с типами.

Гигантские разделы, посвященные парсингу, всяким таким вещам, а то, что мне интересно, там этого нет… Если мы возьмем Dragon Book, то там теории типов посвящена маленькая глава и ничего толком там нет.

Мне было более интересно изучать теоретические вещи. Когда я закончил университет, меня это привлекало, но не более того. Но это было чисто самообразование. И так получалось, что я их изучал. Без конкретного результата, без выхлопа в виде научной работы.

Пирса? — А что из книг на на эту тему можно было почитать тогда?

Потом его перевели на русский язык, и издатель нам тогда прислал на кафедру посылку, где было 5-6 переведенных на русский этих книжек. — Если я не ошибаюсь, Пирс (TAPL — Types and Programming Languages) на английском вышел в году 2005-ом. У нас были семинары, на которых мы все это потихоньку изучали, делали доклады, решали задачи.

Есть отличный способ что-то изучить — это рассказать другому об этом. Но до этого тоже появлялись книжки на английском языке. Была какая-то книжка на английском, Шпрингеровская. И я делал курс по использованию λ-исчислений для моделирования разных конструкций языков программирования. То есть читаешь и одновременно рассказываешь желающим тебя послушать.

Как произошло, что начали преподавать Haskell? — Ты преподаешь разные дисциплины и вообще вроде начинали с Java.

У меня первый спецкурс, который я читал, назывался “Web XML технологии”. — Когда молодой преподаватель приходит работать в университет, ему дают курсы не по его выбору обычно, а то, что надо читать. В начале июля меня берут на кафедру, говорят, вот твоя нагрузка и с сентября начинаешь читать курс. В первый раз я его читал в 2003 году. Поручили — значит изучаешь и начинаешь читать. Я ни в том, ни в другом специалистом не был тогда. Появился курс по Java, и ее немножко преподавал несколько лет. XML изучил и в рамках этого курса, потом начал веб-сервисы изучать, как-то программировать, оттуда и на Java перешел.

Если есть место, куда это воткнуть в учебный план, кафедра соглашается. То есть курсы появляются из того, что поручили, а уже потом начинаешь предлагать сам, что тебе интересно и хочется прочитать. И так появился курс ФП, по-моему в 2008/09 году.

Можно считать, что вообще не знал. А к тому времени Haskell я знал очень плохо. Студенты, конечно, ничего не поняли, и я обсуждал это с ними спустя много лет. Но это обычно не мешает читать спецкурс. Уже разобрался в какой-то момент и стал лучше преподавать, как мне кажется. Но преподаватель, преподавая отдельные курсы, все лучше и лучше читает.

— А какие были отзывы от студентов, которые получили уже проработанный материал?

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

И в общем они правы. Понятно, что студенты относятся к изучению Haskell как к какой-то обязаловке: надо изучать, вот они и изучают.

Появились ли те, кто ушел в функциональщину?
— Я единиц знаю, кто Haskell использует из тех, кто прослушал курс этот. — Как-то это повлияло на выпускников? И для меня всегда было важно, чтобы студенты попытались разобраться в идеях ФП, а уже Haskell, не Haskell, — это дело десятое. Курс назывался не Haskell, а ФП. И я надеюсь, что никто из моих студентов не боится использовать функции высшего порядка и Лямбда-функции в каких-нибудь других промышленных языках программирования.

Мир, в котором все будут программировать на Haskell — это вряд ли очень хороший мир. И это я считаю абсолютно нормальным. И если они не боятся идей ФП — это уже хорошо.

— А почему это будет плохой мир?

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

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

Экспертный уровень водителя должен все время падать. Возьмем автомобили какие-нибудь. То же самое связано с программированием. То есть должно быть все проще и проще водить машину. Или мы будем брать: не понимаешь монады, расстрелять! А Haskell, конечно, высокие требования накладывает, и не очень перспективно это все.

Я вот примеряю с врачами. — Вот пример с водителями это понятно. Я бы не хотел, чтобы их уровень со временем падал.

Вещи, связанные с диагностикой, точно сейчас хорошо решаются программным путем. — Я много раз слышал о том, что уровень врачей можно поднять с помощью уровня программного обеспечения. И задача врача — пользоваться всем этим. Есть анализы, есть разные методы машинного обучения, которые помогают поставить диагноз. ПО должно быть таким, чтобы уровень врача был достаточным, чтобы пользоваться этим ПО.

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

Это абсолютно нормально. Это может звучать слишком человеконенавистнически, но практика развития человечества показывает, что, мало того, что не все умные, но не все и должны быть умными. Может быть, и хотелось бы, но это все равно невозможно. Если у нас есть 1% населения, который умный, то это хорошо, и больше и не нужно. Поэтому и нужны разные уровни, разные работы.

— Я слышал, что вы участвовали в переводах книг. Можете рассказать об этом?

Я слышал, что издательство «ДМК-Пресс» должно выпустить книжку “Изучай Haskell во имя добра”. — Мое первое дело в книгоиздании началось со следующего. Я был заинтересован в этом переводе, потому что мне нужно было рекомендовать что-то студентам, что им почитать на русском языке желательно про Haskell.

В каком эта работа состоянии? И я, как сейчас помню, в конце декабря написал письмо в издательство с вопросом, вот так и так, я преподаю Haskell, слышал, что идет работа над изданием перевода. И мне ответил главный редактор этого издательства Дмитрий Мовчан, что мы практически заканчиваем, не хотите ли посмотреть оригинал-макет, что там получилось?

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

Что-то там пришлось переводить заново, какие-то разделы не были переведены, их нужно было допереводить. Они согласились, и в течение полутора месяца я им посылал разные замечания по тексту. Там я указан как научный редактор. Так я познакомился с издательством и через некоторое время книжка вышла. И так началось. Роман Душкин, и я второй.

Я перевел с Артемом Пеленицыным, моим коллегой по университету, книгу Берда “Жемчужины функционального программирования”. А после этого я начал издательству предлагать какие-то книжки для перевода. Я еще переводил книжку Марлоу “Параллельное и конкурентное программирование на языке Haskell”. Мы перевели “Введение в теорию языков программирования”, книжку тоненькую. Вот последнее, что мои студенты переводили, “Программируй на Haskell” Уилла Курта. Или это все, или еще что-то, я уже не помню, честно говоря.

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

— А в Практике функционального программирования вы участвовали? Я вообще не застал этот журнал.

Про свертки я писал и про то, как они позволяют запрограммировать многие вычисления на списках. — Ну да, я там для него статью одну в третьем выпуске что ли написал.

Кто его начал и почему все заглохло? — А что вообще произошло с журналом?

У меня полная коллекция есть печатная. — Он выходил несколько лет. Но один из главных людей-организаторов этого журнала Лев Валкин, lionett в ЖЖ. Я не знаю всех деталей, как он возник. По-моему, Дмитрий Остапов еще из тех, кто в самом начале. Он был, по-моему, редактором нескольких первых номеров потом этим занимался Женя Кирпичев, который сейчас в гугле работает. У них выходили посты очень популярные и с гигантскими обсуждениями. Это все были люди, которые тогда были активны в русском сегменте ЖЖ. И на мой взгляд, журнал был очень хорошим, статьи писались очень хорошо. Вот они в какой-то момент решили сделать журнал на эту тему.

Был серьезный процесс исправлений — меня заставили выбросить кучу шуток из статьи. Они работали так: авторы писали статьи и эти статьи очень хорошо рецензировались. Выкинули кучу шуток, и так далее. Валкин мне сказал: “Вот ты читаешь сейчас, тебе смешно, а потом тебе будет стыдно”. В общем серьезная работа над текстом была, и он получался очень хорошо.

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

И вообще усталость пришла. У части людей не было желания продолжать на русском, они хотели на английском, другие люди не хотели на английском. Потому что ясно, что времени это требует очень много, и никто не мог себе такого позволить. То есть не было людей, готовых стать движущей силой журнала. А без движущей силы такое существовать не может.

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

— А там прямо печатную версию рассылали?

То есть они печатались, а не только в электронной форме были. — Да, там были какие-то сервисы, можно было удаленно подписаться и получать очередные номера. Тот же Валкин тратил очень много времени: он шрифты покупал для журнала, чтобы это солидно было. Их конечно, приятно держать в руках. Это все в TeX делалось, что всегда сложно. И это выглядит красиво. Это была большая работа и выполнять ее просто так было очень сложно.

— Хотел сразу перескочить на книгу, которую ты сейчас пишешь по “Haskell in Depth”? Чем она будет отличаться от “Изучай Haskell во имя добра”?

Для того, чтобы ее читать, нужно Haskell уже знать. — Книжка позиционируется как вторая по Haskell. Потому что уже все это должны изучить. Это первое отличие от “Learn your Haskell” и всех остальных, потому что все они вводят с самого начала, а тут я себе даже позволяю монады не объяснять.

Это такой прагматический Haskell, который можно использовать в промышленности. Второе, что для меня важно при ее написании — то, что эта книжка должна подчеркивать способность Haskell решать практические задачи. Очень мало книг по Haskell реально используют библиотеки. Поэтому я стараюсь использовать библиотеки. И то, они очень мало ориентировались на библиотеки, хотя они на то время уже были, но тут их мало используют. В прагматичном подходе есть только одна книжка “Real World Haskell”, которая в 2008 году выходила, то есть очень давно. Когда ты используешь библиотеки, ты можешь продвинуться гораздо дальше. А я наоборот с самого начала считаю необходимым использовать как можно больше библиотек для решения задачи. Вот это вторая книжка — ориентация на использование в промышленном программировании.

Конкретно сейчас я работаю над главой по перфомансу, производительности и бенчмарки всякие и как делать оптимизацию кода. И третье — наверное, попытка описать вещи, которые разбросаны по куче блогпостов. За 10 лет Haskell ушел далеко вперед в этом вопросе и много разрозненной информации и вот я как-то пытаюсь ее собрать в рамках одной главы. И я смотрю на “Real World Haskell”, там написано нормально, но мало.

При этом понятно, что из соображений объема я не в состоянии все дать, но я несмотря на то, что называется Haskell in depth, все равно in depth — это можно миллион страниц писать, и все это будет глубже и глубже. В Haskell много таких тем, где нет одного источника, где можно было бы про это почитать. Но я стараюсь дать некий минимум, после которого уже легко можно смотреть отдельные блокпосты и всякие разные списки-рассылки читать.

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

Есть же еще книга Гранина (graninas) “Functional Design and Architecture”. — Я так понимаю, в ближайшем будущем готовятся две книги по хаскелю на выход.

Он там пишет об архитектурах приложений, насколько я понимаю. — Ну у него тема все-таки другая. Поэтому я не считаю, что я нахожусь в какой-то конкуренции с другими авторами. Значит, я считаю, чем больше книжек использует хаскель и про хаскель, тем лучше.

В твоей получается будет много примеров? — У него через всю книгу будет просасываться пример его приложения, как на практике делать.

Есть Алехандро Мена книжка “Beginning Haskell: A Project-Based Approach, 2014”. — Кстати, вот с таким подходом одного приложения мне такой подход лично не очень нравится. Там сайт с корзиной, который на протяжении всей книги пилится. И она тоже на русский переведена. Это больше похоже на какую-то реального рода работу. Мне это не очень нравится. Но все подходы имеют право на существование. И вещи из хаскеля вспоминаются, чтобы что-то конкретное заимплементить.

И тогда было объявлены несколько книжек по хаскелю с почти никакой информацией о них. Я полтора года назад уже, в августе 2017 года, написал набор рецензий на имеющиеся книжки по хаскелю и понял, что все плохо. Там была “Intermediate HaskelL”, по-моему, которую делал Артем Казак и Влад Завьялов. Была “Joy of Haskell” Жюли Моронуки, одна из соавторов Haskell Book. Но я ничего больше о них не слышал с тех пор, хотя прошло полтора года. То есть уже тогда была информация об этих книжках, но в виде объявлений. Они в таком же непонятном состоянии находятся.

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

Или может кто-то другой будет этим заниматься? — Хватит ли сил потом перевести это все на русский?

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

— А нету ли какого-то договора или что-то в этом роде?

Применение санкций возможно, когда это приносит большой доход. — Все сроки давно прошли, но санкции пока ко мне никто не применяет. Если бы был какой-то работодатель, который платил бы мне пять тысяч долларов в месяц и требовал сделанную работу, тогда да. А когда это не приносит никакого дохода, то и санкции не помогут.

Есть ли у тебя какой-то опыт промышленного программирования, потому что это проскакивало в твиттере. — На книгах закончили. И ты уходишь от преподавания, заниматься реальной разработкой?

Но от преподавательской работы я действительно ухожу. — Куда именно я ухожу, я пока не знаю (на момент публикации уже стало известно куда). Мне кажется, что его можно получить, если понадобится. И опыта промышленной работы у меня нет. Я готов в своем возрасте начать нарабатывать опыт промышленного программирования, если это понадобится. Жизнь устроена таким образом, что любая даже джуниорская позиция в IT оценивается существенно выше, чем работа в университете и обязанностей при этом существенно меньше. И на этом заканчивается моя работа в университете. Формально я заканчиваю 15 июля, там у меня будет летняя практика, которой я буду руководить.

Какие там сейчас предложения висят? — Ты ведь состоишь в комитете Haskell 2020. Я слышал только о линейных типах. Как может измениться язык, что почитать по этому поводу? Это как-то похоже на механики в Rust?

Haskell 2020 — его цель изначально была написать новые стандарты языка хаскель, но этот комитет провалился. — Есть 2 комитета. Но новый стандарт языка хаскель — он не про новые вещи. Это можно сейчас уже точно утверждать. Но работа в этом комитете практически никакая не велась. Он про вещи уже устоявшиеся, которые можно уже стандартизировать.

Это наблюдательный комитет компилятора ghc. Что касается линейного хаскеля — это другой комитет. То есть это не про язык хаскель, а про возможности конкретного компилятора. И у него задача другая — задача принимать предложения по реализации внутри компилятора ghc. Ну и так получилось, что я в обоих комитетах состою.

И он был принят, причем принят условно. Вот линейный хаскель — это был один из самых больших пропоузалов. То есть, он будет принят если будут выполнены определенные условия.

Насколько я понимаю, это просто попытка описать, как должны работать функции, которые принимают значение и используют его в точности один раз. Мне сложно сравнивать линейные типы с растовскими, потому что детали я не очень знаю и в деталях этого пропоузала не очень разбираюсь. То есть это на самом деле не в полной выправке линейные типы, насколько я понимаю. То есть там шла речь о том, что название linear-types неправильное и на самом деле должна быть linear-arrows. Но я еще раз говорю, что я в деталях обсуждения особо не участвовал и до конца не понимаю.

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

— Есть ли какие-то интересные, которые ты курируешь, чтобы упомянуть?

Я в этот комитет вошел в августе 2018 года. — У меня очень мало пока было. Я вот сейчас работаю над пропоузалом “Простые ограниченные семейства функций”. Даже ничего особо интересного я не припомню. Например, в этом пропоузале предлагается добавить контроль над семействами типов такого рода. Я пытаюсь продраться сквозь текст, написанный довольно сложным языком. А их хотят ограничить таким образом, чтобы не любые типы можно было подставлять, а только те, которые там реализуют какое-то ограничение на семейство функций. Сейчас семейство типов, как бы функции на типах, для которых не определена область определения.

— А получится ли дать быструю информацию, зачем используется семейства типов в хаскеле?

В ghc, по-моему, с 2005 года существуют. — Ну у них очень много примеров. Когда мы хотим получать результаты функций не какого-то конкретного типа, а типа, который зависит от других типов. Это фактически вычисления на типах.

То есть мы не можем взять тип int и тип integer и сложить. Самый простой пример: в обычном хаскеле мы не можем складывать значения разных типов, даже если они числовые. Например, если мы int и integer складываем, то более общий будет integer. Но при это мы всегда можем вычислить некий более общий тип. И мы можем написать функцию, которая по двум заданным типам будет вычислять более общий. А, если мы double и int складываем, то более общим будет double. И тогда можно объявить функцию с входными значениями A и B, а на выходе зависимость от этих двух типов.

— Это почти зависимые типы?

То есть это функция на типах, никаких значений тут не возникает. — Нет, это совсем не зависимые типы, потому что работа идет только на типах. И несмотря на то, что почти 15 лет функции семейства типов с нами, там все равно остается много проблем. Это удобно, но там очень много, правда, темных углов в этой реализации.

В самом начале ты сказал, что хаскель только для умников. — И последний вопрос. Зачем тогда писать книги, давать столько информации об этом, если это нужно только 1% от всей индустрии?

Во-вторых — потому что все это делается не для них, а для себя. — Во-первых 1% — это много. И эта самая главная и самая лучшая мотивация. Люди занимаются тем, что им интересно. Если нет, мне все равно. Если этот 1% индустрии будет счастлив, то это очень хорошо.

Ивент пройдет 24-25 мая в Казани. FPURE — это единственная в этом году конференция по функциональному программированию в России. Купить билет и узнать больше информации можно тут.
Более 200 российских и зарубежных представителей различных фп-сообществ: Scala, Haskell, Clojure, F#, Elixir и другие.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть