魔咒
程序猿的职业生命只有35岁,时不时的就有新闻爆出来。这或者出于程序猿的自黑,或者出自于无情的现实世界。但无论他到底是如何出来的,无可置疑,这都是萦绕在每个程序猿心中的一片阴影。35岁后我们还能干点什么呢,也是成了茶余饭后不可或缺的谈资。
由来
最近的招聘中有一位来自于某大厂的有近十年开发经验的同学,并且主要做基础组件的开发,涉猎过MQ,时序数据库,分布式数据库等,有着自己的公众号。这份简历看下来不可谓不光鲜亮丽,也不由得让人有一种思考,我35岁的时候又会是什么样呢?
在羡慕之余我的心里面也有这样的几个问题?
- 这样的一份简历,中间件是最对口的选择,为什么选择了业务团队?
- 宣称的高级技术经理职位,可是我们最多可以给出来个高级别的技术开发职位,这匹配吗?
面试过程
怀着一份对他的好奇,同样也是对于他技术的羡嫉,当然也是想看这位前辈的经历能不能为自己迷茫的职业生涯点亮一盏明灯。
面试正式开始
- 项目经验
我的切入点是MQ和分布式数据库。前者我曾经有过一部分研究,无论是关于高可用,事务性消息,Rebalance, 这必然都是研发的难点,抱有的一种态度是请教以及看待他对于问题的解决。 后者,是我很有兴趣的一点,分布式数据库,解决了大型业务分库分表所带来的不便捷,提供可扩展性以及兼容SQL协议的数据存储方案,这部分我的态度是请教。
但是,实际的面试结果很让我失望。他对于MQ的大部分设计已经遗忘,甚至总体的架构模型都变得稀里糊涂。在分布式数据库上他对于底层的KV存储方案,以及我很关系的动态的扩缩容,在线DDL,分布式事务等能力的支持都无法全面的表述。
我相信他的经历没有伪造,我也相信由于时间的久远他是忘记了,我更相信他对这些没有本质性的认知,这是一个35岁,10年的工作经验的同学应该有的技术思维吗?我不寒而栗,我自己又是怎么样的呢?
- 基础知识
我是一面,说白了就是面一些基础,在我们的协商下我们选择了Java语言作为面试的重点。所有的操作系统、网络、数据结构与算法等知识都会套用在Java的体系下去做讨论,这是我的强项。作为一线的开发人员,也作为深入研究过一些JDK源码的技术人员,我相信这点上我不输他。但是我更希望看到的是,他对于Java是如何理解的,能到什么样的深度。
再次,结果让我有所失望。“记不太清了”这是他常见Java基础考量问题一些回答。“没有怎么听说过”这是他对业界新出现技术的回答(例如reactive, java8以上版本新特性)。
我相信他曾经有过较好的Java基础,因为在他磕磕绊绊的回答当中我能够感受到一些点,虽然不全面。但是,无奈的是这些被遗忘的点恰恰在我的知识范围内是基础,是永远不或缺的基础。我再次有些许的迷茫,是我关注的点太为细碎了吗,是我错了吗?
- 综合素质
这一点比较虚,其实也最难以把握。在我的题目设置中并没有太多(这也不是一面应该关注太多的点),所以下面仅仅是我通过对他的项目经验和基础知识面试中所的出来的一些结论。
首先是执行力。在大厂工作多年,又是多个中间件研发的曾经参与者,我相信他是有一定的执行力的或者他是能够完成自己所负责的工作的。但是要说提到积极主动,求极致我觉得是没有的。比如说问到你们做分布式DB的时候和TIDB是否做过对比和超越,回答更多的是模仿,仅此而已。在所有的问题中更没有发现他对于某个技术点或者问题的极致追求和解决。
再者是沟通。我不否认他在这点是非常不错的,肯定要超越我。原因在于,他能够倾听,能够去问题做思考,而我相对于来说较为冲动,容易直接给直观结果。
再者是思考能力。我觉他还不足的,就目前他的技术素养来看,并没有形成完整的技术观和方法论,更不要提能够引领。
最后谈一下个人影响力。我无法判断他的圈子到是什么样子的,但是我能看到的是,在他展示给我的形象里面,他并没有让我看到一点这个东西他做的,很厉害,我很佩服。我相信这是你折服于人的一个最基本的一面。
我的看法
面试结束了,我却陷入了一份沉沉的深思。这是他35岁10年的经历,却被一个30岁,不到五年经历的人看透了,看扁了。我35岁的时候会是什么样子。莫非程序猿35岁就只能够失业吗?我不相信这个世界上真的有这种魔咒,我只相信只是程序猿这个职位太过年轻了,我们没有看透他,这是一种戏谑。《哪吒》的那句话,我命由我不由天,只是我没有做到位。
- 项目经验上
前车之鉴,后事之师。遗忘是人类记忆曲线必然过程,没有一个人类可以逃避。但是项目要看透他的本质。第一层次对他解决问题的思考,更高层次的是对他进行一次抽象,让他成为解决同类问题的优秀典范,我相信你就永远不会忘。 举个例子,分布式DB要做高可用,MQ也要做高可用。高可用的手段又有多少种呢,是不是可以相互借鉴。 更深一层次的,如果你能够抽象出一种通用的高可用的方式,那是不是一个功德圆满呢。
- 基础知识上
以前经常听人说到过,语言不是问题。这句话我有两个观点,一部分是认可。认可的地方在于,无论任何语言都是对于(操作系统、网络、算法、特定业务知识)的封装,提供一种易用的逻辑编排能力,他们都在试图隐藏这些细节。对我们来说,最大的难点是逆向思维的去看,就是从语言的语法糖中寻找到他解决的实际问题,以及在这个上面的做更高层次的抽象过程。一旦我们能够发现这个,我相信再也没有基础差这件事情,不同的只是细节上的差异。
- 再说新技术
技术研发人员是需要不断的前进,永远不能止步的。这个世界永远都有解决不完的问题,任何一个问题的出现都会现有体系造成新的挑战。另外,人类在追求极致上总是孜孜不倦的,要不然也不会有人类千万年的延续。所以说,我们不仅仅要追新,更要去创造。用我们的创造力去解决新出现的问题,那个时候你就是新技术。
- 最后说综合素质
我不想去大篇幅的去做执行力,沟通协作能力的分析。只想说一下个人影响力。试问一句,专家学者需要面试吗?这个问题的答案应该是,面试应该换成邀请。这是因为专家学者的能力,是用一种公众所尽知,公众可尽取的方式分享给大家。所有的人都可以去掂量这份内容的价值。而作为一个专业技术人员何尝不是呢,又何尝不应该做到呢。