说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

《程序员必读之软件架构》作者Simon Brown:架构师与程序员的区别

HTML文档下载 WORD文档下载 PDF文档下载
全球知名软件架构独立咨询师、讲师Simon Brown在接受图灵社区专访时,表示开发者和架构师之间最大的区别就是技术领导力。退后一步反观大局是架构师必掌握的核心技能,开发者需经过经验积累才能成长为合格的架构师。

【编者按】Simon Brown是全球知名软件架构独立咨询师、讲师,创办了专门讨论软件架构问题的网站“编码架构”(CodingTheArchitecture.com)。他自称是写代码的软件架构师和明白架构的软件开发者。自2008年以来的7年时间里,Simon在全球28个国家做过有关软件架构、技术领导力及其与敏捷的平衡等主题的百余场演讲,并于2012年8月在中国举办的ArchSummit全球架构师峰会上以“郁闷的架构师”和“如何设计安全的架构”为主题发表演讲,深受与会者好评。Simon已为全球20多个国家的软件团队提供咨询和培训,他的客户既有小型技术初创企业,也不乏全球家喻户晓的品牌公司。Simon著有《程序员必读之软件架构》一书,他在这本书中打破传统的认知,模糊软件开发和架构在流程中的界限,进而为软件架构正名。近日图灵社区围绕程序员与架构师的区别对Simon Brown进行了访谈,下面为访谈内容。


问:开发者和架构师之间最大的区别是什么?

Simon Brown:架构师和开发者一样,也经常写代码,简单的说,开发者和架构师之间最大的区别就是技术领导力。软件架构师的角色需要理解最重要的架构驱动力是什么,他提供的设计需要考虑这些因素。架构师还要控制技术风险,在需要的时候积极演化架构,并且负责技术质量保证。从根本上讲,架构师是一个技术领导者的角色,这就是最大的区别。

问:一位开发者如何才能成为一位架构师?他/她需要掌握哪些领域之外的能力?

Simon Brown:两个字:经验。我认识的大部分优秀软件架构师同时也是出色的软件开发者,他们都是经过时间逐渐发展成为架构师的。你需要有退后一步看代码的能力,从而理解特定软件系统背后的设计决策。退后一步才能看到“大局”,这是架构师必须掌握的核心技能。这就是为什么《程序员必读之软件架构》一书中加入了有关C4模型的内容,这是一种从多个不同抽象层面理解软件系统的方法。这个方法有助于你退后一步反观大局。

问:你对软件架构的理解是否因为你的经历和实践而改变过?

Simon Brown:是的。我对软件架构的理解是根据我在咨询公司工作时在各个项目中负责软件架构的经验形成的。咨询是一件好事,尤其从最近我开始从事独立咨询师这个工作之后,我可以看到很多不同的团队,不同的架构,不同的技术,以及人们不同的工作方式。世界各地的文化多样性又为工作的复杂度增加了一个维度。无论是寻找特定问题解决方案的过程,还是为各种想法去芜存菁的过程,这些经验和与我共事的人的反馈一起最终形成了我今天对软件架构的认识,这些思维也反应在了我的书中。

问:你书中的每一章内容都很有趣而且很精炼,有没有想过写几本详细论述《程序员必读之软件架构》中重要话题的书?

Simon Brown:我写作这本书的目的是要创造一本让读者可以从头读到尾的书,但是你也可以通过粗略浏览来找到具体问题的答案。对于这个问题来说,没错,有一些相关主题没有出现在这本书中,这些主题可以构成一本与《程序员必读之软件架构》相互补的书。比如,图表和建模的材料就可以扩充成一本完整的书,另外我和一个朋友也讨论过要写一本关于架构模式的技术性更强的书。

问:你在书中也谈到了敏捷方法,你是如何看待现在流行的"敏捷已死"的说法的?

Simon Brown:我听过很多人说“敏捷已死”,他们观点似乎来自两个主要视角。首先,敏捷这个品牌现在虽然已经成为主流,但是其背后的一些意义却在近些年消失殆尽。遵循敏捷实践的软件团队有很多(比如每日站立会议,测试驱动开发等等)但是他们却并不知道为什么要遵照这些规则。盲目仿效敏捷实践并不是敏捷的核心精神。

还有一些团队,他们尝试了敏捷,但是结果却一团糟。我从软件架构的视角特别能注意到这件事。大部分敏捷方法并不明确讨论预先设计,而很多人把这点误解为在敏捷项目中不需要做预先设计。当然,这不是事实,而现在人们开始寻找所谓的传统开发和敏捷开发之间的平衡点。

敏捷并没有死。采用敏捷方式意味着不断地反思和调整你使用的方法,从而达到解决问题、变得更有效率或者更频繁地交付优秀软件的目的。团队要如何完成这件事完全是由他们自己决定的。

