技术实力的迷思
俗话说“文无第一,武无第二”,技术就是一种“文”的能力,很多时候我们很难直观看出一个技术人员的实力,但不管是公司招聘的面试,还是公司内部的晋升面评,都需要在较短时间内快速判断一个技术人员的实力。
技术实力的本质
得益于工作岗位的关系,我在考核技术人员的实力时积累了较丰富的经验(包括踩坑的经验)。首先是招聘,前后面试了几百个人吧,技术范围包括服务器、android、iOS、前端,既包括初出茅庐的应届生,也包括腾讯的 T4 大牛;其次是晋升评委,作为职业等级晋升的评委,面评过几十个晋升的技术同学,各种案例都见过,也与其他评委一起互相交流,有时候甚至是针对某个同学通过还是不通过产生争执。通过这种不断的实践、思考、踩坑、交流的过程,逐步形成了一套完整的方法论,接下来就谈谈我的这套方法论,分享一下我是如何判断技术人员的技术实力的。
简单来说,判断技术实力的一个总的原则就是:技术实力就是指解决问题的能力!
我们将这个原则细化一下,可以得到几个细则:
- 不存在放之四海皆准的技术;
简单来说,问题是和领域相关的,技术是用来解决问题的,因此技术也是领域相关的,不存在放之四海皆准的技术。
- 技术要能解决具体问题才有价值
技术只有能够解决某个领域的问题才有价值,否则光知道某个技术没什么用;掌握了某个技术但在当前的领域用不上,这个技术对当前领域来说也没有价值。
当然,确实存在某些技术可能在当前看起来对当前领域没有用,但后面可能会用到,因此技术人员需要自己储备一些当前暂时没有用的技术以拓宽技术视野,例如当前大火的人工智能和区块链技术,但要注意“可能”这个词,这需要技术人员自己进行判断和平衡,不能拿技术储备作为托词一股脑的什么都储备,例如数据库开发工程师至少在这几年是不需要储备 VR 知识的。
有人会说“我考核的是面试者的技术基础和思维能力”,这个说法没错,但如果是这个目的,现场手写快速排序这种面试方法就是错误的。
如果是考察技术基础,考核的范围应该是算法的基本逻辑,优缺点、适用场景,因为这些技术点在后续具体应用中选择合适的算法来解决问题的时候很有用;
如果是考察思维能力,考核的方式应该是给一个具体的算法应用题,来看看面试者的分析和思考过程,例如我在知乎上给了一道我们业务上曾经用到的“如何快速计算你好友的好友和你的共同好友数”
- 问题的复杂度决定技术实力的高度
问题的复杂度不同,复杂度越高,解决起来越困难,相应的技术实力要求也越高。
能发现和解决这个问题的技术人员实力非常高。
“技术高手必须对业务很熟悉” —— 正确
“贡献了开源项目代码的才是技术牛人”—— 错误
理解评估技术实力的基本原则后,我们知道了需要解决的问题复杂度越高,技术实力就越高。在这个基础上,我把技术实力分为两大类 6 分类:
硬实力:真正解决问题的能力,别人可以看出来的能力,技术实力按照“点、线、面、体”的 4 个分类逐层上升;
软实力:比硬实力更厉害但也更虚的能力,简单来说,要想解决问题首先得发现问题,但很多时候问题并不是一目了然的,需要有一定的技术洞察力。软实力主要包括2 个核心能力:发现问题、技术创新。
硬实力
我把技术硬实力分为四个等级:点、线、面、体,技术等级依次提升,解决的问题复杂度也越来越高。
下面详细解释一下:
技术点
“点”就是某个具体的技术,用来解决某个具体的问题,例如使用 JDBC 从数据库读取数据,目的是解决数据掉电丢失的问题;使用 Java 多线程,目的是为了解决大量用户并发访问的吞吐量和时延问题。掌握了技术点,就可以开始基本的业务功能开发了。
掌握了技术点,就可以开始基本的业务功能开发了。
技术线
“线”就是一系列相关的技术点组成,每个技术点都是为了解决某个问题。
掌握了技术线,就可以完成某个业务功能的全流程设计和开发了。
技术面
“面”就是某一类相关技术线的综合。
掌握技术面,已经是某个领域的专家了,简单来说就是这个领域的问题找你都可以搞定。
技术体
“体”就是多个技术面的综合。
掌握了技术体,就可以进行架构设计,或者成为某个领域的资深专家了,解决领域级的复杂问题。
软实力
1. 软实力发现问题
有的问题很明显,但有的问题并不那么明显,并不能一眼看出是问题在哪里,是技术问题还是管理问题。
除此以外,问题的根源往往掩盖在很多问题表象之下,如果不解决根源问题,解决一个表象问题,获得一时安宁,一段时间后又发生另外的问题,长此以往反反复复。
发现问题的能力主要来源于经验,包括成功的经验、踩坑的经验、参考别人的经验,因此如果要培养自己这方面的能力,多思考、多总结、多学习、多参加行业交流。
2.技术创新
达到这个级别基本都是业界大神一般的级别,说实话我也没什么经验,只能仰慕这些大神。
link