建筑架构和软件架构

今天状态不错,就再多写些一点吧,谈谈自己对于架构和架构师的理解,仅仅代表个人看法,难免有些偏颇。
架构这个词最早来源于建筑学,后来随着软件开发行业的兴起,很多充满智慧的先哲发现两者有着很多类似的点,例如:目的、主题、材料和结构的联系上来说。慢慢这个词也就进入了软件领域。但是溯本回源的分析建筑架构,会对于软件的架构有更深的理解。
建筑的架构无论千变万化脱离不了三个词:实用、坚固、美观。

  • 实用:一个建筑首要考虑就是实用,因为一个不实用的建筑是不会有人买单的,一个很明显的例子,那些户型不好的楼盘总是卖不动,或是卖的很低价,甚至低价也卖不出,因为你不满足用户需求。
  • 坚固:没有一个建筑是永远处在风和日丽、20多度的环境下的,它们会面临风霜雨雪,会面临时间的打磨,在这么多外界因素下保证建筑的坚固是非常考量建筑师(姑且用这个词吧)的功力的。
  • 美观:这点就完全是基于个人的品味了,心理学上说人天生对于美是亲近的,所以那些明星大多也是美女或是帅哥,因为美就是一种市场,同时一个美的建筑总是卖相要好些,对于如何才是美的架构我在另一篇博客中也有提及《什么是好的设计》(http://www.inter12.org/archives/611)。从某个角度说,一个好的架构必然是一个美的架构。

以上三者关系是一个递进的关系,一般的建筑师能满足实用,好的建筑师能兼顾实用和坚固,但是优秀的建筑师必然会设计出实用、坚固且美的建筑。

现在回到软件架构上来,作为一个软件架构师,第一个要考虑的是什么呢?对于建筑的三个要求我们来一一对应的分析。

  • 实用:一个架构师第一考虑的就是你的设计必然满足客户的需求,所以这个可以解释为什么很多架构师画的第一个UML图永远是用例图。
  • 坚固:软件最关键的在于那个软字,软就意味着存在很多变数,架构师的功力体现就在于如何良好、合理的去解决将来可能出现的变数。在保证合理处理变数的同时保证我们系统的可靠性,高吞吐,低延迟,安全性,可伸缩性,低陈本等等方面,这个也就是建筑上所提到的坚固。 因此我们的前辈们总结出了很多最佳实践和很多设计原则,所以说一个好的架构必然是体现一组设计原则或是设计约束。
  • 美观:美的软件架构亦如建筑的美,故宫的建筑风格永远是对称的,江南园林虽然局部的看是亭榭廊槛,宛转其间,渠幽通径,但是整体也脱离不了对称,大多以院落为核心,依外实内虚的原则和中轴对称格局。世间很多东西到了一定程度,到底还是万法归一,软件的架构设计亦是如此。

一个能做到实用的架构师,满大街都是,基本有一定工作年限和一定的项目经验就可以满足。他们只能做到满足用户需求,对于后续一些东西你说听之任之也好,或是无能为力也罢。如此系统最终会膨胀到无法在此基础上扩展,只能推翻重写,这个也是我们国人最喜欢干的事,不停的推倒重写。
一个能做到实用和坚固的架构师就比较少见了,自己干了这么多年亦不多见,这样的人若是你公司有,应该好好珍惜,真的是人才难得,多向他学习。他们会考虑软件中的各种变数,尽量把系统架构的衰减度降到最低,减少熵的增长。
一个能做到实用、坚固、美观的架构师那更是凤毛麟角了,少之又少,当然一个较为完美的架构一般都是几个人或是一群人群策群力出来的,有这样团队的公司是幸福的,自己有幸接触过一个。

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>