eaxcast-s02e02/

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

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

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

Шоу нотес:

Голоса выпуска: Роман @romandushkin Душкин, Сергей @kpy3 Елин, Валерий @sum3rman Мелешкин, Александр @afiskon Алексеев

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

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

Щедрыми людьми, которые помогли подкасту оказались следующие. Это Vitaly Eskov, Timothy Klim, Валерий Баранов, Oleg Kandaurov, Dmitriy Vlasov, Sergey Lisin, Ivan Glushkov, Виктор Лазарев, Alexander Sergeyev, Дмитрий Куликов, Павел Дробушевич, Роман Нехорошев, Renat Nasyrov, Alex Nevkontakte, Роман Душкин, Александр Гриднев, Петров Александр, Taras Shapovalov.

Я извиняюсь, если я кого-то произнес плохо или совсем неправильно. И так далее, и тому подобное. Остальные спонсоры тоже большие молодцы, всем спасибо.

И мы, наверное, начнем. Я Александр afiskon Алексеев, в подкасте со мной Валерий Мелешкин, привет, Валер… Привет, Валер!

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

А: Сергей Елин, привет, Сереж.

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

А: И наш специальный гость, кстати, уже названный, Роман Душкин. Привет, Ром.

Роман: Да, всем привет.

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

Р: Интересный вопрос. И сложный, потому что разные люди меня знают с разных сторон, и, скорее всего, для аудитории вашего подкаста я могу себя описать как «человек, написавший много книг по функциональному программированию и нескольким смежным темам». Ну, и, заодно, читавший лекции в МИФИ , автоматизировавший все подряд везде, и так далее и тому подобное.

А: Ну, мне кажется, ты немного поскромничал, потому что ты помимо прочего еще и блогер двух блогов и одного ХабраХабра. Ты также и организатор ежемесячных конкурсов по функциональному программированию. И также руководитель как минимум одного проекта open-source, который заключается в переводе книги по Yesod .

Р: Ну, да, можно и так сказать. Если перечислять все регалии, я боюсь, что все время, выделенное на эту передачу, оно закончится.

С: Скажи, Ром, насколько я знаю, все твои активности — это не основная твоя деятельность, это, скорее, как хобби. Поэтому у меня к тебе есть два вопроса. Как ты к этому пришел, к хобби. И как ты все успеваешь?

Р: Хобби, да, это верно. Я работаю полный рабочий день, и зачастую работал больше 25 часов в сутки. Если интересно, я расскажу, как это можно сделать, отвечая на второй вопрос.

С: Да, очень.

Р: Хобби началось еще во время учебы в институте в аспирантуре. Тогда я занимался чтением лекций по функциональному программированию. Это были потоковые лекции на кафедре кибернетики МИФИ. Для группы искусственного интеллекта они были обязательные, остальные ходили по желанию.

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

Что касается второго, как я все успеваю. Обычно, когда меня спрашивают в кулуарах: «Роман Викторович, как ты столько всего делаешь?», это обычно на работе происходит. «Мы за тобой не успеваем». Я обычно в шутку говорю, что я умею управлять пространством и временем. Собственно, да, управление временем, или лучше назвать это организацией времени, это один из моих коньков. Без ложной скромности. Организация времени — это краеугольный камень моей деятельности. Все, что может быть организовано вокруг меня организуется.

Поэтому, относясь таким образом к времени, мне удается делать очень многое. Я думаю, люди, слушатели, которые знакомы с одним из моих блогов, который в ЖЖ ведется. Ну, он уже практически не ведется, как вы знаете. В достопамятные времена там была одна метка под названием «время» . Там я иногда постил заметки с описанием практик, методов, технологий, как методом управлять, как время организовывать. Ну, и, собственно, интересный вопрос, как в 24 часах в сутках разместить 25 часов, и смочь их проработать, при этом еще имея возможность на восстановление, на отдых. Все дело в… в теории управления это называется «делегированием», но для меня это стало нечто большим. Потому что я на собственном опыте осознал и понял, и использую такую технологию как воспитание для себя персонального помощника, которые становится, по сути, продолжением моих рук. Когда он выходит на новый уровень — и моих мозгов.

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

