http://toutiao.com/i6255124715283694081/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=3541098878&utm_medium=toutiao_ios

缘起

一直以来,在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。甚至于很多架构师一说架构,就开始谈论什么应用架构、硬件架构、数据架构等等。我曾经也到处寻找过架构的定义,请教过很多人,结果发现,没有大家都认可的定义。套用一句关于 big data 流行的笑话,放在架构上也适用:

Architecture is like teenage sex,everybody talks about it,nobody really knows what is it。

事实上,架构在软件发明时的 N 多年以前,就已经存在了,这个词最早是跟随着建筑出现的。所以,我觉得有必要从源头开始,把架构这个概念先讨论清楚,只有这样,软件行业架构的讨论才有意义。

什么是架构?

架构的英文是 Architecture,在 Wikipedia 上,架构是这样定义的:

Architecture (Latin architectura, from the Greek ἀρχιτέκτων arkhitekton” architect”, from ἀρχι- “chief” and τέκτων “builder”) is both the process and the product of planning, designing, and constructing buildings and other physical structures。

从这个定义上看,架构好像是一个过程,也不是很清晰。为了讲清楚这个问题,我们先来看看为什么会产生架构。

为什么会产生架构?

想象一下,在最早期,每个人都完全独立生活,衣、食、住、行等等全部都自己搞定,整个人类都是独立的个体,不相往来。为了解决人类的延续的问题,自然而然就有男女群居出现,这个时候就出现了分工了,男性和女性所做的事情就会有一定的分工,可是人每天生活的基本需求没有发生变化,还是衣食住行等生活必须品。

但是一旦多人分工配合作为生存的整体,力量就显得强大多了,所以也自然的形成了族群:有些人种田厉害,有些人制作工具厉害,有些地方适合产出粮食,有些地方适合产出棉花等,就自然形成了人的分群,地域的分群。当分工发生后,实际上每个人的生产力都得到了提高,因为做的都是每个人擅长的事情。

整个人群的生产力和抵抗环境的能力都得到了增强。为什么呢?因为每个人的能力和时间都是有限的,并且因为人的结构的限制,人同时只能专心做好一件事情,这样不得已就导致了分工的产生。既然分工发生了,原来由一个人干生存所必需的所有的事情,就变成了很多不同分工的角色合作完成这些事情,这些人必须要通过某些机制合在一起,让每个人完成生存所必需的事情,这实际上也导致了交易的发生(交易这部分就不在这里展开了,有机会再讨论)。

在每个人都必须自己完成所有生活必须品的生产的时候,是没有架构的(当然在个人来讲,同一时刻只能做有限的事情,在时间上还是可能会产生架构的)。一旦产生的分工,就把所有的事情,切分成由不同角色的人来完成,最后再通过交易,使得每个个体都拥有生活必须品,而不需要每个个体做所有的事情,只需要每个个体做好自己擅长的事情,并具备一定的交易能力即可。

这实际上就形成了社会的架构。那么怎么定义架构呢?以上面这个例子为例,把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。由以上的例子,也可以归纳出架构产生的动力:

  1. 必须由人执行的工作(不需要人介入,就意味着不需要改造,也就不需要架构了)
  2. 每个人的能力有限(每个人都有自己的强项,个人的产出受限于最短板,并且由于人的结构限制,同时只能专注于做好一件事情,比如虽然有两只眼睛,但是只能同时专注于一件事物,有两只手,无法同时做不同的事情。ps. 虽然有少部分人可以左手画圆右手画框,但是不是普遍现象)
  3. 每个人的时间有限(为了减少时间的投入,必然会导致把工作分解出去,给擅长于这些工作的角色来完成,见 2,从而缩短时间)
  4. 人对目标系统有更高的要求(如果满足于现状,也就不需要进行架构了)
  5. 目标系统的复杂性使得单个人完成这个系统,满足条件 2,3(如果个人就可以完成系统的提高,也不需要别的人参与,也就不需要架构的涉及,只是工匠,并且一般这个工作对时间的要求也不迫切。当足够熟练之后,也会有一定的架构思考,但考虑更多的是如何提高质量,提高个人的时间效率)

