软件工程发源且发展于英语地区,绝大部分编程语言都是以英语作为语言,除了历史经济等因素外,实际上也和英语地区的经验主义有一定的关系。经验主义也潜移默化地影响了英语地区的思维和文化。
为什么和英语地区有关呢?这个问题出现在我的心中来源于大学时思考的一个问题。上大学前,由于对数学感兴趣,也希望自己能从事和数学相关的职业,因此对于数学思维的锻炼要着特别要求。不过高考志愿阴差阳错,进入了计算机专业。
当时大学的第一节课是C语言课,课堂上老师说的一句话引起了我的思考,"现在世界上有一百多种语言,C语言只是其中一门"。这句话在我心中产生了很大的一个冲突感:计算机难道就是这么杂乱无章?像数学一套符号全世界通用,多好,为什么还要搞那么多门语言?后面随着大学的学习和对西方哲学的了解,这种冲突感可以看成来自于经验主义和理性主义的冲突。
传统的西方哲学思想总的可以归纳为是英美的经验主义和欧洲大陆的理性主义,这个在西方近现代哲学都有着非常详细的讨论。要很好地说清楚经验主义和理性主义,是一个非常繁琐和严谨的事情,历史上的哲学家可能需要写上一本厚厚的著作才能说清楚,但本篇文章主题是软件工程,因此不打算使用大篇幅解释哲学上的概念。为了简化解释,因此我打算使用两个不太严谨,但相对比较容易理解的概念去替代经验主义和理性主义,这就是自我角度和上帝角度。
经验主义重感觉而轻理性,重情感而道德。英国经验主义者贝克莱就说过
存在就是被感知
所以经验主义者会更容易从“自我角度”思考问题。
英语本身实际上也有这样的一种味道,人称代词"I",也就是"我"永远是大写的。
而理性主义者则相反,重理性而轻感觉,重道德而轻感情。理性主义者主张跳出人的主观感觉,建立一套“客观”的规则,去作为世界的基底,然后解释这个世界。法国理性主义者笛卡尔的
我思故我在
实际上也是在寻找一个不可怀疑的,跳出主观介质,去解释这个世界,任何感觉都是不可信的,可能会出现错觉。实际上这种角度就是"上帝角度",脱离了人的主观感觉,最大化客观地去观察世界。当然正如一个中文语境的哲学大师说的,客观客观,主要有“观”,就不可能客,实际上理性主义者的客观也只是一个"理念",只能无限接近,而不能达到。实际上要理解上帝角度也不难,如果看过LOL或者王者荣耀比赛的人就容易理解"上帝角度",比赛选手是属于"自我视觉",可能会看不清对手做什么,会做什么。而观众则是上帝视角,整个比赛过程都能看得一清二楚,也因此不少观众会批判选手会犯低级错误,但实际上是可能大家的角度本身就不同。
现在回到大学时期一开始的那种冲突感来源,中学时期受到的物理和数学的教育实际上会逐渐倾向于理性主义。数学讲究的是如何通过几个不可质疑的公理出发去推导整个数学体系,而物理学也是通过几个基本定律去建立整个体系,外加教育环境的原因,物理学缺乏对实验重视,容易造成物理学也是纯粹靠理性逻辑推导的错觉。外加这些科目对个人主观感觉都有非常强的一种斥力。所以受过理科教育后,很容易倾向于理性主义,养成上帝角度(科学)。基本公理,普遍必然性,客观,这些概念在学习c语言的时候就产生了冲突感。因此,整个大学以及后面的工作中,实际上都充满着对经验主义和理性主义的冲突。
如果是站在上帝角度,那么追求的也就是上帝角度所看到的世界,上帝角度中一切都是客观的,确定的。科学的追求本质也是这种客观的普遍必然性。
而如果是站在自我角度,那么追求的则是人性本身的需求——快乐、幸福等,这实际上也是英语文化会倾向于功利主义和实用主义的原因。
为什么软件工程需要先研究上帝视角和自我视角呢?实际上这确定着软件工程本质的问题——世界观的问题,而
世界观决定方法论
作为一门工程,方法论显然是他的灵魂所在,因此,世界观的问题必须先要澄清。
回到文章第一段,软件工程起源并发展于英语地区,并且外加大学和工作后的经历,所以个人认为软件工程本质会更倾向于经验主义(自我角度),也就是用人性去分析软件工程,而非使用科学的确定性去分析。后面的文章将会基于“人性”的角度去分析软件工程。英国著名经验主义哲学家休谟注有《人性论》著作。人性是经验主义里面一个非常核心的部分。