В: Прости что вклиниваюсь, недавно в Django на гитхабе был срачик по поводу неиспользования слова «slave». Мне почему-то сразу при объяснении про персонального помощника вспомнилось какое-то такое master-slave взаимоотношение, прощу прощения.

Р: Можно пояснить это по-другому. Master-slave это слишком вульгарно. Я бы назвал это «мастер и подмастерье». Потому что, смотрите, что получается. Вот я нахожу себе персонального помощника. Очень много людей просеиваю, чтобы найти его. Найти достойного кандидата — не так просто. Человек должен обладать очень многими качествами, но когда он находится… Обычно я пытаюсь найти молодого человека, у которого еще вся жизнь впереди, и воспитать из него человека своего взгляда, своих умений. И эти люди воспринимают меня именно как человека, у которого можно научиться очень многому, с точки зрения, в первую очередь, управления самим собой. Поэтому здесь никакого slave нету, здесь именно подмастерье.

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

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

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

А: То есть, сейчас как парой слов описать твой род деятельности? Ты не программист, а кто? Управленец, менеджер, топ-менеджер?

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

С: Да, слышали.

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

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

В: Ну, вот, ты сейчас говорил про дорогу, звучит весьма enterprise-ненько. Приоткрой секрет, если это секрет, который можно приоткрывать, на чем это писалось?

Р: Если говорить о дороге М1, которую мы автоматизировали, там не было написано ни строчки нового кода. И об enterprise здесь говорить в общем-то нельзя. Потому что брались готовые решения, ну, например, автоматизированная система управления дорожным движением. Решений на рынке десятки, писать что-то новое смысла никакого нет. Берем имеющееся, кастомизируем, внедряем у себя, и, автоматизируем те бизнес-процессы, деловые процессы, которые происходят у операторов платных дорог. То же самое касается, допустим, системы тех-обслуживания и ремонта оборудования. Системы мониторинга инженерных состояний, системы мониторинга состояний искусственных сооружений, для дорог это очень важная система, такие обслуживающие системы, как система контроля и управления доступом на объект, пожарная охранная сигнализация. Все это — готовые решения, писать что-то конкретное было не нужно. Что касается автоматизации производственной деятельности — это 1С. Системы взимания платы — тоже есть готовые решения. Транспортная модель — тысячи их на рынке.

В: Насколько я понимаю, у вас в итоге была, скорее всего, только интеграция всех этих систем.

Р: Да, интеграция систем. Была построена очень мощная система интеграции на основе архитектуры SOA, и обмена сообщения между системами. Там матрица интеграции была порядка тысячи на тысячу. По, как это назвать, элементы данных, которые между системами курсирует, была матрица тысяча на тысячу. Кто, куда, по какому регламенту, по какому протоколу. В конце концов все это на стандартной шине было построено.

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

Р: Конкретно этим проектом, в той компании, где я работал, занималось на уровне управления три человека. Три человека, это руководитель проекта, я как системный архитектор, и еще один был менеджер проекта, или администратор проекта, который всякие бумажные вопросы решал. Плюс у меня был персональный ассистент. Ее тоже можно было бы зачислить в команду проекта. Но, практически, все выполнялось силами подрядчиков. Там было более 50 подрядчиков.

В: Подрядчики код писали?

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

В: То есть, подрядчики — поставщики системы были.

Р: Да, ну, вендоры, как это называется.

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

Р: Ремеслу. Ну, скорее всего, надо иметь определенный склад мышления, как это модно говорится. Системное мышление. Без системного мышления здесь никак не получится. Ну и, кибернетику надо знать на пятерку.

В: А что такое системное мышление? Можешь свое видение на это как-то приоткрыть?

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

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

Р: Да, верно.

А: А расскажи нам, пожалуйста, нам и нашим слушателям, что это такое?

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

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

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

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

Все было бы просто игрой сумрачных гениев математики, если бы не одно но. Модель квантовых вычислений легко трансформируется в физически реализуемую модель, физически реализуемый процесс, вернее. И если мы с математической точки зрения построили некоторый алгоритм, который действительно, допустим, за полиномиальное время находит дискретный логарифм, то в будущем если у нас появится в гараже квантовый компьютер с достаточным количеством вычислительных мощностей, то мы этот алгоритм сможем реализовать. Я надеюсь, я понятно объяснил, да?

