Хаскелл против процедурного программирования в реальном мире
В эти дни я серьезно отношусь к функциональному программированию.
В то время как я действительно взволнован Haskell и возможности, которые это, кажется, предлагает, я также могу видеть теперь, что это займет у меня некоторое время, чтобы учиться. В вопросе SO на Как узнать Haskell в ответе говорится, что потребуется несколько месяцев, если не годы, чтобы фактически "освоить" его.
Теперь я знаю C, PHP, некоторые объекты, ориентированные на объекты, и т.д. И было сказано, что Haskell не так много используется в "реальном мире", я буду лучше улучшать свои навыки на обычных языках Я знаю? Стоит ли Haskell бороться?
В этом вопросе на Почему люди думают, что функциональное программирование поймает, вывод, похоже, заключается в том, что функциональное программирование "поймает". Но, конечно, процедурное программирование останется на высоте, верно?
EDIT: keparo прекрасно разъясняет мой вопрос: В отличие от процедурных языков, будет ли полезно изучать Хаскелл и парадигмы функционального программирования?
Ответы
Ответ 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 будет двигаться на больших скоростях коммерчески. Но методы, безусловно, появляются на основных языках пребывания. Особенно это касается многоядерных чипов и создания параллельного кода.