生活在扁平世界的程序员

 

当你面对一个全新的编程范式时,是选择固守现有的认知维度,还是勇敢地迈向更高的维度?

引言

二十年前,我第一次读到 Edwin Abbott 的《Flatland:一个多维度的浪漫故事》。这本书讲述了一个二维世界的居民——三角形、正方形、圆形——是如何无法理解第三个维度的存在。当一个球体来访时,主人公正方形无论如何也无法理解”上”和”下”是什么。

多年后,我意识到这完美地映射了当代程序员的思维状态。尤其是关于 Lisp 和 Clojure——这些拥有”宏”这种神奇能力的语言,为何使用者如此之少?这篇文章会给你一个深刻的答案。


编程的维度

编程本质上是对抽象的操作。但并非所有抽象都生而平等。

大多数程序员使用的抽象是自动化——将一组操作打包成一个名字。函数就是典型例子:你不需要知道它内部是怎么工作的,只需要知道它的规格和性能特征。

而真正稀有的抽象,是那些扩展编程本身代数的抽象——即那些创造新维度的概念。

Lisp/Clojure 的宏正是这种存在。借助语言的统一性,宏能够在编译时运行逻辑,就像在运行时一样自由。语言的语法树可以被随意操纵和转换,从而控制代码本身的语义。这种对编译时的轻松操控,是一种全新的编程维度。

如果你已经是 Lisp 程序员,你已经理解了宏的力量。但如果你不是,你可能觉得我在胡扯。

在《Flatland》中,正方形无法理解第三维度,因为他只能二维思考。同样,你无法理解新的编程维度,因为你不知道如何在该维度中思考。你没有足够的认知框架来理解新维度到底提供了什么。一个二维程序员可能会认为三维概念是”错的”——这不是因为他们理解了,而是因为他们试图把它压扁到自己的坐标系里。

学习新的维度

你无法用三维论证说服二维生物。这正是《Flatland》中球体无法让正方形理解”上”“下”含义的原因。

不过,类比到这里就结束了。虽然你的大脑永远无法理解四维空间,但你的大脑可以适应编程的新维度。

采用 Lisp/Clojure 的人通常这样描述这个过程:先是感到不舒服,然后是一系列豁然开朗的时刻,最后是一种再也回不去的感觉。

所需要的只是好奇心,以及一个认知:最伟大的编程理念有时确实无法在最初被理解。认识到这种认知偏见,就是打破它的第一步——这也是程序员成长的最佳途径之一。

写在最后

归根结底,生活在扁平世界是一种选择。当你面对一个陌生想法时,本能地排斥是正常的,那个时刻你在”这说不通”和”也许我还没有足够的概念来理解它”之间犹豫。那一刻的选择,决定了你留在扁平世界,还是迈向更高的维度。


原文:The programmers who live in Flatland - Red Planet Labs Blog