Haskell против процедурного программирования в реальном мире [закрыто]

StackOverflow https://stackoverflow.com/questions/1024585

Вопрос

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

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

Теперь я знаю C, PHP, некоторые объектно-ориентированные вещи и т. д. И, сказав, что Haskell мало используется в «реальном мире», я буду лучше улучшать свои навыки в обычной жизни. языки, которые я знаю? Хаскелл стоит борьбы?

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

РЕДАКТИРОВАТЬ: keparo приятно разъясняет мой вопрос: В отличие от процедурных языков, будет ли мне полезно изучить парадигмы Haskell и функционального программирования?

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

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

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

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

  

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

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

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

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

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

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

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

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

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

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

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

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

  

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

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

  

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top