说起来有点丢人,我最早是带着偏见碰 Lisp 的。满屏括号,看一眼就觉得这玩意儿是专门给人添堵的。后来硬着头皮写了个小解释器才反应过来,那对括号根本不是噪音,它把你写的代码直接摊成了数据本身。在别的语言里你看到的是"先做什么再做什么",在 Lisp 里你看到的是程序长什么样,结构就杵在那儿,一层套一层,清清楚楚。其实
上手之后最上头的地方在宏和递归。写宏的时候你不是在告诉机器一步步怎么走,而是在描述这个问题本身的形状。思维从"流程"被硬掰到了"形状"那一侧,这个弯一旦转过去就回不去了。
它老得离谱,1958 年的东西,可新出的语言翻来翻去总能在它身上找到影子。我现在不怎么追框架了,累了回去写两个递归,像补了一节干净的逻辑课,比看那些年年换皮的教程踏实得多。你问我最喜欢哪门语言,我大概会说是 Lisp。不是因为它好用,是它逼我换了一套脑子看问题。