发布于 2026-01-06 6 阅读
0

我为什么讨厌招聘过程中的编程挑战?DEV 的全球展示与讲述挑战赛由 Mux 呈现:展示你的项目!

我为什么讨厌招聘过程中的编程题

概念

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

概念

我们需要确保人们具备他们声称拥有的技能。我理解并接受这一点。

但这些编程高尔夫挑战真的有多大意义呢?

投资

经历过从 5 分钟的选择题测验到 2.5 小时的编程面试等各种评估方式后,我觉得对候选人的投入要求似乎越来越高。
我们应该认真思考一下这个问题:

要求求职者花费半小时进行电话面试,2.5小时进行编程挑战,1小时进行在线心理测试,却忽略了求职者可能花费的额外时间(例如撰写求职信和了解职位/公司),这真的合适吗?

难道这种说法不带有某种无礼吗?比如,在我冒着风险花一个小时进行面对面面试之前,我希望你冒着风险花掉大约15%的工作时间?更何况,最终可能是候选人在真正了解公司内部情况后决定放弃。我的意思是,总得有人明白互惠的心理原理吧。

但我跑题了。咱们还是回到正题吧。

编辑:我在评论中注意到(如果你喜欢冒险,可以去看看 ;-)),以上段落可能被解读为“不应该期望候选人付出努力和时间”。澄清一下:我指的是这些程序耗时越来越长且缺乏针对性的趋势,并非暗示候选人不应该期待审查过程(参见“概念”部分)。

条件

所以,欢迎来到这款你从未见过的在线代码编辑器,因为你已经声明不会使用你心爱的IDE了。为什么?因为显然,在熟悉的、你实际工作中会用到的环境中工作,对雇主来说并不有趣。否则,你就可以利用代码自动补全、语法警告、测试以及其他所有通常能帮助你达到雇主预期结果的工具来“作弊”。测试驱动开发?不,那太无聊了。隐藏现有的测试,并且不告诉你错误,这显然才是更现实的做法。好吧,这种情况总有日志记录,对吧?再想想!例如,在HackerRank上,除非我运行所有测试用例,否则我找不到任何获取日志的方法,而每次运行他们的系统都要编译我的代码(注意,是JS),这会浪费宝贵的时间。

时间

没错,这些测试都是限时的。几乎总是如此。单凭这一点倒没什么,但它确实会影响你的代码编写方式。你只想尽快完成,所以变量命名什么的就顾不上了,函数突然间至少有30行。而且,你根本不会考虑使用不同的文件,对吧?结果就是代码非常糟糕。代码虽然能运行,但在任何实际应用场景中你都会直接拒绝。而且,代码的性能也未必好。
不过别担心!还记得那些你无法查看的测试吗?其中一些会测试执行时间或内存使用情况,并会给出类似这样的反馈:“你的代码没有在允许的时间范围内返回”。啊,你真是太傻了!你以为这样可以节省几分钟,结果却要花更多的时间重构代码,直到测试通过为止,而你却不知道目标性能是多少,也没有任何基准测试数据可以参考。是不是感觉压力山大?

挑战

给定一个整数数组,你的函数应该返回数组元素索引之和,该索引对应的数组元素是具有该和值的数组元素的前两个元素和后两个元素之和。

准备好了吗?开始!我可没开玩笑。这就是你们经常遇到的挑战。除了你会反复阅读这些任务并在此过程中怀疑自己的英语理解能力之外,我完全无法理解这种场景在任何现实生活中是如何体现的。

“它们本来就不是用来测试的。它们的目的是考察你的问题解决能力,”你可能会这么说?恭喜,这些测试的确是这么说的。但我们不妨仔细想想:一个优秀的开发者不会贸然去做这类事情。对于这类任务,关键问题应该是:“等等,你想实现什么目标?”

这一点我怎么强调都不为过!优秀的开发人员能够理解需求,并帮助客户或经理找到解决方案。这就是问题解决:如何才能最好地满足实际需求。面对上述挑战,我们应该问:“我明白了。你需要求和做什么?这些索引代表什么?这个数组是怎么生成的?”

悲剧

你是否被建议在 LeetCode 或类似平台上进行训练?很多人都被建议过。虽然这些系统很有趣,也能提升技能,但我质疑在这些场景下的表现究竟有多大意义。我甚至可以说:在这些挑战中取得好成绩并不能说明你作为开发者的潜力(除了证明你掌握了目标编程语言之外),而且它已经培养出一些专门针对这种不切实际场景进行训练的候选人。最终,我不需要那些会写“删除数组中最小的元素直到数组为空”或“对字母表中的所有字符进行冒泡排序直到连接结果包含‘汉堡包’”这类函数的人。如果这些候选人连安全登录组件或表单提交后发送通知邮件这种常见的东西都写不出来,那我更不需要他们。我们这样做到底是为了什么?

文章来源:https://dev.to/sroehrl/why-i-hate-coding-challenges-in-the-hiring-process-5blc