你是怎么入的 Haskell/Clojure/Scheme/OCaml 这些函数式编程大坑的?

#1

分享一下你的感人经历?

也把问题发在知乎了: https://www.zhihu.com/question/271704815

#2
  1. 小学六年级,老师教过Logo语言。
  2. 大一学Python语言,接触到了函数编程的概念。
  3. 后来读了一本人工智能的书,上面介绍了Common Lisp和Prolog,跟着学了一些基础。
  4. 再后来学习了Emacs Lisp、PLT Scheme。
  5. 后来在网络上(主要是chinaunix)接触到了Erlang和Haskell。根据大家的推荐,对Haskell进行了较为深入的学习。
  6. Clojure是工作后同事推荐的,玩过一小段时间,不是特别喜欢。
  7. 目前主要玩的还是Haskell、Scheme/Racket。
  8. Haskell在工作中做过一些手游服务器方面的开发,算是个失败的项目。
  9. 业余自己有一个Haskell写的玩具解释器,实现了一些比较基本的R5RS的功能。
2 Likes
#3

这个可以分成好几个阶段来说了,最初学习函数式编程还不是通过函数式语言开始。真正的入函数式的坑是在实践当中体会到了 OO 的复杂度之后才想要去了解。

初入

最最最开始接触函数式语言是在读书的时候根据豆瓣大神们的建议买了一本 《计算机程序构造和解释》,然后第一次接触了 Scheme,才疏学浅的我根本不知道这就是函数式语言,只觉得这本书真难,语法真奇怪,数括号的时间真长,在草草的读完一章半之后就放弃了,几乎都没记得什么内容。

了解

听说和接触函数式编程是在工作之后,在实习的时候接触到了 underscore 并看了下源码,当时就感觉写的真酷,真难懂:( 但当时还是想要去了解,因为这样的代码挺酷,进而打开了函数式编程的大门,但是苦于能力有限,对代码的掌控力也有限,仅能理解其中的一部分代码,而且有的代码写出来自己都觉得不是很能理解。这一阶段也就知道函数式编程中所有逻辑都是用函数来组织,但还是不能很好的从 OO 的思维摆脱出来,或者说不能很好地摆脱设计模式来思考,写代码上来先写个单例,遂又无疾而终。

吸引

体验到函数式编程的魅力是在接触了 React、Redux 之后,当时其所声称的可预测(predict)、声明式(declartive)等特性感觉真棒。因为在业务中饱受了 jQuery 的困扰,不受控制的操控 DOM 和修改状态让我对在生产环境的一切都不可信。而当时 React 其带有的特性让我觉得这应该能够解决我现在的问题,进而开始接触这些概念,也才知道这些都是函数式编程中的概念

学习

在接触了一年多了的 React 之后,想要深入的去了解一下函数式编程这个领域。在考虑了良久之后,选择了 Reasonml 作为正式踏入函数式编程的坑,选择它主要的原因则因为 Reason-React 这个项目,让我感觉不会跨度很大,另一方面也能够通过写写 Reason-React 的代码来加深自己对 Reasonml 的理解。但是在断断续续的看了一段时间之后,感觉自己还是有些脱节,有好些地方实在是不能明白,并在知乎看了看大佬们关于学习函数式编程语言的建议,遂决定开启 Haskell 学习之旅。

至此,一年学一门新语言的计划就此夭折~~

2 Likes
#4

《七周七语言》

#5

因为 React

#6

大一大二接触到一些资源, 比如如何成为一名黑客, 比如 Hacker News. 知道了一些关于 Lisp 和函数式编程语言的信息. 后来知道了 CoffeeScript 之后就开始着迷语法了, CoffeeScript 的相关里提到有些语法借鉴自 Haskell, 我当时对 Functional Programming 本身没有多少理解, 看到 Haskell 在很多英文网站还有知乎上有挺高的赞誉, 就想学. 可是每学一个新的概念就很容易想歪了, 特别是遇到 Monad 的地方, 老是迈不过去, 断断续续翻了很多资料, 进三步退两步, 最后想想还是学 Clojure 比较实用.

我知道 Clojure 挺早的, 当时觉得语法紧凑信息密度很高, 很有好感. 而且 React 社区有一群人是吹捧 ClojureScript 的, 特别是因为不可变数据的原因, ClojureScript 维护者 David Nolen 经常到 React 社区串门演讲, 一来二去, 我就认熟了, 也看了很多 Rich Hickey 当年的演讲. 不过 Clojure 教程有点乱, 门槛也高, 起初不咋样. 后来, 用了 immutable-js 以后我认识到不是长久之计, 只好决定强行把 ClojureScript 啃下来. 实践证明有社区大佬改善工具链的情况下, 门槛低很多了. 而且我也逐渐习惯了 immutable data 的编写代码的方式, 所以就认准了 ClojureScript 里面的思维习惯.

其他的 Elixir, Scheme, ReasonML 因为看圈子里有人在用, 稍稍去看过, 没学成, 相互对比一下有哪些语言特性, 觉得挺有意思的.

1 Like
#7

前几年在听播客《内核恐慌》的一期节目《数学与编程》无意中听到以 Haskell为代表的函数式编程语言,加上一直认为面向对象编程语言缺乏足够的灵活性,于是开始了解Haskell。
React刚火起来的时候,看到Facebook just taught us all how to build websites,更加坚信了函数式编程才是真正适合于前端这样复的GUI编程的解决方案

#8

开始做了4年Java开发,感觉自己一直不太得要领

之后听说了Python, 学了Python, 后面接触到了Functional Programming 的思想。
逐渐在工作中用 map reduce itertools functools 这类的东西,感觉到了声明式编程的好处

后面听说Haskell,跟着Eric Meijer 学了 FP101x 这门课(他讲课真的不太好)

今年开始重新自学Haskell 的概念、思想。

总体来说,因为函数式编程的思维方式 让我的工作变的很Happy. 后面会继续学习! :smiley:

1 Like