成为更好的F#程序员的途径
我希望听到你们已经熟练掌握F#(以及一般的函数式编程)的人们从现在开始应该成为一名更好的/专业的F#程序员的步骤?
我已经了解了许多F#语法,并且具有C ++多年的经验。 作为一名工程师和数学家,我的目标是设计更好的科学库(线性代数包,偏微分求解器等)。
从现在开始,我应该做些什么来成为更好的/专业的F#程序员?
每天保持编码:)
我在07年9月跳上F#火车,之前我有一堆C#经验。 我花了大约3个月左右的时间停止将代码编写为C#,并使用更有趣的语法,并开始采用正确的编码风格:)
提示和帮助我的东西:
我发现F#使编写非惯用代码变得非常困难,真正容易编写出干净的代码。 如果你发现自己与编译器发生冲突,那么你会做出错误的9次。 返回绘图板并重试。
起初,不变性的整个概念是一个谜,但是实现冈崎纯粹功能数据结构的所有数据结构是非常有用的。
在08年和09年之间工作缓慢的日子里,我写了一本维基书。 我有一段时间没有看过它,但我确定它确实很糟糕 - 但是,向其他人解释语言的经验对于像我这样的人来说是一个很好的开端,他通常没有足够的动力去开始F#中的宠物项目:)
地图,折叠和过滤器是你的朋友。 尝试在这些函数中表达算法,而不是用递归实现循环。
非尾递归函数几乎总是更容易读取和写入。 看这里。
欧拉项目。 很多人推荐它,我没有觉得它特别有用。 然而,如果你是一位数学家,你可能比我更多地使用它。
<3个联盟! 使用它们!
回落在可变状态 - 大不,不。 至少对初学者来说。 最糟糕的初学者代码充满了mutables和ref变量。 起初,不变性是一个外来概念,所以我建议一段时间写完全无状态的程序。
不过,最好的建议是每天保持编码。
希望有所帮助!
- 朱丽叶
像现在任何其他语言一样,您知道语法和基础,现在可以编写代码和更多代码。
既然你作为一名工程师和数学家的目标是设计更好的科学图书馆,我可能会建议你做一个关于视频游戏风格模拟的学习练习。 涉及物理和数学的东西,但也需要控制状态。
我只能同意试图向其他人解释函数式编程是学习它的好方法。 我花了很多时间思考我的F#书的结构,我认为这真的帮助我理解功能概念如何相关。 即使在你公司或者朋友面前谈论F#也应该有类似的效果。
当我开始学习F#时,我开始研究F#WebTools项目。 我认为这非常有用,因为该项目的许多组件都非常适合函数式编程,所以我学到了很多功能技巧(因为它们是解决问题的最佳方法)。 该项目处理F#的源代码树并将其翻译为JavaScript,因此我使用了大量递归函数和歧义联合。
你所工作的领域与我的完全不同,所以我不能给你任何具体的建议,但是以一种明确的功能方式编写程序是一个好主意 - 即使你认为如果你写了它看起来会更好在C ++风格。 当你写它时,你可能会找到一些方法来简化你的代码。
所以,我认为我可以给出的提示是: