为什么说 80% 的程序员都缺乏基本功?
昨天我在 InfoQ 上看文章的时候,看到了 InfoQ 对熊节老师的专访。感觉这篇文章说的非常有意思,大致说:
有人说:“初级程序员才比招式,高级程序员只看内功。” 什么是基本功?不是那些高大上、新潮的技术、框架,而是程序员每天做的基础工作。比如,快捷键是否熟悉,测试习惯好不好,代码干不干净,打字速度有多快等等。在 IT 产业高速发展的当下,为何我们还要重申程序员基本功的重要性?一个基本功扎实的程序员应该具备哪些素质?当我们与国内最早导入敏捷软件开发方法的熊节先生探讨这一话题时,他表示,程序员的基本功才是真正影响开发效率,甚至影响整个项目成败的核心。然而,“ 国内 80% 的软件从业者都存在基本功缺失的问题,其实我想说 90%,太得罪人。” 本文整理自 InfoQ 与熊节的采访全文。
看完之后,不知道大家如何看熊节老师的观点的呢?在我看来,熊节老师说的非常对。因为能做和能做好是两回事。在我看来能做就是程序员懂得这个招式是干什么的,知道做什么,需要用什么招式。而能做好则指的是能够熟练使用招式,运用自如的同时可以举一反三。而能做和能做好之间差的就是基本功。
我发了一条状态之后,很多人评论说算法和原理性的东西才是基本功。不,它们属于内功。
其实,程序员 80% 的工作,尤其软件开发方面,都是在用基本功,而不是内功。
因为软件开发这个工作,确实大部分的时间,都是在搬运代码和改 bug ,而这些工作恰巧都是需要基本功的。
比如快捷键用得好,就是能够节省时间,提高效率;
比如养成单元测试的习惯,就会减少很多 bug 的出现,既节省了测试的时间,又能节省你改 bug 的时间,单元测试的时间,可能都不及你改 bug 时间的十分之一;
比如养成良好的编码习惯,可以大大提高你代码的阅读效率,在产品更新迭代的过程中,你可以非常快速的完成代码的修改;
比如你打字速度很高,绝对提高了你代码编写的速度;
虽然基本功都是非常常识性的,非常简单的东西,但是就是这些往往看似简单的东西,大家都不重视。这就是典型的还没学会走,就想跑的思想。其实在这个浮躁的社会中,这样的现象太多了,就像练习武术一样,很多武侠人士之所以走火入魔就是不重视练习基本功,感觉这个太简单了,我不想练习,我想直接练大招,学习降龙十八掌。
这样的现象确实很普遍,我所认识的大部分程序员,真的自己写完代码,别说单元测试了,其实自己连简单测试都懒得做。我所经历的公司大部分公司都是不写单元测试的;编码习惯更是各种各样。
熊节老师认为:基本功扎实的程序员通常具备如下几点素质
其实你看,上述每一点都很简单,要求也不高,但是往往就是做起来就很难。
大家想过为什么大部分程序员都缺乏练习基本功吗?
其实就是习惯的问题,那为什么没有养成习惯呢?我相信大部分程序员都这么想过:
在做一个新项目的时候,心里想:这次我一定要使用非常规范的编码规范,一定要命名规范,每个函数前面一定要加注释,一定要注意把重复使用的函数提取出来。前期雄心勃勃,确实在按照自己想的慢慢做,但是写着写着就变样了,越往后,越想算了,怎么快怎么来吧,怎么自己舒服,自己怎么写吧,时间快不够了。
我敢打赌,上面的想法,绝逼有 80% 的人都这么想过,想这件事就像程序员看到电梯都会想调度算法的问题一样。
其实,不是项目时间太紧了,不是项目时间不够了,就是大家心里比较浮躁,比较懒,做着做着就坚持不下去了。你可能刚开始能坚持代码命名规范,可能会写单元测试,但是慢慢就是感觉这样太麻烦了,自己想偷懒,并不是项目时间紧。
久而久之就这样了,基本功的习惯是永远也练不成的。
所以,说大家没有练好基本功,还真别不服气。
其实不仅仅是程序员的工作这样,其实所有的事情都是一样的道理:越是简单的东西,大家往往越不重视,而往往越是这些基础的东西才是真正决定能否成功的关键。
最后用熊节老师的话结尾吧,如下:
读书对于能力提升的帮助很有限。能力的获得,必须通过重复、有针对性、有反馈的刻意练习。
基本功就得这样练才行,习惯养成之后,基本功就扎实了,扎实之后,你想不用都难,大脑和肌肉自然而然的就会使出这些基本功。