架构师每天都需要做选择题。什么选择?怎么做选择?架构师需要进行怎样的学习、培训和锻炼来进行正确的选择?读了本篇文章,你会对架构师为什么会需要权衡取舍以及妥协的能力有一个更加深刻的印象,并对于如何锻炼这个能力有一个初步的认识。

AD:2014WOT全球软件技术峰会北京站 课程视频发布

【51CTO独家特稿】在访问聚聚呀项目总监梁远华先生时,梁先生说到“权衡取舍”是一个架构师在项目中最难把握的。“一个产品会有很多的东西要做,什么是可做的,什么是重要的,什么是将来能做的,每天都做做选择题。”

架构师最怕程序员知道的十件事

eBay的杰出架构师Randy Shoup先生也表示“对权衡取舍方面有着出色的把控能力”是自己团队招聘架构师的一个重要要求。

你听说过软件架构师的职业培训中有一个叫做ATAM的课程么?ATAM,全称Architecture Tradeoff Analysis Method,意为架构权衡分析方法。虽然这样的培训并非必要,但是值得我们去学习了解一下。

 
ATAM概念流程图

没有一个人可以建造一个没有缺陷的架构。这个项目可能缺乏时间,缺乏金钱,缺乏人手,或者缺乏合适的技术。在项目从开始到进行中的每时每刻,架构师都需要对这些架构的“缺陷”有明确的了解。

在架构师的艺术气质篇我们提到了“基于需求考虑问题”和“基于系统考虑问题”的不同,并提到这中间会存在一些矛盾,需要架构师来做权衡决策。站在系统的角度上,架构师可能觉得自己手头的资源不够,他需要更多的时间、人以及新技术,但是项目经理和其他团队成员很可能会拒绝,而他们也有自己的理由。

所以Fred George先生提出了“短期滥用”的说法,即在系统能够承受的范围内做出一些妥协。在ATAM方法中,分析的思路是基于“情景”的:你需要提出各种可能的情景,然后来证明在每一个用户使用场景中,系统的哪一些内容是必要的、不可丢弃的——从而确定哪些部分是暂时可以不予考虑的。

到了这一步,便已经是一个技术性问题;但是这个问题的解决过程却是对架构师“软”技能的一个考验:即架构师有没有看到各方面诉求的差异,以及有没有意愿为了这些差异而做出妥协。

案例分析1

让我们看一个案例,这是现任微软Visual Studio Business Applications总经理潘正磊女士在博客上分享的一段经历:

“分享一件去年发生在上海Visual Studio团队和印度SQL Server团队之间的故事。两个团队邮件往来10个回合后仍无法在某个问题上达成一致,因此上海团队把我拉进了邮件讨论。于是我从头开始读邮件,读到第四封我大致了解到,分歧的根源在于,两个团队所沟通的,根本不是同一件事。

印度团队认为自己开发了一个特别棒的SQL Compact工具,能满足客户的重要需求,所以要求把这个功能加入Visual Studio 2010 Beta 1 (Visual Studio 2010 的第一个公开测试版);上海团队认为当时已接近测试版的发布日期,考虑到功能加入产品前必须遵循的一系列发布流程,时间上恐怕来不及了。之后的邮件里,印度团队一直强调这个功能是多么棒,应该让它在测试版中发布(也就是一个解决方案),却从没有解释他们要解决什么问题;上海团队则不断重申功能加入必须按流程来,可见他们之间的交流完全错位了。在这个典型的案例中,印度团队努力推动一个解决方案,却没有想清楚所要解决的问题为什么会对上海团队也非常重要。之后,我们发现的确有一个用户使用场景需要用到SQL Compact工具,于是我们询问新工具对这个使用场景有何帮助,是否能与其他新功能兼容 … …一旦我们能明确这个问题的本质,我们就不难找出双方都接受的解决方案,例如,立即加入第一个测试版,或稍后加入第二个测试版,甚至是加入Service Pack等等。”

如果说架构师的艺术气质体现在其把系统当做生命、站在系统本身的角度思考问题,那么架构师出于对客户、项目经理、开发者和测试者不同视角的理解而做出权衡妥协则充分体现了其职业性。上面潘女士提到的案例,是一个大型项目中的两个开发团队之间的理解冲突所引起的。

A:一个特别棒的功能应该被加入到产品发布中。

B:一个功能加入到产品发布中应该要谨慎并经过充分的审核。

