Подтвердить что ты не робот

Является ли Haskell подходящим в качестве первого языка?

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Итак, чтобы обобщить, я думаю, что Haskell идеально подходит для вас, но не подходит для типичного начинающего.

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

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

Ответ 2

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

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

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

Ответ 3

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

Со следующим абстрактом:

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

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

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

  • "Программирование в Haskell"
  • "Создание функционального программирования"

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

Ответ 4

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

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

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


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

Ответ 5

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

В отличие от этого, легче перейти от функционального к императиву позже.

Ответ 6

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

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

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

Ответ 7

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

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

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

Ответ 9

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

Ответ 10

Нет.

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

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

Ответ 11

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

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