问:作为技术领导者,如何协调一个大型项目中不同架构师的协同工作?

Simon Brown:这是一个复杂的问题,根据背景的不同,答案也有很多。在我的经验里,大多数大型项目都包含有一些小团队,可能是根据技术类型、子系统或组件区分的。在这种情况下,每个团队一般都会有自己的软件架构师,因为必须有人要为这些零散的部分负责。为了要管理整个项目,协调合作,有以下几种方式:

一个单独的架构师来管理整个项目,然后通过和基于团队的架构师的合作来确保工作顺利进行。

基于团队的架构师共同协作,分享和执行架构领导者的角色。

某一位基于团队的架构师额外花费一些时间来管理整个团队。

第一种方式是我最不喜欢的,因为多出来的这个人可能不会像其他基于团队的架构师那样投身到每天的工作中,而且他有可能缺少必要的背景信息,无法做出明智的决定。在第二种和第三种方式之间选择的时候,我们可以根据基于团队的架构师的领导力和兴趣来决定。比如,强制一个不感兴趣的人来管理整个项目可能不会成功。我个人比较倾向于第三种方式,但前提是其他基于项目的架构师也应该以某种程度参与进来,因为对整个项目的理解是必不可少的。

问:复杂是软件架构的敌人,很多人欣赏那些已经用了十几年的架构,但是这种情况下多场景预判会使得程序变得复杂。你是如何规划架构时间点上的规模和设计的呢?

Simon Brown:简单的答案就是一开始就使用简洁的设计,然后明确地思考模块化。软件系统随着时间很容易就会发展成“大泥球”,对于需求不断变化的软件系统来说,维护性和适应性的最大影响因素就是不同事物间的耦合程度。如果你从一开始就考虑了模块化,把软件系统分解成高内聚低耦合的小模块单元,在未来你就可以更轻易地对系统做出改变。更进一步说,这意味着你定义的软件架构应该反映在代码中。正如我在书中所说,事实并不永远如此。我去年在一次大会中的演讲(抱歉,演讲是英文的而且在YouTube上)中深度讲解了这个话题->https://www.youtube.com/watch?v=ehH3UGdSwPo

问:你认为从10万用户扩展到1亿用户的架构存在吗?如果存在的话,这些架构具有超强扩展性的原因是什么?

Simon Brown:我确定这样的架构确实存在,但是在构造这些架构之初时,架构师可能并没有设想到如此强的扩展能力。每个互联网级别的大型网站背后的故事都很有趣,它们大多数都已经经历过在开发、部署、运维的同时持续发展架构的阶段。做出架构决策的关键就在于理解利弊和确定优先级。你可以在CAP定理中看到类似的情况。一旦你明白了不能拥有一切,就会更容易做出架构决策了。

问:什么样的架构能够做到快速响应频繁变化的需求?

Simon Brown:和之前的答案一样,简洁的设计和模块化会让你可以快速响应快速变化的需求。如果你需要经常改变架构,但只想改变其中的一部分,为了防止为每个小变化重新部署整个系统,采用微服务架构是一个明智的选择。

问:有没有什么事是架构师永远都不应该做的?

Simon Brown:有,软件架构师永远都不应该停止编程和停止学习!

