读《Joel On Software》有感

来源:互联网 发布:查淘宝信誉等级 编辑:程序博客网 时间:2024/05/16 08:16

前言:这个寒假,在回家之前,我无意中在铁道图书馆发现了这本书,看了一眼,感觉还不错,于是就把它带回了家中。以下是我在寒假里读这本书的所以感受和心得体会。 
首先,我强烈向大家推荐这本书,不仅是因为这本书的作者(Joel曾服务于Microsoft,主持过非常著名的Excel项目),更是本书中的知识值得每一个学软件的人好好看看。我第一次认识Joel是在他的门户网站上,www.joelonsoftware.com,他提出的Joel测试,用来评测团队是否优秀。他提出了12条测试方法,其中包括:你使用源控制机制了吗?你有一个跟踪故障的数据库吗?你每天都做一次连编吗?你在编写新代码前修复所有的故障信息吗?等等。关于这些问题,Joel都提出了很好的解决方案,同时也给出了为什么要这样做,以及不这样做的后果等等。他在他的网站上做过调查,如果符合他提出的要求就得一分,否则不得分,结果绝大多数的团队都只得一两分,这让我们确实难以相信。而Joel告诉我们,微软公司可以全天都运行在12分,满分!我想,这或许是为什么Windows都够如此“称霸”,Word,Excel能如此好用,以至于我们每个人都离不开它们了。 
这本书分为四个部分,第一部分面向的是开发人员,他强调开发人员一定要打好基础,要用机器思考问题的方式来思考问题,而不能只会用调用一些很高级的库函数,而不去管这些东西的性能。他举了一个很好的例子,字符串连接函数strcat。如果让你写这个函数,你会怎么写呢?相信大家都会这样写: 
Char * strcat(char* dst,char* src) 
{ 
      While(*dst++); 
      While(*dst++=*src++); 
  *dst=’/0’; 
Return dst; 
} 
很好,这样写可以,而且也很简洁。但是如果你接下来要写一些这样的代码: 
char bigString[1000]; 
Strcat(bigStirng,”I”); 
Strcat(bigString,”am”); 
Strcat(bigString,”student”); 
……………………(还要更多的字符串要追加) 
你想过这样的问题没有,随着你调用strcat次数的增多,每次调用strcat,你都要遍历一次原来的字符串,这不得不说是一个很严重的性能障碍,对于性能要求较高的场合更是不能容忍的。但是,你可能会想,我们平常就是这样写的啊,大家都这样写,没有什么不对的,但是,事实并非如此。其实你只要稍微改进一下,以字节的方式思考问题,你就可以轻松地得到如下高效的实现。 
Char * strcat(char* dst,char* src) 
{ 
      While(*dst++=*src++); 
      *dst=’/0’; 
Return dst-1;  //让return返回字符串的尾部指针。 
} 
/ 
char bigString[1000]; 
char* p=bigString; 
char* p=Strcat(p,”I”); 
p=Strcat(p,”am”); 
p=Strcat(p,”student”); 
呵呵,是不是代码改了一点点,性能马上改进了很多啊! 
本书的第二部分,面向的是对开发人员的管理。他提出的很多观点跟《人件》,《人月神话》都有异曲同工之妙。一定要给开发人员营造一个安静的工作环境,项目中人员超编的时候,往往会比人员少时更难按时完成。他还强调了开发过程中必须要做的有:制定进度表和规格说明书,还向我们介绍了如何建立BUG数据库,只要用Excel就行了。同时他还解释了为什么每天都要做连编工作,当面对难于管理的开发人员时只管去做就行了。第三部分讲的是Joel对常态问题的瑕想。讨论了网景公司的netscape浏览器的市场份额为什么会从90%下降到不到20%的原因。它犯了一个所有的大公司都有可能犯的最致使的错误――抛弃所有旧代码,从头重新实现所有浏览器的代码,三年的时间网景公司都没有任何新的代码分发给客户,这不得不说是一个悲哀。还有为什么公开源代码事业为什么会这么强大?对于那些有很强网络效应的的地方,比如即时消息通讯服务,当一些大公司站住脚后(如腾讯),其他公司想要再来分一点甜饼是那么得难啊。。。还有诸如Amazon等话题。第四部分是Joel.net稍多的一点评书。讲了微软是如何败北API之战的,以及为什么C#没有取得想要的成功等等。 
总之,这本书是Joel多年来从事软件行业的经验所得,其中不乏他的职业生涯过程中的教训,读来让人畅快不已。