《程序员修炼之道》读后有感
--------The Pragmatic Programmer From Journeyman to Master
Authors: Andrew Hunt & David Thomas
首先不得不说这是一本熔知识,哲理,幽默与实践与一炉的奇书,引导你领悟程序设计的真谛,只可惜我没能好好的理解透彻,更加难得可贵的是它是一本英文原著,却有着丰富的难词和背景信息注释。本书出版之后,两位作者都参与起草了敏捷运动的纲领性文件《敏捷宣言》,所以敏捷软件开发可以视为Pragmatic Programmer 的自然延续,如果想对敏捷开发有更加深刻的理解,建议各位一定好好读读此书。
本书首先给我们介绍了什么是注重实效,它是一门哲学,不仅仅体现在编程方面,涉及到对人,对事,对自己的态度和处世之道,紧接着作者尝试揭示注重实效的途径,结合自身体会给读者提供了若干意见,并且还介绍了一些基本工具。最后,具体到实际,当你编程时,当你开始某个项目之前,对于你应该做些什么,应该怎样开始你的项目,项目开发过程中应该注意什么,作者都提供了很好,很实际的建议。本书附录更是搜集罗列了若干专业协会和网络资源,以便感兴趣的读者进一步学习。
什么是注重实效的哲学,注重实效的程序员有着哪些特征?
一个最基本的特征:对你自己做的事情负责,正如‘猫把我的代码吃了‘一节那样,不要为过失和bug 寻找无力的借口。负责的另一个重要体现就是:不要容忍破窗。当你发现bug 时,一定要及早地修复,千万不要留在最后以至雪球越滚越大,引发其他一系列的问题。
另外一个重要特征:不畏惧改变,鼓动和接受改变,同时牢记最终的picture,知道何时停止与结束。安于现状最终就是那只被煮的青蛙,要接受和鼓动改变,记住最终的目的,这一点对于一个团队尤其重要。何谓恰到好处的软件?不要过于追求完美软件,一名注重实效的程序员一定要知道何时停止绘制理想的蓝图。
另外,他们都在不断地学习,阅读各种书籍,不论是技术的还是非技术的,专业的还是非专业的 。学习的同时他们不断地交流,博取众家之长。
注重实效的途径?
简单介绍几个非常重要的原则和习惯:
1, DRY—don’t repeat yourself
由于各种原因,代码的复制有时候难以避免,为了你的代码效率,千万不要自我复制。复制的代价可想而知,当你修改一处时,你必须得修改其他代码,这样的代码是难以管理的,更不幸的是你常常忘记修改。
2, 正交性/独立性
比如项目团队的正交性,设计的正交性,工具箱和库的正交性,代码编写的正交性,测试的正交性,文档的正交性,总之保持独立性,消除无关事物之间的相互影响,它能让你提高生产率,降低风险。
3, 可逆性
始终保持灵活的架构,用户的需求是不断改变的,所以请记住—不存在最后的决定,什么都是可能改变的,所以一定要保持代码和架构的灵活。
4, 估算
duration |
Quote estimate in |
1-15 days |
days |
3-8 weeks |
weeks |
8-30 weeks |
months |
30+ weeks |
Think hard before giving an estimate |
对软件使用的资源效率,项目开发的进度等进行估算,以免意外。那么,多么精确才算足够精确呢,不同的环境答案截然不同,恰到的单位非常重要,比如对时间的估算:
正确的使用计量单位能让你的估算更加容易理解,准确。
另外,记录并验证自己的估算水平,看看自己的估算水平是否在不断提高。
最后,具体到实际问题,当你在编程时,当你的项目开始之前,应该注意一些什么呢?
本书作者郑重提倡开始编程之前,请深思熟虑,不要靠巧合编程,所谓巧合编程,就是不加思索,接到任务开始coding,run 一下,正常运行了,甚至于自己都不清楚它为什么能运行,作者批注这是由于一系列的巧合和隐含的假设,所以建议读者深思熟虑之后再开始coding 。
关于测试,单元测试,集成测试,性能测试,可用性测试,回归测试等等,我们都知道测试无所不在,那么发现bug之时,还请保持现场,稍安勿躁,先重新bug,然后修复之,再按照原先步骤测试,看看是否真的修复了,我们需要的是从源头上修复bug,当然如果有需要,你还可以对测试代码进行测试,毕竟测试代码也是代码,也有bug的可能。
本书内容博大精深,非三言两语可以道尽,感兴趣的读者可以一阅,一定收获多多,不论是编程的技艺还是为人处世之道。
最后附上作者对于不断学习的一些建议:
1, learn at least one new language every year
2,read a technical book each quarter
3,read nontechnical books too
4,take classes
5,participate in local user groups
6,experiment with different environments
7,stay current
8,get wired
.
.
.
.
.