Действительно ли Haskell подходит как первый язык?

У меня было предыдущее воздействие императивным языкам (C, некоторый Java) однако, я сказал бы, что у меня не было опыта в программировании. Поэтому: обработка меня как непрограммист, Haskell подошел бы как первый язык?

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

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

Некоторые ссылки:

45
задан Community 23 May 2017 в 12:19
поделиться

10 ответов

Я выступлю против распространенного мнения и скажу, что Haskell НЕ является хорошим первым языком программирования для типичного начинающего программиста. Я не думаю, что для новичка это так же доступно, как императивные языки вроде Ruby.

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

Если вы ответите на другие вопросы SO , то увидите, что Haskell почти никогда не упоминается как хороший выбор для новичка.

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

Подводя итог, я считаю, что Haskell идеально подходит для вас, но не подходит для типичного новичка.

РЕДАКТИРОВАТЬ: Спасибо за содержательные комментарии. Точка зрения Оуэна о том, что люди мыслят мультипарадигмальным образом, очень верна. Это укрепляет мою уверенность в том, что многопарадигмальный язык, такой как Ruby, будет легче освоить, и он имеет дополнительное преимущество, открывая ученику как императивное, так и функциональное мышление. Haskell определенно не является мультипарадигмальным.

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

20
ответ дан 26 November 2019 в 20:59
поделиться

Если у вас вообще не было опыта, вам будет легче продуктивно заниматься функциональным программированием, особенно функциональным программированием PURE. Я иммигрант из-за необходимости работать, мне пришлось забыть около 80% того, чему я научился, чтобы быть продуктивным на Haskell.

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

12
ответ дан 26 November 2019 в 20:59
поделиться

Ну, существование SICP предполагает, что функциональные языки можно использовать в качестве вводного материала. Однако Scheme, возможно, более доступен, чем Haskell.

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

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

32
ответ дан 26 November 2019 в 20:59
поделиться

Было проведено как минимум одно исследование о влиянии преподавания Haskell начинающим программистам:

Со следующей аннотацией:

Мы утверждаем, что преподавание чисто функциональному программированию как таковому в курсах для первокурсников наносит вред как для учебного плана, так и для продвижению парадигмы. Вместо этого нам необходимо сосредоточиться на более общих целях обучении элементарным приемам программирования и основных концепций вычислительной техники. Мы поддерживаем эту точку зрения с помощью опыта, полученного в течение нескольких семестров преподавания в больших классов (до 600 студентов) на Хаскель. Эти классы состояли из студенты, изучающие информатику, а также студенты из других дисциплин. Мы систематически собирали отзывы студентов отзывы студентов, проводя опросы после каждого семестра. Данная статья предлагает подход к использованию современных функциональных языков на первых и, основываясь на этом, пропагандирует использование функциональных языков в этой среде.

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

Существует ряд популярных книг для начинающих программистов, которые также делают его привлекательным объектом для обучения этим элементарным концепциям, включая:

  • "Программирование на Haskell"
  • "The Craft of Functional Programming"

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

29
ответ дан 26 November 2019 в 20:59
поделиться

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

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

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

3
ответ дан 26 November 2019 в 20:59
поделиться

Да, это так. Real World Haskell - отличный способ разобраться в нем http://book.realworldhaskell.org/

3
ответ дан 26 November 2019 в 20:59
поделиться

Одиннадцать причин использовать Haskell в качестве математика
Я не могу написать лучше, чем это. Но подведем итог:

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

Чтобы ответить на ваш вопрос: у вас не возникнет проблем, если вы начнете с функционального языка как математик без программирования опыт. На самом деле это лучший выбор, вам не придется восстанавливать повреждение мозга, которое вы получили бы от C / Java или чего-то еще.
Вам также следует проверить Mathematica. Некоторым он не нравится, поскольку это коммерческий продукт с закрытым исходным кодом, но я думаю, что это довольно хорошая среда для занятий математикой.

13
ответ дан 26 November 2019 в 20:59
поделиться

Нет.

Программу на haskell98 очень легко понять однозначно. LYAH - отличный учебник для людей без опыта, но пытаться предотвратить спотыкание обучающегося на расширениях x, y z будет непросто. Вскоре они начинают исследовать и становятся перегруженными продвинутыми концепциями программирования/математики, которые гораздо труднее понять, но их нужно понимать, чтобы читать чужой код.

Если бы каждая часть haskell была написана только на haskell'98/'10, я бы, наверное, сказал "да".

1
ответ дан 26 November 2019 в 20:59
поделиться

Я бы нерешительно сказал «да», за исключением того факта, что в процессе обучения найти кого-то в качестве наставника или наставника было бы гораздо менее сложной задачей, если бы вы выбрали более императивный язык для начала программирования. Могу я предложить вместо этого R или Python (с NumPy и SciPy)?

1
ответ дан 26 November 2019 в 20:59
поделиться

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

С другой стороны, я считаю, что программирование - это ремесло. Это практическая деятельность, и важно познать радость создания чего-то нового, полезного или интересного. Поэтому вам нужно добиваться результата. И самый простой способ для этого - использовать язык, в котором есть инструменты для решения ваших задач, то есть библиотеки для ваших форматов данных, алгоритмы для ваших задач. И на данный момент Python (или Ruby) может быть лучшим выбором, потому что Hackage все еще отстает от PyPI во многих областях (и скажите, сколько дней вам нужно, чтобы научить новичка работать с изображением или строить графики на Haskell?).

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

4
ответ дан 26 November 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: