函数式编程一年体会
一开始:Scala
很高效的Java,因为它用一半的代码实现同样的功能
深入:Haskell
在社区遇到一个笑话:Scala是Haskell的入门诱饵。别人拿Haskell当笑话,但我发现Haskell确实强大。
深入:Scala库
连函数和参数都看不懂,比如G[_], A → C, F[X → G[Y]],F.boo_(f(x))(g)(x)。
它们在哪个领域有用?那些聪明绝顶的人发明这些有什么用意?我现在有了答案,它们适合任意领域。不会抽象你就会重复发明轮子。
基础
不可变性(immutability)
可组合性(composability)
透镜(lenses)
函数式编程深深的吸引了我
数学
我一直以为自己数学好,直到遇上函数式编程。曾经花了3个月时间才完全理解一个问题。
感到恐慌
推荐Functional Programming in Scala,很棒的书,帮你渡过学习难关
感悟:抽象
最近回顾了一下8个月以前写的代码,惊了。
良好的oo风格的,很多继承和代码重用,“这不就是一个幺半群(monoid )和一堆翔嘛我怎么没意识到这是一个幺半群”,然后用三分之一的代码量重写了一下,而且灵活性翻倍。
然后我又看到一个文件,“诶这不就是自函子(endofunctor)吗”,又用三分之一的代码量重写了一下,用起来更容易而且更强大了。
现在我比以前越来越多的感受到抽象。而且在代码之外也这样,比如UI设计,比如软件需求。
感悟:自信
我以前总是想方设法测试代码。而函数式编程的静态类型系统让我更安心,很多时候,只要代码能编译,它就是正确的。就这么简单。
如果你真的需要测试,你可以用一条语句测试一堆函数,使用类似于ScalaCheck 的库,它们会帮你自动生成测试数据。
下一步?
我再也回不去动态类型语言了。
我会一直用Scala,也愿意更多的接触Haskell。最近还盯上了Idris。
学术!
我以前发现新的库都会很激动,现在则是研究和学术论文。他们其实是一样的,不过论文更短小精悍、可靠,更灵活。接下来一年我会学习更多的函数式编程和计算理论。
不要人云亦云,教条主义,说什么学术在现实世界没有应用价值。
学术对现实有巨大的指导意义,哪怕一开始有很大的学习成本,它依然能帮你节约可观的时间和精力,实现你的目标。
就好像你可以花6个小时写1000行代码,其中有10个bug和10个功能,但如果你首先花一点时间去学习,你可以用4个小时写400行代码,其中有1个bug和20个功能。我在工业界呆了许多年,但不仅仅是个码农,我多么希望早一点懂函数式编程,因为那会节约我很多的时间、精力,免去更多的压力。工业界往往对学术有一种轻蔑的态度。不要跟风。那些是让自己的无知、懒和短视显得正当的借口,是错误的。我希望你来试试。
来自:http://top.jobbole.com/901/