`
langyu
  • 浏览: 884419 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我所认识的软件开发原则:权衡

阅读更多
        当年还在学校时,有段时间校园内到处张贴着李开复的演讲通告,题目是《选择的艺术》。我还算比较纠结了,选择就选择,有什么艺术性可言。正所谓站的高度不一样,看待问题的角度也就不一样。当某天对生活有所感悟时,回头想想光这个演讲的题目就是至理之道呀。网上流传着一句话,人生好似一道永远做不完的选择题,每时每刻都在上演。每天敲代码的我们当然逃脱不了选择的命运。

         尽管至今都不清楚李的演讲内容,但我猜测关于选择他也可能会提到两点:分析和权衡。在系统开发中基本没有单选题,我们能做的就是分析需求,不断权衡来选择最合适的技术,最合适的人,最合适的实现。分析是基础,基于分析的权衡之策才是选择的真正内涵。分析方法有很多,好似眼花缭乱的武功架式,权衡就是那最基础最高深的内功。

        系统或模块的设计,是在可选择的实现中找到适当的一种方式。说起来简单,但往往事与愿违,从我的杯具经历中找条例子来说说吧。一个维护了近两年的系统中有个很重要的模块,用来确定销售可看到的最大可销售数据。我是中途加入,最初怎样设计我不清楚,但对于这种数据可变的预测模型来说,不专业的我一个人搞不定呀,老是周末救火,自己都快烧着了。有次被当时主导这个设计方案的经理追问的火大,就反问他当初为什么这样设计。他想了半天说好像是觉着给销售显示每天一模一样的数据看起来不专业。我勒个去,给数据加个随机数都可以解决的问题用得着两年多来以数据挖掘的眼光去维护么,我是隔三差五的被这个破模块给调教着。当然这里的问题源于设计的决策,历史问题呀。在这里可以总结出一点,系统设计中民主决策至关重要!

        系统在不断变更的需求中逐渐复杂起来,直到某天收拢不住的时候再慢慢地简化回归,循环往复。理想状态下,在设计之初对这些细节的实现做分析权衡,就不会有我和其它很多人的杯具发生,那应当是一个适度、有效的系统。但这也只是存在于理想状态中,为什么追求一个相对简单系统这么难呢?来试着分析下。一是与系统属性有关,本来就需求复杂的系统想简单太不容易。二是与系统设计的决策者有关,对系统的理解、自身知识和视野的限制等等都会有影响实现方式的选择。江湖传言道:好的架构师会让实现轻松很多。第三就不太好说,如果有个人觉着不复杂就不足以显示出系统和设计者的重要性,那么……。

        能把复杂事情做简单是能力的体现,在决策上也适用。从系统设计到具体实现中遇到的每步选择,能根据基础性的分析做合适的决策(当然合适的未必是最简单的)。这就牵涉到自身的知识,对目标的理解,可用的技术选择、可预见性问题等等方面的考虑。如果未来的每天数据是建立在对过去数据的趋势分析上,那么用数据挖掘来解决就很必要,如果仅仅是让数据看起来正常些,那还得考虑我能不能扛起这把牛刀呀。

        构想中这篇文章的名字应该是中庸之道,但仔细想来权衡这个词可能更容易被大家接受。中庸是主旨,运于不断权衡之中。Tradeoff – Tradeoff。



后记:本系列到此为至,连篇累牍以我的小经历和浅显的经验来总结下我所认识的几个原则,未及深层,可能让诸位失望。其实只需把这个系列各篇文章的题目挑出来,然后想想,就不用再往下看了,经验之谈,呵呵。

  


我所认识的软件开发原则:封装
我所认识的软件开发原则:简单表述
我所认识的软件开发原则:二八原则
我所认识的软件开发原则:减少等待时间


0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics