我们的中国文化,对“面子”看的特别重,所以你会发现身边到处都是高级XXX,听着倍儿有面子,程序员也不例外。
但是你真要问每个人,你认为的高级XXX是什么样子的。估计每个人都有不同的回答。
我还记得在我刚开始从事编程工作的时候,对坐在边上不远的那位我心目中的高级程序员的印象是:
工作至少有6、7年以上,能写一个用起来很方便、看起来很牛逼、但是不太容易让初级人员看懂的框架。
前两天,我把这个问题丢到群里,大家给出的答案中,占比最高的是以下几个。
-
有 N 年以上编程经验(大部分都说5年以上)
-
有出版过技术图书
-
对某领域内对常用框架原理有了解,并且实际使用超过2年
-
可以随时随地快速写出常见的一些算法
-
至少封装过一个被全局使用的开发框架
-
写出来的代码,阅读起来很好理解
-
能带领其他人员成功完成项目
你看,这件事对大家来说就是常说的,“一千个人眼中有一千个哈姆雷特”。
不过这也正常,毕竟像初级、中级、高级这种高度抽象的词汇,想要得到一个可描述的定义与人交流,必然需要夹杂着个人的主观因素。
但是很多行业都在这么进行分类,自然有它的道理和好处。
我觉得其中最大的一个好处恰好是「主观」的附属品——「弹性」。
比如,我现在想招一位高级程序员,面试的时候不管是通过还是不通过,我都有理由来解释我对“高级”的定义。如此一来,我对陌生人的判断就有了更大的「弹性」。
这其实是面试官的一种权利,也是长期以来面试者总在面试中处于下峰的原因之一。
事物总是有两面性的,我们在对陌生人弹性的同时,间接的也对内部的人弹性了,会导致内部的一些人才培养出现问题。
比如,你觉得内部的高级程序员不够,希望能在外部招聘的同时,从内部也培养一些出来。但是此时,你又面临了需要定义什么是“高级”的问题。
如果没法定义一个能够达成共识的标准,又如何指导培养的方向呢能是一句空话。
长期以往会导致更严重的问题:真正的高级程序员不够,只能让中级程序员顶上。顶替的时间长了,会让一些中级程序员误以为自己已经达到了高级水平。
在我平时的面试中,这样的案例屡见不鲜。 上流传的工作10年 = 1年重复10次的段子是真实存在的。
下面我来聊聊我对「什么是高级程序员」的个人看法,欢迎你和我一起探讨。
不管是什么行业,什么岗位,在这个高度分工协作的现代 会,所需的能力主要分为三个维度。
-
专业能力
-
连接能力
-
领导能力
我对程序员在这三个维度的理解大致是以下这个样子。
在这种状态下,人最容易高估自己,这也是很多导致产生很多“假高级程序员”的原因所在。
03 高级程序员 – 知道必须做些什么
高级程序员在「专业能力」、「连接能力」、「领导能力」这三个维度都有所建树。因为他们不但可以把从1到100的事情做得很好,也有能力带领其它人完成0到1的事情。
根据我身边所接触的程序员群体来看,我所认为的高级程序员,他们明白没有什么是完美的,相反,问题、缺点和风险总是存在的。
他们的决策总是站在为了整体的「平衡」角度去考虑,而不是技术的酷炫或者外界流传的所谓“正确的”技术。
他们会更多的关心那些不显而易见的东西,如可维护性,可扩展性,易阅读,易调试等等。
高级程序员就好比 会中的成年人,他们踩过足够多的坑,也填过足够多的坑,已经认清了现实的残酷,寻求适合而不是完美。周到、务实、简单,是他们做事的时候强烈散发出的“味道”。
可以根据下面的这些场景来看看你身边有多少“有味道”的高级程序员/p>
-
与初级和中级程序员不同,他们抛出问题不是为了正确的做事,而是做正确的事。他们会询问为什么要这样做以及你想要实现什么。当你告诉他们目标是什么后,他们或许会通过暗示这种方式是错误的而另一种更好来做出一些修正;当然,更重要的是还会提供论据说服你。
-
因为提前明确了做事的目标,所以在动手做一件事的过程中,他会在关键细节思考有没有更好的方法,甚至是那些不在之前的讨论范围的新尝试。
-
他可以轻松地承认他不知道什么,并且向你请教。同时也可以轻松地向他人讲清楚他所知道的事情。
-
他们理解合作的人员的职能的作用,不但知道什么时候向谁寻求帮助,还知道自己如何更好的帮助他们。
-
困难的事交给他们很放心,因为他们擅长的不是某种技术,而是解决问题的能力。他们总能解决那些之前从未遇到过的新问题,哪怕它们很困难。
那么,怎么做有助于我们成为高级程序员呢/p>
01 关注技术之余还要关注业务
为什么把它放第一点,因为我觉得这点最重要,是其它项的基础,也最容易做到。但是很多程序员不愿意去做。
一定要搞清楚业务目标,不搞清楚不开工。相信我,只要是一位合格的leader,一定会不厌其烦的和你说清楚的。
然后要习惯基于业务目标去分析可能会面临的技术挑战。比如,多少流量,涉及哪些用户角色和功能,复杂度有多大等等。
再带着下面的「不可能三角」去寻找合适的技术框架、解决方案。尽可能的寻求最优的平衡,而不是走极端。
这里所说的自驱动的“闭环”是这样的。
你会发现这里面包含了程序员在进阶后的几个常见岗位。
可以对 入座一下:D
好了,我们总结一下。
这篇我先和你聊了一下在大家眼中高级程序员是什么样子,发现没有特别统一的标准,都是模糊的。这也体现在了几个现实的场景中,比如招聘高级程序员、培养高级程序员上。
其次,我对初级、中级、高级程序员的特点分别阐述了自己的观点。
然后,给出了一些帮助大家往高级程序员靠拢的实践思路。
希望对你有所启发。
最后,用Martin Fowler的一句话作为结尾:“任何傻瓜都能写计算机能理解的代码,优秀的程序员编写人类能够理解的代码。”
Any fool can write code that a computer can understand. Good programmers write code that humans can understand
Martin Fowler
希望看到这篇文章的每个程序员最终都能成为头发茂盛的码农:D
有道无术,术可成;有术无道,止于术
好文章,我在看??
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!