`

可预见性(Prodictability)——设计之美

阅读更多

     看了越狱,肯定对Scofield的精心设计所叹服。虽然越狱期间有很多意外,但是基本都在Scofield的设计之中,而这些意外也显示了他的临时应变能力。从一开始,用硬币去卸螺栓,用螺栓磨成内六角螺丝刀去卸抽水马桶。甚至包括出狱之后,衣服,信用卡都在计划之中。软件的复杂度绝对不比越狱的难度低,能从其中全身而退,必然需要精心的设计。

 

     当然,像Scofield一样,不可能在屋子里完成所有设计。他需要了解情况,需要从各个方面去获得信息。他找来FoxRiver的地图,纹在了身上。了解了狱中所有人的背景和其中的关系。找了Nika为其带IC卡。

 

     Socfield的哥哥被冤枉入狱(问题),为了救他的哥哥(目标),决心入狱并带其哥哥越狱(概要解决方案),想了一个从狱室冲水马桶进入地下管道,然后经过底下管道进入医务室,然后从医务室窗户,借助于电缆越狱(具体解决方案)。虽然最后越狱的解决方案有些变化,变成先去精神病院,然后从精神病院去医务室。

 

     Scofield的设计是有可预见性的,这些可预见性是建立在大量获取信息的基础上,大量思考的基础上。想想软件开发中的设计又何尝不是如此。

 

     和越狱相比,软件开发更难,首先软件开发问题本身确定就是一件很困难的事。人们往往已经开展了很长一段时间的工作,还不清楚真正的问题所在,客户不知道要做的软件是怎么样的,我们也不了解客户真正的需求。确定要解决的问题就是一个问题。但如果我么不确定问题,我们的目标就不明确,更别说思考解决方案了。

 

     连接Scofield每个设计环节的都是实物,工具,人物的关系和技能。Scofield充分利用了它们。连接软件解决方案的往往是硬件,软件,网络,平台,框架,类库,API,开发人员的技能等。操作系统连接硬件和应用程序,连接网络和应用程序。中间件平台连接运行时环境和操作系统。应用程序连接用户,连接运行时环境。那根电缆是最后的出口,那么应用程序就是通向最终用户的出口。

 

     我们要保证我们的设计最终是可靠的,成果是可预见的。首先就要像Scofield那样去了解环境信息,并思考所有环节的契合点。同样,在软件设计中,你也要考虑这些。比如你要做一个网站,你要确定目标(比如哪些人访问,多少人访问),然后考虑什么样的硬件,什么样的软件,选择用什么来开发(工具),预计有多少并发。你需要硬件系统设计,网络拓扑设计,软件架构设计,部署设计,组件设计,用户界面设计。考虑到访问量,你还需要做性能设计。所有这些设计,都是在你脑袋里面想的,你不能遗漏任何关键需求,否则你的设计就是脆弱的。

 

     总结一下,如果要有使设计具备可预见性,你需要确定你的目标,你需要尽可能的想象可能碰到的问题,尽可能的了解信息(为了做设计决策)。然后综合考虑解决方案,保证设计的每个契合点可靠,保证其中的每一个环节是可靠的,尽可能实际去验证不确定的设计环节。最后,你需要不断的思考可能遇到的问题,把从狱室到墙外的路,在脑子里多思考几遍。

 

     Keep no surprise!

     Keep everything control!

2
1
分享到:
评论
4 楼 gurudk 2009-03-04  
liujunsong 写道

现在软件开发的最核心问题是:
开发公司不知道自己在干啥
不知道自己该干啥
不知道该怎么去干
于是大家上去瞎干一气,最后关门大吉.
你不是神啊,怎么可能啥都会,啥都知道呢.


Just keep learning and thinking!
3 楼 liujunsong 2009-03-04  
现在软件开发的最核心问题是:
开发公司不知道自己在干啥
不知道自己该干啥
不知道该怎么去干
于是大家上去瞎干一气,最后关门大吉.
你不是神啊,怎么可能啥都会,啥都知道呢.
2 楼 慕容轩 2009-03-02  
剖析的很精辟,学习
1 楼 comsci 2009-03-02  
不错。。。。

相关推荐

Global site tag (gtag.js) - Google Analytics