架构是把握问题的关键:平衡设计

昨天有幸邀请到周爱民先生在懒懒交流会上分享《架构,框架和库》,很精彩睿智的讲演,受益颇多。其中提到对架构的一个描述:

架构是把握问题的关键,平衡设计。

很认可。下面是我的理解:

  1. 什么是把握?在武术届有一种器械训练方式是“抖大杆”:一条白蜡木做的大杆,杆长超过两米,训练者一手把杆,一手握住杆的底部,全身配合双手,将杆抖出各种样式。把和握是两个不同的动作,把的是方向,握的是基底。把握是一种掌控,武林高手能让大杆随心而动,随意而行,这就是把握。把握可以以把为主,以握为辅,随心所欲,花样百出。把握亦可以握为主,以把为辅,以气驭剑,天马行空。
  2. 什么是问题?物理学家狄拉克有一个典故。有一天他到一个学校去演讲,讲完以后,主持人说:“大家有什么问题?可以问狄拉克教授。” 这时,有一个学生站起来说:“刚才你在黑板上写的那个方程式我不懂。” 狄拉克没有回答,好长时间都没有回答。于是主持人就问:“狄拉克教授,您可不可以回答这个问题呢?” 狄拉克说:“那不是一个问题。” 狄拉克为何拒绝回答?因为提问者看不懂方程式只是现象,而不是问题。什么是问题这个问题,推荐阅读杰拉尔德·温伯格的经典著作《你的灯还亮着吗 — 发现问题的真正所在》。
  3. 什么是关键?关键的原始释义是门闩。关是关闭,把门合上,键指机械零件。放到现代,关键就是门上的锁。如何找出未知问题的关键所在?资深的盗墓者,遭遇一个前所未有的机关时,首先是观察,尽可能的获取信息。其次是分析,尽可能推断机关背后的机理。紧接着可能会联想和尝试,用已有的破解技巧,去尝试解决当前问题。反复以上步骤,不懈努力,等机关破解的那一刹那,盗墓者也就明白了该机关的关键所在。
  4. 什么是平衡?Douglas 说,万事皆权衡。架构的好坏,是一个适不适合场景的问题。无论是类库的设计,还是某一行代码的书写方式,好坏与否,都要看这个类库或这行代码,使用在什么场景下。Google 首页可以省去 html 结束符,但并不意味着你的博客这么干也是妥当的。在前端界,table 布局也不是万恶不赦的。如果你的用户群里还有不少用户在使用非常旧式的浏览器,table 布局就是最合适的方式。

为了进一步阐释,下面举一个实例。

很喜欢看书,好几年前开始,喜欢从网络上收集各种书籍:

(几年前的详细分类已丢失,上面仅是模拟能想起来的几个类别)

按照上面的书籍整理方式,很快发现一个问题:有些书籍,会同时属于多个类别。比如《红楼梦》,放在“古典文学”里好呢,还是放在“精品小说”里好?很明显,这涉及图书管理学的经典问题:如果做一个合理有效的分类?

于是开始尝试从各种维度来重新分类,甚至跑到大型图书馆里去借鉴图书馆的分类方式。但很快我就崩溃了:中国文学 – 古典文学 – 小说 – 清朝 – 红楼梦。我不是图书管理员,我就是想收集点自己喜欢看的书而已。这种完美主义者的“科学”分类法立刻被我抛弃。

后来很长一段时间,我的书籍分类一直很混沌。经常隔上几个月,就要大动干戈全部调整一次,让自己追求“完美”的心灵临时安顿。

很漫长的一段时间,很纠结的一段折腾。

一直到大约一年前,忘了当时是什么触因,突然就找到了一个让自己非常满意的分类。在给出这个分类前,我们先“马后炮”一把,尝试从架构角度来进行分析:

这个例子中,什么是问题?表面上看,是如何找到一个合理的图书分类方式。但这真的是问题吗?显然不是。大型图书馆的书目,绝对是合理的。那问题在什么地方?稍一分析不难发现,问题不在于书目分类是否合理,而在于是否适合我的习惯,是否能满足我的需求。(初始的分类问题被转换成了需求问题,有关问题转换方面的话题,推荐阅读温伯格的书籍)