这是“把一个功能加入到产品发布”从两个角度的解读,两个解读都有自己的道理。而在潘女士参与之前,双方的论点没有交集,“交流错位”了。而要实现权衡与妥协的前提,则是让B了解“这个功能是很棒”,并且让A了解“新功能必须在谨慎考量之后才能加入产品发布”。在潘女士的努力下,双方最后都理解了对方,并找到了都能接受的解决方案。而这个过程正是通过设计和描述“场景(scenario)”来推动的。

案例分析2

上面是开发工具项目中的一个小案例,下面让我们看看另一个案例。Amazon.com的CTO,Werner Vogels在08年的12月底发过一篇很有参考价值的博文:Eventually Consistent(最终一致),讨论对象是Amazon的S3,SimpleDB,EC2等大型云计算服务。Werner对这些服务的描述直达本质,一针见血:“这些服务需要在安全、伸缩性、可用性、性能以及性价比方面获得高分,同时必须维持全球上百位客户不间断的使用需求。”

文中讲述了不少深入的架构知识,对于广大程序员而言或许有些难以理解;但是有一句话是一句很直白的经验总结,充分的解释了“权衡妥协”的意思:“在一个理想的世界中,只存在唯一一个一致模型:在实施一次升级之后,所有观察者都能够看到这个升级。”言外之意就是,对于系统而言,在某一个地方或某一个层面发生的改变,势必将影响到系统的其他地方和层面,乃至整个系统。正因为系统的各个部分是互相关联的,因此为每一个变动考虑权衡(trade-off)是必要的,有意义的。

Werner提到的一个正面案例就是在90年代中期的时候,人们只知道可用性(availability)很重要,但对于追求可用性需要牺牲什么浑然不知。出于对可用性权衡的研究,加州大学的Eric Brewer教授提出了CAP理论,认为对于一个共享数据的系统而言,数据持续性、系统可用性、对网络划分的耐受性这三个属性(property)是不可调和的,任何时候只能同时达成两个。

虽然理论只是理论,但理论并非凭空而来,Eric的理论是总结了90年代大型互联网系统建设的经验研究成果。对于Amazon云计算服务的架构师而言,这些经验总结自然是无法忽视的;在知道了鱼和熊掌不可兼得的情况下,要深刻理解各个方面不同角度的诉求,并找出各方都可以接受妥协的制衡点,自然是必不可少的。

总结

  • 架构师:站在技术的山顶向前眺望
  • 微软首席架构师Ray Ozzie:架构师的前沿
  • 女性架构师优先?驾驭概念的技能是最高潜
  • 架构师修炼课程:透过问题看本质
  • 优美的系统与架构师的艺术气质

具体要如何制衡是一个很大的话题,甚至于每个系统都会有不同的情况。很多人在各个方面都做过很多研究,指导架构师们一些方向。对于架构师而言,仅仅有权衡妥协的意识还远远不够:这个意识只是前提之一,如果缺乏了对技术扎实的了解,那么这个意识则毫无意义。同时在分析权衡的过程中会有很多抽象的概念(这些概念可能还需要被量化),并且深入到系统的各个层面,因此架构师的抽象思维能力和看到问题本质的素质也是必须的。

抽象能力,深入本质,权衡意识——这三点都是十分珍贵的思想素质。这三种能力配合丰富而扎实的“硬”技能(技术)、合格的“软”技能(沟通)以及敏锐的眼光,无论在哪个行业都能成功。而由于架构师这个职业本身就是IT界的高级职业,这所有的能力和素质就都成了架构师的入门必备敲门砖。不过每个人的时间、精力以及天生素质都是不同的,本次介绍的架构师十大技能全部修炼是很困难的。想要成为架构师的程序员们,首先要自己权衡决策一下,看看自己应该如何修炼才能达到最好的效果——这也是权衡能力的一次练习吧。

本文为《架构师害怕程序员知道的十项技能》中的权衡取舍篇。

