成为更好的F#程序员的途径

我希望听到你们已经熟练掌握F#(以及一般的函数式编程)的人们从现在开始应该成为一名更好的/专业的F#程序员的步骤?

我已经了解了许多F#语法,并且具有C ++多年的经验。 作为一名工程师和数学家,我的目标是设计更好的科学库(线性代数包,偏微分求解器等)。


从现在开始,我应该做些什么来成为更好的/专业的F#程序员?

每天保持编码:)

我在07年9月跳上F#火车,之前我有一堆C#经验。 我花了大约3个月左右的时间停止将代码编写为C#,并使用更有趣的语法,并开始采用正确的编码风格:)

提示和帮助我的东西:

  • 我发现F#使编写非惯用代码变得非常困难,真正容易编写出干净的代码。 如果你发现自己与编译器发生冲突,那么你会做出错误的9次。 返回绘图板并重试。

  • 起初,不变性的整个概念是一个谜,但是实现冈崎纯粹功能数据结构的所有数据结构是非常有用的。

  • 在08年和09年之间工作缓慢的日子里,我写了一本维基书。 我有一段时间没有看过它,但我确定它确实很糟糕 - 但是,向其他人解释语言的经验对于像我这样的人来说是一个很好的开端,他通常没有足够的动力去开始F#中的宠物项目:)

  • 地图,折叠和过滤器是你的朋友。 尝试在这些函数中表达算法,而不是用递归实现循环。

  • 非尾递归函数几乎总是更容易读取和写入。 看这里。

  • 欧拉项目。 很多人推荐它,我没有觉得它特别有用。 然而,如果你是一位数学家,你可能比我更多地使用它。

  • <3个联盟! 使用它们!

  • 回落在可变状态 - 大不,不。 至少对初学者来说。 最糟糕的初学者代码充满了mutables和ref变量。 起初,不变性是一个外来概念,所以我建议一段时间写完全无状态的程序。

  • 不过,最好的建议是每天保持编码。

    希望有所帮助!

    - 朱丽叶


    像现在任何其他语言一样,您知道语法和基础,现在可以编写代码和更多代码。

  • 确保你拥有功能编程的核心概念。
  • 在一个大型项目上工作,以便您熟悉大型项目,而不仅仅是小型项目。
  • 写几个不可变的数据结构。
  • 在不使用继承的情况下处理大型项目。
  • 如果您对设计模式的熟悉以纯功能的方式实现其中的一些,并注意其中一些消失。
  • F#是关于混合功能和OOP风格的。 一旦你完成了没有继承的票价抽象,就把它带回来,并开始把样式混合在一起。 找到一个平衡点。
  • 既然你作为一名工程师和数学家的目标是设计更好的科学图书馆,我可能会建议你做一个关于视频游戏风格模拟的学习练习。 涉及物理和数学的东西,但也需要控制状态。


    我只能同意试图向其他人解释函数式编程是学习它的好方法。 我花了很多时间思考我的F#书的结构,我认为这真的帮助我理解功能概念如何相关。 即使在你公司或者朋友面前谈论F#也应该有类似的效果。

    当我开始学习F#时,我开始研究F#WebTools项目。 我认为这非常有用,因为该项目的许多组件都非常适合函数式编程,所以我学到了很多功能技巧(因为它们是解决问题的最佳方法)。 该项目处理F#的源代码树并将其翻译为JavaScript,因此我使用了大量递归函数和歧义联合。

    你所工作的领域与我的完全不同,所以我不能给你任何具体的建议,但是以一种明确的功能方式编写程序是一个好主意 - 即使你认为如果你写了它看起来会更好在C ++风格。 当你写它时,你可能会找到一些方法来简化你的代码。

    所以,我认为我可以给出的提示是:

  • 试着向别人解释F# - 这可以帮助你在你脑海中组织想法
  • 首先选择好的问题 - 例如算法问题,处理树结构等。
  • 写尽可能多的F#,不要害怕从一个看起来不太完美的解决方案开始 - 我重写了我的第一个程序很多次!
  • 链接地址: http://www.djcxy.com/p/80865.html

    上一篇: Path to Become a Better F# Programmer

    下一篇: F# vs Haskell vs Lisp