3.17 程序员成熟的标志


  程序员在经历了若干年编程工作之后,很想知道自己的水平到底如何?自己是否已经成为成熟的程序员?虽然程序员会对自己有一个自我评价,但是,自己的评价和社会的评价、专业的评价会有差异,所以程序员自己并不能肯定这个评价。在现实中,除了各种证书之外,很少有人会专门给出一个程序员的成熟度的评价。人们往往是偶发性就事论事地对程序员的工作做出好与不好、行与不行的评论。因此,程序员对此感到很茫然,不知道要从那些方面去评价自己的能力。

  

  一个程序员到底成熟不成熟,我想从以下几个方面谈谈自己的看法。

  

  1. 技术标志

  

  如果程序员不会编程序,那绝不是程序员,程序员至少要掌握一门程序设计语言,要能够用这种语言编写程序去解决他想解决的问题。但是,成熟的程序员往往掌握不止一种程序语言,3 ~ 4种语言的掌握是必需的,一种两种语言的精通也是必需的。


  除了从掌握程序设计语言个数之外,我们还可以从其他几个方面去了解程序员在技术上的水平。例如,函数编写能力(命名、格式、大小、分类、参数、复用等)、面向过程的能力、面向对象的能力、数据库技术能力、效率处理能力、安全处理能力、网络处理能力、软件架构能力、人机交互能力、通用软件能力、软件文档能力等。尤其是面向对象技术的掌握和运用,以及面向服务的技术都是成熟程序员必须掌握的。

 

 2.时间标志

 

 虽然程序员的天资、素质、基础知识各不相同,所经历的工作内容以及环境也不相同,但是,时间也是程序员成熟程度的标志之一。一般程序员需要经过3 ~ 5年的时间才能日趋成熟。其中入门需要一年,成长需要两年。这是我经过长期观察得到的平均数据。我并不认为成熟时间越短程序员就越聪明,就越了不起。享受每个阶段充分的时间,这会让自己成长更加充实、更加成熟。当然,也有超期却不成熟的情况,这也是很正常的。

  

  3. 项目标志

  

  程序员的社会性是程序员成熟的标志之一。没有参加过项目的程序员,程序编得再好,只能是纯程序类的程序员,是一个孤独的高手,是一种个人型的程序员,还远没有成熟。项目作为社会性活动体现了项目的社会价值,所以项目能力也是程序员成熟的重要标志之一。项目能力包括参加项目的个数、大小、在其中承担的角色等。就项目承担的角色而言,主持开发(项目经理)3个以上项目是必需的,这是一个必要条件。一个程序员如果没有主持过开发,无论参加过多少项目的开发,无论是在程序编写或项目设计上发挥了多大的作用,都是很难被称之为成熟的.因为项目的组织、协调和管理是反映一个程序员成熟程度的又一个标志。就如同一个程序员能参与过10个以上大大小小的项目或能参加或能主持两个以上大型项目的开发,其成熟程度是可以信赖的。若低于此数,则说明程序员离成熟还有相当的空间。“我们在项目中成长”,可见项目对程序员的意义是多么的巨大。


  另外,一般程序员只是为一个企业客户进行开发一个或多个项目,或为同行业的企业开发项目,如果程序员开发过多个行业的项目,其成熟度要比一般人高一些。

 

 4.思维标志

 

 幼稚和成熟在思维方式上具有很明显的区别。就程序员而言,不成熟的程序员逻辑性不强,程序编得没有条理,即使程序员自己进行了解释也没人能看懂。而成熟的程序员应该具有很强的逻辑性,程序编得井井有条,不用解释别人也能看得懂。这种逻辑性还体现在软件的架构设计、数据库设计、算法设计等多个方面。程序员通过全集子集概念、时间概念、顺序概念、重点和非重点概念等对各种事物进行逻辑分析。例如,以顺序概念为例,不成熟的程序员往往会采用自底向上的思维方式来开发程序。他们先考虑程序的具体实现,然后再考虑功能设计、最后考虑架构设计。而成熟的程序员则采用自顶向下的思维方式,先考虑架构设计,再考虑功能设计,最后才考虑编程的具体实现。前者思维方式主要是出于工作惯性,只适合入门阶段,而后者思维方式反映了后者的进步,适用于各种项目开发或大型项目的开发。


  除了在思维内容上的逻辑性之外,程序员还应该处理好动脑和动手的关系。重视思维本身就是一种成熟的标志。成熟的程序员的思考时间要大于动手编程时间,想好之后只要一次就编程成功,而不成熟的程序员往往动手编程时间要远大于思考时间,而且是边做边想,通过反复来逼近最终目标。


  另外,在思维范围上,成熟的程序员要比普通的程序员有更开放视野。他们更容易接受新的东西,更容易不受各种约束去考虑问题,更勇于去挑战自己和高手。

 

 5. 与人交往

 

 很多人认为程序员是和计算机打交道的行业,我认为这只是这个职业的特点。但是,只要是工作,就必然是一种社会劳动。而社会劳动则必须和人进行交流和沟通。尽管程序员的劳动工具是计算机,但并不意味着程序员只想着这个工具。从这个工具的下游来看,程序员还是要考虑用这个劳动工具生产出来的软件产品是否有人购买,是否有人使用,是否运行正常,从这个工具的上游来看,是谁让程序员了解设计方案的,是谁让程序员编程序的,是谁让程序员程序通过验收的等。因此程序员在软件制作各个环节都会与其他人打交道。只有和人进行有效的交流和沟通,我们的工作才能顺利做更好。


 如果一个程序员还沉浸在个人劳动的意境中,对外界持冷漠、无奈、恐惧的心理,在内心里不愿意和外界打交道,无论自己感觉自己的技术水平有多高,那都还是一个不成熟的程序员。而成熟的程序员一定特别重视与人的交往,无论是上级领导、外部客户、项目经理、团队同伴这些与自身工作密切相关的人还是那些非同单位同行的朋友、网友等,他们都会认真听取别人的阐述、要求、意见、建议、反馈等,从而得到更多的工作上的、技术上的、生活上的好想法,以便自己参考和吸收。与此同时,与人交往也反映出你有好的想法和好的技术可以交流出去,而这些想法和技术水平也是成熟度的一种反映。那些没有想法和技术水平的程序员的确怕和别人交流。


 与人交流时有两个基本能力要求:一个是理解能力,一个是表达能力,两者缺一不可。例如,有的程序员理解能力差,不能理解项目经理提出的要求,有的程序员表达能力差,无逻辑,无重点,啰里啰唆,让别人不知所云。这些都是不成熟的表现。

  

  6.别人的评价

  

  别人的评价尤其是单位同事以及对自己工作情况比较了解的人对自己的评价是有参考价值的。一般而言,得到评价为差的程序员,其能力一定是不行的,是不成熟的。评价好的要看情况而定,单位同事对人的评价会从两个方面考虑,一个是这个人的为人情况,另一个是这个人的工作能力。如果两者都不错,我们有理由认为这个程序员已经成熟。反之,无论是工作能力多么强,但为人不好,或者为人很好,工作能力不强,我看都不能算是一个成熟的程序员。


  所以,程序员要注重别人对自己的评价,在提高自己技术水平的同时,学会做人,做好人,学会与他人分享,这样别人才会给自己更好的评价。


  无视别人评价,其实这也是一种不成熟的表现。只有自己感觉好,大家感觉好,那才是真的好。


  其实,别人的评价如果仅限于自己单位的话,恐怕这种评价的价值会打折扣,如果这个单位技术人员的人数很少,水平普遍低,即使你鹤立鸡群,大家对你的评价很好,但是,你和其他公司或单位的程序员相比,你真的不一定成熟。所以我说别人的评价仅仅是一个参考。

 

 7.收入标志

 

 收入也是一个成熟程序员的参考标志。收入的多少往往是对程序员社会价值的认可度,表明程序员的劳动值这个价钱。一般而言,成熟的程序员能够挣得软件业平均收入的中上水平,或者在一个单位或部门中能够挣得比80%左右员工要高的收入,而刚参加工作不久的程序员其收入应该与其相差很大的。另外,从单位的项目奖金发放也可以看出程序员在项目中的地位和作用。


  在现实中,我们知道程序员的收入与其付出是不成正比的,而且,越是能力强的、贡献大的程序员,可能不一定比那些其他能力不如他的程序员高出许多。这不是软件行业的通病,几乎所有行业都存在这种情况。通过分析我们认为程序员的成熟度应该是与其收入水平的高低挂钩的。如果我们的能力和贡献大大超出了收入,就有理由向上级领导提出提高自己收入的要求。


 8. 心理素质

 

 程序员常常面对各种各样的成功和失败,尤其是失败更是多于成功,这也是程序员这个职业的特点之一。以编程为例,几乎没有一个人一次就能将程序编好,他总是要遇到各种语法错误、各种遗漏,一个程序要反复多次修改调试才能完成。有的程序员因找不出来程序的hug,束手无策,唉声叹气,心里极其不爽。以工作为例,有的程序员因工作进度和程序出错常常受到别人的批评和指责,心里极其不满,认为批评人不了解造成这个结果的客观原因,批评错了人,从而对人产生意见,甚至对工作造成了影响。面对失败和挫折,成熟的程序员会坦然面对:编程时出现问题不可怕,有什么问题就解决问题,解决不了的问题可以想其他方法进行解决,不在一棵树上吊死。面对别人的批评和指责,首先从自身查问题,是自己的问题,那就要主动承担责任,并尽快改正。不是自己的问题,应该换位思考,理解批评人的焦急心态,并找机会说明。拥有良好的心理素质的程序员在面对困难和挫折时,就会很坦然、很坚强、很自信。


  程序员也会面对成功的。有些程序员因开发了某个项目,因编写了某个程序而感觉良好,在不自觉中表现出我最牛,我最好的样子,面对他人夸夸其谈,而对其他人的成就不屑一顾。更有甚者并无成果,表现平平,却依然会摆出一个高手的样子,有的仅仅参与了某个项目,而且不是项目主要开发者,却会贪天之功,归其所有,好像这个项目是他主持开发的。这些其实也是心理素质不成熟的一种表现。成熟的程序员面对成功并不会感觉高人一等,该是自己的功劳就是自己的功劳,该是别人的功劳就是别人的功劳,即使自己比别人水平高出许多,他想的是,还有更高的技术顶峰等待攀登,不可自傲,看到别人取得的成绩首先应该去祝贺,然后去学习,而不是心怀嫉妒,从中挑刺。


  良好的心理素质使得程序员更加理性地处理好各种成功和失败带来的问题,更有利于程序员超越自我,以平常之心去迎接更大的挑战。

  

  当然,一个程序员是否成熟是一个仁者见仁智者见智的话题。有的人强调程序员的个人能力方面,有的人强调程序员的社会能力方面。我认为从以上8个方面综合地去评判一个程序员是否成熟应该能说明些问题的。我们标志成熟的一个目的是对程序员在成长过程给予一个肯定和鼓励,让程序员认清自己所处的阶段,为充满自信找出依据;另一个目的是对程序员未来的成长提出更高的要求。走向优秀是成熟程序员面临的更大挑战。