Журнал от Объекта

Previous Entry Share Next Entry
Видео моего доклада на московской Agile 2015
Default
object

20150319BE А нам-то зачем функциональное программирование? from Stas Fomin on Vimeo.


  • 1
О, столики, как в ресторане :)

Чтобы лучше наслаждаться докладом :-)

Не, в целом выглядит неплохо и стимулирующе. Может и мне в Питере на каком-нить комсомольско-программистском собрании выступить, подразнить олдскулом? :)

Я был не вполне уверен, что такой доклад уместен на такой конференции, но судя по твитам и тому, что он по опросам оказался на пятом месте (среди примерно 70), он вполне пришелся.

Впрочем, отсутстовавшие на конференции заочно осудили.

Ну, я отчасти согласен, что область применения ФП и сейчас неясна, и практическая польза имеющихся примеров не вполне очевидна, но осуждать - это значит высказываться в стиле "создателям Лиспа 50 лет назад просто было делать нечего".
"ФП ты можешь и не применять, но знать о Лиспе обязан" :)

Область применения ФП столь же неясна, как и область НЕприменения. Множится число проектов, целиком и полностью реализованных на функциональных языках.

Я вовсе не против, пусть расцветают все цветы.
Проблема в том, что критерии оценки "на ФП это сделать эффективнее" очень субъективны.
Как я понимаю, основной критерий - "программистам захотелось".

Почему же, есть и метрики. В моей презентации у меня есть слайд с данными Самона Казинса. Когда они переписали ООП код на F#, число линий кода уменьшилось в разы. Собственно это и не секрет, что одни языки компактнее других, другой вопрос, что это не единственный критерий эффективности. Но и "программистам захотелось" - тоже нормальный критерий, если переход на какой-то другой этих конкретных программистов сделает более продуктивными (при том, что других не сделает). Цель моего доклада была просто показать, как еще можно подходить к обычным программистским проблемам, более широкий кругозор никогда не помешает.

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

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

Где-то были сравнительные выразительные способности языков в LOC, по-моему, у Дж.Фокса в книжке про разработку ПО.

Да, безусловно. Кроме того, компактность языка может порой идти за счет доступности его для менее опытных разработчиков. Но для опытных программистов Java и C# довольно говорливы, в них нарастает много церемониальных неисполняемых строчек кода. Поэтому неслучайно, что на ФП нередко переходят уже ветераны, которым эти церемонии больше не нужны.

Ты хорошо держишься. Я вчера случайно наткнулась на доклад своего бывшего бойфренда - он занимается какими-то супер крутыми вещами в анализе данных по генетике опухолей (он вообще computer scientist). Но он как-то косно очень разговаривал, скованно держался.

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

Спасибо большое за презентацию, прослушал с интересом всю до конца. :) Вопрос от чайника - я много слышал ( и Вы в презентации тоже это упоминали, кажется ), что многопоточность в языках типа F# заложена, что называется, by design, и программировать многопоточные алгоритмы проще, чем, скажем, в С++. А как насчет многохостовости, когда алгоритм разбрасывается на несколько машин? с этой точки зрения есть какие-то преимущества?

P.S. Мне кажется, я Вас помню по ВВ, Вы там когда-то давно писали :)

Да, я действительно писал на ВВ, под тем же ником, кстати :-) Что же до многопоточности, то заложена не сама она, но многое становится проще из-за заложенной immutability, т.е. неизменяемости данных (по умолчанию). Распраллелить алгоритм в C++ или C# - это полдела, а может и треть дела. В сложной системе много усилий уходить на обеспечение безопасного обновления данных из разных потоков (thread safety). Про любой класс первый же вопрос от желающего использовать его в потоках - is it thread safe? В функциональных языках такой вопрос не задается, поскольку по умолчанию данные неизменяемы.

Хорошо, спасибо. правильно ли я понимаю, что если на F# мне захочется написать параллельный алгоритм, и чтобы он разбрасывался на несколько машин, мне придется, как и в случае с С++, использовать библиотеки типа OpenMP или MPI, для запуска процессов на машинах, собирать потом результаты, когда процессы завершатся и т.п.?

Распределение процессов не является частью языка, поэтому - да, придется чем-то еще пользоваться. Но функциональные языки могут дать интересные синтаксические возможности. Интересный подход можно найти здесь: http://www.m-brace.net/programming-model.html

Там на основе дополнительной библиотеки (mbrace) описываются распределенные процессы на F#. Но библиотека используют т.н. монады, позволяющие очень красиво декларировать параллельные вычисления.

Да, действительно интересно. Спасибо большое! Я, правда, "практик", в Вашей терминологии, и переход на новый язык даже в какой-то части кода - это большая жертва, но количество "церемониальных" строчек кода, да - напрягает, причем это количество еще и растет в процентном отношении с течением времени, кажется. И в них водятся баги :)

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

конечно, совсем не мое, но Вы там упоминали что где-то нашли сделанный GoL в стиле фп и начали раскручивать

есть ли ссылка на первоначальный код?

Уточните, что вы имеете в виду, не понял.

вроде реплика, что где-то нашли код GoL в функциональном стиле и начали его хакать

Если в функциональном стиле, то у меня есть разные варианты.

https://github.com/object/ConwayGame

  • 1
?

Log in

No account? Create an account