在计算机学习中,为什么我们应该问为什么
最近在使用 bootstrap 的时候,遇到一个下拉菜单(dropdown menu)的设计问题。bootstrap 默认的下拉菜单组件是使用 list 作为 html 基础完成的,而不是<select></select>
。我想这背后一定有设计者的意图,但是对于刚入门前端的我来说很难考究。不过问了一些人之后,发现似乎并没有关注这些实现背后的设计意图问题。
在之前的一篇博客——open questions中,提过一个问题,大意是说在计算机领域,为什么我们要去追问一件事情的动机。最近在学习前端的时候,对这个问题有了更深一步的体会,所以开始将这个问题单独提出来进行阐述。
科学哲学中的「四因说」
早在古希腊时代,就有哲学家开始思索事物的本质了。有一个很有名的哲学家提出了一些解释事物运动与变化的论点,其核心思想也就是标题中所描述的「四因说」。当然,如你所料,这位哲学家的名字叫「亚里士多德」。
为了省去时间解释「四因说」的概念,摘出吴国盛老师博客:海德格尔的技术哲思中的几段话来稍作说明,当然你也可以参考英文版的维基百科词条,或者是更专业的科哲书籍:
导致一个物出现的东西被称为该物的原因。亚里士多德曾经主张原因有四种,即「质料因」、「形式因」、「目的因」和「动力因」。比如造一顶皇冠,金子是它的质料因;皇冠的形状是它的形式因;皇帝用来举行大典、显示威仪和华贵是它的目的因;工匠汇总各方面的要求和准备并发挥自己的作用从而最终将皇冠拿出来,工匠是它的动力因。
今日我们对这四因说不是太理解,不知道为什么要提出四种原因,更不知道为什么单单提出这四种原因。因为当我们说到“原因”时,指的往往只是那直接产生作用并造成和带来最终结果的东西,也就只是亚里士多德意义上的动力因(也可以称之为「直推因」 ——引用注)。皇冠作为被造出来的结果,在我们今天看来,工匠是其唯一的原因。
动力因成为四因中起决定作用的方面,并最终决定了对因果性的规定。这件事情发生在 16、17 世纪之后 (也就是机械自然观开始成型的那些年 ——引用注),非同寻常,里面包含着近代思想对于目的因的排除。一个物的出现被描述为另一个早先的物加上某个作用力的结果,物在某种意义上成了现成的东西,即所谓“物质”。物不再“出现”(coming to),它根本就在场,恒久的在场。因果性说的也不再是那种使物“出现”的东西,而是根本上在场的物质的在数量方面的变化。
这种对因果性的规定使我们无法理解希腊人的四因说,特别是,使我们对希腊人四因说中的动力因的理解打上我们时代的烙印:对物产生作用,使其发生改变。但是那种希腊意义上四因之间的内在联系就完全丢失了。海德格尔提醒说,对工具之本质的理解依赖于对因果性之本质的理解,而对因果性的本质我们至今还茫然无知,这一茫然无知特别表现在我们对希腊四因说的误解
上面的吴老师的文字,基本上已经很清楚的解释了什么是「四因说」以及为什么在今天我们提到一件事情的「原因」时,我们暗示的语境是「一个原因(cause)」而不是「四个原因(cause)」。这是因为 16,17 世纪发生的自然观的范式转变造成的,这些转变把四因说中的「动力因」(也可以说是直推因)当成事物变化的首要因素,以及「四因说」中的其他几个原因被淡化了。
动力因(直推因)—— 传统自然科学探究的有效方式
在传统科学中,我们说一件事情的原因的时候,往往指的就是它的直推因。比如曾经在知乎上回答的一个问题:为啥乙醇没毒,而甲丙丁醇都有毒?
然后可以观察下面的答案,得票最高的答案描述了醇类的分子结构以及相应的化学性质,不同醇类在人类体内所产生的不同影响,并且给出了相当专业的答案。从这种角度出来,所阐述的就是「醇类毒性的直推因」。也就说「当前是什么样」。
在科学革命之后,上述回答中体现出的思想一直是自然科学研究的指导思想。这种追问「直推因」的研究模式有非常巨大的优势:它可以引导人类先将那些最根本的追问放到一旁,集中精力研究在当前阶段下能研究的东西,对于不能研究的或者研究暂时够不着的地方保持沉默。比如研究物体的运动,最直接的是去研究推动物体的力,研究在不同力的作用下,产生的不同效果。同时将牛顿所讲的第一推动力放到一旁,暂时不予考虑。正是这样按照一种内在的逻辑精密的步步前行,不断积累,并且如我们所见,这种研究形式取得了重大的成果。
但是这并没有给「我们的期待」一个显得更更本质的解释:对,这个答案说的是非常准确,非常符合人类目前掌握的生理化学知识,但是仍然可以在这个基础上问一句,为什么是这样?是什么原因造成了生理化学上的这种现状?
目的因 —— 我们的期待
正如上面小结结尾所提出的问题,我们人类心理上总是想要一种「更为本质」的解释,而且有些偏执的认为这种「更为本质的解释应该存在」,虽然目前来看很多都只是「因果关系上的错觉」。这一点在达尔文的进化论中表现的更为明显,正如我在:为啥乙醇没毒,而甲丙丁醇都有毒?问题下的回答。
这题明显是一个生理学加进化论的问题,一旦牵扯到进化论,「因果关系」就会变得微妙起来。
我们说一件事物「有毒」的时候,是暗含着语境的——对生物来说。甲乙丙丁醇,结构相似,为什么乙醇毒性最小?从生理化学方面回答,只能回答出这种毒性表现「是什么」,从因果关系上讲,这样推理找到的是“有毒”的「直推因」。
「直推因」是指与所要研究的事情本身最直接的原因。探寻直推因也是物理和化学中最常见的研究形式。这个来历与十六七世纪发生的科学革命有很大关系,具体情况比较复杂,这里不细说。
但是在生物学上,只研究直推因,能很好的说明“表现为什么样,是什么样”,但并不能很好的说明“为什么是这样”。在回答「是什么样」的时候,生理化学做的很好了。至于「为什么这样」,只能求助于进化论。
大胆的猜测就是因为:乙醇在自然条件下更容易出现 (至于为什么更容易出现,又是另一个问题了),生命接触乙醇的机会比其他醇类多。这样就导致了生命对于乙醇的不敏感。
至于证据问题,只能说这个猜测和进化论的逻辑是相符合的。如果要拿出具体的数据很难。
这个答案的正确性暂且不论,而且关于进化论中令人头疼的因果关系也姑且不去考虑,我想说的就是即便是上面这样的「半吊子目的因答案」也会给我们一种:『吖,就是这样!』的感觉,仿佛满足了我们灵魂最深处的某种渴望一样。
其实这就是「目的因」的魅力——它满足我们人类某种对真相的神秘渴求。即便有时候这种目的因是虚妄的。
计算机科学中的「目的因」
上面讲述了传统自然科学中的研究或者学习方式。但是对于计算机科学来说却不是这样。在自然界内,各种事物都是独立于人类存在的,多数事物更是早早先于人类就存在无数年头了,我们很难甚至可以说基本没有办法追溯回去,看看当初事物出现时的样子,以及在自然界这个复杂系统中所处的位置。
但在计算机领域内却大不一样,有非常多的内容是「人类创造的」,这些内容出于某些动机而构建出来,非常符合人类的直觉——这么干,背后肯定有一种「更为本质的原因」,而这种本质的原因,就是创造者的目的和意图。
这些现象基本上可以推广到所有与人造事物有关的事物上去。我们设计或者创造一种事物,都是有着某种根植于当时环境的目的在里面的。以一个普通桌子椅子为例,每一种设计,都有创造者背后想要表达的目的,它们都不是凭空出现的,而是伴生着创造者所种下的意向而来。有折叠的椅子,那设计师考虑的可能是节省空间,有纯榫卯的椅子,那可能是创造者为了自然环保,或者追溯往日的情怀。
在计算机领域,我们同样应该追问一件事情的「目的因」,也就是这件事物背后创造者的初衷。通过追问这些初衷可以更加了解一件事物内在的意向,以及深化对于这件事物的认识。比如设计模式,为什么要有这些设计模式,有没有其他的?当我们了解到这些之后,就会意识到这些东西不是铁板一块,进而解放我们的创造力。
前端领域
在前端领域更是如此,前端纯粹是人类建构出来的,我们可以追问许多东西,比如 html5 的作用是什么?为什么提出 html5,提出者们是怎么考虑的?
通过这些追问,可以让我们根据问题回溯到设计者的意图上去,了解初衷,从而产生更深入的理解以及对未来的把握。