《哲学动态》
尽管没那么明显,但至少对我而言,哲学与编程有很深刻的关系。你想想看,软件代码无非是反应了开发者看问题的视角和解决方案。在开始编码之前, 开发人员会花时间反复思考待解决的问题,明确该问题的要点以及它们之间关系,这种过程正好反应了他们看待这个世界的哲学。同样地,哲学家们都在不停地琢磨 他们所关心问题的重要特征,比如生命、意识或者上帝。
那么依此来看,我们可以将程序语言背后的思维与哲学家们多年的思想很好地关联起来。我们完全有足够的理由将程序语言视为一个虚拟世界中的各种不同流派的哲学,在这个虚拟世界中存在交互的实体。即使是最基本的哲学命题都有有趣的转换:比如,“什么是自我意识?”转换为“什么是反射?(reflection)”
接下来是更有趣的问题:“如果哲学家们是程序员?那么他们会使用那种程序语言呢?”好吧,下面是我的答案!
01
苏格拉底:硬派汇编程序员
苏格拉底是哲学的奠基者之一,但这并不是唯一相同之处(汇编是一切程序语言之祖)。苏格拉底自创了一种明智的方法论,可以赢得每次辩论。他依靠不断地提问,直到(回答者)自相矛盾。比如,当有人声称“道德是重要的”,苏格拉底则问道“那么,你如何来定义道德呢?”
同样地,汇编程序中的任何(符号)都意味着问题。没有什么是预先设定好的(至少对纯汇编 而言,而不是那些混杂了库和其他东西的汇编),并且所有的东西一定有非常清晰的含义。如果你和程序员苏格拉底在一块工作,并且给他看了类似这行的代码 “var x = ;”,你的这位搭档一定会开始问到“什么是 var”!
02
亚里斯多德:大牛 C 程序员
亚里斯多德对西方哲学有巨大的影响,创建了很多科学领域,从物理学到生物学。他第一个仔细研究实体是万物之本质命题;与柏拉图的抽象形成了对比。他的哲学采用了中庸的方法去获得道德或者是理解生活(物质与形式)
C 语言对其他程序语言有着同等规模的重要影响,在语法层面尤其如此。而且,在 70 年代早期的时候,C语言被视为所谓的高级语言和汇编语言的中庸之道:既可以编写机器独立的程序,也具备访问底层的能力。
03
柏拉图:理想的 C++ 传教士
柏拉图是哲学中一个大人物,他是苏格拉底的学生,也是亚里斯多德的老师。那么,我要向你解释一个明显的疑问:C++(柏拉图)怎么会在C(亚里斯多德)之后?让我来解释。柏拉图以他的形式或理念而闻名,引出了我们周遭万物所存在的理念世界。因此,你桌子上的茶杯不过是理念世界中具有椭圆形状的对象的一个影子。用编程的行话来讲就是,它是茶杯类的一个实例。
同样地,C++作为C的扩展,是第一门尝试在任何实现之前,就提供给程序员抽象问题的能力的语言。这本身是巨大的进步,即使解决问题的代码未写 一行,对问题的分类和建模显得易懂且有用。你也许奇怪为什么柏拉图不用 Java,他当然可以,不过这个故事另有隐情:柏拉图对用符号去表达他的形式理念不是那么有信心,而且他偏爱对话体(参见斐多)。同样地,C++不是很自信它的发展方向,所以仍然保留C作为其子集,并完全地向后兼容不那么理想的C语法。
04
斯多葛学派:快乐的 Perl 学派
斯多葛和他们的哲学(斯多葛学派)对西方哲学,乃至世界哲学和文化都有着潜移默化而且深远的影响。有意思的是,他们不是一个人,而是相互协作的 群体。斯多葛拒绝任何非物质的东西,并且试图使用命题逻辑解释这个世界。因此,斯多葛学派拒绝任何理念,而专注于道德:他们让我们远离任何无法控制的事 物,而不是通过自我审思获得真智慧。斯多葛学派拒绝政治体制和形式主义,并提倡苏格拉底的公民社会。人们要成为兄弟,消除差别,为友爱的社会贡献自己(世 界各国之共同法律)。你应当注意到他们对大宗教,比如基督教和佛教的影响。
最有意思的是,Perl 是在 80 年代发明的,在这个年代里面逻辑/函数式编程最终找到了它们在程序语言世界中的位置。然而,Perl 社区(和语言)和斯多葛学派有着惊人的相似。Perl 作为一门语言,易扩展又灵活。事实上 Perl 世界中最流行的话是“不止一种方式”,简称为 TIMTOADY (there is more than on way to do it)。Perl 背后的哲学拒绝语法上的约束,给程序员们编码时足够自由的风格,但同时鼓励他们共享和参与社区。Perl 的强大源于 CPAN 社区的存在,里面的模块和软件被全球的 Perl 程序员快乐地分享着。这门语言一直在默默影响编程世界,其深远非立见。可以一提的是 Perl 对脚本编程、动态类型编程和函数式编程的强烈影响,但总之可以简单地归结为一句在 Perl 粉中广为流传的笑话:下一轮市场崩盘将由某个 Perl 脚本中的 bug 所引发。