高质量软件产品的根本保障--高水平的程序员




软件研发是高智力的活动,最终软件产品的质量,从根本上讲,是由编写软件的程序员的水平决定的!
部门经理、项目经理、系统架构师的水平再好,也无法直接转化为真正编写软件的程序员的能力。软件的程序代码,是由那些程序员一行行写出来的。优秀的程序员,能写出简洁、高效的代码,逻辑正确,运行效率好,易于阅读,易于维护。而差点程序员,写出的代码又臭又长,实现过程极其笨拙,阅读起来非常费劲,代码中到处充斥着Bug。这样的程序员写出的软件,其质量可想而知。

因此,拥有高水平的程序员,是保障软件质量的最基本前提。

在现实的软件企业中,我们常常看到这样的情形:软件研发部门经理的水平很高,手下的程序员大都是新毕业或工作2~3年的程序员。部门经理一个人再牛,一天能干多少活?其最多也就是帮助程序员确定程序架构、核心交互机制、解答程序员的疑问,甚至还能写一点程序的核心代码。剩下的大量程序代码,都是由这些新手程序员来完成的。这些人员写出的程序,如何保证质量?因此,产品交付给客户后,问题不断,开发人员不断出差,奔赴现场处理程序出现的各种问题,整个开发团队基本就处于天天救火,疲于奔命的状态中,整个项目就是一个烂尾楼工程,所有的人员都陷在这个泥沼中,无法解脱。

因此,要摆脱这种噩梦,我们的程序员必须是高水平的程序员!

那么,什么叫高水平的程序员?怎样才能拥有高水平的程序员?

我个人的体会,所谓高水平的程序员,指技术扎实、思维清晰、擅于钻研、有职业化编程经验的程序员。下面我来具体解释一下。
1. 技术扎实:
技术扎实,指对技术的深刻理解,重点是2方面:
1) 基本概念清晰:
   基本概念模糊,可能是中国程序员普遍存在的问题。很多程序员根本搞不懂指针、内存、链表、栈,甚至根本就没学过C语言,大学里一上来就学C++/VB/Java,可谓害人不浅。什么是线程同步,更是没几个人能说清。离开MFC,不用CString,立刻就不知所措,什么功能都实现不了了。
   我在面试中,常常听到应聘者说:我C语言学得不好,但我C++好,Java学得好。这太可笑了!
   C语言基础、数据结构、面向对象,是中国程序员最薄弱的基本概念。最少有70%以上的项目编码问题,是源自这些概念的不理解。
2)要解决的问题是什么?如何有效的解决了问题?
   任何技术,都是为了有效解决一个问题。那么在项目实际开发中,只有遇到了这样的问题,我们才会使用相应的技术来解决。如果遇到的不是这类问题,就不应该使用这个技术,因为这个技术不是这个问题的最优解。因此,唯有将技术与问题之间的关系彻底搞清楚,才能因地制宜,有的放矢,精准解决问题。否则,就会出现张冠李戴,驴唇不对马嘴的现象。
   实际项目开发中,数据结构、面向对象、设计模式大量被生搬硬套,胡乱使用,代码中到处散发着难闻的气味。
2. 思维清晰
   思维清晰,指面对具体的项目问题,能够有效分析,确定代码的逻辑实现过程。
   我们从书本、培训课、互联网等学的,只是单一的概念或技术。在面向项目开发中的具体问题时,需要的是分析问题,用自己所掌握的各种技术来综合解决问题的能力,最终程序员写出的是具体逻辑实现的代码。代码逻辑,才是软件程序代码中比重最大的部分,要远远超过程序的架构和机制。
   代码逻辑的实现过程,要求简单、高效。实现的思路要简洁明了,代码执行效率要高。
   项目开发中,程序员常见的问题是实现逻辑非常混乱、变量众多、代码冗长、效率低下,其实就是他脑子里的思路不清楚,分析问题、解决问题的能力差。
