Насколько сложно изучать F # для опытных разработчиков С# 3.0?
Насколько сложно учиться F # для опытных разработчиков С# 3.0 и/или что вы скажете - самая трудная часть обучения F #?
Ответы
Ответ 1
Запуск в F # (изучение синтаксиса, очистка поверхности, как программировать функционально) не слишком сложно. Хороший разработчик С# 3, знакомый с LINQ и имеющий четкое понимание выражений лямбда, должен быстро найти основы.
Трудно сказать, как трудно было бы им развить привычку к решению объектно-ориентированных задач, но проблемы, требующие функциональных решений, должны заставить их совершить этот скачок. Трудно изменить свое мышление, если у вас нет новой проблемы, на мой взгляд.
В целом я бы сказал, что мне потребовалась неделя, чтобы изучить синтаксис и основы языка в свободное время (2-3 часа в сутки). Вам потребуется больше времени, чтобы получить реальное представление о функциональном программировании.
Вопросы
Я все еще борюсь с типами. Я занимаюсь проблемами Project Euler, чтобы научить себя синтаксису, поэтому до сих пор мне не нужны какие-либо сложные пользовательские типы.
Вывод типа, который делает компилятор, тоже немного привыкает, так как не всегда ясно, когда ему нужны типы, которые нужно указать, и когда он может просто их выработать.
Обучение
Я бы определенно предложил попробовать Project Euler проблемы для стартеров. Математические проблемы всегда являются хорошим кандидатом на функциональное программирование.
В более общем случае проблемы обработки данных тоже хороши. Обработка списков очень проста в функциональных языках и является одной из первых вещей, которые вы должны изучить ИМО.
Книги
Функциональное программирование в реальном времени:
Некоторое время назад я закончил эту книгу и нашел, что это действительно полезно для работы над тем, как применять принципалов функционального программирования к проблемам с использованием как С#, так и F #. Большинство примеров в книге сделаны на обоих языках, используя функциональные идиомы программирования, специфичные для каждого языка, и объясняющие разницу между ними.
Ресурсы
Ответ 2
Для меня одна из наиболее сложных частей - это действительно изучение типов алгебраических данных (дискриминированных объединений и кортежей) и сопоставления шаблонов, поскольку я действительно не встречал этих понятий на других языках.
Что касается скорости, вот мой любимый онлайн-контент для изучения F #. Поскольку вы пришли из С#, вы можете найти " то, что этот код С# выглядит в F #" полезным".
Ответ 3
Как указано в других ответах, вопрос заключается не столько в С# vs F #, сколько в объектно-ориентированном/процедурном и функциональном.
Сказав это, если вы пробовали в Linq, lambdas, анонимных делегатах, вы уже делали некоторые функциональные и/или функционально-вдохновленные вещи, поэтому первое препятствие "функций как переменных" позади вас.
В трудах есть книга (Функциональное программирование в реальном мире), о котором я очень с нетерпением жду, так как он объясняет функциональное программирование примерами С# и F #. Я полностью рекомендую этот веб-трансляции, автор , который, как мне кажется, отличный дегустатор. Он проведет вас на примере процедурного С#, затем преобразует его в функциональный С#, затем перескакивает, чтобы сделать то же самое в процедурной F #, а затем в функциональном F #. Очень приятно.
Самое сложное для меня - это расшифровка сообщений об ошибках вывода криптографического типа, хотя, видимо, они работают над улучшением этого.
Обратите внимание, что существует много вопросов F # о переполнении стека, но вы не можете найти их, ища "searchword f#
", вам нужно искать "searchword [f#]
"
*, из которых соавтор/редактор довольно хорошо известен сообществу;)
Ответ 4
Вы можете быстро узнать F #, но вопрос в том, как вы будете программировать в нем.
F # позволит вам писать процедурный код, такой как С#, но это более громоздко, и вам не хватало бы точки функционального языка.
Из моего собственного опыта вам придется выбросить свои надежные циклы в обмен на понимание списков. Вам также придется научиться использовать вложенные функции и рекурсию.
Есть также некоторые подводные камни, которые можно с осторожностью относить к сопоставлению с образцом.
Ответ 5
Вы можете быстро изучить язык F #, но, безусловно, потребуется некоторое время, чтобы использовать F # так, как он должен использоваться. Это может быть похоже на ваш переход с C на С++ с добавлением синтаксиса, чуждому глазам и мышлению, чуждому мозгу.
Ответ 6
Я бы сказал, прежде чем вникать в F # провалить пальцы ног в немного Lisp или Haskell сначала, или даже оба. Получив немного опыта в Lisp и Haskell, и, используя С# в течение долгого времени, я чувствовал себя как дома с F #. С другой стороны, у меня также есть немного опыта в OCaml (одно из основных факторов, влияющих на F #), что помогает с достаточной суммой. Функциональные языки - это совершенно другой способ взглянуть на вещи с помощью подхода "Математика и наука". Добавьте во владение библиотеки .NET, доступные на С#, с которыми у вас есть предыдущий опыт, и вы золотые.
Ответ 7
Если вы хотите узнать F #, вам нужно быть знакомым с рефлектором или, по крайней мере, читать код IL.
F # делает много странных вещей, которые на поверхности просто не имеют смысла. Примеры:
- У вас есть три типа null. CLR null, Nullable и Option.
- Их можно комбинировать. Если вы видите опцию, вам нужно проверить как None, так и Some (null) перед использованием строки.
- Вы можете перегружать большинство операторов, таких как сложение (+), concatenate (^) и больше, чем ( > ).
- Другие языки распознают эти перегрузки в ваших библиотеках.
- Вы не можете использовать перегруженный оператор конкатенации из F #.
- Если вы используете оператоp > он не выполняет вашу перегрузку. Вместо этого он ищет интерфейс IComparable.
- Компилятор не скажет вам, что использование > без реализации IComparable будет ошибкой времени выполнения.
Короче говоря, F # - невероятно непоследовательный язык, и вы не можете по-настоящему понять его, не врываясь в код, который он производит.
Ответ 8
Насколько сложно изучить F # для опытных разработчиков С# 3.0,
Действительно легко. Вы должны уметь выполнять серьезную работу после 1 месяца обучения F #.
и/или что бы вы сказали, это самая сложная часть обучения F #?
Во-первых, учитесь использовать типы записей и союзов и сопоставление шаблонов вместо классов. Во-вторых, обучение более эффективному кодированию кода с использованием первоклассных функций.
Это небольшие проблемы. Возьмите любую приличную книгу на F #, и вы будете достаточно быстро их вытащить. Затем вы можете перейти к действительно сочной строке parallelism и асинхронным рабочим процессам и...
Ответ 9
Самый большой скачок будет следующим фактом:
С# - объектно-ориентированный язык программирования
F # - язык программирования функций
Разработчики, которые не знакомы с функциональным программированием, нуждаются в том, чтобы наверстать упущенное, что такое различия и как перейти между ними. Самое приятное, что F # является частью платформы .NET... поэтому многие знакомые библиотеки будут там.