七牛云许式伟:我所理解的架构是什么?
从软件工程说起
大家好!
我已经很久没有做技术类的演讲了,因为我最近确实比较忙,很少会出来。为什么会突然又想谈一下架构呢?这是我个人的宿愿,我是技术出身,虽然现在比较少写技术相关的东西,但我在公司内部做了很多分享,分享课里我讲的东西与架构相关的占三分之二,基本都是和架构相关的。
所以今天借这个机会谈一谈我自己理解的架构到底是什么。
国内现在比较少真正意义上符合 “架构师” 这个词的定位的角色,我们的教育和工作氛围很难出真正意义上的架构师,比较凤毛麟角。我自己理解的架构师是从软件工程概念开始的,也许大家都学过软件工程,但如果我们把软件工程这门课重新看待,这门学科到底谈的是什么?是软件项目管理的方法论?
无论如何,软件工程是一门最年轻的学科,相比其他动辄跨世纪的自然科学而言,软件工程只有 50 年的历史。这门学科的实践太少了,任何一门学科的实践时间短的话,都很难沉淀出真正有创意的实践总结,因为这些经验总结总是需要很多代人共同推动来完成。
为什么只有 50 年时间呢?我们来看看 C 语言,一般意义上可能认为它是现代语言的开始。C 语言诞生于 1970 年,到现在是 49 年。再看 Fortran,它被认定为第一个高级语言,诞生于 1954 年,那时候主要面向的领域是科学计算。Fortran 的程序代码量不大,量不大的时候谈不上工程的概念。这也是为什么软件工程这门学科很年轻,它只有 50 岁,在这样一个年轻的学科里我们对它的认知肯定还是非常肤浅的。
我在极客时间里的课程里一上来就做了软件工程和建筑工程的对比。对比可以发现二者有非常大的区别,具体在于两点:
(1)快速变化。建筑工程在完工以后就结束了,基本上很少会进行变更,除非对它进行软装上的变更,软装更像是今天的软件。但其实软件工程里,软件生产出来只是开始,而且只要软件的生命周期没有结束,变更就一直存在,很像建筑里的软装一样,而且比软装变化剧烈得多。
(2)不确定性。为什么软件工程有很大的不确定性?因为没有两个人的工作是一样的,虽然大家都在编程,但是编程的内容是不一样的。每个人昨天和今天的工作也是不一样的,没有人会写一模一样的代码,我们总是不停地写新的东西,做新的工作。这些东西是非常不同的,软件工程从事的是创造性的工作。
大家都知道创造是很难的,创造意味着会有大量的试错,因为我们没有做过。这会导致软件工程有非常大的不确定性。
以上这两点都会导致软件工程区别于传统意义上的所有工程,有非常强的管理难度。过去那么多年,工业界有非常多的工程实践,但是所有的工程实践对软件工程来说都是不适用的,因为二者有很大的不一样。
今天站在管理的视角再看软件工程,我们知道管理学谈的是确定性,我们如何去创造确定性是管理学中的追求,否则管理管什么呢?某种意义上来说管理学的目的就是要抑制不确定性,产生确定性。比如说开发的工期,时间成本是否能确定。其次,人力成本,研发成本和后期运维的成本是不是确定性的。所以软件项目的管理又期望达到确定性。这是一对矛盾。软件工程本身是快速变化的,是不确定的。但是软件工程管理又希望得到确定性,这就是软件工程管理上的矛盾。我们的目标是在大量的不确定性中找到确定性,这是我认为这件事情最核心的点。
程序员的三个层次
软件工程管理到底在管什么?......
点击了解更多,查看原文