黄国强 2023/11/11
前文提到面向对象构建的模块控制器,根据第一性原理,从图灵机的角度,面向对象不是最基本的元素。那么面向对象是不是不重要呢?
答案是否定的,面向对象非常非常重要。当我们面对一个具体的领域,比如我从事的半导体设备领域,面向对象是我们分析和理解半导体设备这个领域最强大、最有效的工具。所以面向对象这个工具非常值得我们花时间去研究学习。
我个人用面向对象的方法写了三十年的程序了,介绍这个技术的文章非常多,我这里只是简单的说一下我的体会。
1 对象即神经元
根据生物解剖学,我们知道动物的大脑是一个由众多神经元为节点接而成的神经元网络。神经元是神经系统最基本的结构和功能单位,神经元通过突起来传递信息。
我之前提到一个观点,即所有面向对象的架构都是bridge+NVI模式或者变体。面向对象的模型可以说是对大脑的一个仿生。下图是我绘制面向对象通用模型,和神经元网络高度类似。
面向对象的分析过程的结果就是获得这些节点的类型。这些节点通过函数或过程连接起来。当然目前这些连接完全靠人工编程,我觉得不久的将来(不超过50年),人工神经元网络将接过这方面工作。
2 发掘需求
有了经过我们分析获得的这个模型,可以很方便与客户沟通,搜集客户需求,学习专业知识,不断修正我们的模型。行业专家与常人的主要区别在于是否拥有专业概念,我们作为开发人员要擅长学习和理解专家掌握的概念。
我之前做过一款建筑软件,一个客户用了我写的软件,专程到公司点名要见我,他误以为我也是能和他交流的行业专家。其实很惭愧,我只是擅长用面向对象工具的专家,具体行业知识很肤浅。现在我从事半导体设备行业,我觉得我行业知识方面水平依然很一般。
提到这件事,我想表达的观点是,作为软件开发人员,掌握面向对象工具非常重要,要成为这方面的专家。而具体行业知识,只要够用就可以了,人的精力是有限的,侧重点要分清。
3 来自于用户高于用户
有种错误的观点是,既然专家是权威,面向对象的节点是不是完全按专家说的建立呢?
答案是否定的。我们从用户中搜集的需求往往过于具体。比如,半导体设备公司做的设备估计有几百种类别,每个类别的设备都有不同和独特的功能,在这个层面上你是无法写出一个通用设备框架的。这时候就要祭出人类思考的最伟大的工具——抽象。
从第一性原理,找出领域中最本质的元素,在此之上构建整个软件模型和框架。
综上可以看出,这个抽象分析能力才是人与人产生差距的地方。当然,随着人工智能的发展,我们人类自傲的这个能力也会被取代,所以我对于整个人类的未来异常悲观。
[参考]
1 软件之禅(六)图灵机