一切软件开发都是二次开发

说到二次开发,接触比较多的是AutoCAD二次开发、Revit二次开发,这些都属于典型的二次开发。二次开发的直观定义是:基于某一个软件提供的接口进行编程开发,从而实现对这个软件的操作自动化。但今天我要更进一步提出“一切软件开发都是二次开发”这个观点。

软件分为系统软件和应用软件两类,除操作系统外的系统软件和所有的应用软件都运行在操作系统上,而凡是运行在操作系统上的软件,必定依赖操作系统的接口,自然可以归类到二次开发的范畴。

比较特殊的是操作系统,操作系统是对硬件的第一层抽象和虚拟,是实现上层应用软件和硬件交互的桥梁。其中最重要的硬件莫过于CPU,那么操作系统是如何虚拟CPU的呢?CPU依靠指令驱动,向CPU输入什么指令,CPU的状态就会发生对应变化,这种指令和状态的对应关系就是CPU设计者制定的协议,也就是大名鼎鼎的指令集。操作系统要想抽象虚拟CPU,势必借助CPU指令集,由此来看,操作系统借助CPU指令集来进行二次开发。

综上,一切软件开发都是二次开发。

这种高层依赖低层滚雪球式的计算机技术发展,其实就是人类知识与文明不断积累演化方式的显著体现,优秀的文明总是更大概率地被效仿和传承。回到知识学习这个角度,我们学习任何新事物(高层),其实都不是从零开始,而是依赖某些已有的知识和公理(低层接口)进行猜测和推理。如果就着依赖关系不断去挖掘低层知识,恐怕无穷无尽,就会发出“吾生也有涯,而知也无涯。以有涯随无涯,殆已!”的感叹了!

评论