Practices of Professional Programmer

   自以为是个专业程序员,前段时间我也在Manifesto of Software Craftsmanship(软件工艺宣言)上也签了名。作为对宣言的实践,总结一下专业程序员的实践,不敢称最佳,姑且就叫专业程序员实践好了。大家如果有好的想法和好的做法,可以和我联系或者留言,我一起补充上去,按照宣言的第三条,让我们一起共同建好这个Professional Programmer Community。

Practices of Professional Programmer

       如果你认为你是一个专业的程序员,去签名吧,去承担一名专业程序员该承担的责任。我觉得最为一名专业程序员,有一些基本的要求,是我所说的专业程序员的职业素养。

Practices of Professional Programmer

     这些我认为是专业程序员共同的价值观。

     作为一名专业程序员,我觉得他的核心竞争力主要表现在三个方面:

  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)

     解决问题的步骤:

  1. 问题定义
  2. 理解问题
  3. 查找资料,思考,生成备选的解决方案
  4. 选择最合适的解决方案
  5. 实施解决方案
  6. 验证正确性
  7. 得出结论,总结

     解决问题实践:

  • 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:要有长远规划和目标。

     最后,我说一下心态,一个程序员应该有一个开放的心态,随时接受新的东西,不断尝试。使好的东西形成自己的习惯,不好的东西就摈弃掉。不过作为程序员,有时候都是很固执的,我也一样。脑图这个东西,很多同事推荐我一年之后我才开始使用,用了之后感觉相见恨晚。我目前写文章,整理思路,整理知识都是用它,已经离不开了。

     不积跬步,无以至千里;

     不积小流,无以成江河。

     你还在问“敢问路在何方?”吗,路其实就在你脚下!

参考资料:

-《丰田改善力》

-《绝对创造力》

-《创新者的工具箱》

-《问题解决心理学》

-《GoogleHacks》

-《程序员修炼之道——从小工到专家》

-《成为技术领导者——解决问题的有机方法》

-《问题解决专家——策略性问题解决的思考与技术》

-《设计模式——可复用面向对象软件的基础》

相关推荐