400-616-5551

您所在位置: 首页> IT培训> 大家在寻找的高级程序员到底是什么样子的?

大家在寻找的高级程序员到底是什么样子的?

发布百知教育 来源:IT培训 2020-04-07

这篇文章主题很简单,就是一个很常见的话题“什么是高级程序员?”。



文章稍微长了些,但是很容易阅读。




我们的中国文化,对“面子”看的特别重,所以你会发现身边到处都是高级XXX,听着倍儿有面子,程序员也不例外。




但是你真要问每个人,你认为的高级XXX是什么样子的。估计每个人都有不同的回答。




我还记得在我刚开始从事编程工作的时候,对坐在边上不远的那位我心目中的高级程序员的印象是:


工作至少有6、7年以上,能写一个用起来很方便、看起来很牛逼、但是不太容易让初级人员看懂的框架。


前两天,我把这个问题丢到群里,大家给出的答案中,占比最高的是以下几个。



  • 有 N 年以上编程经验(大部分都说5年以上)

  • 有出版过技术图书

  • 对某领域内对常用框架原理有了解,并且实际使用超过2年

  • 可以随时随地快速写出常见的一些算法

  • 至少封装过一个被全局使用的开发框架

  • 写出来的代码,阅读起来很好理解

  • 能带领其他人员成功完成项目



你看,这件事对大家来说就是常说的,“一千个人眼中有一千个哈姆雷特”。




不过这也正常,毕竟像初级、中级、高级这种高度抽象的词汇,想要得到一个可描述的定义与人交流,必然需要夹杂着个人的主观因素。




但是很多行业都在这么进行分类,自然有它的道理和好处。




我觉得其中最大的一个好处恰好是「主观」的附属品——「弹性」




比如,我现在想招一位高级程序员,面试的时候不管是通过还是不通过,我都有理由来解释我对“高级”的定义。如此一来,我对陌生人的判断就有了更大的「弹性」。




这其实是面试官的一种权利,也是长期以来面试者总在面试中处于下峰的原因之一。




事物总是有两面性的,我们在对陌生人弹性的同时,间接的也对内部的人弹性了,会导致内部的一些人才培养出现问题。




比如,你觉得内部的高级程序员不够,希望能在外部招聘的同时,从内部也培养一些出来。但是此时,你又面临了需要定义什么是“高级”的问题。




如果没法定义一个能够达成共识的标准,又如何指导培养的方向呢?只能是一句空话。




长期以往会导致更严重的问题:真正的高级程序员不够,只能让中级程序员顶上。顶替的时间长了,会让一些中级程序员误以为自己已经达到了高级水平




在我平时的面试中,这样的案例屡见不鲜。网上流传的工作10年 = 1年重复10次的段子是真实存在的。




下面我来聊聊我对「什么是高级程序员」的个人看法,欢迎你和我一起探讨。




不管是什么行业,什么岗位,在这个高度分工协作的现代社会,所需的能力主要分为三个维度。



  • 专业能力

  • 连接能力

  • 领导能力



我对程序员在这三个维度的理解大致是以下这个样子。


IT培训



先卖个关子,文章的最后我会将这三个维度组合起来,你会发现一片新的天地。


    根据这三个维度的水平差异,我们对初级程序员、中级程序员、高级程序员做一个简要的描述。


01 初级程序员 - 知道有事要做


处在初级阶段的时候,我们的精力大多只会专注在专业能力的提升上。这个时候「领导能力」和「连接能力」是很弱的。


所以,这个时候哪怕你有强烈的好奇心也无法很好的表达出来,大多只能被动的接受工作安排。


在这个时期做事情需要依赖一些教程、文档,只能“依样画葫芦”,几乎不能在不借助外部信息的情况下解决之前从未遇到过的新问题,所以百度、Google就成了他们唯一的选择。


你可以在你的身边观察一下,如果经常有以下这些场景出现,大多是初级程序员的表现。


  • 很难提出正确的问题,大多会直接问别人这个功能应该怎么做。如果你清楚地向他解释,他就会完全按你说的去做,甚至你写的示例代码都会copy过去。因为在他们的世界里,只有编译成功和编译失败,任务完成和任务未完成。


  • 经常犯错误,所以会预留过多“弹性时间”,以便有时间在到期日之前重做。所以总会抱怨“没时间”。


  • 对与自己有工作交集的人员的职能没有认识。比如,对测试人员总是充满敌意的,因为他们发现了错误,“阻碍”了自己完成工作。


  • 还没注意养成一些好习惯,比如习惯性的提炼重复代码、编写风格一致的代码、自测等等。


