查看原文
其他

知识的三个层次

2016-12-28 铁蕾 张铁蕾

昨天我去交管大队办理年度验车手续,出乎意料地发现,本应冷冷清清的办事大厅里竟然挤满了人。一问才知道,大家都在排队缴纳过去一年积攒下来的违章罚款。我这才猛然惊觉,2016就这么“忽”地一下要过去了。原来,人们这是在以清算债务的方式向过去的2016告别。

回想起来,我从今年5月份开始认真地运营这个公众号,至今已经有大半年的时间了。这期间,我写过不少文章,既有专业性的技术文章,也有对于一些抽象问题的宏观思考。有不少朋友给我留言,有的说,你的那个文章真的不错。也有的上来就问,准备出书吗?总之,听到这些评论,怎能不让人备受鼓舞?作为博主,自然以满怀的真诚,希望我写的每一篇都能包含哪怕一点真知灼见,给读者带来帮助。也因此,对于一个写东西的人来说,有一些问题就显得格外重要,需要好好地总结和思考,比如,什么样的内容才真正地包含“知识”?哪一类“知识”拥有更高的价值?以及我们的“知识”是从哪里来的?

对于知识本身的看法,我个人在头脑中向来有些模糊的观点。在我试图将这些想法付诸笔端的时候,它们开始逐渐变得清晰。今天,我们就来聊一聊我对知识本身的认识和思考。当然,是以程序员的角度:-D


知识的归类和层次


本着实用主义的观点,我们把知识按照下面的结构划分为三大类:


  • 第I类知识:具体知识。

  • 第II类知识:归纳的知识。

  • 第III类知识:演绎的知识。

第I类知识——具体知识,指的是那些能够从实践经验直接得来的直观的知识。这些知识尚未经过理性的加工,判断它们是否正确的唯一标准就是:它们是否与实践相符。比如,“糖是甜的,盐是咸的”,“云是白的,天是蓝的”,“鸟儿会飞,马儿会跑”。当然,以程序员的角度,这里的实践经验不仅仅针对于自然界,也可能针对于人们构建的系统。比如,下面这些描述基本上都属于“具体知识”这一类:

  • 编程语言某个语法的具体用法。

  • 编程工具某个特性的配置方法。

  • 在某个特定运行环境中应对版本碎片化的兼容方法。

  • 某条命令的具体用法。

  • 其它各种“具体”的细节问题。

  • ......

这一类知识的显著特点是:你知道就是知道,不知道就是不知道,你没法通过推理的方式获得它们。你只能从自己的实际动手过程中,或者从别人口中得到这些知识。

第II类知识——归纳的知识,相比第I类具体的知识,抽象了一层。它们是从无数个具体经验中归纳总结出来的。像我们听说过的很多气象谚语,比如“月晕而风,础润而雨”,比如“朝霞不出门,晚霞行千里”,就是这类经验的总结。从实验中归纳出来的物理定律,也是属于这类知识。回到程序员的世界里,我们经过多年工作经验积累下的规律性或原则性的东西(可以称为模式),大多属于这第II类知识。比如:

  • 系统架构师如何设计系统才能够降低耦合?怎样在系统性能和可维护性之间权衡?怎么设计系统才能够获得更好的扩展性?分布式系统有那些独特的问题需要考虑?如何使系统高可用?

  • 软件架构师和编程人员怎样才能设计出更易用的接口?怎样在软件运行起来之前就对各个模块的交互、生命周期、数量关系建立起清晰的认识?在各种可能的实现方案之间做出选择的时候又应当遵循哪些原则?

  • 运维工程师怎样最优化地组合各种工具,让底层基础设施高效、安全地运转?当遭遇紧急情况时,应该如何应对以最大限度地避免损失?如何尽最大可能保证数据的安全性?

  • ......

这一类知识的显著特点是:获得它们必须假以时日,并且几乎只能从亲身经验中归纳总结得到。

第III类知识——演绎的知识,与前两类知识完全不同,它们几乎与经验无关,而是完全可以由推理得到。我们学到的数学知识都属于此类。一个很典型的例子是欧几里得的《几何原本》,从五条公设和五个公理出发,经过层层演绎推理,竟能推出整整一本书的内容。

对于程序员来说,除了解答数学题之外,我们平常用到此类知识的地方,主要在于算法设计、算法证明和算法复杂度分析上面。工作中涉及到的数学知识越多,对第III类知识的需求就越多。

上面对于知识的分类,可以说并不是随意进行的。实际上,对知识本身的探究,属于哲学认识论的范畴。哲学上的两大流派——理性主义和经验主义——他们之间的争论由来已久。他们观点的不同主要在于对知识来源的认识不同,一方认为人类知识来源于理性,另一方认为人类知识只能来源于经验。所以,在上面的分类中,我们可以把第I、II这两类知识合起来称为“经验的知识”,而把第III类知识称为“理性的知识”。