那么,什么是我的需求?我为何要对书籍进行分类?仔细思考,我将需求整理为:

  1. 新下载的书籍有个固定的目录存放。能让自己想看时,快速找到。
  2. 正在看的书籍能立马找到。
  3. 已看完的书籍要归档,以后能比较方便的查阅。

从上面的描述中,可看出我的需求有时间线。我的需求是根据阅读书籍的时间来组织的!“时间”就是我寻找了很久的书目分类的维度!因此时间维度就是该信息架构问题的关键!这样,立刻就有了看似简单但能很好解决问题的分类方式:

一切就这么简单!按照这个方式重新整理书目后,立刻心旷神怡。

当然,这里也涉及到权衡:

  1. 新下载的书籍太多怎么办?需要分类吗?
  2. 已看完的书籍,归档时需要分类吗?

上面两个问题,不同的人有不同的方案。我的选择是:

  1. 新下载的书籍不再分类,全部混杂放在一起。好处是能杜绝自己盲目收集书籍的“恶习”,并规定新下载的书籍不能超过 10 本。第 11 本入库时,必须删掉前 10 本中的一本。
  2. 已看完的书籍会分类,但只做一级大分类,比如:小说/诗歌/摄影。并规定从“正在读”移动到“已阅读”时,要非常谨慎,必须有理由说服自己有保存价值时才归档,否则删无赦。这样,一年下来,真正有价值归档的书籍并不多。

这就是权衡!

最后再给一个案例,我的 Google Reader 订阅项分类:

必读 — 符合自己脾胃的精品订阅源
闲读 — 可看可不看的订阅源
待通读 — 新发现的一些相见恨晚的博客,想翻阅其所有文章
更新 — 软件更新提示等订阅源

自从采用这个分类后,信息筛选的时间大大减少,有效阅读的时间增加了很多。注意:这个分类适合我,但未必适合你。适合你的分类,可以从自己的真正需求出发,仔细的思考和分析,通过探索和实践去获得。

上面说的虽然是很小的生活中的分类问题,但往大里说就是信息架构,再类推开去,就是软件架构。道理是相通的。架构是个过程,是思考、实践,再次思考、再次实践的过程。在这过程中,下面三个问题经常遇到:

  1. 问题是什么?
  2. 什么是问题的关键?
  3. 在当前应用场景下,如何设计,如何权衡?

架构就是在特定应用场景下,不断追问和寻求以上问题的过程。在这过程中,你的所有决策的集合,就是架构。

时间: 2024-09-13 13:37:46

架构是把握问题的关键:平衡设计的相关文章

张振伦:可扩展应用架构是高并发的关键

文章讲的是张振伦:可扩展应用架构是高并发的关键,2012年春节,铁道部推出12306网站,进行网络实名购票.每一个返乡人原以为能买着一张回家的火车票,但结果还是大失所望.7天内,12306网站访问用户已占全球互联网用户的0.902%,每天点击量高达10亿人次;系统一度支撑不住如此庞大的访问量而陷入崩溃.针对12306的责难也不绝于耳. 对此,中国铁路客户服务中心透露,目前,铁道部已启动了新一代客票系统的规划和设计.考虑采用云计算架构,对现有的客票系统进行全面的优化和改造.IT168企业计算群组特

成为架构师的7个关键思考、习惯和经验

工作了挺久,发现有个挺有意思的现象,从程序员.高级程序员,到现在挂着架构师.专家之类的头衔,伴随着技术和能力的提高,想不明白的事情反而越来越多了.这些疑问有些来自于跟小伙伴交流,有些是我的自问自答,有些到现在也想不清楚,这篇文章就来写一写这些问题. 如何更高效的学习? 很多新人程序员一开始在学习上找不到方向,但我想在渡过了一段时间的新手期之后这类问题大多都会变得不再那么明显,工作的方向也会逐渐变得清晰起来. 但是没过多久,能了解到的资料就开始超过每天学习的能力,像是买了没看的书.收藏没读的贴.m

