Подходит ли Haskell в качестве первого языка? - PullRequest
45 голосов
/ 29 июля 2010

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

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

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

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

Ответы [ 11 ]

32 голосов
/ 29 июля 2010

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

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

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

29 голосов
/ 29 июля 2010

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

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

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

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

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

  • «Программирование в Haskell»
  • «Ремесло функционального программирования»

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

20 голосов
/ 29 июля 2010

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

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

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

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

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

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

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

13 голосов
/ 29 июля 2010

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

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

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

12 голосов
/ 29 июля 2010

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

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

4 голосов
/ 30 июля 2010

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

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

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

3 голосов
/ 29 июля 2010

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

3 голосов
/ 29 июля 2010

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

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

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

1 голос
/ 30 июля 2010

Нет.

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

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

1 голос
/ 29 июля 2010

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

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