有人可能会挑战说,如果一个人对目标系统进行分解,比如某人建一栋房子,自己采购材料,自己搭建,难道也不算架构嘛?如果对于时间不敏感的话,是会出现这个情况的,但是在这种情况下,并不必然导致架构的发生。如果有足够的自觉,以及足够的熟练的话,也会产生架构的思考,因为这样对于提高生产力是有帮助的,可以缩短建造的时间,并会提高房子的质量。事实上建筑的架构就是在长期进行这些活动后,积累下来的实践。

当这 5 个条件同时成立,一定会产生架构。从这个层面上来说,架构是人类发展过程中,由懵懵懂懂的,被动的去认识这个世界,变成主动的去认识,并以更高的效率去改造这个世界的方法。以下我们再拿建筑来举例加强一下理解。

最开始人类是住在山洞里,住在树上的,主要是为了躲避其他猛兽的攻击,以及减少自然环境的变化,对人类生存的挑战。为了完成这些目标,人类开始学会在平地上用树木和树叶来建立隔离空间的设施,这就是建筑的开始。但是完全隔离也有很多坏处,慢慢就产生了门窗等设施。

建筑的本质就是从自然环境中,划出一块独占的空间,但是仍然能够通过门窗等和自然环境保持沟通。这个时候架构就已经开始了。对地球上的空间进行切分,并通过门窗,地基等,保持和地球以及空间的有机的沟通。当人类开始学会用火之后,茅棚里面自然而然慢慢就会被切分为两部分,一部分用来烧饭,一部分用来生活。当人的排泄慢慢移入到室内后,洗手间也就慢慢的出现了。这就是建筑内部的空间切分。

这个时候人们对建筑的需求也就慢慢的越来越多,空间的切分也会变成很多种,组合的方式也会有很多种,比如每个人住的房子,群居所产生的宗教性质的房子,集体活动的房子等等。这个时候人们就开始有意识的去设计房子,架构师就慢慢的出现了。一切都是为了满足人的越来越高的需求,提升质量,减少时间,更有效率的切分空间,并且让空间之间更加有机的进行沟通。这就是建筑的架构以及建筑的架构的演变

总结一下,什么是架构,就是:

  1. 根据要解决的问题,对目标系统的边界进行界定。
  2. 并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。
  3. 并对这些切分出来的部分,设立沟通机制。

根据 3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。

同样这个思考可以展开到其他的行业,比如企业的架构,国家的架构,组织架构,音乐架构,色彩架构,软件架构等等。套用三国演义的一句话,合久必分,分久必合。架构实际上就是指人们根据自己对世界的认识,为解决某个问题,主动地、有目的地去识别问题,并进行分解、合并,解决这个问题的实践活动。架构的产出物,自然就是对问题的分析,以及解决问题的方案:包括拆分的原则以及理由,沟通合并的原则以及理由,以及拆分,拆分出来的各个部分和合并所对应的角色和所需要的核心能力等。