很遗憾,看似很初级的阶段,并不只是刚踏入工作的程序员所属,在实际工作中,也有不少工作多年的人还处在这个阶段。


02 中级程序员 - 知道如何做某事

对人群按照单一维度进行划分,大多数时候都是符合正态分布的,这里也不例外。中级程序员是我们身边最多的,包括那些不得不穿上高级程序员马甲的中级程序员。


在这个阶段,有些中级程序员开始具备了一定的「连接能力」,但并不是所有人,主要看是不是拥有了「共同体意识」。


在专业能力上,中级程序员已经明白了一定的「整体与局部」的概念,但仍然看不到整个“森林”,大多局限在某个模块、流程上。比如,他们会想“这是做敏捷的正确方式吗?”,但不会考虑“这对整个团队、整个公司会产生什么实际的影响?”。


他们开始注重代码质量,因为担心低质量的代码会影响他们视野中的“整体”。


但是对于质量的理解还是比较单一。比如,这个时候你会经常听到他们把「性能」挂在嘴边,在他们心目中「性能」的地位是至高无上的,总是想着你这个方案和我的方案哪个性能更好。



同样可以观察一下周围,中级的开发大多数会这样做事。


  • 针对一个问题,可以提出多个方案,但是无法做出准确的决策。一旦更权威的人给出了他的选择,中级程序员就会不假思索的按照建议执行。


  • 可以看出代码中的一些设计模式,但是自己写代码的时候除了单例和工厂,其它的几乎想不到。


  • 在讨论一些时髦的框架和技术的时候总能聊上几句,但是追问这个框架或者技术有什么缺点,基本说不上来。甚至,草率的在项目中运用上这些时髦的框架和技术,最终导致线上问题频发,不得不让高级程序员来收拾残局。


  • 能够对自己完成任务所需的时间有准确的评估,但是评估他人的时间不会因人而异,也会以自己作为标准来评估。


  • 对与自己有工作交集的人员的职能有了一定的认识。比如,会主动寻求测试的配合,帮助自己交付更高质量的项目。


其实这个阶段是最危险的阶段,因为最可怕的不是无知,而是一知半解。心理学中的邓宁-克鲁格效应(The Dunning-Kruger Effect)讲述的就是这个问题。


两位社会心理学家在1999年做的4项研究,证实了下面的这个曲线的存在。


在这种状态下,人最容易高估自己,这也是很多导致产生很多“假高级程序员”的原因所在。



03 高级程序员 - 知道必须做些什么

高级程序员在「专业能力」、「连接能力」、「领导能力」这三个维度都有所建树。因为他们不但可以把从1到100的事情做得很好,也有能力带领其它人完成0到1的事情。


根据我身边所接触的程序员群体来看,我所认为的高级程序员,他们明白没有什么是完美的,相反,问题、缺点和风险总是存在的。


他们的决策总是站在为了整体的「平衡」角度去考虑,而不是技术的酷炫或者外界流传的所谓“正确的”技术。


他们会更多的关心那些不显而易见的东西,如可维护性,可扩展性,易阅读,易调试等等。


高级程序员就好比社会中的成年人,他们踩过足够多的坑,也填过足够多的坑,已经认清了现实的残酷,寻求适合而不是完美。周到、务实、简单,是他们做事的时候强烈散发出的“味道”。


可以根据下面的这些场景来看看你身边有多少“有味道”的高级程序员?


  • 与初级和中级程序员不同,他们抛出问题不是为了正确的做事,而是做正确的事。他们会询问为什么要这样做以及你想要实现什么。当你告诉他们目标是什么后,他们或许会通过暗示这种方式是错误的而另一种更好来做出一些修正;当然,更重要的是还会提供论据说服你。


  • 因为提前明确了做事的目标,所以在动手做一件事的过程中,他会在关键细节思考有没有更好的方法,甚至是那些不在之前的讨论范围的新尝试。


  • 他可以轻松地承认他不知道什么,并且向你请教。同时也可以轻松地向他人讲清楚他所知道的事情。


  • 他们理解合作的人员的职能的作用,不但知道什么时候向谁寻求帮助,还知道自己如何更好的帮助他们。


  • 困难的事交给他们很放心,因为他们擅长的不是某种技术,而是解决问题的能力。他们总能解决那些之前从未遇到过的新问题,哪怕它们很困难。










上一篇:广州哪家java培训机构好?需要注意哪些问题

下一篇:深圳java程序员待遇怎么样,就业机会多吗

相关推荐

关闭

立即申请

www.baizhiedu.com