学习Lisp有感

最近因为想学 Structure and Interpretation of Computer的原因,同时开始学了Lisp(因为SICP本来就是用Lisp写的),然后这个语言非常震撼我。

虽然我之前对编程的了解并不多,但是基础是有一些的。所以这次我震撼的点在于,现代的编程语言,封装的程度竟然如此之高。在Lisp里,虽然括号很多,但是,每一步的逻辑,我都能看明白,不会出现一个概念封装多个行为的情况,这也导致,一旦理解了最基本的概念,就能对概念进行组合。但是现代的编程语言,经常是把一个多行为的功能,抽象成一个,让你不知道它到底是如何建立起逻辑的。比方说next.js,为了加强CDN的重要性,把很多功能强行写的和业务相关功能绑定,还起了很多跟实际的行为并不符合的功能名称。很多时候它一个功能就包含前后端的多个流程,但是对用户来讲完全是黑箱。虽然不是不能理解这种做法,一个是追求效率,另外一个是这种黑箱,有利于公司保持优势。再比方说,在Lisp里,我们有car和cdr就可以用它做组合推理,但是一个sum函数不会告诉你它到底是如何在程序里把数值加起来的。这就相当于,你想要一个苹果,Lisp给你一个苹果,nextjs给你一个红富士。

因为这个事情,我对其他的一些更底层的事情开始进行思考。如果现代框架使用一种高度概括的,减枝的方式来构建它自己,实际上它构建的并不完全是逻辑,而是协议。而且协议化的程度越高,创造协议的人的权力就越大,越来越多的人不得不依赖于这些协议,来框定自己的想法。甚至可以说,我们距离一个有着真实逻辑的世界已经非常遥远了,我们在一种被建构的协议下生活,而协议本身无法被溯源。另外,编程语言本质上是对自然语言中的一部分进行了系统化,这不可能是这个世界系统表达的完整形式,但是,当人开始将协议进行统一化,将导入标准库作为一种习惯,当人们觉得“应该这么做”的时候,我们会失去本属于我们的这个箱庭之外的真正的自由。