代码外的任务很精彩 ---Software project survival guide 读书报告

 

Software project survival guide (软件项目生存指南) 是我在MSRA软件工程课程期间选读的书。书名起得很朴素,我们可以猜测到作者会讲些什么,以什么方式描述。它不像《人月神话》一样听起来很exciting, 在豆瓣中搜 《代码大全》,有1939条评论,搜《软件项目生存指南》,少于10条评论。瞬间我的脑海中奔出范伟在小品“卖拐”里的很搞的台词:同样是一个作者写的,咋差别就这么大呢?

或许很多人立马决定不看这本书,转而看其他的书了。我是没办法啊,来的晚,没得选了。但是看书的过程中,我越来越被作者认真、严谨的思路和风格吸引,书中的很多细节,都让我仿佛身临其境一样,体验软件工程的严谨。通篇之后,发现感受到了很多东西。

先谈谈作者。

Steve McConnell ,是Construx公司首席软件工程师,在公司里监督软件工程实施。他也是经典作品《代码大全》 、 《快速软件开发》的作者。他被公认为软件开发社区中的首要作者和发言人之一。1998年《软件开发》读者推选Steve McConnell为软件行业最有影响力的三个人之一,与Bill Gates、Linus Torvalds齐名。很给力吧。

那这本书讲了什么呢?

望文生义,”软件项目生存指南”,作者是在传授一些窍门,一些关键点,使得人们能够顺利地控制软件项目的发展。软件开发有很多要领和策略,包括规划、需求分析、质量保证、项目体系、测试等部分,每一处都有很多内涵值得推敲。读完此书后,我惊讶又惆怅的发现:开发一个软件项目,怎么有这么多繁琐的准备、巩固、验证、存档工作呢?

本书没有讲述如何写代码。初学者会问:软件开发,coding才是最重要的,你写一本软件工程的书,怎么就不教教读者如何高效地coding , 怎么不谈谈要成为百战不殆的程序员需要掌握哪些知识呢?

很不幸的,我就是这样一个初学者。虽然说写代码有3年了,但是都是个人任务,谈不上团队作业。一个人的程序,是很简单的;代码量很少,任务比较单一,自己可以把握全局,只要心中有沟壑,就能很快码完。期间碰到多少问题,花费了多少时间,自己都非常清楚,不必使用书面材料记录下来。所以大部分的精力都是放在如何coding上的。独自写程序,时间长了之后,居然产生了思维定势:软件开发,就是coding。

初学者是多么希望人的威力能有这么大:一个人就能完成Windows 8的开发,一个人就能写完魔兽争霸,一个人就能开发淘宝商城。这当然是天方夜谭。软件工程是一个团队的任务,是团队密切合作才能产生的结晶。看完《软件项目生存指南》之后,我已经可以毫不惊讶的得出一个结论:coding不是重点,任务部署才是王道。

先看一个来自邹欣老师的数据吧。(http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html

Senior Student是大四的学生的数据, SDE是微软职业软件工程师的数据。其中我们可以看到,“具体编码”只占了很小的比重。软件工程的确是这样的。如果程序员只把精力放在coding上,那么这个项目就像拼积木一样拼凑起来,或者是无头苍蝇乱飞,期间突然蹦出几个挫折,满盘谐散,项目就存活不了。

 

一个项目要成功,一定是很严谨的部署的。

软件项目分成很多模块,有准备阶段、实施阶段、完成阶段。每个模块又细分为很多小的工作。在准备阶段中,需要预准备、需求分析、质量保证、体系结构定制、二次准备。开发阶段,需要把项目分成几个里程碑,例如是分三次迭代,那么每次都要有局部阶段计划、细节设计、具体编码、测试、发布、总结。完成阶段,需要统计一些信息,记录项目开发历史等。

当然我只是把书的概要轻描淡写的讲了一下,在书中每一点都是一个章节,详细论述了为什么要这么做,如何做。我不想把它们展开了描述,否则的话我这篇读书报告就成了这本书的内容提要了。作者是结合自己多年的实战经验,并且参考了很多高手的心得体会写这本书的,所以书中每一处值得注意的地方都写得很详细,比如在需求分析的时候,作者列出了9点需要做的步骤;书中还有一个survival test,其中有33个内容,读者按照每个内容给自己的项目打分,初步评测软件项目存活的概率有多大。我每次看到这些细节的时候,都受益匪浅,感觉它就是一个宝典,在实战的每一处都给了一个模范,指引方向。

现在回归到宏观的主题:软件项目如何顺利完成?

就要比是人类生存分几个层次一样:首先解决基本生理需求,如食物,空气,水等,然后解决安全问题,如病,毒蛇危险等,然后是人文层次,如交朋友,恋爱,组成家庭等,最后是自我价值提升,是精神道德层次。只有底下的几个层次实现了,才能往上一个层次发展。在软件工程里,基本需求是团队要成立,要有资金、工作环境;然后要满足每个成员都有信心完成自己的任务;在下一个层次是信仰,就是每个成员都对这个项目都很认可;最后每个成员都觉得自己的任务很有意义,于是乎产生很有创造力的工作。

当一个软件项目团队觉得自己能够满足这些条件后,就可以展开部署工作了。项目有大有小,从几个月到几年,但是都可以按照上文提到的方式分成好几个阶段,每个阶段规划、完成之后,项目的成功率就上升了一成。每个阶段都有很多细节要注意。比如Release 的时候,什么时候才是适合release呢?这个涉及到对defects数目的估计问题。只有把defecs消灭的差不多的时候才可以发布。估计defects也有学问,比如可以采用统计的方法,事先故意标记n个defects在项目里面,然后把项目交个另一个组去test. 如果test到m个defects,其中有g个是之前标记过的,那么这个项目总共的defects 就可以认为是 m*n/g 个。

 

总之,软件工程不仅仅是coding,更重要的是有很多工作要规划、分析、审核。初学者往往会对此感到困惑。写到这里,我想起了金庸在《倚天屠龙记》的后记里面写道,“然而,张三丰见到张翠山自刎时的悲痛,谢逊听到张无忌死讯时的伤心,书中写得太也肤浅了,真实人生中不是这样的。因为那时候我还不明白。”  种种惊讶和困惑,都似乎是“因为那时候我还不明白”。等一年之后,重拾《软件项目生存指南》和这篇读书笔记,必定是另一番体会。

Jianxun Lian

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值