转自:http://gurudk.javaeye.com/blog/364703
自以为是个专业程序员,前段时间我也在Manifesto of Software Craftsmanship (软件工艺宣言) 上也签了名。作为对宣言的实践,总结一下专业程序员的实践,不敢称最佳,姑且就叫专业程序员实践好了。大家如果有好的想法和好的做法,可以和我联系或者留言,我一起补充上去,按照宣言的第三条,让我们一起共同建好这个Professional Programmer Community。
如果你认为你是一个专业的程序员,去签名吧,去承担一名专业程序员该承担的责任。我觉得最为一名专业程序员,有一些基本的要求,是我所说的专业程序员的职业素养。
这些我认为是专业程序员共同的价值观。
作为一名专业程序员,我觉得他的核心竞争力主要表现在三个方面:
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)
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)
5)其它(Other Practices)
- OP1:使用google图片搜索,搜索素材。
- OP2:使用影响分析表格进行分析。
- OP3:学会表达和沟通, 成长之路所必需。
- OP4:要有长远规划和目标。
最后,我说一下心态,一个程序员应该有一个开放的心态,随时接受新的东西,不断尝试。使好的东西形成自己的习惯,不好的东西就摈弃掉。不过作为程序员,有时候都是很固执的,我也一样。脑图这个东西,很多同事推荐我一年之后我才开始使用,用了之后感觉相见恨晚。我目前写文章,整理思路,整理知识都是用它,已经离不开了。
不积跬步,无以至千里;
不积小流,无以成江河。
你还在问“敢问路在何方?”吗,路其实就在你脚下!
参考资料:
-《丰田改善力》
-《绝对创造力》
-《创新者的工具箱》
-《问题解决心理学》
-《Google Hacks》
-《程序员修炼之道——从小工到专家》
-《成为技术领导者——解决问题的有机方法》
-《问题解决专家——策略性问题解决的思考与技术》
-《设计模式——可复用面向对象软件的基础》