对面向对象与面向服务编程思想的感悟

        人类利用编程将社会生活中重复性的活动交给计算机辅助完成,利用计算机快速的计算、稳定的存储传输等性能弥补人类在重复单调事务上持续执行的缺陷。所以说,程序代码本质是人类对社会实践的总结在计算机行为上的映射。

        由于社会实践的在不同社会环境中的差异和共同点,所以反映到编码上是抽象、分离的思想。面向对象就是一种将流程规则按照执行上下文环境分割的思想。社会实践是具体的,所以需要具体问题具体分析,所以在编码实现上需要定义一系列各不相同的类。所有具体实现类在某些方面又具有共同性,这些共同性剥离出来可以单独维护,以减少重复性维护的工作。分离出来后,还要能合成在一起,如此合成的方法上有继承、聚合、依赖等形式。

        面向对象向下需要确定上下文变量的具体值,向上则暴露通用的服务方法以供调用,体现了现实与理想的对立统一关系,实现了从具体现实条件到理想目标的过度。

        面向对象定义的上下文变量体现了现实环境的复杂性,有时又体现了对环境的适应性。暴露的变量数目越多,越说明环境的复杂,每一个独立变量都有可能引起实现细节复杂度的倍数级的增加。有时编程者为了提高自己程序的复用度和通用性,不断对实现类抽象,提炼出了更多的配置变量,这样做有时候会适得其反,这就好像是将问题的复杂度从一个地方转移到另一个地方,配置变量值的人的总体上不会因为问题的分类减少决策,反而因为需要理解这种新的分类平添了学习成本,加大了使用难度。

        面向对象中有一个重要的维度是策略级别变量的取值选项,这些选项可能是应对不同的执行环境,也有可能是不同需求。适应不同环境是为了性能和可用性,环境适应性变量的每一个选项往往为了分离复杂性,需要为每个选项实现一个适配实现类。

        这里就反映出了编程中产品经理和程序员的根本分歧,产品经理关注功能目标,程序员出于工匠精神(偷懒精神)则需要考虑程序的可维护性(可扩展)来应付现实条件的复杂性。理想是美好的、单纯的,但是现实是复杂的、多变的,甚至是有些丑陋的。这种从现实到理想的巨大鸿沟,巨大矛盾,是产品经理和程序员有时爆发冲突的根本原因。

        所以为了对付产品经理的上线压力,程序员该怎么做呢?

        首先不可能放弃抽象的精神,在抽象的基础上暴露扩展点也是需要的,这种工作思维是程序员生存竞争的核心力量,反映了程序员的责任心、前瞻性、工作经验、学习能力。但是在扩展点的可选取值上可以做少许变通。

1.选择当前最简单、最适应当前需要的扩展方案去优先实现

2.将某些扩展方案交给其他人去做,交由以后去做,如果项目最终夭折了,那就不做了(我就是这么机智~~)

        综上所述,面向对象思想是程序员应对现实复杂度的利器,是分离关注点的手段,甚至是分工合作的基本手段,符合事物从简单到复杂的发展规律,同时也符合社会分工的角色划分结果。懂得从何处分离,如何分离没有足够的经验是做不好的,不然就没有架构师这个位置了。

        面向服务的架构思想是最接近产品思维的,最关注目标结果,对于基层实现是否统一、抽象并不关心。这种思维最大的好处是,不同技术队伍不必等待某个架构师将某些公用代码抽象分离出来,也不强求实现的技术栈完全一致,对接的工作只需要后期基于同一套通讯协议做适配即可。

        在这里,突然想到很难做出一个适应各种业务需求的通用性特别好的人工智能的根本原因:

1.首先需要理解现实。

        关于对现实的理解是多角度的,理解的知识成果是片面的,也是无穷无尽的。现实,规定了实现的可能性,规定了实现结果可用的选项,也规定了实现结果的存在形式。

        任何一种存在都是有限的,局部的,适应特定环境的,如果不能拥有淘汰机制,就不能随时间发生适应性进化。淘汰的选项作为基因仍然作为传承和备选保留下来,只是在当前环境下不会被表达执行而已。

        存在本身只能占据一小部分资源,对于知识的存储和利用必然有一个上限,这时候分工合作尤为重要,不需要一个万能的个体,但是可以追求一个万能的系统。

2.需要理解目标。

        目标大多是性能的优化,是对特定环境更加契合的变化,只有少数是具有重大影响的创新。目标可以是单一的功能特性,也可以是多种特性的合成。从实现细小特性再到整合打包形成最终产品,是实现目标的基本思路。但是目标到底有什么细小的特性,可不是用一个简单的术语概念就能描述清楚的。

        理解目标的特性可以从其与其他事物的关系出发,以其他要素为考察维度,总结其在特定环境中与其他各要素的互动规律,再将这种互动规律确定成固定的执行套路,映射成代码中的执行方法。

3.理解事物的发展规律

        人工智能机器发展的时间不过几十年,而人类的进化历程却达到几十亿年,要想将这么长时间的成果转移到机器上需要经历的时间难以控制。事物演化从先天上是多方向的,其中只有寥寥几条路是最适应当前环境的,找出这些正确的道路一方面可以从试错的角度,也可以从相似经验上借鉴。借鉴经验不过是缩小试错范围,但是不能保证结果。

        规律的总结至关重要,没有对运动规律的总结就不能保证演化的基本方向是否正确,这个是前提,是必然遵循的。经验不一定是规律,但可以提供一种备选的思考方向,加快道路的确定。当道路确定下来后,这条路就是我们想要的成果,可以拿来复制生产想要的产品。




  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值