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

All*_*lan 13 f# functional-programming

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

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

Jul*_*iet 27

从现在开始我应该成为一名更好/更专业的F#程序员?

每天保持编码:)

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

提示和帮助我的事情:

  • 我发现F#使编写非惯用代码变得非常困难,真的很容易编写好的,干净的代码.如果你发现自己正在与编译器作斗争,那么你做错了9次就会有9次.回到绘图板再试一次.

  • 完全不可变性的概念起初是个谜,但实现Okasaki 纯功能数据结构的所有数据结构非常有用.

  • 在工作的一些缓慢的日子里,在08年和09年之间,我写了一个wikibook.我有一段时间没有看过它,但我确定它真的很糟糕 - 但是,向别人解释语言的经验对于像我这样通常没有足够动力开始的人来说是一个很好的快速启动F#中的宠物项目:)

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

  • 非尾递归函数几乎总是更容易读写.看到这里.

  • 项目欧拉.很多人推荐它,我没有发现它特别有用.但是,如果你是一位数学家,你可能会比我更多地使用它.

  • <3个工会!使用它们!

  • 回到可变状态 - 大禁忌.至少对初学者来说.最糟糕的初学者代码充满了mutable和ref变量.不变性起初是一个外来概念,因此我建议暂时编写完全无状态的程序.

不过,最好的建议就是每天都要编码.

希望有所帮助!

- 朱丽叶


gra*_*bot 6

像现在任何其他语言一样,您知道语法和基础知识,是时候编写代码和更多代码了.

  • 确保您具有函数式编程核心概念.
  • 在大项目上工作,这样你也可以熟悉大型项目,而不仅仅是小型项目.
  • 写一些不可变的数据结构.
  • 在不使用继承的情况下处理大型项目.
  • 如果您熟悉设计模式,则以纯粹的功能方式实现其中一些,并注意其中一些模型的消失.
  • F#是关于混合功能和OOP样式.一旦你完成了没有继承的抽象数量的抽象,就把它带回来并开始将这些样式混合在一起.找到一个平衡点.

由于您作为工程师和数学家的目标是设计更好的科学图书馆,我可以建议作为一个学习视频游戏风格模拟的练习.涉及物理和数学的东西,但也需要控制状态.


Tom*_*cek 5

我只能同意尝试向其他人解释函数式编程是学习它的好方法.我花了很多时间思考我的F#书的结构,我认为这真的帮助我理解了功能概念的相关性.即使在您公司或您的朋友中就F#发表演讲也会产生类似的效果.

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

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

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

  • 尝试向其他人解释F# - 这有助于您在脑海中组织想法
  • 选择好的问题 - 例如算法问题,处理树结构等.
  • 写尽可能多的F#,不要害怕从一个看起来不太合适的解决方案开始 - 我重写了我的第一个程序这么多次!