当然,理性主义与经验主义的观点并非完全矛盾的。实际上,他们都有道理。历史上,将这两派观点进行调和并且比较成功的一个,是康德。康德借助于“先天认识形式”引出包含“因果律”在内的十二个“范畴”,使得原本从经验出发得到的知识也能够归于理性。

上面对于知识的分类,我们还有另外一种划分方式:第I类是“具体的知识”,而第II、III两类都属于“抽象的知识”。从具体到抽象,是人类智能的核心能力之一。这在哲学上的体现,初级的形式就是对于共相问题的探讨;而更高级的形式,则是对于归纳法、因果律的认识。


知识的价值


毫无疑问,上面讲的三类知识都有价值。

首先,我们从三类知识的获取难度上来分析一下。

第I类——具体知识,“普通人”就可以快速积累。我们可以通过阅读书籍、阅读资料,或者与他人交流,再多动手结合实践,就能快速获得这类知识。当我们初入某个行当,或者刚刚入职某个工作岗位的时候,只要足够努力,我们通常会感觉每天都能学到很多知识,就是因为这个时候我们在快速大量地获取的这一类具体知识。而当工作较长的一段时间之后,我们感觉学不到那么多东西了,是因为当前工作所涉及到的这类知识我们已经接触得差不多了。类似Stack Overflow这种问答平台上所出现的知识,也大多属于这一类。

第III类——演绎的知识,“聪明人”可以快速积累。据说,历史上出现“神童”最多的职业是数学家,比如为我们所熟知的高斯、莱布尼茨、欧拉、拉格朗日、冯·诺依曼等等,他们都在很年轻的时候就做出了举世瞩目的成就。为什么呢?是因为数学不需要经验的积累,也不需要实验数据,只需要逻辑推理,所以比较容易体现出少年天才的头脑来。

而第II类——归纳的知识,不管是“聪明人”还是“普通人”,都没法快速地积累。获取这一类知识,往往需要多年的工作经验和亲身实践的总结。而且,就程序员这一职业来说,这一类知识的传播比较困难。有两个原因:第一,一个有经验的人即使把总结出来的原则和规律告诉一个没有亲身经历的人,他可能也会因为缺乏切身的感受而很难一下子吸收和理解。第二,这类知识很难系统地阐述和表达,通常散落于各种技术文档之中。

当我们在简历里写明“若干年工作经验”的时候,这里的“经验”显然既包含第I类具体的经验积累,也包含第II类总结性的知识。但是,第I类知识,如果工作中用不上,它就产生不了价值;而第II类抽象的知识,则永远具有价值,与工作性质和工作内容无关。所以,对计算机行业的工程师来说,第II类知识,才是值得每个人着重关注的知识,也是最有价值的知识。而有远见的公司和团队,也会更看重第II类知识,而不是单纯地把工作经历匹配程度、是否立马能上手“干活”当做主要招聘标准。

知识的价值还体现在它的独特性上。现在,人工智能技术炙手可热。这项技术能从大量的数据中学习到内在的规律性,从而应用到它未见过的新的数据上去。这是它很重要的一个能力,称为generalization,其实就是归纳能力。可以说,AI技术已经开始触及到第II类知识,它要逐步替代人类来处理这部分知识。但是,与推理能力(reasoning)有关的第III类知识,目前的AI技术基本上还无能为力。所以说,在不远的未来,reasoning可能是人类智能最后的堡垒了。从这个意义上说,第III知识的价值理应为人的理性所高扬。



既然有价值的知识获取起来都不太容易,那么我们一旦获得了某些知识,怎么做才能发挥它的价值呢?这里有几条思路:


  • 对自己有用。比如,像Facebook的CEO马克·扎克伯格那样,自己在家里实现出一套人工智能系统,能控制家里的电器,还有T-Shirt大炮,免去了自己动手从衣柜拿衣服的麻烦。这样不也挺好吗?

  • 对公司有用。努力把知识用在工作中,首先对公司有用;如果公司比较有影响力,也就间接对社会有用。

  • 公开传播。比如写文章,就像现在我所做的一样:-D 用易懂的方式,把想法讲给别人听。至于对别人有没有用,就要看读者自己评判了。

  • 做研究,搞开源,写论文。对业界、对学术界产生持久贡献。

题外话

还有几天时间,2016马上就要过去了,伴随着很多收获,当然,也有很多未完成的遗憾。所有关注我的、给我留言的、跟我讨论过的,以及所有阅读和分享我的文章的朋友们,很高兴,过去的这大半年,有你的陪伴!衷心感谢!

2017,希望有所不同。让我们继续^-^

(完)

其它精选文章:

技术的成长曲线
互联网风雨十年,我所经历的技术变迁
技术的正宗与野路子
程序员的宇宙时间线
论人生之转折
Redis为什么用跳表而不用平衡树?
小白的数据进阶之路
Android端外推送到底有多烦?
【科普】神经网络和深度学习

扫码或长按关注微信公众号:张铁蕾。


有时候写点技术干货,有时候写点有趣的文章。

这个公众号有点科幻。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存