《高效程序员的45个习惯》 ----敏捷开发修炼之道
“Standing on shoulders of Giants” –“站在巨人的肩膀上”
创建时间:2014年9月20日星期六
创建作者:H
该书一共用了两天时间通读完,简单的翻看其中的道理,把其中有用的好的道理和哲理摘录和用自己的话说出来,引以为用。希望对看过该文的人有所帮助。
在写该书有关内容之前,我一直认为,看书是一种能够帮助人提升境界和阅历的最好方式之一。它不是直接的在教给你武功,更多的是在传授给你内功心法。金庸武侠里,天下武功极高的前辈不是那些招式很硬气的江湖大佬,而是内功高深之士。练武者,如果仅仅是练习一招一式,也仅仅是做一个武痴,而如果能够对内功有一定的造诣,往往能悟出其中的道理。
1、不管路走了多远,错了就要重新返回。
这句话相信做过软件开发的人都有感触。代码已经写了几百行或者几千行,突然程序在往下写就会出现重大的bug,怎么调试都有问题。坚持了半天没有解决,坚持了一天没有解决,坚持了三天还是没有解决,这时你就慌了,心想,妈的,这让哥如何是好?!重新设计架构和打码,不忍心,不重头开始吧问题又得不到解决。这种情况是开发者常见的情况,也是比较郁闷的时候,我就多次遇到过这种情况。比如我本科毕设做的控制板卡,画的一块pcb电路板,第一遍一共飞了4根线,凑凑合合算是画完了,以为就这样吧,四根线在外面连吧,无所谓的,拿给指导老师(霍老师)看,就是不行,很多问题,我现在依然记得这些问题是什么(虽然不画板子很久很久了),比如液晶的固定孔尺寸大小不对,电源电路滤波电容放的位置不对,不符合电容摆放的几个原则,电源线和底线没有加粗,走线不好,要交叉,减少走线长度等等,说了一些问题后回来重新画,第二遍拿过去以为可以了,但还是不行,就这样来来回回一共画了15遍,最后的效果,按我的老师话讲,还可以更好,那块板子我认为已经非常好了,没有飞一根线,所以你就知道其中花费的精力了。
前段时间做基于linux环境下的C的开发,也是遇到同样的问题,代码已经写了5、6百行了,编译运行就出现错误了,让我很是不解,最后还是经过调试发现了指针偏移出了问题,通过修改偏移量,才算解决了问题。避免了一场精神浩劫。
所以遇到这种情况,肯定前面的基础没有铺垫好,如果对后面的架构产生严重的影响,需要重新返工。
2、成为指导者
我们有时会发现自己在某些方面,比其他团队成员知道的更多,那要怎么对待这种新发现的“权威地位”呢,可以分享自己的知识,让身边的人变得更好。
好的想法不会因为被许多人了解而削弱,当我听到你的主意时,我得到了知识,你的主意也还是很棒。同样的道理,如果你用你的蜡烛点燃我的,我在得到光明的同时,也没有让你的周围更暗。好主意就像火,可以引领这个世界,同时不削弱自己。
与团队其他人一起共事是很好的学习机会。知识有一些很独特的属性。假设你给别人钱的话,最后你的钱会变少,而他们的财富会变多。但如果是去教育别人,那双方都可以获得更多的知识。
通过详细的解释自己知道的东西,可以使自己的理解更深入。当别人提出问题时,也可以发现不同的角度。也许可以发现一些新技巧----听到一个声音这样告诉自己:“我以前还没有这样思考过这个问题”。
与别人共事,激励他们变得更出色,同时可以提升团队的整体实力。遇到无法回答的问题时,说明这个领域的知识还不够完善,需要在这方面加强。
成为指导者---意味着要分享,而不是固守自己的知识,经验和体会。意味着要对别人的所学和工作感兴趣,同时愿意为团队增加价值。一切为了提高队友和你的能力和水平,而不是为了毁掉团队。
---Knowlodgegrows when given.
3、架构师必须要写代码
“只有一张蔬菜图无法做出好的咖喱饭”.
现在it行业最顶级的人就是架构师了,他是一座灯塔,指引着一切行动。然后架构师不可以只会纸上谈兵。必要的时候,也要能够加入团队,参与代码实现过程。这里我觉得更多的是一个团队负责人所起的作用。负责人要做的工作除了安排整个项目进度和每个人的分工,更重要的一点就是把握项目的进度和明确每个人的任务是什么。如果说一个项目主要是由团队的工程师来完成的话,那么负责人的身份首先应该是一个工程师。站在工程师的角度,要能够放到水里会游,放到路上就跑,有这样说干就干的能力和魄力。那就是要对整个项目的架构和思路有所了解和掌握。知道怎么去实施怎么写代码,这是非常重要的。负责人首先要是工程师。
4、增量式编程
不要把敲代码比作长途旅行。时时测试下自己的程序,保证没有问题。
5、不要用注释包裹你的代码
尝试用代码沟通。
终于又回到了编程这个问题,曾经有个大三的本科生说我写的代码很烂,这是大概的意识。对此,我没有理由。主要一个问题就是变量名,所以说不要企图用注释来解释你的代码,代码本本身就是最好的注释。
6、迭代式开发
迭代式开发是项目开发中的一个术语。意思就是当开发自己的程序时,要时时的调试和测试自己的模块是否是健康的、健壮性良好的、安全的代码。现在很多人都会写一两行代码,但严格意义来说,会写代码不意味就能够成为一个良好的程序员。你要扪心自问,自己的代码是否是健壮性良好的,安全的,可测试的代码。这是成为一名合格程序员的关键。
7、写能够具有反馈的代码
如何做到让自己的代码具有良好的测试性呢?
书上大致意思是:写具有反馈的代码
比如我写如下的代码:
int main()
{
Int rep = 0;
Char writebuff[10]= {“hello”};
FILE *fp =fopen(“1”,”r”);
If(fp == NULL)
{
Perror(“file failed”);
}
rep= fwrite(writebuff,sizeof(char),10,fp);
if(rep< 0)
{
Printf(“writefailed\n”);
exit(0);
}
printf(“write %d bytes\n”,rep);
return 0;
}
Rep就是一个反馈值,用来检测函数的返回
8、需求就像是流动着的油墨
所以我们在做开发的时候,一定要把所有的API留有一定的余地,不要全部做死,就好像我们说话办事不要那么的绝,给别人也给自己留个台阶
9、学会投资
这句话的意思和前面的差不多,就是要学会与人分享,不要把学到的知识固步自封,知识是没有任何价值的,今年的知识明年可能就陈旧了,学会利用知识才是最重要的。
10、态度决定一切
这句话我看过多次了,希望自己的努力能够有所收获。