我看《架构漫谈》——1
我记得我刚报选这个专业的时候,我的一个大我一届的朋友问我学什么专业的,我告诉他是软件工程。他听见后和我说软件好啊,好工作挣的钱多,尤其是“价购”师!这就是我当时理解的架构,我记得我当时还像个傻子一样给别人解释啥是“价购”,终于在后来的上课才理解是“架构”,现在想想还不免脸红。架构师这个职业其实并不实在软件中来的,所有工科专业应该都会发展架构师这个职业,不过最先出自建筑工程。
今读《架构漫谈》,其实对我敲代码,在个人编程能力上没有任何帮助,因为他不是告诉我们怎么去敲代码,什么语法怎么用;他是更深层次的东西,会敲代码是专业基础,也是最低级的东西;作为程序员应该懂得一个项目中怎么去敲代码,怎么让自己的代码更合理更符合用户的想法,这就用到了软件工程中重要的职业——架构师。
- 1. 欲聊架构师,先理解架构。
架构,早在很久以前就出现了,因人而现。三个和尚没水喝的故事告诉我们,当有三个和尚的时候,就应该把每个人的分工协调开,这样既不会让大家没水喝,还能提高大家的工作效率。虽然不是特别贴切,但是大致有这个意思。想象一下,在最早期,每个人都完全独立生活,衣、食、住、行等等全部都自己搞定,整个人类都是独立的个体,不相往来。为了解决人类的延续的问题,自然而然就有男女群居出现,这个时候就出现了分工了,男性和女性所做的事情就会有一定的分工,可是人每天生活的基本需求没有发生变化,还是衣食住行等生活必须品。但是一旦多人分工配合作为生存的整体,力量就显得强大多了,所以也自然的形成了族群:有些人种田厉害,有些人制作工具厉害,有些地方适合产出粮食,有些地方适合产出棉花等,就自然形成了人的分群,地域的分群。当分工发生后,实际上每个人的生产力都得到了提高,因为做的都是每个人擅长的事情。
如果在方式上表述,架构就是将任务划分,分工解决并在最后再将结果有机结合,从而完成任务。简单地说:架构实际上解决的是人的问题。
- 2. 架构师做什么?怎么做?
架构师都充当什么角色呢?妻子和丈夫的例子很好的给了一个介绍。在一个正常工作的团体中,每个人都会对同一问题有不同的看法,关照角度不同,也就导致结果不能有机的结合,架构师在这里的做法就是提出第一个问题,当然他需要真的明白用户需求,提出唯一的一个角度,统一大家的目的这样就促成了任务的行进。
由上面的分析可以看出,找出问题的主体,是做架构的首要问题。这也是我一再强调的,我们要解决的问题,一定都是人的问题。更进一步,架构师要解决的,基本都是别人的问题,不是自己的问题。再进一步,我们一定要明白,任何找上架构师的问题,绝对都不是真正的问题。为什么呢? 因为如果是真正的问题的话,提问题过来的人肯定都能够自己解决了,不需要找架构师。架构师都要有这个自觉:发现问题永远都比解决问题来的更加重要。
明确目标问题之后,就是开工了,那问题又来了:如何开工?问问架构师吧!工作的划分就是大家利益划分,因为必须要让每个人在时间和空间上都不能由太大的负载,而且还要协调大家的权利和义务等等。由上述两个原因我们能得出划分的原则:
a) 必须在连续时间内发生的一个活动,不能切分。比如孕妇怀孕,必须要 10 月怀胎,不能够切成 10 个人一个月完成。
b) 切分出来的部分的负责人,对这个部分的权利和义务必须是对等的。比方说妈妈 10 月怀胎,妈妈有权利处置小孩的出生和抚养,同样也对小孩的出生和抚养负责。为什么必须是这样呢? 因为如果权利和义务是不对等的话,会伤害每个个体的利益,分出来执行的效率会比没有分出来还要低,实际上也损害了整体的利益,这违背了提升整体利益的初衷。
c) 切分出来的部分,不应该超出一个自然人的负载。当然对于每个人的能力不同,负载能力也不一样,需要不断的根据实际情况调整,这实际上就是运营。
d) 切分是内部活动,内部无任怎么切,对整个系统的外部应该是透明的。如果因为切分导致整个系统解决的问题发生了变化,那么这个变化不属于架构的活动。当然很多时候当我们把问题分析的比较清楚的时候,整个系统的边界会进一步的完善,这就会形成螺旋式的进化。但这不属于架构所应该解决的问题。进化的发生,也会导致新的架构的切分。
e) 架构切分的结果一定是一个树状,这也是为什么会产生分层。层数越多沟通越多,效率越低,分层要越少越好。尽可能变成一颗平衡树,才能让整个系统的效率最大化。