LINUX.ORG.RU

Как начинать изучать функциональное программирование?

 


1

5

Что то захотелось поучить Haskell или чего еще в этом духе, но что взять в качестве учебного материала? в 2018 то.

haskell если возьму то станет первым моим ЯП. До этого лишь максимум калькуляторы на плюсах и шарпах и простейшие конструкции на Паскале. Стоит ли вообще или лучше к нему прийти после года на других ЯП (к примеру) Ruby, C, или Python?

Деньги нужны будут только через 2 года(мне 16) так что думаю пока могу глянуть на языки. (или стоит набивать двухлетний опыт на одном лишь питоне?)

haskell если возьму то станет первым моим ЯП

И вероятно последним,так как отобьёт желание программировать. Но вы не случайно подумали о Haskell. Его хвалят учащиеся, которые думают, что это наикрутейший язык (а взрослые дяди и не знают этого). В действительнлсти дяди знают, но им надо работать. Дальше задачи расстановки ферзей такие программисты обычно не продвигаются. Haskell непригоден для составления практически полезных программ, а интересно изучать (и меньше забывается) то, что потом можно применить на практике.

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

Python - универсальный язык, подходящий для многих задач. Есть учебники разного уровня, в том числе на русском языке, в том числе для изучения в качестве первого языка программирования (для чего он является обычным выбором).

Так что из названных только Python.

Partisan ★★ ()
Ответ на: комментарий от Partisan

ТС вообще-то про функциональщину спрашивал, так что твой ответ про Руби, пых и питон не в тему от слова «совсем».

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

hobbit ★★★★★ ()

или стоит набивать двухлетний опыт на одном лишь питоне?

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

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

hobbit ★★★★★ ()

Как начинать изучать функциональное программирование?

А зачем начинать изучать функциональное программирование? ) Почему не императивное?

vvn_black ★★★★ ()
Ответ на: комментарий от Partisan

Дальше задачи расстановки ферзей такие программисты обычно не продвигаются. Haskell непригоден для составления практически полезных программ, а интересно изучать (и меньше забывается) то, что потом можно применить на практике.

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

А с точки зрения разделения алгоритмов и данных Haskell является вообще идеальным языком (в отличие от ООП, где невозможно к типу добавить интерфейс).

monk ★★★★★ ()

Что то захотелось поучить Haskell или чего еще в этом духе, но что взять в качестве учебного материала? в 2018 то.

Начинай с http://learnyouahaskell.com/chapters (перевод http://learnhaskellforgood.narod.ru/learnyouahaskell.com/chapters.html)

В 2018 Haskell, конечно, умеет намного больше (есть динамический тип, гетерогенные списки, списки типов, ...), но новые возможности лучше изучать после базовых.

monk ★★★★★ ()
Последнее исправление: monk (всего исправлений: 1)

Стоит ли вообще или лучше к нему прийти после года на других ЯП (к примеру) Ruby, C, или Python?

Если «максимум калькуляторы на плюсах и шарпах» были, то можно сразу на Haskell. Ruby, C и Python идеологически не отличаются.

Ещё из полезных для общего развития я бы назвал Forth или Factor. Но их первым языком точно нельзя.

monk ★★★★★ ()
Ответ на: комментарий от menangen

Например, в Scala, и в JavaScript, C, Objective-C, Python

Про C и Objective-C ты пошутил? Или как на них написать простейший compose?

compose f g = \x -> f (g x)

Scala, Python и Javascript не имеют нормальной функциональной библиотеки. В Scala есть, конечно, Scalaz/Cats, но Haskell гораздо лаконичней и красивей (в Scala наследие ООП очень мешает).

monk ★★★★★ ()
Ответ на: комментарий от Einstok_Fair

нам преподавали ФП, якобы для «обеспечения многопоточности». Но я так и не понял, в чём суть

К многопоточности ФП очень косвенное отношение имеет. Конвейеры в shell и то более актуальны.

ФП нужно для того, чтобы алгоритм писать отдельно от данных. Когда пишешь fold и он работает на всём, что можно обойти, а не отдельно list_fold, tree_fold, array_fold, ...

monk ★★★★★ ()

По Haskell есть отличная книга «Get Programming with Haskell» автора Will Kurt для начинающих, где вводятся монады, функторы и прочие вещи довольно постепенно и с пониманием того, что новичку будет сложно сразу понять их. За одно английский подтянешь.

Еще присмотрись к языку Rust. Среди языков системного программирования, т.е. тех, которые компилируются как и Haskell в нативный код, но в отличие от Haskell не имеют сборщика мусора, пожалуй, Rust - самый интересный на сегодняшний день. Там много идей взято из функционального программирования, из того же Haskell. Впрочем, из Си и Си++ тоже много взято всего.

