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

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

  1. 软件项目管理考点整理(Software Project Management)

    前言 由于是全英文考试,以下笔记是中英文混合~~ 一.Project Management Overview (1) project定义: A project is a temporary endea ...

  2. string也可以很精彩

    //======================================================================== //TITLE: //    string也可以很 ...

  3. Linux那些事儿之我是U盘(5)外面的世界很精彩

    看代码之前,我曾经认真的思考过这么一个问题,我需要关注的仅仅是drivers/usb/storage/目录下面那相关的3000多行代码吗?就是这样几个文件就能让一个个不同的U盘在Linux下面工作起来 ...

  4. 二零一五,外面的世界很精彩

    [二零一五,我大四了]     走到"二"的年纪里,也是经历了一个又一个的终结点.六年级.初三.高三,时光荏苒,这一年,我大四了,又来到了这样一个终结点. 四年之前,刚刚来到廊坊师 ...

  5. 《Linux命令行大全》:1-6:重定向和管道(很精彩)

    <Linux命令行大全>:1-6:重定向和管道(很精彩) https://www.toutiao.com/i6937081007581430303/?tt_from=weixin& ...

  6. idea的代码文本距离左边很远问题解决

    idea的代码文本距离左边很远问题解决 刚才看了篇文章,是关于idea 2021.1版本,看起来挺好,然后忍不住尝试了一下,但是不知道做了什么操作,突然代码的左边距离行号非常远,然后找了很多文章,也没 ...

  7. SQL server 语句运行很快,放到代码编译器中就很慢

    问题描述: SQL server 语句在navicate 中运行不到一秒,但是运行这个SQL语句的接口就需要十几秒,几十秒,严重影响用户使用. 解决思路: SQL语句是没有问题的,因为在navicat ...

  8. “使能”数字化 “浙”里很精彩

    ▼ 更多精彩推荐,请关注我们 ▼ 浙江省"十万企业上云"进行得如火如荼.该行动计划旨在以云计算技术和平台为支撑,切实转变经济发展方式,降低企业信息系统构建成本,提高企业信息化应用水 ...

  9. Ubuntu编译代码后变得很卡解决方案

    Ubuntu编译代码后变得很卡解决方案: 打开终端,执行如下命令 sync //进行硬盘写入 echo 3 > /proc/sys/vm/drop_caches //回收内存和缓存

最新文章

  1. aop point 只能获取到map嘛_面试被问了几百遍的 IoC 和 AOP ,还在傻傻搞不清楚?...
  2. springboot集成freemarker 配置application.properties详解
  3. 转载 什么叫真学习 什么叫假学习
  4. 掌握shell应用,Linux任你行走
  5. Virtual Machine--Vmware(2)
  6. netty4.0.x源码分析—bootstrap
  7. spring-session使用教程(一):redis共享session
  8. mysql linux 中文乱码_解决MySQL中文乱码的问题
  9. Java网络01基本网络概念
  10. java dib文件 加位图文件头_位图(bmp)文件格式分析
  11. sql面试题:分组查询和组函数的练习
  12. php width,canvas定义width、height的正确用法
  13. 大数据学习笔记49:Flume Sinks(Flume接收器)
  14. 图的表示:如何存储微博、微信等社交网络中的好友关系
  15. SaaS应用“正益工作”发布,为大中型企业轻松构建移动门户
  16. ubuntu下从软件中心安装软件时的软件缓存目录
  17. python找出列表间隐含的关联关系以及重复模式
  18. Centos7做回收站功能,防止误删除
  19. 推荐系统三十六式(刑无刀)学习笔记(二)
  20. windows电脑桌面不见了

热门文章

  1. WordPress 5.9.2 官方版发布
  2. R数据分析:交叉滞后模型基础与实例解析
  3. SUN韩F注册指南[新版]
  4. 多重采样和超级采样哪个流畅_蒙特卡洛方法-多重采样
  5. 小学计算机科学与技术,试论小学计算机科学与技术课改分析
  6. Windows7中出现的KERNELBASE.dll错误的解决方法
  7. 成为数据架构的必经之路
  8. HTML5期末大作业 基于HTML+CSS+JavaScript学校校园
  9. 百度杀毒软件评测kuder13.4.26真实自己评测
  10. linux下ipvsadm命令,命令手册:Linux中的ipvsadm命令