Как и в первый раз, когда вы перешли от императивного к объектно-ориентированному, работа с функциональным программированием требует переосмысления вашего мышления. В первый раз вы склонны делать что-то гибридным, пока не поймете всю суть. Поскольку вы пришли из опыта работы с C #, я бы посоветовал попробовать F #, поскольку вы, вероятно, привыкнете к нему гораздо быстрее, поскольку языки .net имеют общую структуру, которая достаточно хороша, чтобы вы начали.
Использование Prolog и Haskell - неплохая идея, но вам, возможно, придется сначала приспособиться к другому синтаксису и библиотекам языков по сравнению с скачком между C # и F #. Лично я перешел с C # / Java на Haskell с помощью двух книг: RealWorldHaskell и The Craft of Functional Programming , и справился отлично, поэтому у вас нет причин не делать этого. :)
Изучение F #, а затем Haskell по-прежнему требует некоторой работы, потому что F # и Haskell разные: первый «нечистый», а второй «чистый». Примеси означают, что определенные «побочные эффекты», такие как состояние и ввод-вывод, по сути разрешены, тогда как чистота означает, что вы не получаете их сразу, а должны использовать определенные методы (например, монады). Исходя из C #, возможно, было бы проще попробовать F #, а затем Haskell, причину этого.
Я считаю (предупреждение личного мнения), что если вы хотите стать лучшим программистом на C #, изучите F # и Haskell (или что-нибудь для этого дело) никогда не повредит! Особенно в случае F #, который можно интегрировать с C #. Функциональное программирование может облегчить вам определенные вещи, и, зная, что оно рано или поздно может пригодиться, особенно потому, что, как и другие говорили, существует текущая тенденция к программам на функциональном языке.
Изучение функционального программирования на императивном языке, таком как C #, очень сложно, это совершенно новый способ мышления (по крайней мере, для меня функциональные языки легче понять! Все зависит от вашего мозга работает;))
F # был бы хорошим выбором, потому что он находится в CLR, это означает, что вы можете легко использовать библиотеки F #, которые вы пишете из своего кода C #.
F # обычно лучше подходит для "функционального" (математического ) проблемы.
Я собираюсь переписать некоторые сложные алгоритмы в моем коде C # на F #, чтобы сделать их более быстрыми и краткими.
Как упоминает Ахмед. Научиться думать о проблемах по-новому - только на пользу!
Мне НИКОГДА не повредит выучить новый язык. Я собираюсь вырезать цитату, но суть в том, что «Если вы не знаете, как написать мысль, вы не знаете, как мыслить». Это было в контексте естественного языка, но я думаю, что это применимо и к языку программирования.
Взгляните на пролог и haskell и немного повозитесь. Это, по крайней мере, добавит вам инструментов к вашему поясу.
Существует очень мало языков X, если таковые имеются, для которых вы не могли бы написать одобренное Регом Брейтуэйтом сообщение формы " Что я узнал из языка X, что делает меня лучшим программистом, когда Я использую язык Y "
Сам C # накапливает ряд функциональных конструкций - лямбда-выражения и методы расширения System.Linq
, поэтому обучение функциональному мышлению определенно поможет вам получить лучшее из повседневной работы, а также само по себе развлечение. Так получилось, что Erlang был первым функциональным языком / языком сопоставления шаблонов, который я выбрал после C #, но одного этого было достаточно, чтобы снова взглянуть на мой стиль C # и то, как я подходил к проблемам.
FP становится следующим большим достижением, и там'
Функциональное и логическое (декларативное) программирование - это еще одна парадигма программирования, вы думаете с другой точки зрения.
Но обе парадигмы могут не иметь прямого влияния на ваше кодирование с использованием C #, но это может быть косвенным, когда вы думаете о самой проблеме
Я встречал здесь мнение, что лучше начинать изучать пролог изначально. Я лично не согласен. Функциональное программирование ближе к тому, что вы можете делать на других языках. Например, в C ++ существует множество подходов, которые исходят из точки зрения функционального программирования (алгоритмы stl, boost :: bind, boost :: lambda и т. Д.). Я не знаю C #, но мне сказали, что так бывает.
Думаю, было бы проще начать с функционального языка. Я лично знаю haskell, схему и пролог, и мне кажется, что если вы сразу начнете с унификации, охвата поиска, правил и так далее, это может немного взорвать ваш разум (по крайней мере, это могло бы взорвать мой ;-)). Опять же, это просто мнение ...
Я не думаю, что изучение любого из этих языков поможет вам стать лучшим программистом на C #. Я бы тратил время на программирование на C #.
Я бы начал с пролога, потому что он проще из двух. Позволит вам почувствовать новую парадигму. Тогда попробуйте haskell или f #.
Я бы рекомендовал f # вместо haskell, поскольку там проще создавать библиотеки, совместимые с C # и .net в целом, что делает его более полезным