palm_mute ([info]palm_mute) wrote,
@ 2007-11-25 12:09:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Entry tags:functional, survey, teaching

Опрос
Уважаемые друзья!
Если бы вас коллеги-программисты попросили повести пару лекций о функциональном программировании, что бы вы рассказали? Первую главу SICP? "Why FP matters" Хьюза? Что-то еще?



(Post a new comment)


[info]_navi_
2007-11-25 10:26 am UTC (link)
ну сначала Why FP matters, а потом, наверное, более глубоко и с примерами на „псевдо-коде” показать, что значит, что функции first-class в языке, чем это помогает и т.п. Плюс можно попробовать показать заимствованные из FP вещи в других языках (C++, C#, Java (ну, тут, типа, в JDK7 может быть появятся closures)).

Ещё какая-то мысль была, но пока писал, потерялась. Если вспомню, допишу.

(Reply to this)(Thread)


[info]palm_mute
2007-11-25 01:38 pm UTC (link)
Спасибо. В принципе, можно и без псевдокода - потенциальные слушатели активно использовали Питон.

Если вспомните - дописывайте :).

(Reply to this)(Parent)(Thread)


[info]_navi_
2007-11-25 01:43 pm UTC (link)
полезно также рассказать про ленивость, приведя пример с бесконечными списками (показав, как это реально работает внутри, на уровне исполнения), а потом показать, где это бывает полезно

(Reply to this)(Parent)(Thread)


[info]dtim
2007-11-26 07:16 am UTC (link)
Вот этот вопрос "где это бывает полезно" - очень важен, на самом деле. Помнишь, на первой встрече SPbHUG тоже этот вопрос возникал. Ответы, к сожалению, больше похожи на общие слова - "символьная обработка", "компиляторы", "прототипирование", "писать более надежный код". Так умных и скептически настроенных людей не убедишь :).

(Reply to this)(Parent)(Thread)


[info]palm_mute
2007-11-26 12:03 pm UTC (link)
Кстати, у меня уже была репетиция подобной лекции, и все эти отмазки - "символьная обработка", "компиляторы", "прототипирование" - уже звучали :). Согласен, звучит не слишком убедительно. Хотя передо мной задачи убеждать и не стоит, народ как-будто заинтересован.

(Reply to this)(Parent)(Thread)


[info]dtim
2007-11-26 12:12 pm UTC (link)
Серьезные ответы как раз и нужны именно тогда, когда народ заинтересован :).
Здесь, по-моему, надо рассказывать не столько о возможных областях применения, сколько о том, в каких задачах функциональное программирование реально использовалось, получилось ли реализовать проект в соответствии с требованиями, насколько удобным/полезным оказалось использование ФП вообще или конкретного языка, какие возникали проблемы, как они решались, сравнить с результатами решения похожих задач другими средствами.
Впрочем, я сам не готов об этом говорить, у меня такого опыта нет :(.

(Reply to this)(Parent)(Thread)

taking Haskell from void :)
[info]vorotylo
2007-11-26 02:48 pm UTC (link)
А как насчет A Taste of Haskell дядечки Simon Peyton-Jones?
(См. также предшествующее How Albus Dumbledore would sell Haskell.)
"I won't assume you know any functional programming at all, but I will assume that you are an experienced professional programmer, so I will move along quite briskly."

(Reply to this)(Parent)(Thread)

Re: taking Haskell from void :)
[info]palm_mute
2007-11-26 02:58 pm UTC (link)
Действительно, можно оттуда чего-нибудь использовать, thnx.

(Reply to this)(Parent)


[info]dtim
2007-11-25 10:28 am UTC (link)
Я сейчас (в неспешном, правда, ритме) рассказываю коллегам про Haskell. Начал с типов, функций, композиции и сопоставления с образцом. Посмотрим еще на пользовательские типы данных, а дальше таки да, думаю о чем-то вроде Хьюза и EDSL.

(Reply to this)(Thread)


[info]palm_mute
2007-11-25 01:44 pm UTC (link)
Спасибо.

Пара вопросов.
1) Какие народ задает вопросы, на что обратить внимание, что вызывает непонимание? У меня-то глаз замылился, многие вещи кажутся очевидными.
2) Почему коллеги заинтересовались Haskell?
3) А почему Хьюза откладываете на потом, начинать же, вроде, нужно с мотивации?

(Reply to this)(Parent)(Thread)


[info]dtim
2007-11-26 07:11 am UTC (link)
1) Не сразу понятно сопоставление с образцом, хотя очень быстро разобрались. Исключительно рекурсивное определение функций вместо циклов не то, чтобы непонятно, но непривычно, тут без тренировки никак (это вообще характерно - без упражнений и домашних заданий нельзя). Особого внимания требуют функции высшего порядка, особенно шаблоны их применения: что какая функция делает и какой код можно переписать с помощью какой функции. Мы сейчас несколько затормозились, по проектам запарка, но как продолжим - я еще поделюсь впечатлениями, если интересно.

2, 3) Я уже несколько лет бегаю с огнем в глазах и криками "ФП! Хаскель!", да и собрания SPbHUG проводим в одной из наших аудиторий - вот отсюда и интерес, что это за штука такая и какая от нее может быть польза. Соответственно, убеждать посмотреть на ФП никого не надо, так что их Хьюза мне интересны в основном примеры HOF и ленивости. Товарищи хотят узнать, как на Хаскеле пишут, и понять, где его есть смысл использовать, а где - нет.

(Reply to this)(Parent)(Thread)


[info]palm_mute
2007-11-26 08:50 am UTC (link)
Спасибо большое.
>я еще поделюсь впечатлениями, если интересно
очень интересно.