3. 擅长钻研
   在项目实际开发中,我们总会遇到以前从未遇到过的问题,新问题摆在面前,如何解决?很可能整个团队中都没有人遇到过,那么你如何着手解决?
   好的程序员,能够分析出几个可能的入手方向,并擅于利用互联网这个巨大的资源库,寻求问题解决的多种可能方式,再经由自己的分析、探索和实践验证,最后确定解决问题的最佳方案。在这个过程中,其本人的能力得到锻炼和提升,技术概念被进一步夯实,技术理解更加深刻。
   而差一些的程序员,往往从互联网上搜到一段代码,放在程序里一运行,ok,问题解决了。这个问题就结束了,然后他就开始完成后续的工作任务了。这样带来的问题是:
   1)这段代码具体是干什么的,为什么就解决了这个问题?他没有充分理解。
   2)这段代码是否是解决这个问题的最优解,他根本不知道。
   3)这段代码放在这里,是否会引发其它的副作用?他也根本不知道。
   因此,隐患就在这里埋下了。什么时候会爆发,无人知晓。而这样的程序员,自己的能力是不会有长进的。
4. 有职业化的编程经验
   什么叫职业化的编程?大学里面从来没教过。因此,每个程序员写出的程序,别人看起来都非常费劲,过了一段时间,连自己看都很难看得懂了。
   软件开发,是一种团队协作活动,这种活动,一直持续在软件的整个生命周期中。那么就意味着,你写的软件代码部分,在后续的2.0、3.0、4.0等版本中,要被其他开发人员来修改和维护。那么,你写的软件就不是你的私有财产,而是团队的共有财产,要被团队的其他成员阅读和修改。那么,你的代码必须能让别人非常容易的阅读和理解。
   既然这样,你的代码中得有注释吧?排版也应该整齐些吧?变量和函数的命名,应该直观达意吧?具有明确物理含义的数字,应该写为常量或宏吧?否则,代码中到处是1,3,17,21。。。,谁能明白这些数是什么意思?后续改动起来,那可是个麻烦事,全部替换是完全行不通的。
   因此,作为一个高水平的程序员,写出的代码,一看上去就非常职业化:排版整齐、注释清晰、命名达意。这样的代码,阅读起来容易,别人接手很快,这才是真正的团队开发。
   职业化编程,是程序员的基本素质,而不是一种形式和过场。推荐大家看一下华为公司的软件编程规范,极为经典。

具备以上四项能力的程序员,就可以认为是高水平的程序员。由这样的程序员写出的代码,质量才有保证。

那么,如何才能拥有这样的高水平程序员呢?

主要获取的途径,主要有两种:招聘和内部培养。无论哪种途径,都要考察其是否具备高水平程序员的特征:
1)技术扎实
2)思维清晰
3)擅于钻研
4)有职业化编程经验
技术不扎实,概念不清晰,问题理解不透彻,思维混乱者,一概不能任用,坚决不能作为核心人员使用!
常见的误区是,有些人工作时间很长,5、6年甚至7、8年,Windows、Linux、C、C++、.Net、Java、Web 都做过开发,但熟而不精,对基本知识、基本概念认知不清,只是因为工作时间长,而被误认为有丰富的经验,从而作为核心开发人员而使用。这实在是大错特错!如果这么多年中,他还没把基本概念搞清,还没有形成清晰的思维过程,可以判定,他从根本上就缺乏这方面的能力,这辈子也很难有提高。用这样的人做项目,后果很严重,很严重!

目前中国软件企业的开发人员中,技术不扎实、概念不清晰、思路不清晰者比比皆是,因此做出来的软件产品Bug漫天飞,低劣至极。要想改变这个现状,企业中至少要先有一个高水平的程序员,然后由其进行技术面试或者内部训练,从而获得后续的高水平程序员。
拥有了高水平的程序员后,方能做出高质量的软件产品!


猜你喜欢

转载自kong-desheng.iteye.com/blog/613765