什么样的开发者才能在简历上写“精通 XXX 语言”

一般这么写的,都不算精通。

朋友们好,我是 bennyhuo。

大家肯定见过写着 “精通 XXX 语言” 的简历,我在过去几年的工作经历中就见过精通 Java、精通 C++ 甚至精通 Kotlin 的简历,这在几年前尤其流行。

当然,现在大家稍微做一些功课就会看到“千万不要在简历中写精通 XXX” 之类的警告,不知道大家有没有想过,为什么写精通就是不行呢?

什么是精通?

要搞清楚这个问题,先得搞清楚什么是精通。

精通: 透彻通晓。

晋 左思 《魏都赋》:“硕画精通,目无匪制,推锋积纪,鋩气弥鋭。” 唐 李咸用 《赠陈望尧》诗:“若説精通事艺长,词人争及孝廉郎。”《醒世恒言·刘小官雌雄兄弟》:“不过数月,经书词翰,无不精通。”如:他精通英语。

这个解释非常清楚,但有一个很麻烦的问题,所谓精通其实是一个偏主观感性的描述,而不是一个可以量化的标准。

我举个例子,汉语是我的母语,我虽然天天说汉语,但我如果说我精通汉语,肯定有很多朋友会觉得“你不是在开玩笑吧”,但如果这话我跟火星人说,他们一定觉得没毛病。

“难以量化”就会让表述的结果非常主观,考虑到我们的文化背景讲究谦虚谨慎,于是说自己精通 Kotlin,精通 Java,就让人感觉这位候选人有些自大。

什么样的候选人喜欢写精通?

从我的面试筛简历的经历来看,写精通 Kotlin、精通 Java 的候选人,无非是希望证明自己对 Kotlin 或者 Java 的掌握比较不错,能够胜任这份工作。

换个简单的说法,就是希望通过写自己精通 Kotlin 来证明自己会 Kotlin。是不是听起来有些不对劲?这不是典型的循环论证吗?就好像说,bennyhuo 的视频很不错,因为很有趣一样,本质上说的是一件事儿,而没有给出具体的论据。bennyhuo 的视频很不错,因为他的视频一不带节奏,二不贩卖焦虑,三我编不下去了。

总之就是要给出具体的论据来证明你的结论,而不是用一个结论来证明另一个结论,或者用一个主观的描述来证明一个客观的情况。事实上,一个无法量化的描述其实无法证明任何结论。

这道理很难懂吗?当然不是。那为什么前几年那么多人喜欢这么写呢?一方面,互联网快速发展的早期,招聘单位招人很多时候就是为了储备人才,筛选标准方面确实存在比较宽松的情况,这使得敢于自信地在简历上说自己精通 XXX 的候选人确实更容易蒙混过关;另一方面,可能也确实存在一些候选人没有能够拿得出手的项目,就是没得写,只好说自己擅长什么,熟练什么,精通什么了。

为什么精通成为简历上的禁忌?

精通二字在简历中成为禁忌,除了因为这个词表述的内容难于量化以外,还有一个重要原因就是很多候选人其实甚至连普遍意义上的熟练掌握都达不到,就敢写自己精通。

举个例子,我曾经在面试过程中碰到过说自己精通 Java 的候选人,于是我问他 final 关键字有什么作用,他说修饰变量不可变,修饰类不能被继承,修饰方法不能被覆写。非常标准的八股答案是吧。

但作为一个精通 Java 的开发者,我们的回答必须融入自己的理解。修饰的变量不可变,那么

  1. 我们应该在什么情况下用 final 修饰变量?
  2. final 修饰的静态变量和非静态变量有什么区别?
  3. final 修饰的 String 和 ArrayList 有什么区别?
  4. 有没有什么办法修改被 final 修饰的变量的值?
  5. 被 final 修饰的变量在并发中有什么作用?
  6. 为什么匿名内部类只能捕获 final 的局部变量?

这些都可以聊,这绝对不是网上随便搜到的八股题目所能够涵盖的,也最能体现自己的水平。

这样的例子太多了,于是最后”精通“二字与狼来了一样,让人看到只能联想到一个字:

怎么证明自己确实精通?

当然,也不排除确实有些候选人真的精通某一项技术。

讲个小故事。我之前打算从腾讯出来,找工作的时候有个面试官看了我的简历准备聊点儿 Kotlin 协程的内容,结果他犹豫了,他欲言又止最后来了一句,Kotlin 协程方面应该没啥好问的了,看你还出了一门 C 语言的课程,咱们要不聊聊 C 吧。为啥会这样呢?因为那会儿是 21 年 3 月,他看《深入理解 Kotlin 协程》这本书已经写完快一年了,而 C 语言的课程刚上线几个月,估计我已经把协程快忘光了,就别问了吧,给点儿面子。

哈哈,开个玩笑。程序员的圈子里面,高手是非常多的,总有大佬是真的精通某些技术的,人家要写简历会怎么证明自己精通呢?

在讨论这个问题之前,我想先跟大家聊一下“武松打虎”的故事。武松上山前在店里吃酒,店小二说山上有只老虎非常凶狠,已经伤了多人性命,晚上千万不能上山。结果武松不听劝阻,,执意上山。作者又在武松与老虎打斗时着重描述了老虎是如何如何厉害,却很少提及武松精通什么功法。结果呢?老虎被武松打死了,武松的武力值大家瞬间就能理解,无需多言。

类似地,如果需要证明你精通什么技术,你需要列举你做过的相关的具体事情,例如想要证明自己精通 Kotlin,那就说说自己使用 Kotlin 做过哪些公司项目,做过哪些与 Kotlin 语言强有关的技术专项,参与过哪些开源的 Kotlin 项目,或者给 Kotlin 官方提过 PR 等等。通过介绍这些项目的细节,来展示你对 Kotlin 的掌握程度,让面试官自己推断出你“精通 Kotlin”的结论,而不是自己把结论说出来。

同样是那次出来找工作,有一个面试官对编译器比较感兴趣,于是问我有没有研究过 Kotlin 的编译器,我说这块儿还涉猎的比较少。不过现在不一样了,这段时间我在 GitHub 上开源了好几个 Kotlin 元编程相关的项目:

不仅如此,经过两年的努力,我又写了一本书:《深入实践 Kotlin 元编程》。

深入实践 Kotlin 元编程

>>>点击查看详情<<<

这本书的内容可以说我是躺在 Kotlin 和 Java 编译器的源码上写完的。如果几年后有机会再出去面试,不管是问我 Java、Kotlin 的反射的工作机制,还是 APT 和 KSP 的实现细节,甚至 Kotlin 编译器插件的内部原理,我都能说得头头是道。

既然如此,我觉得我在简历上写个熟练掌握 Kotlin 应该问题不大,不过显然让面试官自己得出结论效果会更好,而我只会说:


关于作者

霍丙乾 bennyhuo,Google 开发者专家(Kotlin 方向);《深入理解 Kotlin 协程》 作者(机械工业出版社,2020.6);《深入实践 Kotlin 元编程》 作者(机械工业出版社,2023.8);前腾讯高级工程师,现就职于猿辅导