让人工智能招聘程序员?靠谱!
当今该行业在不断在寻找好程序员。在产品和服务数字化的新时代,掌握编程技巧是一大加分项。每当有朋友要我为其公司推荐一个优秀的程序员时,我就会和他说——干嘛推荐给你,如果有这么个程序员我自己就会雇佣她了。但是掌握编程技巧到底意味着什么呢?当我们雇佣程序员时,我们想要的是什么呢?正确编程的能力,好让程序通过测试案例?不不不……
一个经验丰富的面试官会告诉你,写代码的意义远远不仅是通过测试案例。对于初学者而言,我们真正看重的是,求职者对问题的理解程度以及解决能力,而不是如何写正确的代码。面试官之间常常会讨论的问题是:「他逻辑捋顺了吗?」我们也对求职者的逻辑算法是否有效——拥有较低的时空复杂度有兴趣。此外我们也关心求职者所写代码的可读性和可维护性,该行业当今面临的一个令人沮丧的问题就是要处理一些糟糕的代码,这些代码会在异常情况下崩溃而且难以修复。
那么我们为什么还要用市面上那些自身仅仅通过了测试案例数的自动编程评估呢?可能是因为,人们相信没有更好的选择了。如果当下人工智能能够自动驾驶,那它能像人类一样为程序评级么?可以。在我们2014年投稿KDD的一篇论文中,我们发现用机器学习给程序就参数进行评级,可以做得和人一样好。机器评估和专家评估的匹配度高达0.8-0.9。
这为什么有用呢?在美国,我们让90000个求职者使用了我们的程序测评产品Automata。他们都是有计算机科学或工程学学位并且有志于IT工作的应届生。Automata对他们的四个指标进行评分:案例测试通过率,机器学习算法检测出的逻辑正确性(从1到5打分),运行效率(从1到3打分)和使用最佳的编码实践(从1-4打分)。我们发现面试官重视的是下面的东西:
逻辑、思维过程正确吗?
代码高效吗?
这是可维护、可扩展的吗?
通常公司会雇佣那些代码几乎完全正确的人,比如说那些在一套检验程序中通过了80%测试案例的人。36%的应届生能通过这一条件。这样在通常的招聘场景中,就有64%的人被拒掉了,不会再做进一步考虑。我们让我们的机器学习算法来检验下这些「出局者」中有多少人的程序逻辑是正确的但只是犯了一些愚蠢的错误。我们发现了什么呢?在我们的系统中这些人仍有16%得分4分或以上,这意味着他们的代码有着「正确的控制结构和关键数据依赖关系,但犯了一些愚蠢的错误」。这些人也应该留下来参加后续的面试。智能算法能够识别那些人类专家能够识别但是测试案例完全忽略掉的东西。
我们发现许多应试者的代码通过了不超过50%的测试用例(如图1示)。为什么会这样?我们筛选了一些例子,发现了一些有趣的地方,学生们在这些地方犯了错。在一个要求删除字符串中元音字母的问题中,一个应试者犯了错,甚至业内的顶尖人物有时也会深受其害——否定运算符中的一个「或」和「与」的使用错误!另一个已经捋顺了逻辑但是在最后一行搞砸了。他缺乏从 Java中的字符数组转回成字符串的知识。像这种专业知识的缺乏是典型的没有在Java上花费足够时间的表现;但是这很容易学会,不应该以此在评估中削弱他们的表现,也不应阻止他们将他们自己与那些想不出算法的人区分开来。
我们识别出那些几乎代码全部写正确的人;那些能想出算法,并把算法用于编程语言的人。然而,这些只是些写得不怎么样的没有人想要接触的代码吗?进一步,他们有写有效的代码吗?或者只是导致了在app或软件中常见的那些「加载中」信息吗?我们发现写代码时,大概38%的人会想出有效的算法,30%的人写出的代码在专业的软件系统中是可以被接受留下的。综合一起,大概20%的学生写的程序是可读且有效的。因此,人工智能告诉我们这里有20%的超级编程者,他们很值得我们与之一谈并且雇佣他们。如果我们准备培训他们,与他们一起共事,还有很多其他评分标准,能让我们用来做出明智的决策。
总的来说,人工智能不仅能开车,也能发现可以实现无人驾驶的程序员。想想如何用数据科学发现数据科学家?
机器之心,最专业的前沿科技媒体和产业服务平台,每日提供优质产业资讯与深度思考,欢迎关注微信公众号「机器之心」(almosthuman2014),或登录机器之心网站www.almosthuman.cn查看更多精彩内容。