dave ★★★★★ ()

Ни в коем случае не выбирай Хачкель, это будет большой ошибкой.

Деньги нужны будут только через 2 года(мне 16)

Вот и приглядывайся к тому, с помощью чего деньги будет проще заработать. Думаешь, 2 года это большой промежуток времени, чтобы ты на фоне учебы и экзаменов углубился в дебри Хачкеля достаточно далеко?

Virtuos86 ★★★★★ ()
Ответ на: комментарий от Virtuos86

Ну тогда как для развлечения или когда будет скучно попишу на Haskell что либо. Хотя я не знаю что на нем можно писать дальше алгоритмов уровня ЕГЭ или из какого нибудь задачника под Pascal.

Как к примеру писать нормальное оконное приложение? примитивные 2д игрушки, какие то скрипты? Что то под бэк энд? по идеи это займет в 3 раза больше времени сил в отличии от Ruby, python.

но и в чем преимущество Ruby над PHP в плане веба? Пайтон наверно точно возьму под основу для следующего заработка(ну и мне интересны очень эти языки)

StepanKirdin ()
Ответ на: комментарий от StepanKirdin

но и в чем преимущество Ruby над PHP в плане веба

преимуществ Ruby над PHP в плане веба нет.

Ruby лучше чем PHP в плане вообще.

практически что угодно лучше чем PHP.

стендап на тему: https://skillsmatter.com/skillscasts/6088-the-worst-programming-language-ever

MyTrooName ★★★★★ ()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от StepanKirdin

python и C

python, или лучше java - для начального обучения

C - для саморазвития и квалификации

с каким-нибудь ассемблером шапочно познакомься, можешь даже код не писать вообще,

MyTrooName ★★★★★ ()
Ответ на: комментарий от StepanKirdin

а что тогда как вторым языком для саморазвития

Причём тут язык?

Ты же хочешь изучать парадигму ФП? Мне, без всякого троллинга, интересно, зачем, на какую перспективу?

vvn_black ★★★★ ()
Последнее исправление: vvn_black (всего исправлений: 1)
Ответ на: комментарий от MyTrooName

Поэтому и вопрос, кмк (может конечно я ошибаюсь), востребованность ФП несколько в стороне от программирования в целом. Изучать, просто чтобы изучать, без практики? Время на ветер.

vvn_black ★★★★ ()
Ответ на: комментарий от vvn_black

сорри, не туда ответил. целился в ОП

востребованность ФП несколько в стороне от программирования в целом

с оговорками «несколько» и «в целом» соглашусь. но некоторые концепции крайне удобны. ADT, high-order functions, functional data structures. все это встречается и используется и в не-ФП языках

MyTrooName ★★★★★ ()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от StepanKirdin

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

anonymous ()
Ответ на: комментарий от StepanKirdin

Как к примеру писать нормальное оконное приложение? примитивные 2д игрушки, какие то скрипты? Что то под бэк энд? по идеи это займет в 3 раза больше времени сил в отличии от Ruby, python.

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

Virtuos86 ★★★★★ ()

Молодой человек, вам бы школу сначала закончить. И институт, что крайне желательно.

Без В/О ваше резюме HRюши даже читать не будут. Соответственно, все ваши попыточки сделаться крутейшим погроммистом разобьются о суровую реальность бытия.

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

А потом пойдёте работать в лучшем случае офисным планктоном. В худшем - разнорабочим «бери больше, кидай дальше, отдыхай пока летит».

slamd64 ★★★★ ()
Последнее исправление: slamd64 (всего исправлений: 2)
Ответ на: комментарий от MyTrooName

но некоторые концепции крайне удобны... встречается и используется и в не-ФП языках

А кто спорит.

Но, всё-таки, функции высшего порядка, поддержка рекурсии и list comprehensions (не знаю как это будет благозвучно по-русски) не превращают, например, тот же питоно-код автоматически в «функциональный».

И эту «функциональщину» можно принять как данность языка, не вдаваясь и не изучая саму парадигму.

vvn_black ★★★★ ()

Как начинать изучать функциональное программирование?

Начинать - с умения выбрать правильный раздел форума. В хаскель пока рано.

anonymous ()
Ответ на: комментарий от StepanKirdin

но и в чем преимущество Ruby над PHP в плане веба?

Практическое преимущество как раз у пыха. Но руби это все же ЯП (и не самый плохой) в отличие от шаблонизатора-переростка.

bread ()
Ответ на: комментарий от Deleted

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

peregrine ★★★★★ ()