Насколько сложно изучать F # для опытных разработчиков на C # 3.0? - PullRequest
15 голосов
/ 28 мая 2009

Насколько сложно изучать F # для опытных разработчиков на C # 3.0, и / или что, по вашему мнению, является самой сложной частью изучения F #?

Ответы [ 9 ]

17 голосов
/ 28 мая 2009

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

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

В целом, я бы сказал, что мне потребовалась неделя, чтобы выучить синтаксис и основы языка в свободное время (2-3 часа в сутки). Вам понадобится больше времени, чтобы понять функциональное программирование.

Вопросы

Я все еще борюсь с типами. Я занимался проблемами Project Euler, чтобы научить себя синтаксису, поэтому мне пока не нужны никакие сложные пользовательские типы.

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

Обучение

Я бы определенно предложил попробовать Project Euler проблемы для начинающих. Математические задачи всегда являются хорошим кандидатом для функционального программирования.

В более общем плане проблемы обработки данных тоже хороши. Обработка списков очень проста в функциональных языках и является одной из первых вещей, которые вы должны изучить IMO.

Книга

Функциональное программирование в реальном мире : Я закончил эту книгу некоторое время назад, и нашел, что она действительно хороша для работы над тем, как применять принципы функционального программирования к задачам, использующим как C #, так и F #. Большинство примеров в книге выполнены на обоих языках с использованием идиом функционального программирования, специфичных для каждого языка, и объясняющих разницу между ними.

Ресурсы

14 голосов
/ 28 мая 2009

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

Что касается скорости, вот мой любимый онлайн-контент для изучения F # . Поскольку вы исходите из C #, вы можете найти ' как этот код C # выглядит в F # ' полезным.

4 голосов
/ 28 мая 2009

Как указано в других ответах, вопрос не столько в C # против F #, сколько в объектно-ориентированном / процедурном или функциональном.

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

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

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

Дополнительное замечание: по переполнению стека довольно много вопросов по F #, но вы не можете найти их, выполнив поиск"searchword f#", , который вы должны найти"searchword [f#]"

* Из них соавтор / редактор довольно известен сообществу;)

3 голосов
/ 28 мая 2009

Вы можете быстро выучить F #, но вопрос в том, как вы будете программировать на нем.

F # позволит вам написать процедурный код, например C #, но он более громоздкий, и вам не хватит функционального языка.

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

Есть также некоторые подводные камни, которые следует опасаться при сопоставлении с образцом.

2 голосов
/ 28 мая 2009

Я бы сказал, прежде чем углубляться в F #, сначала окуните пальцы в Lisp или Haskell, или даже в оба. После небольшого опыта в Lisp и Haskell и религиозного использования C # в течение долгого времени я чувствовал себя как дома с F #. С другой стороны, у меня также есть небольшой опыт в OCaml (одно из главных влияний F #), так что это помогает изрядно. Функциональные языки - это совершенно другой взгляд на вещи с помощью математического и научного подхода. Добавьте все возможности .NET-библиотек, доступных в C #, с которыми у вас есть опыт работы, и вы - золотой.

2 голосов
/ 28 мая 2009

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

1 голос
/ 04 августа 2010

Насколько сложно выучить F # для опытных разработчиков на C # 3.0,

Действительно просто. Вы должны быть в состоянии сделать серьезную работу после 1 месяца обучения F #.

и / или что бы вы назвали самой сложной частью изучения F #?

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

Это незначительные проблемы. Подберите любую приличную книгу по F #, и вы достаточно быстро ее схватите. Тогда вы можете приступить к очень сочному параллелизму линий вещей, асинхронным рабочим процессам и ...

1 голос
/ 09 июня 2009

Если вы хотите изучать F #, вам нужно быть знакомым с Reflector или хотя бы читать код IL.

F # делает много странных вещей, которые на поверхности просто не имеют смысла. Примеры:

  • У вас есть три типа нуля. CLR null, Nullable и Option.
  • Их можно комбинировать. Если вы видите Option, вам нужно проверить None и Some (null) перед использованием строки.
  • Вы можете перегрузить большинство операторов, таких как сложение (+), объединение (^) и больше (>).
  • Другие языки распознают эти перегрузки в ваших библиотеках.
  • Нельзя использовать перегруженный оператор сцепления из F #.
  • Если вы используете оператор>, он не учитывает вашу перегрузку. Вместо этого он ищет интерфейс IComparable.
  • Компилятор не скажет вам, что использование> без реализации IComparable будет ошибкой во время выполнения.

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

0 голосов
/ 28 мая 2009

Самым большим скачком будет следующий факт:

C # - это объектно-ориентированный язык программирования

F # - это язык программирования функций

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

...