Почему я должен хотеть изучить haskell? [дубликат]

Возможный дубликат:
Haskell по сравнению с процедурным программированием в реальном мире

Несколько раз я слышал, что люди говорили, что вещи как "Каждый программист должны знать Haskell", "Вы не программист, если Вы не знаете haskell" и так далее. Однако я не абсолютно уверен, если я должен потрудиться пытаться получить краткое понимание того языка или нет. Проигрывание вокруг с интерпретатором (для получения интуитивного понимания основ) займет по крайней мере несколько дней (если не недели), и я "m не абсолютно уверенный, если результат будет стоить того.

Немного фона (для получения идеи моего знания)
Я начал программировать как ребенок (где-нибудь между 10 или 13 лет назад) с программируемым калькулятором, перемещенным в основной, затем на non-x86 блок (reimlementing умножение и разделение, и писать, что драйвер мыши самоизменения был забавой), Паскаль, Дельфи, теперь я использую C++ почти исключительно. Знайте мой путь вокруг оболочки Unix, может записать программное обеспечение в Python и вероятно в чем-либо (если у меня есть справочник поблизости), который удаленно напоминает C++ или Паскаля (т.е. блоки, подобное управление потоком, и т.д.). Специализация является 3D программированием и программами построения теней. "Рыба в воде" с низкоуровневыми операциями (выделение памяти C-стиля, указатели), менее довольный чрезвычайно подходом ООП (т.е. когда классы сделаны ради наличия классов). Почти абсолютно выучившийся самостоятельно. Т.е. определенно не новичок, но существуют области, где я мог улучшиться.

Так..., что я мог возможно получить от изучения Haskell в этой точке? Насколько я знаю, этот язык действительно широко не используется, в результате, вероятно, существует меньше библиотек, с которыми он может соединить интерфейсом с (как это было с программированием Delphi - можно сделать программирование DirectX в Дельфи, если Вы действительно хотите, но Вы не можете записать 3dsmax/maya плагин с ним (хорошо, это, вероятно, теоретически возможно, но это, конечно, не будет легко)). Я также не думаю, что легко смогу включить часть кода Haskell в игровой механизм.

Так, какое полезное знание я могу получить от него?

P.S. Я не куплю, "если Вы выучите другой язык, то Вы, вероятно, изучите что-то, что будет, вероятно, полезным" аргументом.

36
задан Community 23 May 2017 в 11:54
поделиться

8 ответов

(Конечно, это повторяющийся вопрос, но сейчас я не могу его найти.)

Вы изучаете его, чтобы изучать чисто функциональное программирование, которое заставляет вас многое делать в совершенно другой способ. Вы получаете новый образ мышления. Программирование без состояния? Программирование без эффектов? Все лениво? Сумасшедшая система типов с выводом типов? Что, черт возьми, такое монады? Ваш ум будет многократно взорван, но в конце концов вы откроете для себя новые перспективы / методы функционального программирования, которые иначе трудно понять, не переходя на полноценный Haskell.

Проблема с попыткой быть конкретным в том, что пытаться рассказать не-Haskeller, что они узнают от Haskell, все равно что пытаться объяснить "зеленый" цвет слепому.

82
ответ дан 27 November 2019 в 05:08
поделиться

Если вам нравится 3D-программирование, вам могут быть интересны некоторые слайды из выступления под названием Новые основные языки программирования: взгляд разработчика игр Тима Суини, основателя Epic и технический директор по движку Unreal. Он говорил на эту тему несколько раз , и он явно очень высокого мнения о Haskell.

9
ответ дан 27 November 2019 в 05:08
поделиться

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

На более практическом уровне, например, пару недель назад я делал домашнее задание по OCaml и стонал: «Почему в этом $% $% # языке нет call / cc !?!» Мой мозг взорвался, когда я заметил, о чем думал - я бы никогда не пропустил это, если бы не знал, что это было, и я бы не знал, что это было, если бы я не взглянул на Scheme, Haskell, Рубин.

Вы можете найти много хороших примеров на конкурсе ICFP; меня действительно поразила эта запись на этом конкурсе .Для решения своей проблемы они создали новый язык внутри Haskell.

6
ответ дан 27 November 2019 в 05:08
поделиться

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

Думаю, этот анекдот показывает, как знания могут быть полезными, когда вы меньше всего этого ожидаете.


В более практическом плане: несколько лет назад вы могли заметить, что скорость ЦП упала до предела, и сейчас наиболее практичный способ добиться большей производительности компьютеров - это установить несколько ЦП.Так случилось, что большинство, если не все известные вам языки программирования, по сути, являются однозадачными и подвержены узкому месту фон Неймана . Очевидным решением является параллельное программирование, но это может быть очень болезненным, если параллельные части вашей программы в конечном итоге разделяют состояние, то есть память, - а это чаще всего так.

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

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

41
ответ дан 27 November 2019 в 05:08
поделиться
​​

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

2
ответ дан 27 November 2019 в 05:08
поделиться

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

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

Если вы используете XSL:T для преобразования XML, то он очень функционален по своей конструкции.

1
ответ дан 27 November 2019 в 05:08
поделиться

Я также не думаю, что смогу легко вставить кусок кода Haskell в игровой движок.

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

Если вы хотите быть разносторонним программистом, способным программировать в нескольких парадигмах, и в настоящее время вы знаете только C-подобные языки, то на это стоит обратить внимание.

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

Также удобно, чтобы в вашем наборе инструментов было много инструментов. Некоторые проблемы лучше решать на одном языке, чем на другом. Если у вас есть 5 очень разных типов языков, вы можете выбрать лучший для каждой задачи. Если вы знаете только 2 или 3 очень похожих языка, тогда некоторые проблемы будет легко решить, но другие могут оказаться сложнее, чем если бы вы использовали язык, который лучше справляется с этой конкретной задачей.

15
ответ дан 27 November 2019 в 05:08
поделиться

Изучение функционального языка значительно изменит то, к чему вы привыкли. Так что да, вы, вероятно, узнаете что-нибудь полезное;)

2
ответ дан 27 November 2019 в 05:08
поделиться
Другие вопросы по тегам:

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