xjb 发表于 2010-6-1 16:30:46

Practices of Professional Programmer

转自:http://gurudk.javaeye.com/blog/364703自以为是个专业程序员,前段时间我也在Manifesto of Software Craftsmanship (软件工艺宣言) 上也签了名。作为对宣言的实践,总结一下专业程序员的实践,不敢称最佳,姑且就叫专业程序员实践好了。大家如果有好的想法和好的做法,可以和我联系或者留言,我一起补充上去,按照宣言的第三条,让我们一起共同建好这个Professional Programmer Community。
http://www.watch-life.net/images/2010/06/71afdccf-3410-3374-96ed-dfa0d9571d53.jpg
       如果你认为你是一个专业的程序员,去签名吧,去承担一名专业程序员该承担的责任。我觉得最为一名专业程序员,有一些基本的要求,是我所说的专业程序员的职业素养。
http://www.watch-life.net/images/2010/06/a7c9536a-07bd-3e03-badd-d0a5d080d347.jpg
   这些我认为是专业程序员共同的价值观。
   作为一名专业程序员,我觉得他的核心竞争力主要表现在三个方面:
1)学习能力 :学如逆水行舟,不进则退,做软件尤甚。 2)思考能力 :思考是人的特有能力,对程序员的工作,我觉得2/3时间是思考,1/3是敲键盘或其它。3)解决问题能力 :这是能力的体现方式,是综合能力的表现。
下面我结合自己的经验,从学习,思考,解决问题,工作等方面阐述一下专业程序员的实践。以后有时间,我对每一条用一致的方式来解释一下,目前只是链接到我以前写的一些文章。
1)学习实践(Learning Practices)[*]LP1:系统化的知识应该从书上获取。[*]LP2:应用RSS订阅,了解最新信息。(iGoogle,Google Reader)[*]LP3:使用del书签(firefox的附加组件),索引网页。[*]LP4:写blog,养成总结的习惯。[*]LP5:交流,向别人解释你学到的东西。[*]LP6:学好英语,它是通向最新技术的窗户,最起码要熟练阅读。[*]LP7:使用脑图整理所学的东西。[*]LP8:使用英文关键字来搜索技术资料。[*]LP9:向有经验的人请教。[*]LP10:快速实践,快速反馈,Do it now![*]LP11:使用mybase记录片段信息。[*]LP12:使用eMule搜索英文原版书。[*]LP13:进入陌生领域,首先梳理这个领域的知识结构。[*]LP14:看书先看目录,索引书的内容,等需要了再去看。[*]LP15:设立目标,学习要以完成一篇文章或一个小软件作为结尾。[*]LP16:Big picture,理解一个系统,要以big picture开始。[*]LP17:学习背后本质的东西,比如web编程,熟悉http协议。2)思考实践(Thinking Practices)
[*]TP1:反思,使用鱼骨图查找根本原因。[*]TP2:随时记录思考的成果,小便签本。[*]TP3:MECE( Mutually Exclusive Collectively Exhaustive ),没有重复,没有遗漏.[*]TP4:思考无关事物之间的联系,锻炼抽象思维能力(足球与软件开发)[*]TP5:换位思考,站在别人的角度思考问题。[*]TP6:使用拉而不是推的方法。(团队决策)[*]TP7:考虑间接的方法。(代理,调停者,ESB)[*]TP8:运用想象力。[*]TP9:多角度思考问题, 开辟新视角。[*]TP10:突破思维定势,没有什么限制。[*]TP11:逆向思维方法,认清本质。(吃饭)[*]TP12:假设思考方法。[*]TP13:零基准思考。[*]TP14:批判思考,强制思考问题的另一面。[*]TP15:用图表达思考的结果。(关于连续思考的结果)3)解决问题实践(Solving Practices)
   解决问题的步骤:[*]问题定义[*]理解问题[*]查找资料,思考,生成备选的解决方案[*]选择最合适的解决方案[*]实施解决方案[*]验证正确性[*]得出结论,总结   解决问题实践:[*]SPP1:信心,Impossible is Nothing。[*]SPP2:不断问自己问题,问题究竟是什么,本质是什么。[*]SPP3:问题不明确时,重要的是确定问题,而不是试图解决问题。[*]SPP4:使用类比法,考虑同构问题,考虑别人是如何解决问题的。[*]SPP5:使用分治法,大事化小,小事化了。[*]SPP6:试误法,不但尝试,缩小解空间。[*]SPP7:爬山法。[*]SPP8:循序渐进法,先解决问题域中的简单问题,获取经验以解决复杂问题。[*]SPP9:及时向别人求助。[*]SPP10:了解谁可以解决问题。[*]SPP11:了解学习什么东西可以解决问题。[*]SPP12:尽可能了解问题的背景。[*]SPP13:观察别人是如何解决问题的。[*]SPP14:先放松一下,再回到问题。[*]SPP15:使用脑图或看板可视化问题相关所有信息(看看PrisonBreak里Scofield和alex如何思考的)[*]SPP16:坚持相信存在多种解决方案,不要相信“不能”,“一定”4)工作实践(Working Practices)[*]WP1:编写代码前先编写伪代码。[*]WP2:编写完代码自己仔细看两遍以上。[*]WP3:编写单元测试并一直维护它。[*]WP4:坚持DRY原则。[*]WP5:记录你的开发过程,以便反思改进和分享。[*]WP6:向主管和负责人陈述以确认你对工作任务的理解,以免走偏。[*]WP7:为他人着想,做到极致可理解,包括你的代码,文档和沟通。[*]WP8:为自己提供验收测试checklist,自己验收测试。[*]WP9:对团队中的问题,保持关注,及时沟通。[*]WP10:为自己的工作任务评估时间,了解自己的生产率。[*]WP11:学习面向对象原则和设计模式。[*]WP12:防卫性编程,保持警觉。[*]WP13:构想问题的解决过程,在脑子里跑通之后再开始编码。[*]WP14:调试代码时,隔离问题区域,以缩小问题解决范围。[*]WP15:为琐碎任务编写checklist,将任务从人脑中移到电脑或纸上。[*]WP16:每天早上花10分钟,思考和规划你今天做的工作。5)其它(Other Practices)[*]OP1:使用google图片搜索,搜索素材。[*]OP2:使用影响分析表格进行分析。[*]OP3:学会表达和沟通, 成长之路所必需。[*]OP4:要有长远规划和目标。
   最后,我说一下心态,一个程序员应该有一个开放的心态,随时接受新的东西,不断尝试。使好的东西形成自己的习惯,不好的东西就摈弃掉。不过作为程序员,有时候都是很固执的,我也一样。脑图这个东西,很多同事推荐我一年之后我才开始使用,用了之后感觉相见恨晚。我目前写文章,整理思路,整理知识都是用它,已经离不开了。
   不积跬步,无以至千里;   不积小流,无以成江河。
   你还在问“敢问路在何方?”吗,路其实就在你脚下!

参考资料:
-《丰田改善力》-《绝对创造力》
-《创新者的工具箱》
-《问题解决心理学》
-《Google Hacks》
-《程序员修炼之道——从小工到专家》
-《成为技术领导者——解决问题的有机方法》
-《问题解决专家——策略性问题解决的思考与技术》
-《设计模式——可复用面向对象软件的基础》
页: [1]
查看完整版本: Practices of Professional Programmer