提升技术招聘有效性 | 为什么企业总考算法题?

发布时间 2023-09-27 17:49:47作者: ShowMeBug

前些年技术圈有个经典名梗:

广受谷歌员工欢迎的 macOS 包管理器Homebrew 的开发者,技术大佬Max Howell,去谷歌面试时由于不会做一道非常基础的算法题——翻转二叉树,而被谷歌拒了。

当时圈内炸了锅,有人觉得是大佬不屑于去做,有人顺带吐槽了自己的类似经历......

 

 

其中一位网友的评论切中要害:“大佬不会做翻转二叉树,但他仍然开发出了Homebrew ;你虽会做,但却开发不来。”

问题出在哪呢?

至少我们能发现谷歌的这道题并没能挖掘出大佬真正的技术实力,从招聘目标来看,其实是有些失败的。

大佬在之后在技术论坛里做出了解释:

他承认自己当时确实不知道二叉树,但强调了谷歌不能因此拒掉他。

虽然他不懂很多CS 理论,但他开发出了在乎用户体验、饱受好评的Homebrew, “真正开源世界中一颗闪亮的星”,他认为这跟CS 理论没有半点关系。

他表达了一个清晰有力的观点:实践比理论更加重要

01 为什么总出算法题?

 企业为什么执着于出算法题呢?

 有三方面原因:

 省时省力:技术岗位的主要任务是完成工程项目,并没有太多时间和资源来针对岗位需求来制定题目。

 算法题则无需编程语言或环境的配置,甚至用白板都能直接进行考核,对企业很方便。

 算法题容易评估:企业要出跟实际项目相关的题型,就需要更多的时间和资源来设计和评估,许多复杂的细节难以量化和评价。

 算法题有标准答案和客观指标,如时间/空间复杂度来直接评价候选人的水平。

 企业的“保底思维”:算法题考察了程序员的基本功,像一个大漏斗,留下来的至少基本功不错,里面可能存在合适具体岗位的人选。

 但只考算法题存在着许多局限性。

02 算法题的局限

2.1 实际项目有时不需要懂太多算法

有人会说,算法考核的都是基础,若连基础都不会,那怎么证明他有更强的实战能力呢?走路都不会,又怎么参加长跑比赛呢?

但算法与实际项目的关系,并非上楼梯似的递进,而更像水分子跟水一样的层级关系。人类真正了解水分子结构不过几百年,但不妨碍人类一直在用水。

就像打造一个游戏引擎,需要学习很多算法,但游戏设计师使用游戏引擎来设计游戏,却不需要懂太多算法。

其实,许多算法早已被封装好,集成在各种工具和框架中,除非底层开发工作,比如开发新的游戏引擎,许多岗位早已不需要接触这些算法原理了。

现实工作中,如何很好地完成业务需求,更多取决于候选人如何很好地去使用相关的工具与框架

2.2 算法题匹配不了复杂的工程问题

算法题通常是抽象、简化、标准的,实际项目中的问题往往是具体、复杂、多变的。

招聘时的算法题,往往预先设计了一个最优解,让候选人在限定时间内解出。

但现实中,工程问题往往不仅没有标准答案,有时甚至连问题在哪,是否能用现有技术解决都不清楚。

比如招聘中,企业会让候选人写一个从A到B点的最短路径算法。这类题目通常被精心设计,数据被构造,一定存在最优解,问题的输入和边界条都相对简单和规范。

但实际的交通系统项目中,存在着拥堵、施工、事故多种路况,步行、汽车、公交多种方式、用户随意更改目的地,以及要实时同步交通数据,这些都是要候选人花更多精力考虑的复杂情况,而非仅需记忆类似Dijkstra 的一个算法就能搞定。

项目代码是真实世界的,存粹的算法代码只存在于阉割版的证明理论里。

只有理论,而无法高效实现的算法也并不少,比如Kruskal 算法很早就出现,但很久之后才找到了较好的实现方式,变得实用。

技术人才的核心价值,是用代码实现具体的功能,而非仅懂理论概念

2.3 AI 新浪潮的冲击

招聘中,候选人往往需要闭卷限时解答算法题。

但现实中复杂的项目,技术人员可以长时间沟通交流、协作,并且自行查阅资料。

随着AI 发展,查阅理论算法知识,更是轻而易举,记忆算法的价值大幅减弱

这是我用AI 工具实现的“关键词出现频率统计”功能,其中涉及到了Porter Stemming和Snowball Stemming 等词干提取的算法,而我对这些算法一无所知。

目前算法题考核招聘方式,无法还原实际场景中的资料搜索、沟通协调等相关能力。

总之,通过算法题先筛人,再进一步靠面试判断岗位匹配度, “先筛人,后匹配”的模式,仅是旁敲侧击挖掘能力的方式。

不仅会漏掉如Howell 那种有潜力、创造力、有专长的技术大佬,也容易招到一群只会做算法题,但缺乏沟通协作、解决实际问题等拥有工程能力的人。

好比打靶并没刻意瞄准靶心,只是先让自己手别抖,这样“弹孔”容易稳定地集中在某一区域,招到一群相似的“优秀”人才,但却可能偏离岗位的“靶心”。

有没有什么方法,能直接冲着“靶心”瞄准,反过来从岗位出发,直接招到匹配该岗位人才的方式呢

03 ShowMeBug 基于岗位的“实战题型”

ShowMeBug 致力于深挖技术实力,为企业找到技术岗位的最佳匹配人选,专门打造了基于岗位的“实战题型”

从岗位需求出发,ShowMeBug 自研能力模型,将岗位能力细化为逐条能力维度,再基于能力维度,推导出具体的技能与知识点。同时也支持企业自行调整。

这些知识点,是ShowMeBug 与各类行业大佬合作,总结大量过往实战项目案例提炼得出。

确保了什么样的岗位,就能明确需要什么样能力,并出相应的题目考核这些能力,使得通过测评的的候选人完美匹配岗位的需求

比如,除了像 Java、JavaScript、C++、Python 等考核编程语言能力的基础编程题,也有像 Vue、SpringBoot 等,考核候选人使用前后端框架进行需求实现能力的题目。

下图中,就是一道考察候选人“是否能够处理耗时任务”的实战编程题

 

这道题目模拟了一个常见的场景:用户在前端点击按钮后,需要优化接口,让后端将耗时任务放入不同线程中异步执行,从而让前端不需要等待所有任务完成才能收到响应,优化用户体验。

同时,ShowMeBug 题库也支持“开卷有益”功能,企业可以在试卷设置AI 编程助手。最大限度还原候选人现实中的工作环境,考核他的实战工作能力

总之,企业在招聘时,可直接使用ShowMeBug 的5000+ 道题目直接进行考核,节省下大量时间与精力

企业也可针对不同岗位,通过调整相应的能力维度、技术与知识点,来自定义想要考核的题目,满足自身个性化的招聘需求

“实战题型” 的内容与AI助手,也很好地把候选人放在了真实工作环境下去解决贴近实际项目的问题,最大限度地在屏幕前直接还原他的真实技术能力,助力企业精准择优。