我是一个终身面向对象的程序员。我的工作主要是java开发,但我有多种语言的经验。 Ruby给了我第一次真正的函数式编程。我喜欢Ruby从功能范例中借用的功能,例如闭包和延续。最终,我毕业于斯卡拉。这是逐步学习以功能性方式处理非平凡问题的好方法。
现在我对Clojure很感兴趣。我知道所有诱人的性感功能(软件事务内存,宏等),但我不能习惯“在lisp中思考”。我见过Rich Hickey针对java程序员的截屏视频,但它们主要用于解释语言功能而不是解决现实问题。
我正在寻找任何建议或资源,使其他人更容易过渡。
答案 0 :(得分:19)
在我最初提出这个问题之后的11个月。我刚刚开始了一个新项目,以帮助初学者过渡到clojure。它被称为4clojure,它挑战你解决填空式交互问题。
答案 1 :(得分:14)
我对Lisp的第一次介绍是:Peter Norvig的人工智能编程范式。它是对Common Lisp和函数式编程概念的许多功能的非常可读和温和的介绍。
直接从某些Clojure books开始对你来说可能更合适,因为Common Lisp和Clojure之间有几个differences,如果你试图同时学习两者,这可能会让人感到困惑。
同时,尝试 亲身体验Clojure REPL ,做一些练习like Project Euler,然后你可以与其他Clojure对比和命令式Java解决方案。
此外,如果您对Clojure编程和惯用风格有任何疑问,请不要犹豫 与其他Clojurians讨论您的代码 。有几种方法可以做到这一点,例如:Clojure on Google Groups,#clojure IRC channel on Freenode,Twitter通过#03标签{@ 3}},当然还有#clojure!
答案 2 :(得分:8)
从OOP直接进入Clojure,我只推荐Stuart Halloway出色的Programming Clojure。
我喜欢它,并且在这个过程中它覆盖了很多Clojure以及相当多的功能编程。
Little Schemer和SICP很棒,但如果你想学习它们,它们对Clojure来说并不那么重要。
答案 3 :(得分:5)
我建议您获取“欢乐的Clojure”的MEAP版本。我有它,现在MEAP共提供12章。到目前为止,它是迄今为止我读过的关于编程语言的最好的书。这12章很容易让你开始使用Clojure,一直到一些高级主题。当前的MEAP(经常用新章节获取更新)与ociweb Clojure tutorial,stackoverflow.com和freenode上的#clojure IRC频道相结合,我想你会没事的。
虽然我同意Programming Clojure是对Clojure的一个很好的介绍,并且做得非常好,但我们不能否认它每周都会越来越过时。你必须记住,编程Clojure是为Clojure 1.0编写的。现在,我们正在快速接近Clojure 1.2的发布。例如,如果包含defrecord,结构将会过时。
答案 4 :(得分:4)
我非常喜欢youtube上的Brian Twill's series of Clojure videos,这是对一些clojure想法的无痛介绍。他们不会对Lisp或函数式编程语言有任何了解。
就书籍而言,我同意Isaac认为编程Clojure是一个很好的资源。您可能还会考虑一些关于clojure的即将出版的书籍:
如果您现在购买,两者都可以在线提早访问。另外我认为两者都有折扣 - 试试看clojure.org。
彼得和诺曼提到的Lisp书可能是不错的选择(我喜欢SICP,但没有看过其他人)。但是如果你刚刚开始,语法与Clojure的差异可能会有点令人沮丧。出于这个原因,我建议从一开始就使用特定于Clojure的书籍。
(编辑修复链接。)
答案 5 :(得分:3)
对于原始初学者,How to Design Programs会让你像Lisper一样思考。如果你感到不耐烦,那就更快:-)另一本好书是保罗·格雷厄姆的On Lisp,现在可以免费在线免费获奖。
我不关心计算机程序的结构和解释;如果你知道Lisp或Scheme,它已经是一个伟大的知识分子强制游览并且非常令人满意 - 但是我的学生和我还没有发现它是一本值得学习的好书。 The Little Schemer 有很多好的信息,如果你可以养成辩证的组织和可爱的馅饼风格。我不能。
答案 6 :(得分:3)
到目前为止,所有答案都很棒。我想补充一下:
答案 7 :(得分:0)
如果您正在寻找“Lispy思考”的介绍,我建议Practical Common Lisp。对于来自非lisp背景的经验丰富的程序员来说,这是一本很好的阅读和恕我直言。
缺点是它针对的是Common Lisp,而不是Clojure;主要原因是Clojure的方法功能更强大。你可能也想要一本特定的Clojure书。