架构师:每天要在鱼和熊掌之间做选择相关推荐

  1. 一个资深Java架构师告诉你我们是如何将一个项目做烂的

    首先我想声明一个项目做烂不是你一个人挖坑就行的,这是一个很大的工程 需要团队协作 既然标题都用到了"烂"这个词,那什么才是烂呢? 在你的项目里,"烂"和&quo ...

  2. 【Java进阶营】一个资深Java架构师告诉你我们是如何将一个项目做烂的

    首先我想声明一个项目做烂不是你一个人挖坑就行的,这是一个很大的工程 需要团队协作 既然标题都用到了"烂"这个词,那什么才是烂呢? 在你的项目里,"烂"和&quo ...

  3. 架构师最怕程序员知道的十件事

    http://developer.51cto.com/developer/top10Architect/ 艺术气质 管控能力 权衡取舍 内力 沟通能力 多领域知识 问题解决大师 技术前瞻性 抽象思维 ...

  4. 收藏!架构师需要掌握的99条铁律

    经常有人问我:我是多少年某某行业工作经验,我现在是去创业公司做技术总监还是去大公司做架构师?我发现我都无法回答这个问题.因为多少年某某行业工作经验,并不能解析为具有怎样的知识结构和掌握的能力数量和深度 ...

  5. 架构师需要掌握的99条铁律

    经常有人问我:我是多少年某某行业工作经验,我现在是去创业公司做技术总监还是去大公司做架构师?我发现我都无法回答这个问题.因为多少年某某行业工作经验,并不能解析为具有怎样的知识结构和掌握的能力数量和深度 ...

  6. 顶级架构师应该知道的99件事

    经常有人问我,比如"我是 xx 年 xx 行业工作经验,我现在要去创业公司做技术总监还是去大公司做架构师?" 我发现我都无法回答这个问题.因为 XX 年 XX 行业工作经验,并不能 ...

  7. 程序员向架构师转型之路

    课程简介 具备若干年开发经验的普通开发人员往往面临个人发展的瓶颈,即如何从普通开发人员转型成高层次的系统架构师和技术管理人员.想成为一名架构师,应当具备全面的知识体系,需要进行系统的学习和实践,很多开 ...

  8. 阿里P9:架构师最根本的差距是思维!

    与智者为伍,足以睥睨天下. 架构的本质就是对系统进行有序化地重构,以满足当前业务的发展需求,同时能够实现快速扩展.而顶级业务架构师交付的解决方案既能拯救当下,提质增效,还能前瞻未来,护航发展. 向顶级 ...

  9. 如何从开发人员走向架构师

    很多架构师都是从好的开发人员逐步过渡而来的,但并非每个好的开发人员都希望成为架构师,而且他们并不是都适合做架构师.无论您是打算进行职业转型的开发 人员,还是寻找能承担体系结构设计责任的合适人选的经理, ...

最新文章

  1. java 对 mysql 最简配置
  2. 北京点击科技有限公司董事长兼总裁——王志东经典语录4
  3. QT的QDeadlineTimer类的使用
  4. 曾经觉得学习晦涩难懂的我是如何爱上linux的
  5. java null 转空_java 对象属性为 null 值转为 空串
  6. 什么是DQL、DML、DDL、DCL
  7. 全国计算机三级数据库技术选择题,全国计算机三级《数据库技术》选择题训练2016...
  8. JSONModel - 字符串换转实体类
  9. 华为手机harmonyos系统,华为王成录:手机销量仍在增长 未来会是HarmonyOS系统的中心...
  10. spring MVC 项目 WEB-INF下的jsp不能加载css文件
  11. return error怎么定义_这一次搞懂Spring自定义标签以及注解解析原理
  12. 开源框架相关面试问题-retrofit网络框架面试问题讲解
  13. 大型网站首页执行时间0.3秒,性能算好还是算坏?
  14. php查询mysql表里的数据_PHP连接Mysql数据库读取表格数据
  15. 消防物联网,为逆行英雄守住第一道生命线
  16. 数据库SQL优化大总结之 百万级数据库优化方案
  17. 关于msp430系列单片机的一些入门心得(新手向)
  18. mysql 索引间隙锁_关于mysql innodb间隙锁的一些思考
  19. Overleaf——在线 LaTeX 编辑器
  20. oracle 转义 039,案例:Oracle报错ORA-19583 ORA-27206 ORA-06512

热门文章

  1. 雷诺手表怎么去换表带?手表更换表带方法
  2. multinorm r语言_MLAPP机器学习的概率知识总结_MLAPP pdf_MLAPP下载
  3. 计算机文字格式类型,电脑便签上的文字怎么以文件形式发送
  4. 细节中的崔凤清和李路阳
  5. 腾讯应用宝上传应用步骤
  6. 客户端连接不上服务端(Redis)
  7. 飞猪一个有趣的bug。
  8. Opencv 图像处理-Contours函数提取轮廓及感兴趣区域ROI的必用且实用操作技巧-(涵盖Contours的一切使用基础,附代码段)
  9. iOS14 正式版系统升级前必读 注意事项
  10. Lambda表达式用法