2010-10-25 2 views
7

Я работаю с C# в течение многих лет, начиная с бета-версии. У меня есть немного времени, переходя от OOP к functional-oriented programming (FOP). Я начал с концепций procedural programming и функциональной композиции в конце 1980-х годов и занимался OO с 1995 года, когда UML был в зачаточном состоянии, где я программировал в Delphi с помощью подхода с множественной парадигмой процедурного и OO. Есть ли хорошие предложения для книг, чтобы помочь перейти к функциональному программированию у глубоко укоренившегося программиста OO?Насколько сложно переходить от мышления ООП к чисто функционально-ориентированному программированию мышления в .NET?

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

У меня есть пара O'Reilly, Apress книг на F #, но все это кажется немного шерстяным и полупустым домом, а просто выполняет свою работу. Он также смешивает объекты с функциями, соответствующими потребностям.

F#, кажется, прощает меня в моем ООП мышлении гораздо больше, чем Haskell, но я думаю, чтобы получить истинную выгоду, мне нужно, чтобы получить в уме FOP, чтобы получить лучшее из кода. Я читал о функциональном программировании около двух лет между моими повседневными делами C#. Но я чувствую, что не задумываюсь.

Я уверен, что таких людей много, как я. Любые ответы были бы, я думаю, большой помощью для многих парней C#, желающих перейти на F #. Особенно со многими большими нападающими на рынке, требующими F #. Я подрядчик, которому нужно как можно скорее встать на скорость.

+1

Learn Scheme, это сработало для меня :) – leppie

+1

Кажется довольно субъективным, кривые обучения будут разными для всех, а полезность различных переходных инструментов тоже очень личная. – jball

+0

@jball: это способ изучить концепцию, а не язык самого уровня производительности. – ffriend

ответ

9

Это определенно субъективно, но я думаю, что многие люди задают похожие вопросы. Я, конечно, это сделал, когда начал изучать F # (как кто-то с C# опытом). Вот некоторые идеи сортировали:

  • выбрать правильные проблемы с обучением - самый лучший способ научиться функционального программирования, чтобы начать работать на некоторых нетривиальных проектов. Если вы выберете проект, который легко решить в пути OO, вы, вероятно, будете склоняться к решению OO. Однако, если вы выберете какой-то проект, который, естественно, соответствует решениям FP, вы узнаете что-то. В моем случае я работал на переводчике из котировок F # на JavaScript, который включает в себя много рекурсивных обработок и дискриминационных союзов.

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

  • Попробуйте быть пуристом - Если вы начнете изучать Haskell, тогда вам придется написать чистый функциональный код. F # не применяет это, но я не думаю, что F # менее подходит для обучения функциональному программированию. Если вы знаете C# и .NET, вы можете многократно использовать свой опыт. Просто постарайтесь быть более строгими для себя и избегать использования нефункциональных конструкций, таких как изменчивое состояние и наследование - они иногда полезны, но вы можете использовать их после того, как научитесь думать по FP.

И немного бесстыдный плагин - отвечая на вопрос, как это было одним из ключевых мотивов для моей Real World Functional Programming книги, так что, возможно, что может помочь ...

+0

Ваше право на деньги с пунктами. Все трое связаны с моим опытом письма. :) – WeNeedAnswers

+0

Я обнаружил, что с F # часто бывает трудно узнать, достаточно ли вы чисты (teehee!), Что заставило меня потратить лишнее время, пытаясь выяснить, правильно ли я что-то делаю. Позже я узнал Haskell и хотел бы, чтобы я начал с этого в первую очередь.Опять же, один человек на SO, который преподавал Haskell, сказал, что он считает его трудным языком для новичков, поэтому я довольно разорван на том, должен ли я рекомендовать Haskell или F # начинающим игрокам из императивной .NET. –

+1

Я определенно рекомендую книгу Томаса. – Benjol

3

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

Структура и интерпретация компьютерных программ (SICP):

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

Я не думаю, что он много говорит (или что-то еще) о чистом FP, но я на самом деле не прочитал все это: :) Концепции и образ мышления все равно должны быть очень применимы.

+0

спасибо за ссылку. Посмотрите на это. – WeNeedAnswers

+0

Пожалуйста, объясните ваши ревальваторы ... –

2

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

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

После того, как вы понимаете основные концепции FP и можете реализовать что-либо в своем стиле, прочитайте любую книгу на статически типизированных языках. Например. Книги Apress на F # будут намного легче читать.

+0

Я попробовал книги Apress, и Don Symes великолепны. Я хотел бы получить представление о функциональном программировании, хотя сначала языковой агностик, но я буду делать F #. Я просто хочу, чтобы там была хорошая книга «Learn haskell for idiots». Тот, который я поднял, повредил мой мозг. Это было очень сухо, я взял его на университетский городок пару лет назад, все шло хорошо, затем я попал в худшее представление о Монадах, которых я когда-либо видел, и я потерял веру в книгу. – WeNeedAnswers

+1

@WeNeedAnswers: если вы действительно хотите, чтобы какой-то язык был агностиком, возможно, проверьте исчисление лямбда. Я изучал его во время учебы в колледже, и это помогло мне при обучении F #. – Stringer

+0

Почему вы хотите представлять что-то как объект на функциональном языке? Это подразумевает изменчивое состояние. – WeNeedAnswers

1

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

Перемещение на ступеньку выше, есть Programming in Haskell, который, если вы прокрутите страницу вниз, имеет кучу ссылок на видео-лекции, основанные на книге, предоставленной Эриком Мейером из MS Research.

Эквациональное рассуждение особенно интересно, если только академически.

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

+0

Мне нравится Узнать вам ссылку на Haskell. Его получили красивые цвета и все такое. Позор, что это слишком основательно, было бы здорово в качестве первой книги для просмотра. Гораздо лучше, чем http://www.amazon.co.uk/Haskell-Functional-Programming-International-Computer/dp/0201342758 – WeNeedAnswers

+0

Бренд рассуждений - это трудный материал. получая мою голову вокруг Combinator Logic как средство разложения. Я получаю это, просто все это немного неудобно. Я просто хочу обновить некоторые классы, которые легко просты в F #, но я чувствую, что это неправильно из того, что я так понимаю в FOP. Материал штата также странный, поэтому используется для использования Encapsulation. – WeNeedAnswers

Смежные вопросы