編程語言中的 Ducati

Juanito FatasThinking about what to do.

2003 年一个夏天的傍晚,我和一群朋友坐在纽约一个咖啡馆的阳台上。东海岸的潮湿气流还没有到来,我们一边享受着暖暖的清风,一边看着路上经过车辆闪烁的车灯。坐在我旁边的是一个不认识的家伙,他是一个朋友的朋友。他身着摩托服,大腿上放着头盔。为了打破沉默,我问了我想到的第一个问题:“骑摩托是什么感觉?”我对此很感兴趣,但并不期待得到什么新鲜的答案。我不能向别人形容开车的感觉,又怎么能期待别人向我描述骑摩托的感觉呢?实践胜千言。但他的回答让我惊奇。

“当你开车的时候”,他说,“你的思想和机器之间是不连续的。你可以通过仪表观察它,但你不能真正的感知它,除非它是辆摩托。如果你想加速,你加入一些汽油,但是你需要等待一定的时间后汽车才会有所反应。而对于摩托,这段时间非常短,以至于你更本不会察觉。你想做什么,你马上可以做到。摩托变成了你身体的一部分,一种有机的延伸。你可能需要一辆法拉利才能达到这种人车合一的境界。”

当时我就决心以后要学开摩托(首先我需要一些空闲的时间并且想办法不让我妈知道)。我花了几天的时间思考关于人机合一的哲学,直到有另外一些新的想法,然后这段对话便渐渐地淡忘了。

学习 Haskell 就像挑战一条新的攀岩道,是一种非常慢,具有挑战性,十分紧张刺激,但却十分愉悦的过程。当我最终到达一个阶段可以休息的时候,我感到很快乐。为了防止我不可逆转的以 Hindley-Milner 1 的方式思考问题,我决定离开 Haskell 一阵,在接下来的几个星期里用 Common Lisp 编程。

有一天吃饭的时候,我和一个朋友谈起我正在做的一些事。他一直无法理解我对那些“怪异”语言的偏爱(很少有人会理解)。“那么用 Common Lisp 编程到底是什么感觉?”,他问。忽然间,那个三年前的比喻从我脑海的最深处蹦了出来,“就像骑摩托”,我说。

Common Lisp 的编译器不仅仅是个工具,当你获得一些关键的知识后,她就成为了你思想的延续。你思考你想做什么,不一会儿你便做到了。你的大脑感觉不到延迟。用 Common Lisp 编程是一种非常流畅的过程,以至于你很难把电脑想象成一个外在的实体。Common Lisp 是编程语言中的 Ducati 2

当我朋友听到这个比喻后,有接着问了第二个问题。“如果 Lisp 是 Ducati,那 Haskell 是什么呢?” 我很高兴他问了这个问题,对于我这样的 Haskell 新手,思考这个问题有助于我解决我心中最后的疑惑。

经过一些思考,我发现这个比喻并不能很好的适用于 Haskell。用 Haskell 编程并不像开车,缺少那种流畅性。Lisp 能让你即时地把思想变为程序,而 Haskell 却是用另一种方法提高你的编程效率。她强迫你仔细地思考和改善解决问题过程中的每一个步骤。缺少流畅性换来的是程序整体架构上的完善。你需要花很多力气才能写出丑陋的 Haskell 程序 3

你要先学哪一个,Lisp 或者 Haskell?这是由你性格决定的。不过有一点是确定的,如果你想成为一个好的程序员,最终这两个你都必须学。


原文:Lisp - The Ducarti of Programming Language
譯者:薛宏 圖片:Wikimedia