运营级WLAN网络架构及关键技术探讨

本文讲的是 :  运营级WLAN网络架构及关键技术探讨  , 随着移动互联网时代的来临,无线数据流量呈现爆发式增长,国内三大运营商越来越多的依靠WLAN来承载这些无线数据流量,分担3G网络的压力.2011年中国电信启动"宽带中国翼起来",全力打造"无线中国",预计2012年WLAN热点将达100万个.中国移动计划在三年内将全国范围内的WLAN热点数量增加至100万个.中国联通也计划在2012年底覆盖至少4万座单体楼宇,并启动了数十万部WLAN设备的招标.这样大规模W

Allen Brown:企业架构是云计算项目成功的关键要素

"企业架构是云计算项目成功的关键要素,是一种广泛被采用的开放的标准."11月4日,由金蝶承办的的"2012中国管理·全球论坛"上,开放群组总裁兼首席执行官Allen Brown先生做了主题为"云时代的企业架构"的演讲,讲述了企业架构在云计算项目中的重要性. "开放群组是一个全球性的协会,通过开放标准,促进商业目标的达成." Allen Brown先生指出,"我们的愿景是无边界.信息流.目前,福布斯全球50强当中,有8

三层架构的学习

为什么要使用三层架构 对于一个简单的应用程序来说,代码量不是很多的情况下,一层结构或二层结构开发完全够用,没有必要将其复杂化,如果对一个复杂的大型系统,设计为一层结构或二层结构开发,那么这样的设计存在很严重缺陷.下面会具体介绍,分层开发其实是为大型系统服务的.在开发过程中,初级程序人员出现相似的功能经常复制代码,那么同样的代码写那么多次,不但使程序变得冗长,更不利于维护,一个小小的修改或许会涉及很多页面,经常导致异常的产生使程序不能正常运行.最主要的面向对象的思想没有得到丝毫的体现,打着面向对象

从 Spring Cloud 开始,聊聊微服务架构实践之路

本文讲的是从 Spring Cloud 开始,聊聊微服务架构实践之路[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. 系统架构的演进过程 单一应用架构(第一代架构) 这是平台最开始的情况,当时流量小,为了节约成本,并将所有应用都打包放到一个应用里面,采用的架构为 .NET SQL Server: 表示层:位于最外层(最上层),最接近用户.用于显示数

干掉Intel、AMD?国产处理器架构都有哪些?

6月底公布的最新一期TOP500超算排行榜中,中国的神威·太湖之光低调地挤下了六连霸的同胞兄弟天河2号,成为首款理论性能达到10亿亿次的超算,将 天河2号之前保持的性能往前推进了一个量级,晋级新的世界第一超算.伴随着太湖之光的其实不仅仅是第一名的荣誉,这次TOP500上中国上榜的超算数量首 次超过了以往的霸主美国,超算应用也实现了三十年来的突破,更重要的是太湖之光计算机使用的是国产处理器,不再是Intel的Xeon处理器.国产处理器"取代"Intel.AMD等国际公司的处理器一直是国家

架构分解过程模型和多维度多层次分解模型

如果期望有一个权威统一的标准定义,那答案是没有,目前存在多种软件架构的定义,可以说百花齐放,百家争鸣.其中 http://www.aliyun.com/zixun/aggregation/14477.html">IEEE1471-2000 的定义是这样的:系统的架构是系统组件的基本组织形式,它们之间的关系以及和环境之间的关系,以及指导其设计和演化的原则.该定义中的系统组件可以理解为架构元素,根据涉及到的系统范围和层次,架构元素可以是子系统.模块.类等等.从架构设计的动态角度出发,我们可以这

2016,我们一起追过的架构。中生代邀您一起构建2017!

01属性派 任何系统必有其自身的架构属性. An architecture-a system's attributes-and what an architect produces-a setof documents-definitely are not the same thing. An architectural description (AD) is a set of artifacts that documents anarchitecture in a way its stakeho