什么是“流动型程序员”?看不懂?所谓“流动型程序员”其实指得就是那些在一家公司总是干不长的程序员,并且,这样的程序员数量还挺多。如果你没听过这个称呼,不要奇怪,因为我总要给这种程序员起个名字好让人能够理解!所以,“流动型程序员”这个形容词是我起的,如果您有更好的称呼,我也愿意改正这个称呼!
特征
我见过不少这样的程序员,他们身上有一个共同的特征,那就是懂得比较多,参加面试也能面试过去,但是写得代码基本上都是“屎山”。导致这种结果的原因,就是在刚开始成为程序员的时候没有受到好的编码习惯的培养,因此只要是他们参加的项目,基本上就会出各种各样的问题。
因此,他们不是不愿意长久地在一家公司呆下去,而是再待下去真没什么好果子吃,留下的只有烂摊子!
为什么这些人懂得比较多,面试也能面过去呢?其实一方面是因为他们经历的项目比较多,久而久之,懂得也就比较多了。而面试能面过去,无非就是基础知识比较扎实,又因为经历的项目比较多,所以自然面试就不在话下。
但是,只有丰富的项目经历以及扎实的基本功,写代码的时候却没有良好的编码习惯的话,无疑跟“纸上谈兵”没有区别!
举例个典型例子
我曾经遇到过一个工作十几年的程序员,从他手上接过了一个项目源码。
看了他的源码,我才知道,程序员并不是工作年限越久,他的编码技术水平就越高,编码习惯就越好!
他的代码里,所有功能基本上都没有封装,基本上代码就是从头写到尾。你可以在他写的源码中看到各种重复性的逻辑。
有些逻辑即使是复用性极高的,他也不会选择将这部分逻辑进行封装。
举个大家都能明白的例子吧!
假设一个网站要做一个接口鉴权的拦截器,一般来说,我们只要在网站访问入口那里定义一个拦截器,如果访问者没有登陆,我们就会要求访问者登陆。如果访问者已经登陆,那么我们就要验证Token的合法性。
如果这个功能是他去写,我大概能知道他的实现方式一定是在每个接口上都单独写上登陆判断和Token验证的代码!
这种做法虽然也能实现需求,但是万一比如哪一天Token的验证方式改了,那么所有的接口都得改!如果接口是几十个上百个呢?
不要以为老程序员干不出这种事情,他真能干得出来!
因为我们公司代码都是自审,只要测试那边测试通过就没问题。所以,他的这套编码习惯一直没被发现,直到我接手他的代码以后,才感觉到什么叫崩溃!
后来,我就把这个情况反映给了我的研发总监,研发总监看了他的代码也是很头疼,只怪自己没有早点发现。
但是,就这么写代码的一个人,平时给人的感觉就是很沉稳,值得信赖的样子。
后来,研发总监没事就去审查他的代码,最后发现他写的代码不光重复性极高,而且对于一些外部入参也没有基本的判断,Sql语句也是采用拼接参数的方式等等。他的这种编码风格和习惯,正常情况下不会出问题,但是一旦出问题是非常棘手的!
最后,因为写代码的时候总是不注意,总是被研发总监约谈,最后他还是自己离职了!
他离职之后,留下了一堆烂摊子给我们,我们花了大把时间对其代码进行重构,才勉强提升了下代码的健壮性。
后来,我跟这个程序员还有联系,据我了解,基本上后来他在每家公司待得时间都不超过一年!
像这种程序员在面试的时候是没有问题的,但是因为编码习惯问题,就会导致越到最后,代码得可维护性越低。导致当一个项目的变数多的时候,到最后他自己也很难很好地维护自己的代码。但是,大多数项目的研发过程中,其实需求都是在变得。因此,当他连自己代码都维护不好的时候,就会导致最后积压的问题越来越多,只有“跑路”这一条路可走。
如何避免遇到这样的程序员?
想要分辨“流动型程序员”有一种方法,首先就是看其工作经历当中,是否每家公司都呆不长!
当然,待不长并不代表他就是“流动型程序员”,也可能是因为性格,无法融入团队等等,这样的程序员我也遇到不少。
如果遇到工作经历比较“丰富”的程序员,最好还是让他拿出以前做的项目源码来看看,如果没有的话,他自己总有一两个自己用来练手的项目。
一定要把他的源码看个大概,如果他的编码风格属于上述例子中所说的那样,那这样的人最好还是谨慎对待!
另外,从技术角度,也可以问他一些关于如何提高程序健壮性的问题。如果他都能答出来,就代表他有这方面意识。
最后结合他的代码中体现的代码编写习惯和编码风格,我们就可以大致判断出这个人属于不属于“流动型程序员”了!