Используется функциональное программирование

Мне было интересно программировать всю свою жизнь, и последние 6 лет я работал почти исключительно с Java. Я только что закончил учебу в университете и устроился на работу в качестве разработчика Java для компании.

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

Поэтому я решил в какой-то момент изучить магический мир функционального программирования. Я начал читать книгу о Хаскеле и нашел ее интересной с научной точки зрения (я специализировался на математике), но не смог найти практические приложения, чтобы заставить меня идти достаточно, чтобы выучить язык.

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

Я думал, что начну с Scala, так как я - грамотный Java (сделайте переход проще и более многократно использовать, поскольку они могут "говорить" друг с другом), и поэтому мой вопрос: В вашем опыте обучение функциональный язык "имеет смысл"? Существуют ли реальные приложения, где знание этой парадигмы может пригодиться? Не только для личных развлечений, но и это будет "профессионалом" в отрасли?

Ответ 1

Изучение функционального языка - большой плюс, независимо от того, используете ли вы его когда-либо в своей дневной работе. Рассмотрим следующее:

  • Одна из самых больших рекомендаций для успешного параллельного программирования - избегать изменчивого состояния в ваших поточных объектах, когда это возможно. Функциональное программирование учит вас, как это сделать.
  • Большинство функциональных программистов, когда они преодолевают не-несущественную кривую обучения, утверждают, что их методы делают их намного более продуктивными, чем они могут быть на стандартных императивных языках. Их код более не содержит ошибок, а часть размера, как и других языков. Подумайте о повышении производительности, когда вы наконец поняли регулярные выражения. Теперь положите это на стероиды. Это то, что может чувствовать FP.
  • Функциональные методы быстро внедряются в императивное программирование. Подумайте о замыканиях на С# и Javascript, и вскоре (возможно, если повезет) на Java. Скорее всего, эти два мира скоро соберутся вместе.
  • Наконец, в собеседовании, знание функционального языка поможет вам выделиться из вашего среднего J2EE/.NET-клона. Это знаменует вас как самостоятельного стартера, дисциплинированного ученика и страстного программиста - независимо от того, действительно ли вы на самом деле являетесь этим. Просто не становитесь еще одним поклонником Scala fanboy, ругая своего будущего босса о том, как он упускает из виду лучшие методы программирования, так как... вы получаете идею. Никогда не бывает приятно оскорблять потенциального работодателя.

Для меня изучение Haskell сделало программирование намного веселее, чем раньше. Он может сделать то же самое и для вас. Удачи!

Ответ 2

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

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

Возможно, вам захочется взглянуть на следующие ссылки

Buff, я надеюсь, что это было не слишком скучно, -)

Ответ 3

Функциональное программирование продвигалось в финансовом секторе. На самом деле это не так уж и удивительно, если вы считаете, что финансовые аналитики в течение многих лет "программируют" в Excel, и это по существу функциональная парадигма (точнее, функциональная реактивная).

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

Говоря строго как программист на Java, вы будете изучать методы, которые вы можете использовать на Java в повседневной работе (хотя вам нужна лучшая библиотека Collections). Методы, которые уменьшат количество ошибок в том, что вы кодируете, упрощаете многопоточность и многозадачность и приближаете ваш код к бизнес-правилам, которые он реализует, чем механики его реализации.

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

Ответ 5

Изучение функционального языка определенно имеет смысл. Как говорит Эрик Раймонд, если вы изучите функциональный язык, он сделает вас лучшим программистом на выбранном вами языке.

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

Ответ 6

Да, это имеет смысл и сразу же полезно в некоторых общих задачах, которые вы можете встретить на производстве (даже если вы пишете их на Java). Например, если вам когда-нибудь понадобится написать парсер (например, для DSL), вы обнаружите, что использование функциональных методов для этого приводит к значительно более чистым и более сжатым кодам.