我是程序员兴哥,一名互联网创业者。今天想跟大家聊一聊优秀程序员和普通程序员之间的差距,以及如何成为优秀的程序员。
乔布斯曾经说过一段话:“一名优秀的工程师,他的作用抵得上50名普通的工程师。” 乔布斯口中的工程师指的其实是程序员。这段话我非常赞同。
在我过去十多年的工作经历中,我带过几百名程序员。这些程序员中有特别优秀的,也有很一般的小伙伴。特别优秀的小伙伴工作几年,可能就能实现年薪50万甚至上百万,而且他们对公司的贡献值得上这个价。和那些普通的程序员,特别是其中有一些比较差的程序员相比,他们工作10年15年,可能他们的年薪还是只有10万到20万,甚至一旦他们的年纪超过35岁或者40岁,就会立马变成公司优化的对象。真的非常残酷。这其实也揭示了一个道理,我们做程序员这个行业一定要追求卓越,追求优秀。
下面我来说一下优秀程序员必须具备的3种能力。
第一点是裸编程能力。优秀的程序员一定要具备超强的裸编程能力。那么什么是裸编程能力呢?就是说你能实现一段函数、一个类、一个工程的能力。很多小伙伴可能会问了,那这个能力我也有啊,不光是我有,我觉得所有的程序员可能都有啊。其实并不是这样的。很多程序员当领导交给他一个任务的时候,他第一时间想的是去谷歌、百度,或者是去GTR上下一段代码,甚至改都不改动原封不动的把它放到自己的业务代码里面,然后上线。当然前提是能编译和运行通过对吧。不知道大家身边有没有这种人。这种人我们把它叫做复制粘贴工程师。他甚至会去拷贝同事写的代码,然后来快速实现自己的功能。那么长期的复制粘贴其实摧毁的就是他的裸编程能力。这种工程师其实危害还非常大,给大家讲个笑话:曾经有两个巨头,有一个巨头指责另外一个巨头抄袭他们的代码,苦于找不到证据,最后他们把他对方的产品反变异,在代码里面发现了一段注释彩蛋,这个注释彩蛋就是为了防抄袭留下来的。也就是说,复制粘贴工程师在这种商业诉讼大战中给对手递了刀子。这是一个笑话或者是一个段子啊,大家听听也就罢了。但是我们的裸编程能力决定了我们能走多远,可以看一下,今天进这些大厂,特别是应届生都会要求考察手写算法,那么这些大厂的出发点是什么呢?其实就是考察你有没有超强的裸编程能力,也就是说对一个算法的实现,其实是你在大脑里面要把它结构化、要把它流程化,然后把它一步步实现。所以裸编程能力其实锻炼的是我们对代码的结构化和流程化以及我们如何实现的能力,他决定了这个程序员能不能走的更远,能不能走的更稳。
第二点是超强的调试能力。不同的程序员之间,他们的调试能力是千差万别。大家身边的那些资深的工程师,他们可能只做几件事情。他们不会去写业务代码,第一,他们可能会去定架构,定结构,定框架;第二,当主力的其他工程师有解决不了的问题的时候,特别是一些调试问题或者线上的BUG,他们会出来去把它解决了。这里有一个段子,曾经有一个很有钱的公司,他们的一台机器出了问题,然后他们就去找一个专家,然后让这个专家来修。这个专家就画了一个圈,最后要了30万美金。这个公司就问这个专家,你为什么收费这么贵啊,你就画了一个圈。专家说因为只有我,才知道这台机器的问题出在哪了呀。其实我为什么说这个段子,如果你具备超强的调试能力,事实上你就具备了这种画圈圈的能力,想一想你该多值钱吧。
第三点是理解底层系统的能力。底层系统包括什么呢?比如操作系统、算法的原理、更底层的应用的原理等等。举个例子,卡夫卡,很多做服务端的工程师都会用,但是卡夫卡可能在有些时间点他会出问题,比如说位置的偏移导致日志接收不到,这个时候如果你不理解卡夫卡的底层原理,你是很难做调试解决的。但是如果你知道卡夫卡是由多少个组件实现的,他的底层是怎么相互运转的,那么你可以很轻松地去解决。再比如多可,很多人只停留在应用层面,但是有的工程师可能就能理解DOC背后的技术实现。
最后,我想说的是,特别是针对那些还在读书的小伙伴,你们在上学的时候一定要把算法原理、计算机基础各种专业课学得非常扎实,因为这个对你未来理解各种技术、各种技术的底层非常非常有帮助。这也是为什么大厂喜欢用那些本科成绩非常好,又或者是名校的学生的原因,因为具备这些基础素质的话,你对底层系统的理解会比其他人快很多,深入很多。
以上就是我认为的成为优秀程序员必备的3点能力。当然,要成为优秀程序员,还需要很多其他能力,比如你要有吃苦耐劳的精神,你要不怕苦不怕累,甚至说你要真正热爱编码这个行业。因为编码本质上来说是很枯燥的,但是我认为其他的很多很多能力都远远没有这3点重要。如果做到这3点,我们就具备了成为一个优秀的程序员的基础素质。