А: Ты удивительно понятно объяснил. У меня только один вопрос, а уже какие-то прототипы есть или это, грубо говоря, пока просто на бумаге?

Р: Насколько я знаю, Международные Деловые Машины очень активно ведут исследования в этой области, у них в подвале есть небольшой квантовый компьютер. Не тот D-Wave , который сейчас разрекламирован везде, и продается за хренову тучу миллионов долларов. А какой-то настоящий квантовый компьютер с очень небольшим количеством кубитов. Где-то во второй половине двухтысячных годов они смогли разложить число 15 на простые множители 3 и 5 при помощи 7 кубитов. И это, собственно, был прорыв, потому что они доказали реализуемость алгоритма Шора.

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

Р: Да, именно публично не решенная. Это как знаете, я одному моему коллеге рассказывал. Это когда наши отцы сидели, допустим, в деревнях, и слушали первые радио, они же не знали, что там где-то в подвалах, или не в подвалах, работает ENIAC , огромная машина, которая превосходила все вычислительные мощности тогдашние человеческие. Так и мы, можем сидеть, и что-то себе думать, а где-то там уже работает что-то. Но по крайней мере IBM говорит о своих успехах. Тогда это было, по-моему, это был 2007 год, если я не ошибаюсь. Но 7 кубитов они смогли задействовать. 7 кубитов как раз хватит для факторизации 15. А вот для факторизации числа 21, которое идет следующее, подходящее под критерий Шора, для его факторизации уже нужно 9 кубитов. Ну, скорее всего, уже есть 9 кубитовый компьютер.

Для факторизации числа, обладающего, допустим, 200 десятичными цифрами, ну не буду врать, логарифмировать надо, нужно несколько сотен кубитов.

А: Если я правильно понимаю, ты на книгу, которую сейчас пишешь, собирал деньги на BoomStarter . Это так?

Р: Да, верно.

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

Р: Ну, на самом деле, я сам был удивлен, как все произошло, и списываю это на свое реноме, которое я имею в коллективе, «в тусовке». Потому что нужную сумму я собрал, если мне не изменяет память, за первую неделю. Ту задекларированную сумму, которой, как мне показалось, будет достаточно, чтобы стартануть работы, она собралась за первую неделю. А потом просто, как я понял, народ расслабился, и видя, что сумма собрана, уже не такие были «донаты», или как это называется, «биды».

Ну, не суть важно. Собственно, моих сил здесь было затрачено очень немного. Прочитав пару статей на том же BoomStarter, как запускать свой проект по croudfunding, я решил действовать по их рекомендации. Но реальность, на самом деле, все изменила, и я через 3 дня, когда было уже собрано 30 тысяч, просто расслабился и перестал пиарить настойчиво проект везде, как рекомендовали, просто смотрел как тикает счетчик получаемых денег. А он тикал так, раз в час приходило несколько сумм. Потом, когда сумма была набрана, 50 тысяч, это все немножко утихомирилось, и остаток, там оставалось 50 с лишним дней, я просто ждал, когда же они закончатся.

А: То есть, слишком большой промежуток времени выбрал, да?

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

А: Парадоксальная получается ситуация. Ты с одной стороны большой популяризатор функционального программирования. Кстати, вот мое увлечение Haskell и функциональщиной началось именно с твоих книг . Как ни странно, в институте у нас был курс функционального программирования в МИФИ, и я был на этом курсе, но там я не проникся, не понял, зачем нужен Haskell . С одной стороны ты популяризатор. С другой стороны, ты в своей профессиональной деятельности как системный архитектор, если я правильно тебя понял, занимаешься уже, по сути, интеграцией готовых решений. И, как Валера выразился, enterprise-ненько, то есть либо уже готовые коробочные решения, либо что-то нафигачить на Java. Как ты считаешь, функциональное программирование, оно для, за исключением тех людей, которым повезло работать с функциональными языками, мне, Валере и Сереже повезло, в целом для большинства программистов, оно полезно с практической точки зрения. Или с практической точки зрения нужно все фигачить на Java, C#, а ФП — это, ну, так, размять мозги, потренироваться, стать более лучшим программистом на той же Java. Насколько, с твоей точки зрения, на практике ФП востребовано?

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

