梦幻一场?
2008-08-07
前两天与同学交流时,同学让我谈谈软件开发与测试的区别,我说撇开技术和工作细节不谈(除了时常辅助地写些Unit Test外,实在对测试不甚了解),二者对待同一问题的心态上本该不同——测试人员大抵悲观而怀疑,开发人员往往乐观而执着。作出这样的推断,一方面作为一名开发者,我既品尝过编写代码的巨大乐趣(源自创造和控制的本能自豪与成就),也都经历过面对蜂拥而至的缺陷与复杂决策的困惑,因此窃以为若非迫于生计,一个没有万丈雄心与执着信念的人很难把编程作为一项长久事业的。反观一个出色的测试者,他必然疑心重重,极力对项目作出种种悲观预期并证明之,也往往只有这样才能挖出隐藏在程序深处的缺陷。
当然,这里无意深入探讨开发与测试的异同,感兴趣的话dreamhead最近恰好有篇blog(http://dreamhead.blogbus.com/logs/24621087.html) 对此做了引申。然而无论认可与否,开发与测试种种看似矛盾的观念恰恰为软件项目的复杂与艰辛做了很好的诠释。在项目漫长而未知的周期中,总是充满太多的偶然与选择,站在不同维度的思考与权衡也很容易推出截然相反的判断,最终除了依赖时间的检验,在决策之初,无论是局内人还是旁观者都很难总揽全局、明辨是非。《梦断代码》就是这样一部记述了OSAF团队(http://chandlerproject.org/Projects/OSAFPeople) 心路历程与IT行业兴衰史的奇书。作者Scott Rosenberg凭借自己对OSAF团队那个野心勃勃曾立志超越Outlook的项目Chandler的三年潜心追随,与作为业内久负盛名的技术编辑对 IT行业数十年的洞察与积淀,用优美的文本及独到的视角向我们揭示了做软件为什么会那么难。
Chandler的产生始于一个简单而美好的愿景——让人们能随心所欲地切合数据,更灵活友善地管理纷繁而琐碎的个人信息。然而诚如译者后记,众多程序员以心血养育它,惜乎全不见成效,六年半时间,上百万美元,几十号顶尖高手,换来梦幻一场,时至今日Chandler仍无定型......
厌倦长叹,造化弄人!即便如OSAF团队这般衣食无忧、高手云集,在实现其“改变世界的梦想”时仍然受到现实的无情嘲弄,作为新来者,我们凭什么会认为自己与众不同?最让人难以接受的是OSAF团队从始至终一直在努力着,你很难断言究竟是什么过失使项目深陷其中,一切的发生既自然又出乎意外——就像一辆平稳行驶的火车,虽不曾出轨,但从上路的那一刻就已然驶上了一条不归路。资源不够?Mitchell Kapor可不是自私小气的人,6年半时间数百万美元的投资无不显示了其耐心。能力不足?能加入OSAF的队员就算不是功成名就的大师,在业内也算早已扬威立万的高手,何况开发Chandler项目的过程中他们还创建了诸如CVS,pyLucene等一批优秀的开源框架或工具,证明了自己的价值。决策错误?也许您会说Chandler不应该使用python,与其构建基于vxPython的桌面应用还不如构建基于浏览器的应用。但是OSAF团队的每项重要技术决策都是业内专家经过深思熟虑后的选择,当时谁又能料知数年后Ajax技术的风行会带动Web应用的普及?同样的关于项目延误、偏差的设问还能提出许多,但是每一项都没有足够的证据证明其是失败的根源,甚至有些因素在某种情形下对推进项目进展还起了积极作用。
这真是一种莫大的讽刺——在软件项目中,程序员与管理者都力求以一种理性的方式精确、缜密地安排任务并估量进度,然而现实中本就不存在这种凭空的假设,任何计划都会被意外变化无情地打乱,最后整个项目沦为令人沮丧的一拖再拖,不可收拾。所以对于软件项目而言,没有绝对正确的规范或一成不变的流程,有的只是失败的教训与从中汲取的经验。在我看来,一个成功的管理者一定是经验丰富的(反之不成立),因为他切身经历了众多不同类型亡羊补牢的改进过程,对相似项目的把握至少在方向上不会轻易地重蹈覆辙。
谈这些,主要源自我在大学时也曾组建并带领过学生开发团队,其间可以说既取得了出人意料的成功又经历了刻骨铭心的失败,就连毕设论文也专门针对软件工程专业四年的学习与团队管理方面的东西进行了反思,虽然多数观点不很被老师们认可,但至少个人以为这样的反思算得上对自己过去经历总结与理念的提升,比较有意义。《梦断代码》这本书是在4月份构思论文时从韩磊老师博客中获悉的,韩老师的翻译没有辜负我几个月的期盼,当然也不得不佩服作者Scott的巧妙构思与妙笔生花,在此一并感谢并极力推荐。