函数式编程一年体会

jopen 10年前

一开始: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/