Соответственно, сейчас говорить о том что функциональное программирование должно выходить в enterprise — это говорить о том, что нужно менять сознание руководителей, нужно менять подход руководителей к реализации проектов. Пока руководители не поймут выгод от внедрения функционального программирования, так все и будет — C#, Java и тд.

Для программистов, для разработчиков, функциональное программирование — это что-то типа, назовем это кунг-фу для мозга. Я боюсь, что правы те, кто пишет статьи про то, что функциональное программирование портит разработчиков. Я думаю, что оно действительно портит, я это ощутил на своем личном опыте, на себе. Когда я сейчас вижу код на C, на C++, я был раньше разработчиком на C++, и для Российских Железных Дорог реализовал несколько систем вот этими самыми руками, и это был C++. Но сейчас, когда я вижу C++, меня выворачивает наизнанку, и это идиосинкразия, которую не побороть.

В: Что по-твоему способно донести эту идею до менеджмента enterprise-ого?

Р: Не знаю, не задавался этим вопросом, честно скажу. У меня был опыт работы в банке, и вот enterprise в основном в банках развит, да? Я думаю, что с этим все согласятся, в банковских и финансовых компаниях.

На самом деле, что я повторяюсь, есть статья на Хабре Почему никто не использует Haskell , которую написал собственно я по… сейчас я скажу, что это было … Это был Лев Валкин , я думаю, все знают его, это редактор Практики Функционального Программирования .

Соответственно, Лев как-то позвонил мне и скзаал: «Роман, а напиши статью, почему никто не использует Haskell». И тогда я не принял это, так скажем, близко к сердцу, взял и написал. И она так понравилась всем, но почему-то не пошла в журнал. А потом я ее опубликовал на Хабре, и она вызвала там такой холивар, и такое бурление, что по-моему там до сих пор что-то продолжается. Но нет, до сих пор не продолжается.

В: Побулькивает!

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

В: Извини. Наверное у стартапа, у любого стартапа, стул под задницей горит сильнее, чем у любого enterprise-менеджера. И мы видим надвижение ФП со стороны стартапов, тот же Twitter Scala использует, тот же Foursquare.

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

А: Скажи, вот ты обмолвился, что у тебя когда-нибудь будет проект, и ты найдешь людей, которые будут писать его на Haskell. У Haskell, как известно, вот лично у меня основная сложность с этим языком, это небольшой выбор библиотек, по сравнению, скажем, с библиотеками под JVM. Ты нацелен именно на Haskell и полон решимости написать все нужные библиотеки, генерить Excel файлы , PDF или какими-то костылями это обойти, или же подобрать задачу, так, что ее можно будет решить удобно на Haskell. Например, на Haskell отлично пишется web, почти любой. Или же рассматриваешь варианты помимо Haskell, скажем, как ты относишься к Scala? Scala, это, по сути, Haskell под JVM.

В: Который, при этом, эффекты никак не контролирует к сожалению.

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

В: У него очень ограниченный набор побочных эффектов, и их очень хорошо заметно.

Р: Коллеги, поскольку я с 2004 года не программирую, не являюсь разработчиком с профессиональной точки зрения, у меня произошла некая консервация, я не занимаюсь изучением новых языков. Вот я, Саш, всегда за тобой слежу, и удивляюсь тому, как ты легко новый язык начинаешь изучать и расщелкиваешь его, и даже пишешь у себя в блоге. У меня такого нет, да, я в какой-то мере изучил Haskell, на что-то новое я сейчас замахиваться уж точно не буду. Да, я там иногда в шутку называю Haskell богоугодным языком, некоторые шуток не понимают, начинают злопыхать или бурлить, но неважно. Соответственно, если такой проект у меня будет когда-нибудь, это будет определенно Haskell. По поводу библиотек, ну не знаю, на Hackage, по-моему, уже все есть. Я, может быть, не знаю истины, потому что кроме мелких консольных приложений для своих нужд не разрабатываю, а так все то, что можно найти на Hackage, я там нахожу.

А: Тут дело вот в чем. Смотря какой проект ты выберешь. Например, на Haskell написать web можно, GUI — ну, там, постараться можно. Если ты хочешь именно outsource-ить, писать на заказ, и к тебе приходит заказчик и говорит, а, вот, мне тут нужно поднимать шлагбаум и интегрироваться с 1C-преприятием и Консультант+, то на Hackage ты вряд ли найдешь подходящие библиотеки. Перед тобой встанет выбор, либо отказаться от Haskell, либо весело написать все это с нуля.

