@
passerbytiny 程序是用来解决现实问题的。现实很复杂,计算机太简单,为了让计算机理解人的指令,人们发明了编程语言;为了让计算机能够理解人类的世界,人们发明了数据类型,数据结构。
计算机在最初是给数学家用的,那时候还没有软件工程师,即便到了今天,计算机还不能够直接解决现实问题,而软件工程师的最重要职责,就是把现实问题转化为数学模型,而编程只是最后的一步。
DDD,对象范式,是设计思想,用于帮助我们将复杂的现实问题向数学模型转化。
以 Java,C++为代表的 OOP,是实现手段,“封装,继承,多态”都是实现手段。面向接口编程都是实现的手段。
程序员习惯以技术实现手段来倒推分析世界,这也是为什么技术人员总是被喷技术性思维的根本原因。今天我提问的标题,也犯了同样的错误。
人的理解是有局限性的,受你所处的环境,你的经验影响。加入我只是小明家的猫,我从来没有离开过小明家,我只知道小明家的麻雀,我设计一个和小明家的麻雀沟通的工具,却不知道小明家以外还有其他的麻雀,说着不同的语言。这就是凡人的局限性。与其尝试超越自身极限,去想象自己根本没见过的抽象事物,不如静下心来,想想如何和面前的麻雀沟通。
类和继承是有价值的,但不是凡人现阶段必要的。实际工作中,也会体会到,在开发一个系统足够久后,回过头来才知道“正确”的设计是什么,但你又如何保证若干年后,回过头来,依然是“正确”的呢?对世界的认知和自身经验有关。不去纠结一个类如何设计,不代表类没有用,不代表放弃程序设计,而是更坦承地面对自己的无知,承认自己是个凡人,基于眼前的活生生的对象,做出当时最有把握认为最正确的设计。