你到底是不是个高级程序员
就像中杯、大杯和超大杯一样,程序员的分级,大多时候,也没有中级,只有初级、高级和专家。我常常问自己,也有时会在招聘时问面试者,你和你刚工作一年时相比,技术能力到底有什么不同。大多数面试者,似乎都没认真考虑过这个问题,回答总是模糊不清。那么,我们到底出于怎样的自信,认为自己是高级程序员,而不是一个,一直停留在原地的初级程序员呢?
粗略来讲,你工作三年,有些单位可能要求是五年,就基本上会被当成高级程序员了。当然,实际能力是否达标,不同的公司、不同的技术 Leader,认知和要求也大不相同。这里,我试图从以下几个方面来分析这个问题,也方便大家一块讨论。
首先,拿业务经验来说,工作的时间越长,做过的需求越多,业务经验一般也就越丰富。毕竟,做过一次的东西,再做一次,可以更快的完成,也能避免不少踩过的坑和一些不成熟的想法和设计。当然,这个也因人而异。同等工作时长下,做核心业务或有难度的任务,还是和做些修修补补的任务,有很大差别。所以,用人单位总会关心你的项目经验,看看你具体做过些什么需求,也看看你做的时候,是怎么样的想法和思路,从而判断你在工作中的收获。也因此,在改变不了环境的情况下,做需求还是要多多思考,多多反思。这样,回想起来,总能讲得头头是道。而从这个角度讲,只要年份够了,工作时也认认真真,自己在团队中也不是特别边缘化,就大致可以称自己是高级程序员了。(当然,你的项目经验很可能对其他公司来说,并不一定百分百有用)
而另一个很明显的区别,就是知识量。高级程序员,总是能在新程序员遇到一个新东西时,摆出一副早就知道的样子,然后侃侃而谈。一问三不知,确实有时候有些丢人。web 后端开发的技术栈,浩如烟海。不仅包括各种编程语言和各种框架;还包括常见的一些难点业务,如单点登录、抢购、高并发等的解决方案;还包括大量的如 CDN、SEO 等的扩展知识,以及并发、算法等底层知识,以及编程思想、架构设计等编程哲学。当然,还有其他种种,在此不一一列举了。(而对于每种知识,又可以分为了解、熟悉、掌握甚至深入核心代码等情况)虽然,并不是所有的知识,总能在实际工作中用到。但它可以提升一个人的认知;让你在遇到棘手问题时,能更快、能准确地做出判断。
那么,怎么样的知识量,会被认为是高级程序员?常规来讲,你起码对你从事的业务方向的整套技术栈,都有比较深入的了解。这样,最起码在日常工作中,开发项目内的任何需求,都相对游刃有余。退一步讲,即使换到一个新的同业务的公司,也能很快入手。比如你从事商城类型的小程序开发,订单系统、抢购,支付流等肯定得门清;又比如你从事短视频、直播服务的业务,视频的处理、视频流等,也应该了然于胸。有人说,做到的时候再现学,不就行了?而实际情况是,看过、学过、深入研究过、项目中实际应用过,还是有不小区别的。而且公司也不想为你的缺乏经验而买单。所以,在实际工作中,虽然你有时只是简单接触到,但如果不就此深入研究一下,也是得不偿失的。而从这个角度讲,只要你对某条业务线涉及的所有技术栈,都有比较深入的理解,也应该可以称之为高级工程师。
这里不得不着重提一下面试。很多面试中,考核项都主要集中在了知识量上。这是因为,知识量是最容易被评估的。而很多公司为了更好的进行筛选,涉及的知识也越来越广,越来越深入底层。这个情况我不置可否。但有些面试,只根据自己的喜好和认知,或者捡一些最近新的启发或收获,去提问别人,其实也不是很公道。
当然,我觉得高级和初级最大的不同,还是业务能力。毕竟,程序员的主要工作,还是完成日常需求,而完成的质量和效率,肯定最能区分开初级和高级的。独立完成困难任务的能力,解决疑难 bug 的能力,编写高质量代码的能力,数据模型的设计能力,编程思维以及团队合作意识等。但这些很多时候,很难通过简单的面试去合理评估。能力本身,其实和工作年份没有绝对关系。有时候都觉得,逻辑思维能力等是与生俱来的,而团队合作意识只能等着开窍。就拿解决 bug 的能力来说吧,到底是因为自身的态度和性格,还是被逼无奈后死磕的精神,很难讲。但并不是随着工作经验逐渐丰富就能自动获得的。因为遇到过太多多年工作经验的人,一个突然出现的报错,明明日志提示已经写的很清楚了,就是不能静心读一读,一直没头苍蝇般的到处找个不停。所以,有能力独当一面,能死磕并解决一些困难问题,也应该算一个高级程序员了。
那么,你觉得你到底是不是个高级程序员?
版权声明: 本文为 InfoQ 作者【丛风】的原创文章。
原文链接:【http://xie.infoq.cn/article/388b7b39b627636373ca8820b】。未经作者许可,禁止转载。
评论