很多人都在抱怨“面试造飞机,工作拧螺丝”的现象,透过这种现象,我们不妨想一下,为什么面试需要造飞机,同时,我们在工作中,拧的到底是什么螺丝呢?
这篇文章的诞生经历比较神奇,是因为我昨天晚上躺上床,闭上眼睛,突然想到的一种个人和公司业务的一种关系。然后今天来就想把这种关系表达一下。因为个人能力和见识的原因,下面的解释不一定准确,但是对于新人来说,还是有一定的参考能力的。
1. 从一个问题开始
首先抛出这样一个问题,公司招人的目的是什么?相信不难回答,无论公司的业务扩张,还是公司想招聘某些特殊人才,不容置疑的是,公司招人的目的就是让应聘者为公司创造价值的。
所以,我们可以很容易得到一个等式:
这也是我要说的一个点,即:我们如何通过我们的个人能力和公司的已有业务,来为公司创造价值和利益。
2. 个人拙见
整个结构分为四层,从下到上,从里到外,从个人能力到集体盈利,这张图从层级关系上来解释了个人和公司盈利的关系。
分层来说,下层是上层的支撑。如果我们把层次理解成一个圆环的话,那么,底层就是圆环的核心,而上层的,就是圆环的外壳,同时,也是我们在工作中,最容易用到的知识和能力,也是我们做事情的结果。
譬如,第一层的“个人品质与能力”是最抽象的特质,它支撑了我们整个人的发展。第二层的“表达和沟通”、“技术”则是我们在工作中最常用到的个人能力。第三层的每个点则是我们在工作中能力的具象化,是可以切实体会到的能力。而第四层,就是我们做事的结果,也是我们最终的目的。
3. 要点分析
第一层
- 个人品质与能力:指的是个人潜在的能力,也指的是个人未来的价值。这种能力,很难具象化,它包括但不限于:学习力,持续发展力,思考能力。你的技术和各种直观能力,全是基于个人的品质才能获得的。这种能力很抽象,但是我们展现出的所有能力都是以这一层为核心的。这个是面试时必考的一个点,譬如,相信大家面试的时候都被问过这样一个问题:“你最近再看什么书?”,这个问题,面试官是想考察你的学习力和对技术的热爱程度。
第二层
- 技术:指的是我们广义上的技术,并且更侧重于基础知识,如计算机网络,操作系统,语言掌握,架构思考等等。面试时候的很多问题,其实就是问的这一层的问题,“屠龙之技”的修炼,就是靠的这一层。
- 表达和沟通:这个面试的时候不会有特定的问题,字如其意,面试官会从你们几十分钟的交流中去判断你的表达和沟通。
第三层
- 团队协作:团队协作是以交流沟通和技术为基础的,技术方面会借用git等程序,是HR和技术面试官要考察的内容。
- 代码可读性:这个面试不容易考察,但是对平时工作有很大帮助。可以参考《重构-改善代码既有的设计》这本书,Java的也推荐《阿里巴巴编码规范》和《Effective Java》。
- 技术支持:这个比较宽泛,既指的是中间件理解,如对中间件的二次封装等,或者重新开发一个中间件系统/插件;也指对一些语言新特性的掌握并在工作中使用,或者是一些提高性能的代码的最佳实践等等。之所以把这些归并到一块,是因为在工作中用到的其实比较少,但是如果真的用到,也一定是值得津津乐道的一个KPI。
- 架构设计:大到系统的架构设计,包括高可用,高性能,可扩展,小到每次业务迭代的需求设计,都是架构设计的一部分
- 业务迭代:即是结合对业务的理解,写出更符合业务需求的代码,更好的赋能业务,推动业务发展
4. 问题解答
- 为什么面试需要造飞机?正如大家所想,互联网行业不断的内卷和应聘人数的增加,为了增加区分度,导致了问的问题越来越偏,问的点越来越难。但除了增加区分度外,面试官还是想考察个人的核心能力。同时,参考我刚才的图片,那是在第二层的“技术”模块中。换句话说,这是在考察应聘者的当前价值和未来价值。
- 真实工作中到底拧的什么螺丝?拧螺丝只是一个代称,其实调侃的背后,表现出来的是真实的工作并没有挑战性,或者说真实的工作太过重复并且简单。究其原因,参考我上面画的图片,是因为团队协作,业务理解,代码可读性,这三点几乎每个人都具备,但是它们的区分度不是很高,导致大家几乎都差不多;而又因为大家平时对Debug这些所谓的琐事没有系统的衡量,所以Debug的快慢也慢慢被大家忽略;至于架构设计和技术支持,更是基础程序员百年难遇的事情。所以综上所述,产生了大家拧螺丝的错觉。但是如果我们仔细去想,针对这几点,努力把它们做好,你还是在拧螺丝吗?
PS:和上级交流汇报的时候,要体现出来两点,一个是个人的现有价值,一个是个人的将来价值。现有价值包括自己目前完成了哪些工作,实现了哪些目标;将来价值指的是个人潜力,学习力,以及其他可能对将来公司业务创造价值的东西。
5. 更好的拧螺丝
通过我刚才建立的模型中,我们可以发现:面试更偏重于第二层,工作和晋升更偏向于第三层。
所以,在工作当中,我们不妨有意无意地去锻炼自己第三层的能力,譬如业务迭代的时候想想有没有更好的设计。同时,即使我们没有架构设计的机会,我们也可以努力学习和借鉴公司已有的架构设计,把它们吃透理解透。随着工作的深入,我们也可以在开发过程中发现现有阶段的不足,然后补充,这都是拧螺丝的一部分。
在平时,我们还是需要夯实第二层,虽然基础性知识不容易忘记,但是算法和八股这些东西,总有生疏的时候。
其实,随着年龄的增长,我们要学会在具体的场景中抽象出来方法论,然后再将方法论发散为具体的场景,这便是一个升华的过程。同时在学习的过程中,我们要努力形成 学习->思考->借鉴->使用 这样一种迭代关系,这样我们造的飞机,才不至于无处可用。
6. 未来补充
当然,这个图还是有一定局限性的,譬如它只是针对初级程序员来说的。
根据我的了解,对于阿里的社招来说,没有特殊情况下,在高级开发工程师(P6)的要求中,“个人能力”模块还包括之前的业务经历。即对于社招来说,个人和业务就应该有轻微的耦合关系,这也是为什么大多数JD中都表明了一点:有相关从业经历者优先
对于阿里的高级技术专家(P8)来说,上图中对业务那一块的处理就不是很合适。对于他们来说,“业务和场景”模块的上一层,可能还会包括“创新业务”。“代码可读性”在它们的技术上,占比会缩小,相反,“团队协作”模块会扩大,并且还会增加“团队管理”模块。
而这些我为什么没画出来呢?一方面是因为这张图是针对新人(我)的,另一方面就是我没经历过,不敢妄加评断。
最后:
打个广告,欢迎关注我的公众号“王星星的魔灯”,内推,面试等你来撩~