看了越狱,肯定对Scofield的精心设计所叹服。虽然越狱期间有很多意外,但是基本都在Scofield的设计之中,而这些意外也显示了他的临时应变能力。从一开始,用硬币去卸螺栓,用螺栓磨成内六角螺丝刀去卸抽水马桶。甚至包括出狱之后,衣服,信用卡都在计划之中。软件的复杂度绝对不比越狱的难度低,能从其中全身而退,必然需要精心的设计。
当然,像Scofield一样,不可能在屋子里完成所有设计。他需要了解情况,需要从各个方面去获得信息。他找来FoxRiver的地图,纹在了身上。了解了狱中所有人的背景和其中的关系。找了Nika为其带IC卡。
Socfield的哥哥被冤枉入狱(问题),为了救他的哥哥(目标),决心入狱并带其哥哥越狱(概要解决方案),想了一个从狱室冲水马桶进入地下管道,然后经过底下管道进入医务室,然后从医务室窗户,借助于电缆越狱(具体解决方案)。虽然最后越狱的解决方案有些变化,变成先去精神病院,然后从精神病院去医务室。
Scofield的设计是有可预见性的,这些可预见性是建立在大量获取信息的基础上,大量思考的基础上。想想软件开发中的设计又何尝不是如此。
和越狱相比,软件开发更难,首先软件开发问题本身确定就是一件很困难的事。人们往往已经开展了很长一段时间的工作,还不清楚真正的问题所在,客户不知道要做的软件是怎么样的,我们也不了解客户真正的需求。确定要解决的问题就是一个问题。但如果我么不确定问题,我们的目标就不明确,更别说思考解决方案了。
连接Scofield每个设计环节的都是实物,工具,人物的关系和技能。Scofield充分利用了它们。连接软件解决方案的往往是硬件,软件,网络,平台,框架,类库,API,开发人员的技能等。操作系统连接硬件和应用程序,连接网络和应用程序。中间件平台连接运行时环境和操作系统。应用程序连接用户,连接运行时环境。那根电缆是最后的出口,那么应用程序就是通向最终用户的出口。
我们要保证我们的设计最终是可靠的,成果是可预见的。首先就要像Scofield那样去了解环境信息,并思考所有环节的契合点。同样,在软件设计中,你也要考虑这些。比如你要做一个网站,你要确定目标(比如哪些人访问,多少人访问),然后考虑什么样的硬件,什么样的软件,选择用什么来开发(工具),预计有多少并发。你需要硬件系统设计,网络拓扑设计,软件架构设计,部署设计,组件设计,用户界面设计。考虑到访问量,你还需要做性能设计。所有这些设计,都是在你脑袋里面想的,你不能遗漏任何关键需求,否则你的设计就是脆弱的。
总结一下,如果要有使设计具备可预见性,你需要确定你的目标,你需要尽可能的想象可能碰到的问题,尽可能的了解信息(为了做设计决策)。然后综合考虑解决方案,保证设计的每个契合点可靠,保证其中的每一个环节是可靠的,尽可能实际去验证不确定的设计环节。最后,你需要不断的思考可能遇到的问题,把从狱室到墙外的路,在脑子里多思考几遍。
Keep no surprise!
Keep everything control!