我对优秀程序员的理解

虽然自己也写了十几年代码,做了十几年的程序员,从最初级程序员,一步步走来,但是我自认自己算不上优秀的程序员,只能说是一个合格的程序员,但是非常有幸的是在我工作的十几年时间里,经历过的6,7家公司中我结交和认识了很多优秀的程序员,从他们身上我总结了一些我对于优秀程序员的理解。

1.扎实的基础知识,这点相信大部分人都会认可的,没有一个坚实的基础就不可能构建摩天大楼

2.对于问题的深究不放,优秀的程序员对于在工作中出现的一个bug,不会仅仅停留在解决bug的层面上,他们还会深入的发掘这个bug后面的知识,会深挖这个问题背后的原因,这样他们不但能够掌握更多的知识,而且对于已有的知识也是个巩固和加强

3.超强的查错调试能力,原则上来说,我们都是追求保证自己写出的代码不出现问题,但是现实是,很少有人可以做到自己的代码写完后,肯定不出问题,因为有太多的可能性导致出问题,特别是客户端程序,一千台机器就有一种环境,就可能会出现你意想不到的问题,服务器的程序相对来说,环境的问题要小些,但是服务器程序可能面对的大负荷带来的问题也是意想不到的,这个时候就非常考验一个程序员的查错和调试能力,优秀的程序员能够利用其调试手段准确的定位问题并解决问题,所以Troubleshooting能力是优秀程序员的一个最主要的特征

4.优秀的程序员在对待新技术的使用上,都会采取非常谨慎的态度,他们对于新技术都是非常敏感的,会第一时间的去学习新技术,但是如果在实际工作中需要用到某种新技术的时候,他们一定会判断自己对于这种新技术是否能够完全把控住,出现问题后自己是否有能力找到问题解决问题,如果不能,那么就不会采用

5.优秀的程序员一定都是具有天赋的,这种天赋就是作为优秀程序员应该具备的才干,这点也非常关键,优秀有时候真的不是你花时间花功夫就能做到的,真的需要具有天赋

6.优秀的程序员,至少我遇到的都非常低调,从来不会认为自己比别人有多强,也非常愿意和别人交流自己所掌握的知识

看完《黑客与画家》后,我觉得我原来认为的优秀程序员就可以理解为黑客——专家级的程序员。

我看敏捷

我是一个写了十几年代码的老程序员了,至少在2010年5月之前,我从未间断过coding。下面谈谈我自己这十几年的程序员生涯对于敏捷的一点浅薄的理解。

1.敏捷我不认为是什么思想,CMMI叫软件成熟度模型,那敏捷也就是一种轻量级的软件开发模型或者叫开发方法,冯 诺依曼的二级制是一种思想,但是敏捷不是。

2.敏捷为什么会出现,个人认为敏捷是为了应对需求的多样性及产品的快速更新的一种手段和方法,这也是我一直认为互联网公司可能更适合借鉴和使用敏捷,但是同样就是在互联网公司内,也不是所有的产品都适用,至少像很多互联网公司都有庞大的后台服务和底层技术支持,这部分我认为并不适宜。

3.其实我们已经在敏捷了,不管知道敏捷还是不知道敏捷,我们很多时候都已经在使用敏捷里经常提到的快速迭代,我自己至少就经历过,在曾经服务过的一家互联网公司,我们每周都会有一次上线,因为互联网产品是永远Beta的,因为我们不可能花三个月甚至更长的时间就能拿出一个让用户满意的产品,因为你根本做不到,所以我们需要试错,我们需要快速的拿出我们的产品,让用户告诉你,你哪儿做对了,哪儿做错了,所以我们需要以更快的产品周期来开发(现在很多移动应用的产品周期可能就是2,3天或者更短),我们让产品人员,测试人员,开发人员形成了一个战斗队伍,我们会让测试人员第一时间介入到产品中来,我们也会让产品人员随时跟踪产品进度,我们也会采用一些自动化的方式来保障开发质量,提高测试效率,保证一次性部署成功。

4.敏捷不可能提高研发能力和研发质量,至少我看了半天,也没看到从哪儿能看出敏捷可以提供研发能力和研发质量,研发能力是取决于研发团队的个人能力的,而这种个人能力,不是简单的能够通过一种方法可以提高的,并且很多研发技能,就我自己的了解,就是需要一些高手来引导的,而且还得看每个人的悟性,有人真的能提高,有的人可能真就不行,我自己带过的人就有这样的例子,我相信那些高手很多都不知道敏捷吧,而且敏捷也不可能让你在网络编程方面有提高吧,至于说研发质量,我的理解,研发质量可能是代码质量+测试质量,这两部分有很多手段来提高,比如codereview,比如各种检查工具,单元测试工具,自动化测试工具,但是应该不是敏捷能做到的。

5.敏捷好吗,好,但是敏捷和CMMI一样都是因为某种开发场景而诞生的,他们都有自己适用的场景,就像我们做开发的经常会听到这样的论调“XXX语言就是好”,“XXX架构就是强”,其实最适合的语言和架构就是最好的开发语言和最好的架构,同样再采用一种新的语言和架构来改造你目前的系统时候,你也必须对于新语言和新架构非常的了解,否则它不断不会带来好处反而是致命的后果,敏捷也同样,如果认为敏捷适合,那也需要真正理解敏捷,能够正确使用它。那种把敏捷当红宝书,当放之四海而皆准的真理,我真的不能苟同。

不管敏捷还是非敏捷,能够满足你需要的就是好方法。