(Reply to this)(Parent)


[info]kurilka
2007-11-25 10:58 am UTC (link)
Первое, что сейчас в голову приходит - http://research.microsoft.com/%7Esimonpj/Papers/financial-contracts/contracts-icfp.htm
На мой взгляд довольно просто и демонстративно.
Плюс что-нибудь аля та презентация про монады с Channel 9, что Mirrorer на рсдн запостил. Причём про монады можно сначала и не вдаваться, а показать ту часть про возможности комбинирования функций (о чём по сути презентация SPJ)

(Reply to this)(Thread)


[info]kurilka
2007-11-25 11:00 am UTC (link)
Ну и плюс демонстрации как это обогенько можно сделать на Java в сравнении с тем же хаскелем.

(Reply to this)(Parent)


[info]palm_mute
2007-11-25 01:47 pm UTC (link)
Да, идея насчет контрактов хорошая, спасибо. Надо подумать только, куда ее втиснуть, плана пока не вырисовывается.

(Reply to this)(Parent)(Thread)


[info]kurilka
2007-11-25 02:17 pm UTC (link)
Делись, если что вырисуется :)

(Reply to this)(Parent)


[info]nponeccop
2007-11-25 11:45 am UTC (link)
Мое знакомство с ФП началось именно с SICP, поэтому я бы взял оттуда некоторые ключевые моменты. Первая глава не подходит.

Нужно изложить:
- преимущества отсутствия паразитных связей по состоянию в случае чистого кода. Преимушества гарантированного однократного вычисления, отсутствие необходимости "выноса констант за цикл" и императивных трюков вроде lazy initialization. Синтаксические (посредством системы типов) гарантии чистоты фрагментов кода.
- АлгТД, преимущества и "интуитивность" структурно-рекурсивной декомпозиции задачи, списки и натуральные числа как простейшие АлгТД, natrec и fold как простейшие элиминаторы, часто используемые более сложные элиминаторы вроде map/filter, возможность написания и повторного использования собственных элиминаторов, реализующих другие стратегии
- хитрости, облегчающие использование стандартных элиминаторов и улучшающие производительность: каррированные функции, лямбда-выражения, вывод типов, замыкания, паттерн-матчинг, линейные типы. Можно сравнить с аналогичной функциональностью в С++ STL/boost, Perl, Javascript.
- преимущества first-class functions, привести примеры параметризации замыканиями и сравнить с аналогичной параметризацией объектами, показать, что в программе на нефункциональном языке циклы каждый раз реализуются заново, а на ФЯ их удается повторно использовать.
- Преимущества встроенного call by need. Показать различия в реализации какой-либо задачи на стримах и ленивых списках. Сравнить с императивными реализациями.

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

(Reply to this)(Thread)


[info]palm_mute
2007-11-25 01:52 pm UTC (link)
Спасибо за развернутый ответ!

(Reply to this)(Parent)


[info]alexott
2007-11-25 12:03 pm UTC (link)
кусочки из Introduction to Functional Programming от Харрисона?

(Reply to this)(Thread)


[info]palm_mute
2007-11-25 01:54 pm UTC (link)
Отличная идея. Харрисон, пожалуй, лучше подходит для crash-course по ML или Haskell, чем SICP.

(Reply to this)(Parent)(Thread)


[info]alexott
2007-11-25 02:09 pm UTC (link)
про http://code.google.com/p/funprog-ru/ уже знаешь?

(Reply to this)(Parent)(Thread)


[info]palm_mute
2007-11-25 03:30 pm UTC (link)
уже - знаю :).

(Reply to this)(Parent)(Thread)


[info]alexott
2007-11-26 10:12 am UTC (link)
комментарии по переводу приветствуются

(Reply to this)(Parent)


[info]thesz
2007-11-25 12:18 pm UTC (link)
- Как я пришел к этому делу,
- Как я использовал это дело,
- Плюсы и подводные камни этого дела.

(Reply to this)(Thread)


[info]kurilka
2007-11-25 12:48 pm UTC (link)
Причём имхо ключевой вопрос второй, т.е. зачем реально на практике это может быть нужно.

(Reply to this)(Parent)(Thread)


[info]thesz
2007-11-25 01:25 pm UTC (link)
Не соглашусь.

Ключевой вопрос - первый, зачем оно мне вообще понадобилось. ;)

(Reply to this)(Parent)(Thread)


[info]dtim
2007-11-26 07:13 am UTC (link)
Ну вот я пришел к этому делу из фидошных флеймов с Луговским :). Все-таки, на мой взгляд, второй вопрос важнее.

(Reply to this)(Parent)(Thread)


[info]thesz
2007-11-26 11:42 am UTC (link)
У меня же - недостатки инструментов.

В то время я специально искал подходящий инструмент.

(Reply to this)(Parent)(Thread)


[info]palm_mute
2007-11-26 12:06 pm UTC (link)
Я в свое время тоже искал просто более удобный инструмент для одной задачки. Но так получилось, что сама задачка отошла на второй план, а языки программирования всерьез заинтересовали. Ты же знаешь, что на ФЯ можно писать интерпретаторы, тайп-чекеры и т.д. для ФЯ, так что область знания вполне самодостаточная, в приложениях не нуждается :).

(Reply to this)(Parent)


[info]palm_mute
2007-11-25 01:56 pm UTC (link)
Спасибо. Универсальная схема - подойдет не только к ФП.

(Reply to this)(Parent)(Thread)


[info]thesz
2007-11-25 02:04 pm UTC (link)
Рад стараться! ;)

(Reply to this)(Parent)


Create an Account
Forgot your login?
Login w/ OpenID
English • Español • Deutsch • Русский…