英文原文:If Philosophers Were Programmers 尽管没那么明显,但至少对我而言,哲学与编程有很深刻的关系。你想想看,软件代码无非是反应了开发者看问题的视角和解决方案。在开始编码之前,开发人员会花时间反复思考待解决的问题,明确该问题的要点以及它们之间关系,这种过程正好反应了他们看待这个世界的哲学。同样地,哲学家们都在不停地琢磨他们所关心问题的重要特征,比如生命、意识或者上帝。 那么依此来看,我们可以将程序语言背后的思维与哲学家们多年的思想很好地关联起来。我们完全有足够的理由将程序语言视为一个虚拟世界中的各种不同流派的哲学,在这个虚拟世界中存在交互的实体。即使是最基本的哲学命题都有有趣的转换:比如,“什么是自我意识?”转换为“什么是反射?(reflection)” 接下来是更有趣的问题:“如果哲学家们是程序员?那么他们会使用那种程序语言呢?”好吧,下面是我的答案! 苏格拉底:硬派汇编程序员 苏格拉底是哲学的奠基者之一,但这并不是唯一相同之处(汇编是一切程序语言之祖)。苏格拉底自创了一种明智的方法论,可以赢得每次辩论。他依靠不断地提问,直到(回答者)自相矛盾。比如,当有人声称“道德是重要的”,苏格拉底则问道“那么,你如何来定义道德呢?” 同样地,汇编程序中的任何(符号)都意味着问题。没有什么是预先设定好的(至少对纯汇编而言,而不是那些混杂了库和其他东西的汇编),并且所有的东西一定有非常清晰的含义。如果你和程序员苏格拉底在一块工作,并且给他看了类似这行的代码“var x = null;”,你的这位搭档一定会开始问到“什么是 var”! 亚里斯多德:大牛 C 程序员 亚里斯多德对西方哲学有巨大的影响,创建了很多科学领域,从物理学到生物学。他第一个仔细研究实体是万物之本质命题;与柏拉图的抽象形成了对比。他的哲学采用了中庸的方法去获得道德或者是理解生活(物质与形式) C 语言对其他程序语言有着同等规模的重要影响,在语法层面尤其如此。而且,在 70 年代早期的时候,C语言被视为所谓的高级语言和汇编语言的中庸之道:既可以编写机器独立的程序,也具备访问底层的能力。 柏拉图:理想的 C++ 传教士 柏拉图是哲学中一个大人物,他是苏格拉底的学生,也是亚里斯多德的老师。那么,我要向你解释一个明显的疑问:C++(柏拉图)怎么会在C(亚里斯多德)之后?让我来解释。柏拉图以他的形式或理念而闻名,引出了我们周遭万物所存在的理念世界。因此,你桌子上的茶杯不过是理念世界中具有椭圆形状的对象的一个影子。用编程的行话来讲就是,它是茶杯类的一个实例。 同样地,C++作为C的扩展,是第一门尝试在任何实现之前,就提供给程序员抽象问题的能力的语言。这本身是巨大的进步,即使解决问题的代码未写一行,对问题的分类和建模显得易懂且有用。你也许奇怪为什么柏拉图不用 Java,他当然可以,不过这个故事另有隐情:柏拉图对用符号去表达他的形式理念不是那么有信心,而且他偏爱对话体(参见斐多)。同样地,C++不是很自信它的发展方向,所以仍然保留C作为其子集,并完全地向后兼容不那么理想的C语法。 |