再读数据结构教科书的绪论

再读数据结构教材的绪论

泡BBS,争论,纠结,顿悟,糊涂等,这些感受应该很多人都有过,可是很多东西是不是就是很常识性的?


一、计算机发展的神速:1946年以来,计算机产业的发展超出人们的预期,某些生产线上,可以几秒钟产出一台计算机,如此迅猛的发展让计算机深入到了人类社会的各个领域


二、计算机应用领域的延伸:当初计算机的主要任务应该是数学计算,比如弹道,密码破译等,(我觉得计算机是战争催生的东西,战争加剧了它的发展,但其本身是一个逻辑演化的产物,可以追溯到莱布尼兹,最后是20世纪的数学危机,希尔伯特的愿景,哥德尔的毁灭大炮) 但是现在计算机的服务领域不再局限在科学计算,更多的被用于控制,管理,数据处理等非数值计算的处理工作,意思就是,计算机从科学计算跨到了人类的各个领域,而这些领域的逻辑不再仅仅是科学计算,在这些领域开发出来的软件更多的应该是怎么让软件更好的服务于人,赚更多的钱,所以我们要软件架构,伸缩性,持续维护,成本控制,模式,极端点在这些应用层面大部分偏离数学而靠近业务,怎么把业务梳理清晰是一种艺术,我们寻找的是数学和艺术的结合体。

 

三、程序编写的差异:

 

(1),科学计算领域:首先从具体问题抽象出一个适当的数学模型,然后设计一个解此数学模型的系列计算步骤,也就是算法,最后编写程序,问题核心就是数学模型,数学模型是这个领域的领域模型,寻求这个数学模型的实质就是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述,例如,梁架结构中的应力本质模型是一个线性方程组,预报人口增长的本质模型是一个微分方程,总结起来,这个阶段的程序编写就是数学模型+算法,然后交给计算机,得到计算结果。

 

(2),非科学计算领域,我相信我们大部分程序员都是在这个领域,这个领域就不纯粹是科学计算,当然不排除,但我们的核心技术已经放在了架构上,重要的工作是迭代领域模型,找准这个行业的核心领域对象,然后把这些对象放到我们的架构上,最后编写可维护性的代码,综合的为这个领域服务,好了,到这里就有两条编程路线,一个是这个领域确实是数学模型驱动,非数学占少比例,那么使用上面的科学计算领域的编程模式,如果占少比重,那么应该是架构和领域模型优先,这种领域大部分是需要数据库的,导致大部分人都以为数据库就是核心,数据库,或者关系数据库,本质也是数学模型,这个星球上的网站已经证明,强烈依赖数据库的程序在伸缩性能力上有强大的阻力,数据库在这里只能是一个服务设施,持久我们的数据,这些数据是在领域模型上送出来的,领域模型才是真正的逻辑关键

 

四、深入领域模型

 

按照MF给DDD写的序里的描述,a model that goes beyond a surface vision of a domain by introducing an underlying structure,  领域模型就是越过领域的表象而表达领域的本质结构的东西,这个模型需要我们不断的迭代才能准确的发现,这是领域逻辑存在的地方,可能比上面提到的数学模型都难,这里是敏捷编程的领地,迭代的同时,开发人员要和领域专家建立密切的沟通,沟通过程使用一种领域语言,模型必须和实现绑定,建模者必须是会写程序的人,领域模型需要被划界和隔离,防止变异腐化。