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

Хаскелл против процедурного программирования в реальном мире

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

В то время как я действительно взволнован Haskell и возможности, которые это, кажется, предлагает, я также могу видеть теперь, что это займет у меня некоторое время, чтобы учиться. В вопросе SO на Как узнать Haskell в ответе говорится, что потребуется несколько месяцев, если не годы, чтобы фактически "освоить" его.

Теперь я знаю C, PHP, некоторые объекты, ориентированные на объекты, и т.д. И было сказано, что Haskell не так много используется в "реальном мире", я буду лучше улучшать свои навыки на обычных языках Я знаю? Стоит ли Haskell бороться?

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

EDIT: keparo прекрасно разъясняет мой вопрос: В отличие от процедурных языков, будет ли полезно изучать Хаскелл и парадигмы функционального программирования?

4b9b3361

Ответ 1

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

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

Haskell на самом деле не используется много в "реальном мире", если вы определяете "реальный мир" как "генератор наличности". Итак, если это ваша цель, вам, возможно, придется переосмыслить цели: p

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

Ответ 2

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

Функциональная парадигма начинает проникать в различные основные приложения и языки. Даже С++ собирается добавлять (искалеченную) лямбда в С++ 0x.

Вы также можете посмотреть некоторые из гибридных языков, таких как Scala или OCaml. Scala используется в Twitter, а OCaml используется на Джейн-стрит на финансовой торговой платформе.

Ответ 3

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

Ответ 4

Я изучил Haskell, потому что это был лучший функциональный язык, который я опробовал из Scala, Clojure, OCaml и Scheme, но я серьезно не ожидал использовать его для работы.

Как оказалось, он идеально подходит для тех видов нечетных заданий, которые слишком малы для команды и будут слишком трудоемкими в Java. До сих пор я использовал его для специальных миграций данных, т.е. Извлечения CSV-экспорта в другой формат, пакетных преобразований XML (HXT более сжатый и более мощный, чем XSLT), скрининг с экрана и оценка программного проекта, включая моделирование риск с использованием вероятностной монады и создание оптимальных диаграмм Ганта с использованием обратного отслеживания. Это настоящая работа, которую нужно было сделать, что я бы даже не потрудился попробовать и на Java, поскольку это будет многодневное мероприятие.

Теперь я использую его вместо Excel для чего-то неопределенно математического, так как это немного больше усилий для создания списка значений в источнике haskell в текстовом редакторе, чем для их ввода в Excel. Однажды в haskell, я могу делать все виды магии, такие как backtracking, распределения вероятностей и т.д., Которые Excel не может сделать. Если мне нужен график, я выплевываю значения как CSV (2 строки кода) и загружаю их в Excel.

Единственным недостатком является то, что для получения опыта требуется несколько месяцев, но стоит усилий ИМХО.

Ответ 5

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

Если расширенный набор навыков ценен, тогда: да.

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

Наличие этого навыка в рукаве не может повредить.

Ответ 6

Я вижу, что функциональное программирование может быть плюсом в производственной среде, если он очень прост в использовании не функциональным кодом. MS тоже это видел, когда они придумали F #, я думаю.

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

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

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

Ответ 7

Я думаю, что это стоит борьбы. Это поможет вам понять, как решаются проблемы, а не только как работает компьютер.

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

Функциональное программирование вместо этого может быть чрезвычайно полезным в очень прагматичной манере. Многие OO/императивные языки теперь включали в себя функциональные элементы по этой причине (Linq, анонимные функции, значения readonly, указатели функций/делегаты, тип-вывод): вы можете сосредоточиться на том, что должно быть сделано, что позволяет вам выражать больше в меньшем количестве кода (что еще менее подвержено ошибкам).

Не чисто функциональные языки (стандартные функциональные языки), такие как Scala или F #, могут быть легко интегрированы в существующие Java или .NET-проекты, поэтому вы можете комбинировать преимущества обеих парадигм там, где они нужны. Для типичных преимуществ функциональных языков см. эту тему. Просто подумайте о чрезвычайно сильном разборе (комбинаторные парсерные парсары /Parsec ) или параллельное программирование, которое возможно с функциональными языками, и вы увидите, насколько они полезны.

Ответ 8

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

Нет, если вы не хотите быть несчастным. Luke Plant говорит, Почему обучение Haskell/Python делает вас хуже программистом:

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

(Это не совсем шутка.)

Ответ 9

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

Судя по лакомствам на С#, например, lambdas, введите вывод, закрытие, и т.д., обучение Haskell даст вам преимущество на завтрашнем фронте в основных языках.

Ответ 10

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

Многие программисты не могут выбирать свои инструменты, и наслаждение не является фактором их выбора. Многие из них могут использовать C/Java/etc на своем рабочем месте для "основного источника проекта", но затем также выбрать или использовать Python для "скриптов", таких как скрипты сборки со SCons, другие скрипты, которые генерируют Java/etc кода, систем тестирования, доказательств концепций и т.д. И в других местах Python также используется в "основном проекте".

Через 8 лет это будет Haskell, а не Python, который будет "приходить к вам". Но вы можете прийти к нему раньше.

Ответ 11

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

Все современные языки сценариев s.a. JavaScript или Lua позволяют использовать функциональную парадигму.

Ответ 12

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

Это зависит от вашего общего плана игры. Вы программируете как самоцель или как средство для достижения цели? Если это первый, сходите с Haskell. Если последние придерживаются основных, "трудоспособных" языков. Подождите, пока Haskell взлетит, а затем набросится.

Ответ 13

Почему процедурный, а не объектно-ориентированный, не рассматриваемый процедурный, используемый в течение многих лет помимо C.

Коммерчески. Я бы пошел с Java или С#. Не имеет значения, что они оба платят хорошо, а навыки взаимозаменяемы с другими подобными мыслящими языками, такими как python, Ruby и JavaScript.

Haskell стоит времени и усилий, хотя он очень академичен, некоторые банки используют его, хотя многие в Европе и Великобритании перемещают базу кода на F #.

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