一个知乎问答:你认为电脑发展史上有哪些伟大的思想和技术?

一个知乎问答:你认为电脑发展史上有哪些伟大的思想和技术?

这个问题很早就在浏览知乎的时间线上看到过,但是又不想强答,而且感觉别人答得都挺不错的,那么多大神在以自己多年经验的感悟,以自己的视角写出答案看得让人受益匪浅。当时看到题目的时候本来脑袋里一闪而过的答案是:分层。

或者说,更专业的说法是抽象。

当时的题目中好像还有个“最”,这个”最“我不知道担当不担当得起,但是十分重要的一个思想方式是肯定的。

抽象,当然是抽象。从C语言对汇编的抽象,忽略掉具体机器语义到符合语言的方式,从高层语言对底层语言的抽象,从下向上逐步抽象,当然甚至我们看到更底层的抽象,对晶体管的操作抽象出机器语言,再从硬件层到软件层的抽象。从page调度的硬件实现(implement,内存页面Page与外存之间以字块的交换),到操作系统对虚拟页面调度算法的抽象,对硬件实现细节的屏蔽,都是抽象。从点像素在光栅显示器上的点的基本操作,到现如今美丽的GUI界面,漂亮高清的画面;以及TCP/IP协议栈的层层抽象……简直是层层抽象之后的奇迹。记得小学的时候我很好奇生命的形成过程,为什么简简单单的C、H、O、N、P、S等,几种基本元素就最终演变形成了简单的单细胞生物,那还好毕竟没啥,单细胞而已,而在这种单细胞基础上却发展出了动物,人——这种具有思考,意识,预测能力的生物?! 其实有的时候看计算机,真的很像人类的进化过程。当然人工智能并不会这么发展,人类曾经用了30年(60年代到80年代)的时间证伪了这条路

那次我把这个问题的所有的答案从头看了一边,在等一个答案,但是很遗憾没等到。我希望有人能说 分层。有一个人提到了分层,但是提的太局限了,他提到了TCP/IP协议栈的分层,也对,但是太局限了。我所理解的分 层是一个比抽象更具体的概念。意思再某种程度上等价,我本科期间读的是软件工程专业,抽象这个词,从大一就开始被提及这个词,而且出现的频率还不低,但是说实话,正如这个词说的那样,抽象这个词说得太抽象了。不好理解。这就有点想虚拟机这个概念,其实可以很直白的说是模拟器多好,模拟器==虚拟机,这样理解的话就简单了很多。虚拟机这个词太……太正轨了,有点不好理解。但相对而言还是错不了太远的。

但是对于抽象 ,我觉得用分层 来概括会好很多。

如果从分层的角度来看,计算机的很多都可以用这样的概念形象的解释清楚。TCP/IP协议栈当然是经典的层次清晰的分层(或许也没那么清晰); 往宏观看,计算机体系结构中的分层,从硬件机器语言层到操作系统的分层,再到汇编语言层再到高级语言虚拟机层。往下看,硬件层还可以接着纵深,硬件层往下是微程序层,再往下还有超微指令层……

具体到一个完整的系统,我们会开发系统的前端(PC端,Web端,IOS/Anroid 等),我们还有实现服务器业务逻辑功能,我们还有对数据的存储保护,粗略来看也这么分层,当然前端我们还需要对前端进行进一步的分层,异步加载来确保性能等,也在分层,稍微复杂一点的服务器端呢,我们需要考虑service层,DAO层,需要考虑面向接口编程,需要设计serviceImpl层,对于数据库端的性能方面的优化,我们还需要设计持久化层。再来看数据库,数据库其实本身也是分层的,好像也有什么内模式(逻辑模式),模式,外模式(?用户模式?子模式)这样的分层,还有三级结构两级映射(自从运用ORM之后就很少直接对数据库操作了,忘得差不了……)。

我们可以知道,对于一个系统对底层的接口都是提供了一些极小的(原子性)操作,而这些原子性操作的作用是提供了紧邻着它的上层来调用和使用它,进而完成更有意义的功能。这个过程就像生命的细胞进化出人的过程。简单->复杂。下层为上层提供调用接口,提供更强大功能的接口为更高层服务。

涉及分层的还有存储系统的分层,当然,那里分层是为了实现了对效率和空间的极致追求。这是工程化思想的一次经典表演。

不难看出,在很多地方,我们都能清楚的看到这种分层结构,用官方的说法,这种抽象。还是那句话,算不算的上伟大不知道,但 重要性是肯定的。

update: 另一方面,这种分层百利而无一害吗?否。性能会受一定的影响。那么这么分层值得吗?值得,原因,摩尔定律。

参考资料:我自己凭印象写的,没参考啥

by wanglinzhizhi