Skip to content

Latest commit

 

History

History
26 lines (14 loc) · 3.37 KB

05_essence_of_lisp.md

File metadata and controls

26 lines (14 loc) · 3.37 KB

Lisp的本质

tags: lisp; programming language; cdlug;

今天在CDLUG的活动上做了题为“Lisp与S表达式”的分享。讲了很多内容,讲Lisp可以是很多东西,唯独忘了对Lisp本质的总结:Lisp什么也不是。

bug哥对Lisp的直观认识是对的:没看出Lisp好在哪里。我的中心思想一直是“其它语言能做的Lisp都能做”;我潜意识中一定觉得这句话太low了,但当时我并说不出为什么这句话low,本文可以解释为什么这句话很low。

“其他语言能做的Lisp都能做”,反过来的感觉就是“Lisp能做的其他语言都能做”,那确实体现不出“Lisp好在哪里”。

**下午的演讲生动形象地阐释了,Lisp的表示法S表达式可以表示任意的树形结构,所以你可以把Lisp看成任何东西。**你可以把Lisp拿来当C语言用,当Java用,当汇编用:你认为Lisp是什么,Lisp就是什么。

Lisp不会来干预你的想法,强制你要如何如何编程(例如:“一切皆对象,”,“lambda只能写一行”等等)。技术上讲,Lisp本身不提供给你的语义,你也可以写个来实现。因为不设限制,Lisp就并不具有任何的“思想”,这时就只有你的思想。那么,我们可以说,Lisp最大的优点就是Lisp没有“思想”。然而Lisp最大的缺点也在于此:因为Lisp没有思想,就强制了你必须有思想。

如果说,数学是一门无中生有的学问,那Lisp就是一门无中生有的语言。

从虚无当中制造出东西来自然是很伟大的,是以有无数文章把Lisp捧上神坛。然而“无中生有”并不是Lisp的本事,那是因为用Lisp的人有这种能力。不巧的是,恰好又只有Lisp这种什么都不是的语言允许他们发挥这种能力。于是,“程序员的才能”就和“语言的优越性”混淆了。

完全用自己发明出来的“思想”、“哲学”来编程乃是相当困难的,若非天才,常人很难提出什么革命性的新思想。正常情况下,我们需要到处去“借”,于是就出现了我在分享中的中心思想:“其他语言能做的,Lisp都能做”。那么反过来,自然是bug哥的看法:“Lisp能做的,其他语言都能做”。如果我们总是止步于研究“Lisp能不能做其他语言能做或者是不能做事情”,我们的思考就浮于表面了。

因为Lisp这种不设限制、没有思想的特性,Lisp本身并不解决任何问题,所以就出现了bug哥的提出的问题“我感觉Lisp并不能5行顶100行”,当时我们说“bug哥要的是框架”,这算是一个回答,然而并没有到达更加本质的层面。因为“Lisp什么也不是”,Lisp并不解决任何问题,所以以往鼓吹Lisp的文章总是腰杆不硬,包括今天演讲的内容。

**用了Lisp,并不能使你写程序的水平得到提升;相反,Java确实可以使得很多大学玩了三年的同学在经过几个月培训后写出达到标准的程序。**如果你感觉处处受限,那么你应该现在就开始学习Lisp,这让你感到自由与解放。如果你感觉码力不足(连“借”的能力都很欠缺),那么你就需要Java之类的语言来为你提供“思想”。

这次演讲的幻灯片在"./attachment/cdlug1608.lisp",需要用cl-slider打开(https://github.com/leosongwei/cl-slider