Путь к тому, чтобы стать лучшим программистом F #

Я хотел бы услышать от вас людей, которые достигли высокого уровня владения F # (а также в функциональном программировании в целом тоже), какими должны быть мои шаги с этого момента, чтобы стать лучшим/профессиональным программистом F #?

Я уже много знаю о синтаксисе F # и имею многолетний опыт работы с С++. Моя цель - как инженер и математик разрабатывать лучшие научные библиотеки (пакеты линейной алгебры, решатели с частными производными и т.д.).

Ответы

Ответ 1

Какими должны быть мои шаги с этого момента? стать лучшим/профессиональным F # программист?

Сохраняйте кодирование каждый день:)

Я прыгнул на поезд F # в сентябре 2007 года, перед этим у меня была лодка С# опыта. Мне потребовалось около 3 месяцев для того, чтобы я прекратил писать код как С# с небольшим смешным синтаксисом и начал набирать правильный стиль кодирования:)

Советы и все, что помогло мне:

  • Я обнаружил, что F # действительно тяжело писать неидиоматический код, очень легко писать хороший, чистый код. Если вы обнаружите, что сражаетесь с компилятором, 9 раз из 10 вы делаете что-то неправильно. Вернитесь на чертежную доску и повторите попытку.

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

  • В течение нескольких медленных рабочих дней, между '08 и '09, я написал wikibook. Я не смотрел на это некоторое время, но я уверен, что это действительно плохо... но опыт объяснения языка другим был хорошим стимулом для такого человека, как я, у которого обычно не было бы достаточной мотивации для начала проект животного в F #:)

  • Карта, Fold и Filter - ваши друзья. Попробуйте выразить алгоритмы в этих функциях, а не реализовать цикл с рекурсией.

  • Рекурсивные функции без хвоста почти всегда легче читать и писать. См. здесь.

  • Проект Эйлера. Многие люди рекомендуют это, я не нашел его особенно полезным вообще. Вы можете получить от него больше пользы, чем я, если ваш математик, однако.

  • < 3 союза! Используйте их!

  • Падение назад в изменчивом состоянии - большое нет-нет. По крайней мере, для начинающих. Худший код начинающего содержит переменные и переменные ref. Иммутируемость - это концепция для инопланетян, поэтому я рекомендую на некоторое время писать полностью программы без гражданства.

Тем не менее, лучшим советом является просто ежедневное кодирование.

Надеюсь, что это поможет!

- Джульетта

Ответ 2

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

  • Убедитесь, что основные понятия функционального программирования отсутствуют.
  • Работайте над большим проектом, чтобы вы также познакомились с большим, а не с небольшим.
  • Напишите несколько неизменных структур данных.
  • Работа над большим проектом без использования наследования.
  • Если ваши знакомые с шаблоны проектирования реализуют некоторые из них чисто функциональным способом и замечают, как некоторые из них исчезают.
  • F # - о функциональности смешения и стилях ООП. Как только вы набрали сумму абстракции без наследования, верните ее и начните смешивать стили вместе. Найдите баланс.

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

Ответ 3

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

Когда я начал изучать F #, я начал работать над проектом F # WebTools. Я думаю, что это было очень полезно, потому что многие компоненты проекта были идеальны для функционального программирования, поэтому я узнал много функциональных трюков (потому что они были лучшим способом решить проблему). Проект обработал дерево исходного кода F # и перевел его на JavaScript, поэтому я использовал множество рекурсивных функций и дискриминированных объединений.

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

Итак, я думаю, что советы, которые я мог бы дать, следующие:

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

Ответ 4

вы, вероятно, не хотите слышать от меня, поскольку я не достиг высокого уровня владения F #, но я поставил себе цель попасть туда (как и вы).

Я думал, что могу предложить то, что оказалось моим самым большим инструментом обучения: Упрямство.

Я поставил сам себе проект с большими и-хисами (игра, как предполагает градбот). Затем я решил кодировать, используя как можно больше неизменных данных, независимо от затрат на производительность.

Тогда, если бы я не мог найти способ использовать неизменяемые данные, я бы пришел сюда и попросил о помощи.

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

Прямо сейчас у меня есть 2D-мир на основе плитки и маленький человек, который может найти свой путь к сокровищу и вернуться домой снова, используя поиск пути A *... Единственное, что я мутирую, это название окна, которое оно отображало в.

Я только серьезно относился к обучению F # в конце июля (раньше я это пробовал), и этот проект научил меня огромному количеству, а также помощь ребята здесь, в StackOverflow.

Ответ 5

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

Блоги F #, синдицированные на Planet F #, являются хорошим местом для начала, но есть также несколько отличных книг и презентаций на этом языке.

Ответ 7

Если вас интересуют научные библиотеки, я предлагаю вам взглянуть на Jon Harrop F # для ученых.

Также, чтобы поговорить о своей математике, я предлагаю вам прочитать Доэс-Ван Эйкка Дорога Haskell к логике, математике и программированию, хотя он написан в Haskell, вы, несомненно, сможете следовать большей части текста, а повторная реализация образцов в F # может быть приятным упражнением.