软件行业里常说的“架构”相关推荐

  1. 软件行业里学历和资历哪个更重要?

    今天在知乎看到一个问题邀请我回答,问:软件行业里学历和资历那个更重要?其实这个问题本身就有问题,学历和资历并不是一个相对的矛盾体,他们俩之间没有必然的联系.说实话,学历和资历分开来说都并不能完全代表你 ...

  2. 软件行业为什么那么多项目经理

    记得听谁说过,软件行业的项目经理太滥了,二十几岁的毛头小伙子,动不动就是项目经理,手下没几个人,管的也没几个事,在其他行业,项目经理一般都是四五十岁的老头子做,要联系这,要协调那的,软件行业的项目经理 ...

  3. 架构师评价当前软件行业现状及发展前景

    作为一名老程序员,8年软件实际开发工作经验.先后在金融软件公司.互联网公司.电商公司.传统软件及国企设计院上过班的经历来说,分析下当前软件行业现状. 高端人才需求量大,中低端人才趋于饱和 不管在哪家软 ...

  4. 一位准程序员对软件行业的8个问题

    查看原文http://blog.jobbole.com/24761/ 前言:本文源自@原数据 的一位学生发给他的私信.这些问题在在校生中很有代表性(见下文).随后还有几位微博网友(@哲学家灰太郎.@偷 ...

  5. 软件行业大牛告诉你何谓成功?

    什么是成功? 软件大师们是如何做的 不同的人对于成功的认识是不同的.成功对很多人来说,首当其冲的象征是物质上的回报.你挣得越多,就越"成功"."他是个非常成功的律师,是公 ...

  6. (三)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训

    刚开始创业时想,自己将控制系统的底层,例如数据库访问层,权限管理等核心部分掌握在自己手里,这样也不担心别人偷走辛苦的劳动成果,现在想想也很幼稚,成熟的反编译器满天飞,若真想破解,可能花费不了1天,应该 ...

  7. (四)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训

    我的合伙人加入后,我们两个开始阶段经常交流,怕沟通不畅,就干脆住一起了,住一个房间了,还签订了一些协议,创业不能轻易放弃,若谁放弃净身出户等,若有债务还需要承担,他也从家里拿了1万元入股,我们按30% ...

  8. (八)2005年我的第一次软件行业创业,烧掉30万、2年时间打水漂的惨痛教训

    我当时真想来把火,把能烧的都烧了,但是想想,这些都是我辛苦赚来的钱,或者是我家人慢慢省下来的钱买来的,这些东西买来时都很值钱,要处理了只能是废铜烂铁了. 我父母当时也在宁波,我平时不太喜欢跟他们交流, ...

  9. 运维是不是IT行业里技术含量最低的岗位?

    在互联网行业里,运维一直都是一个被人误解很深的岗位,以致于很多人都认为运维在IT行中的技术含量很低,但是今天我要为运维人"平反". 开发与运维搞不清楚 从本质上说,运维其实是用自己 ...

最新文章

  1. libgdx 学习笔记一 开发环境搭建
  2. 电商后台:实例解读订单系统
  3. 探索 Python、机器学习和 NLTK 库 开发一个应用程序,使用 Python、NLTK 和机器学习对 RSS 提要进行分类
  4. 一篇文章带你解析,乐观锁与悲观锁的优缺点
  5. SAP常见问题与解决办法 2
  6. 使用IDEA创建一个Servlet应用程序
  7. 8606 二叉树遍历的建设和运营
  8. HDU 4893 Wow! Such Sequence!(2014年多校联合 第三场 G)(线段树)
  9. 数据库原理—关系模型的基本概念(七)
  10. 自适应滤波——线性预测(LPC)
  11. 学北邮计算机未来四十岁,双非学渣如何上岸北邮计算机学院
  12. 【转】常见问题及应用技巧---------[BIOS篇]
  13. dnw linux 内核,linux环境下安装dnw(for mini2440)
  14. Go初始化变量的招式
  15. HBuilderX 打包问题
  16. 微软高性能计算新贵WHS2008
  17. AI开发者被疯抢,华为做了什么?
  18. Matplotlib输出中文显示问题
  19. 测试场景之内存或磁盘空间不足
  20. 一文读懂pid控制器

热门文章

  1. 酒瓶换酒问题的代码实现
  2. 2014年国考行测错题集(省级)
  3. 织梦自适应php源码,HTML5自适应仿WP大学织梦整站源码 v1.0
  4. acwing 4378
  5. svn:重命名文件之后,不允许提交
  6. 嵌入式安防监控项目——安防监控实现
  7. 第一次java后台面试总结:华资软件实习生面试---2019/4/19
  8. 区块链端对端交易性能分析
  9. Tophatter绑定万里汇WorldFirst账户收款教程!
  10. 达芬奇工具链的建立(工程编译步骤tms320dm6446)