BYOD浪潮即将来袭 六大年轻杀手重塑企业软件 灵活运用AppFlood:提高APP eCPM的10个技巧 事半功倍:你应该知道的HTML5五大特性 创建API监视器的五大技巧 流量激增15倍+ 乐蜂网桃花节大促背后的技术事 Windows 8和IE 10:如何保障视频播放? 云计算大会讲师秀之13:梁家恩,12年积累,构建永久免费的语音云平台 众望所归:智能手机芯片将为服务器所用 没有学位,他通过以下四步进入Google 谈谈Google Polymer以及Web UI框架的未来 保密入髓:前苹果员工揭示公司是如此善于保守秘密 调查显示:软件开发公司出现“人才荒” 三星拟6月20日在伦敦召开新品发布会 推手机新品Galaxy和ATIV 历届中国云计算大会PPT集萃(五):数据安全隐患解析与应对 搞趣网创始人:做不了阳春白雪 就做下里巴人 CMDN Club 28期:创业公司一定不要浪费资源 浅谈Lean UX:我们到底该怎么设计? 张艺谋今日正式加盟乐视 作品专区落户超级电视 WebKit华丽转身:欧朋浏览器8.0新鲜出炉 分析师称应出售Bing?除非微软倒闭,否则不可能卖Bing Go Mobile沙龙第二期:软硬整合与创客精神 专访西电黄宝林:《基于GPU的并行NMF网络聚类算法》获奖背后故事 友友姚宏宇:用C,C++和Java实现自主研发之后,放开心态迎“高朋” 新技术对传统学科的颠覆:系谱网使用大数据寻亲问祖 IDC:2015年全球平板电脑出货量将超PC Web开发者的福利 30段超实用CSS代码 库克出席D11科技大会:苹果公司没有陷入麻烦 千兆的带宽是不够的,最新研究将我们带入400G时代! 告诉你一个事实:移动互联网依然不大 一切才刚刚开始 戴尔的10亿美元云扩建计划到底是什么? iOS vs. Android,应用设计该如何对症下药? 请教:怎么样在TreeView中加入节点,在哪个函数中? C语言调试中的错误 在WIN98中怎样写代码通过注册表判断MODEM在哪个端口? 简单问题:在WIN98中怎样写代码通过注册表判断MODEM在哪个端口? 如何在执行时返回query中的一个查询之值 能否提供50元邮购上半年《程序员》的业务? 给定一个email地址及DNS服务器地址,如何检测此email地址对应的SMTP服务器?(请ludou,funtek等进来领分) 如何在mfc下编译一个c源文件 高手请帮忙解决这个难题-关于.vox文件 请问!想去上海的外企,英语水平要多高才可以?口语重要吗? 在sybase中如何建表的时候把中文注释加入?以便在建数据窗口的时候label显示中文。 请问win2000_Server的service pack在哪有卖,D版?北京? 安装JBuilder5对机器有什么性能要求吗(内存、cpu...)?Thanks!(内空) 关于PB作为OLE SERVER的问题 我想做个启动画面的窗口 关于MYSQL的问题 数据库高手请进,值得一看 怎么从文本文件里取出其内容? 请大家帮忙看一下,关于Delphi的三层MIS开发 如何获得经典的C++/MFC方面的电子文档,中英都行,谢谢! 压缩中提到的文件头有什么作用 , 请问各位专家,在网页上如何制作视频点播?有几种方式! 我报了中程谁有历年的中程试卷? 我收到的信都是?号,怎么看???? VB中是否有移位操作符??是否有_能够得到数据类型宽度的函数? 哪里有core java的e版down啊? 有事好商量!请进! DLL编程错误,请高手指教一下!! 活见鬼,真气人....... 问一个trigger问题? 问一下:我的char*都用_T("asdfsafd")表示了,资源也没任何问题,可有时候运行程序显示乱码 在论坛里,发一个帖子新开一个窗口,当发完后让原来那个窗口刷新一下 我的机子到底怎么回事???? 我试试.. CListCtrl中如何选定整个一行? 来到济南天气太热,特来送分 ★★★★★ 见于现在伪ID和盗用密码的现象十分嚣张,我提议…… ★★★★★ 请教各位,我用vb6.0访问ms sql7.0数据库,为什么有时出现,“过期,数据已超时?” 请问COM和DLL有什么区别和联系?(30分) 关于侯老师 win95-a-developers-guide 一书的源配书... ISAPI中不能存取ASP中的Session、Application变量?高手你老人家在哪里? 大家来看看这些招聘题目合不合适 提一个网页制作的问题哈,大家不要扔西红市啊,网叶制作可是程序员的基本技能之一 activeskin里的skinbuilder有谁用过???来讨论吧 我在msdn上看到vb中的字符串有两种:定长字符串和变长字符串。请问如何分别声明这两种类型? 怎样在ADO中引用已打开的recordset的某一字段值,请给几个例,谢谢了! seedundersnow and holyfire help me!about 8253! 谁有cute ftp 4.2.6 beta的注册码 请问如何把页面查询到的记录导入到Excel中呢? 有用过TAdvStringGrid的吗?OnGetEditorType( )为何不被调用? 请教高手如何用Xsl编制函数控制Xml??急急 用配方法计算:x^2+3x+2=0;-x^2+5x+6=0;x^2-6x=-8 八加九等于几 一共有360千克的水果糖,每袋4分之一千克,5小时已经装完6分之5,平均每小时装多少袋? 计算:[3(x+b)^2-6(x+b)^2+9(x+b)]/[3(x+b)]-(x-b)^2; 简单运算1986-1983+1980-1977+.12-9+6-3 把六分之五千克的糖,平均分成五份,每份是五千克得几分之几,提出理解快急啊快~~~~~~~~~~~~~~~~~ x+1/x=0和x+1/x=13/6怎么算是X+(1/X)=0和x+(1/x)=13/6 小玲的房间地板面积是14平方米,如果选用边长0.3米得正方形地砖铺地,至少需要多少块这样的方砖 比六分之五千克多三分之一千克是多少千克,比六分之五千克多三分之一是多少千克? 1.2:X=0.6怎么算 小玲的房间地板面积是14平方米,如果选用边长0.3米的正方形地砖铺地,至少需要多少块这样的方砖?(得保留整数) 第一道:1000米的十分之七是( ) 第二道:120分的六分之五是( )分直接说得数就行 X+2分之X=6怎么算 一间房子长18米,宽15米,它的面积是多少平方米?用面积是9平方分米的正方形地砖铺地,需要多少块? 4分之三千克的六分之五是多少千克.八分之7米的七分之三是多少 米 计算,2/x(x+2)+2/(x+2)(x+4)+2/(x+4)(x+6) 一个会议室的长是15米,宽是6米.用面积是9平方分米的正方形瓷砖铺地,需要这样的瓷砖多少块? 18个六分之五是( );120米比( )米多25%. x除0.9=0.8怎么算 一个会议室的长15米,宽6 米.用面积是9平方分米的正方形瓷砖铺地,需要这样的瓷砖多少块? 1,2,3,4,5,6,7,8,9,10哪个是质数 0.26(5-X)=0.91怎么算 铺一间房间的地,用边长3dm的正方形地砖铺,正好1600块,如果改成用边长4dm的地砖铺,需要多少块? 三分之一,2,1,-6,0,9,7,3,-9,14,-1.4,二又五分之一【自然数,整数,质数,三分之一,2,1,-6,0,9,7,3,-9,14,-1.4, 二又五分之一【自然数,整数,质数,台数各分类.】 x+0.75-5/3=0.15怎么算 一种瓷砖长4dm,宽3dm,如果用这样的瓷砖铺一个正方形,正方形边长最小是多少分米?需要多少块这样的瓷砖?反正我是按作业来打的) 八分之九至少加上()个九分之一,和是最小的质数? 5*(x+1)=0.2怎么算? 一间房间,用边长2分米的地砖铺地,需要用144块,如果用边长为3分米的地砖铺地,需要多少块? 一根六分之五米长的钢绳重3千克,这种钢绳每米重多少千克?每千克钢绳有多长? (2.5-x)/x=0.4怎么算 房间的地面是正方形,无论选择边长50厘米的正方形地砖铺地,还是选择边长60厘米的方砖,都正好铺满,小明房间的地面至少是多少平方米 一根6分之5米长的钢绳重3分之2千克,这种钢绳每米重多少千克?每千克钢绳有多长? 2(x-0.5)=0.8怎么算 聪聪的房间面积为17.6平方米,房间地面恰好由110块相同的正方形地砖铺成,求每块地砖的边长是多少?用方程解答贺州市2013年春季学期段考7年级试卷 数学一元一次方程哦 一根六分之五米长的钢管重2千克,这种钢绳每米重多少千克,每千克钢绳有多长 3(x-0.5)-2(x-4.5)=7怎么算?要步骤 小亮的房间面积为17.6平方米 房间地面恰好由110块相同的正方形地砖铺成 每块地砖边长多长?房间面积是17.6 不是 地砖面积 一根6分之5米的钢绳重3分之2千克,这种钢绳每米重多少千克?每千克钢绳有多长? x+(1/x)=3,求x^4+3x^3-16x^2+3x-17的值x+(1/x)=3求x^4+3x^3-16x^2+3x-17的值 计算 (x-0.5)^2(0.5+x)^2 小明房间的面积是10.8平方米,房间地面由120块相同的正方形地砖铺成,每块地砖的边长是多少?用方程! 1、0.5分之x-0.01分之0.2-0.3X=12(要计算过程)2、当X取何值时,式子x+3与7-3分之1X的值相等.(要计算过程)3、在梯形面积公式s=2分之1(a+6b)h中,已知b=8,h=10,s=60求A(要计算过程) 1/8比X=3/8比9/10 步骤明细些. 小明房间的面积为18平方米,房间地面由200块相同的正方形地砖铺成,每块地砖的边长是多少? 计算:①x-1分之x+2*x^2-4分之x^2-1②x^2-3x+2分之x^2+3x+2*3x+3分之2x-x^2③2ab分之a^2-b^2*a^2-ab-2b^2分之a^2-2ab④x+y分之12xy^2除以x^2-y^2分之4xy⑤(3b^2分之2a)^2除以(-b分之a)^3⑥2ab除以2ab分之1*2b分之a⑦2x分之x+ 计算(1-1/10)X(1-1/9)X(1-1/8)X……(1-1/2)的值是1/10还是1/20 小明的房间面积为10.8平方米,房间店面恰有120块正方形地砖铺成每块边长几米? (-3x-1)∧2 怎么算 计算:(-1.8*10^-10)/(9*10^8) 9.07千米等于()千米()米?17/4时=()时()分?2.38升=()升()毫升 x^2+1=0怎么算x^2+2的实数根有什么?怎么算? 十个八加九个九等于 请问2|9公里等于几千米? x-2/x≤0怎么算? 请问8分之1加9 分之1等于多少如何计算出来 17公里等于多少米啊?谢谢! 2^x-2^-X=0怎么算 送钱了,8加9等于 把六分之五的糖,平均分成五份,每份是五千克得几分之几,提出理解
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn