高级程序员到底长什么样子?

原文转载于:https://my.oschina.net/editorial-story/blog/3133210
我们的中国文化,对“面子”看得特别重,所以你会发现身边到处都是高级 XXX,听着倍儿有面子,程序员也不例外 。
但是你真要问每个人,你认为的高级 XXX 是什么样子的,估计每个人都有不同的回答 。
我还记得在我刚开始从事编程工作的时候,对坐在边上不远的那位我心目中的高级程序员的印象是:
工作至少有 6、7 年以上,能写一个用起来很方便、看起来很牛逼、但是不太容易让初级人员看懂的框架 。
前两天,我把这个问题丢到群里,大家给出的答案中,占比最高的是以下几个 。
  • 有 N 年以上编程经验(大部分都说 5 年以上)
  • 有出版过技术图书
  • 对某领域内对常用框架原理有了解,并且实际使用超过 2 年
  • 可以随时随地快速写出常见的一些算法
  • 至少封装过一个被全局使用的开发框架
  • 写出来的代码,阅读起来很好理解
  • 能带领其他人员成功完成项目
你看,这件事对大家来说就是常说的,“一千个人眼中有一千个哈姆雷特” 。
不过这也正常,毕竟像初级、中级、高级这种高度抽象的词汇,想要得到一个可描述的定义与人交流,必然需要夹杂着个人的主观因素 。
但是很多行业都在这么进行分类,自然有它的道理和好处 。
我觉得其中最大的一个好处恰好是“主观”的附属品——弹性 。
比如,我现在想招一位高级程序员,面试的时候不管是通过还是不通过,我都有理由来解释我对“高级”的定义 。如此一来,我对陌生人的判断就有了更大的“弹性” 。
这其实是面试官的一种权利,也是长期以来面试者总在面试中处于下峰的原因之一 。
事物总是有两面性的,我们在对陌生人弹性的同时,间接地也对内部的人弹性了,会导致内部的一些人才培养出现问题 。
比如,你觉得内部的高级程序员不够,希望能在外部招聘的同时,从内部也培养一些出来 。但是此时,你又面临了需要定义什么是“高级”的问题 。
如果没法定义一个能够达成共识的标准,又如何指导培养的方向呢?只能是一句空话 。
长此以往会导致更严重的问题:真正的高级程序员不够,只能让中级程序员顶上 。顶替的时间长了,会让一些中级程序员误以为自己已经达到了高级水平 。
在我平时的面试中,这样的案例屡见不鲜,网上流传的工作 10 年 = 1 年重复 10 次的段子是真实存在的 。
下面我来聊聊我对“什么是高级程序员”的个人看法,欢迎你和我一起探讨 。
不管是什么行业,什么岗位,在这个高度分工协作的现代社会,所需的能力主要分为三个维度,我的理解大概是这样的:
  • 专业能力:好奇心、敢于挑战困难、刻意养成好习惯、要求严格
  • 连接能力:共同体意识、同理心、实事求是、接地气
  • 领导能力:主人翁意识、沟通/谈判技巧、目的导向
先卖个关子,文章的最后我会将这三个维度组合起来,你会发现一片新的天地 。
根据这三个维度的水平差异,我们对初级程序员、中级程序员、高级程序员做一个简要的描述 。
初级程序员 - 知道有事要做处在初级阶段的时候,我们的精力大多只会专注在专业能力的提升上 。这个时候“领导能力”和“连接能力”是很弱的 。
所以,这个时候哪怕你有强烈的好奇心也无法很好地表达出来,大多只能被动的接受工作安排 。
在这个时期做事情需要依赖一些教程、文档,只能“依样画葫芦”,几乎不能在不借助外部信息的情况下解决之前从未遇到过的新问题,所以百度、google 就成了他们唯一的选择 。
你可以在你的身边观察一下,如果经常有以下这些场景出现,大多是初级程序员的表现 。