Р: Да, я тебя понял. Ты же сам знаешь, как просто, легко и непринужденно на Haskell пишутся всякие велосипеды.

А: Да, знаю.

Р: Ну, вот, в чем тогда проблема написать какой-нибудь адаптер для 1С.

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

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

В: Ром, я помню, что у тебя еще в старом бложике была замечательная идея про объяснение сыну функционального программирования посредством иллюстрации этого на волшебных коробочках. Ты постил такого, довольно низкого разрешения картинки, как я понимаю, специально, чтобы не выкладывать raw-материал. Это в итоге во что-нибудь вылилось, и ожидать ли какого-то более обработанного материала, или у тебя эта идея, не идея, а затея, немного стухла?

Р: Не то, чтобы стухла, я нашел эти материалы отсканированные у себя, но что-то не могу сейчас найти то, что я рисовал для сына тогда. Сама идея отложена в недолгий ящик, я надеюсь, мы когда-нибудь к ней вернемся. Я своему ребенку старшему летом объяснял информатику уже более конкретно с точки зрения архитектуры построения вычислительных систем, компьютеров, как они работают. Не в терминах волшебных коробочек, а в терминах состояний вычислительного устройства, так скажем. И вы знаете, он очень живо воспринял мысль, которая, как я видел своими глазами, не могли воспринять студенты 3-4 курса МИФИ, о том, что, допустим, 1 и 0 — это просто названия некоторых различимых состояний внутри железной коробки. Наверное, студенты 4 курса, которые слушали это от лектора, у них слишком зашоренное сознание уже, под грузом прожитых лет и полученных знаний. А у ребенка 8-летнего, 9-летнего еще такого груза нет.

Он очень это живо воспринял и понял, почему вместо 0-1 мы можем использовать Да-Нет, или Синий и Красный, или еще что-либо. Главное, чтобы было два разных различимых элемента, различимых состояния. И вот этих терминах я ему объяснял, как компьютер в современной архитектуре выполняет вычисления. Я ему объяснил двоичную систему исчисления, я ему объяснил, как складывать в ней числа, как умножать, до деления мы не дошли. В чем выражается логика двоичного языка, то есть, это обычные операции булевой логики плюс рисование схем, двоичных схем, из которых собираются вычислительные процессы. Вот это он все воспринял, но потом начался учебный год, а я скажу, сейчас в школе очень серьезные программы и даже для третьеклассника, у него не остается времени на что-то иное. И вот, к сожалению, мы пока отложили. Сейчас лето начнется, и, я надеюсь, у нас будет свободное время, чтобы продолжить эти наши занятия.

Концепцию волшебных коробочек, то есть, функций в функциональном программировании, я пока отложил, потому что сын их понимал, но он не очень понимал применимость. А здесь он как-то сказал: «Папа, я хочу стать программистом, научи меня». Вот эта его детская непосредственность привела к тому, что все прошлое лето я рассказывал об архитектуре компьютера, современных вычислительных устройств. И он это все живо воспринимал, понимал. Мы дошли до, как я помню, до функциональных языков как раз. После того, как я объяснил, как внутри компьютера бегает ток, и изменяет состояние объектов с 0 на 1, с 1 на 0, мы потом начали выяснять историю развития программирования. От машинных кодов, до языков ассемблера, потом языки первого поколения, типа Fortran, Algol, потом дошли до процедурных языков. Я ему кратко, на пальцах показал, чем они различаются, причем без конкретного синтаксиса. Ну, собственно, 9-летний ребенок, 9-летний человек все это живо воспринял. И мы как раз подошли к функциональным языкам, и, я надеюсь, как раз этим летом и продолжим.

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

С: В общем, да.

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

А пока это все. Это был EaxCast, спасибо, что слушали, жмакайте лайки, пишите комментарии, подписывайтесь, всем пока.

В: Пока.

С: Пока.

Р: Да, всем, коллеги, пока.

Дополнение: EaxCast S02E03 — интервью с Владимиром Шабановым о BazQux, стартапах, геймдеве, а также Haskell и Riak

EnglishRussianUkrainian