当前位置: 首页 > 科技观察

为什么在面试中编写代码比阅读代码更好?

时间:2023-03-16 20:53:24 科技观察

编译器|YunZhao在招聘开发人员时,我们需要通过多轮面试来评估候选人是否合格。在众多能力中,我认为原创编码能力几乎是最重要的素质。我可以快速训练一个人掌握某一领域的知识,但即使经过广泛深入的实战训练,也难以弥补原始编码能力的不足。那么如何在面试中快速测试应聘者的原始编码能力呢?我发现传统的编码方式不好用,但是其他一些方式可以更好的发现人才。传统方法的缺点典型的书面编码考试是这样开始的:“编写一个函数来反转字符串中单词的字母顺序。”然后在接下来的半小时或更长时间里,候选人刮掉了一些东西(或者可能是共享的在线文档)。这种方法看似能筛选出很多人,但实际上效果很“弱”,根本达不到测试能力的要求。首先,相同的问题被传来传去,考生通常会非常努力地记住答案。您是在评估他们的编程技能还是他们记忆答案的能力?其次,这些问题通常是“自相矛盾”的问题,需要某种深刻的洞察力才能得出复杂度为O(log(n))的解决方案。即使是最聪明的候选人在面试的时间范围内也几乎没有真正的洞察力。这样,面试主动权的天平就向有利于面试官的方向倾斜了。当面试官决定你未来几年的职业前景时,谁喜欢在法官面前笨拙地编写代码?最后,在白板甚至文本文档上编写代码是不自然和缓慢的。没有人将在白板或记事本上“绘制”代码作为日常工作的一部分。人们真正在做什么:在一个IDE中使用大量Google编写代码。我如何在实践中做到这一点在实践中,我面试候选人的过程通常是这样的:对于每个新的面试周期,我都会创建一组预测输出的练习,开始时很容易,然后会越来越难。我当前的设置从基本函数调用开始,然后是多级函数调用,然后是递归,然后是副作用。这些通常是“假的”特征,旨在让应聘者快速成功,并为我的面试的其余部分提供一些线索。对于更高级的问题,我将从我编写的内容中提取代码。目前,我正在评估的“困难”正在探索同时“读取”操作和异步操作的抽象。其他的,比如读一段没有标注的例程,执行相当熟悉的算法,比如排序或者树遍历,从错误输出中找错误等等。举一个具体的例子,在向应聘者提问之前,我会与同事一起校准面试问题,因此我对如何衡量应聘者的技能有一个现实的期望。校准这些问题也有助于我完善它们并剔除令人困惑的部分。面试开始我会提前说明:1.我不是考核语法知识。把我想象成人类版的“谷歌”,我会告诉你一些功能或运算符的作用。第二,我不指望你能完成,因为没有人能完成。我们将在20分钟后停止。三,我也不想让你得到正确的答案。如果答案是错误的,我很乐意看到你回去调试你的想法。它对我来说和其他任何东西一样有价值。面试过程如下:我展示了一段带注释的代码行,它将调用一个函数并返回一个输出。考生阅读代码并预测输出。我取消注释这一行并运行程序,这样他们就可以看到答案。如果答案与他们的预测不同,他们会回去解释原因。我会给候选人20分钟的时间来运行尽可能多的代码。这给了我额外的时间来提出后续问题。在面试报告中,我写下了他们跑了多少行代码,他们展示了哪些优势和劣势。显然,这些编码技能并不是面试中唯一要寻找的东西。领域知识和文化契合度很重要,但我发现阅读代码是淘汰不具备最重要基础能力的候选人的好方法。面试官如何提高他们的技能随着每年有大量的开发人员申请工作,他们可能想知道如何提高他们的技能以在此类面试中表现出色。我的回答很简单:手写更多代码,因为没有什么可以替代常规练习。如何练习?最简单的方法是启动一些您感兴趣的重要副项目。游戏、网站、应用程序,等等。每周花费4-8小时来编写此代码,并使其成为您喜欢使用并引以为豪的东西。另外,这也方便应聘者在以后的面试中展示,比如把源码放在github上,让以后的用人单位可以看到应聘者平时的知识积累和工作方式。希望这可以帮助。面试应该是现实的事实是,所有的编程工作更多的是阅读代码而不是编写代码。能够清晰地思考并挑出别人的废话是至关重要的。通过要求某人反转字符串或对数组进行排序来采访某人只是在测试错误的能力。我不在乎你是否像许多算法测试一样以前见过问题并记住答案——唯一重要的是你是否能够思考、理解问题、设计和实施解决方案。能够阅读真实世界的代码并说出它的优点和缺点,比粉碎一个冒泡的练习更能说明你的能力。基于浏览器的编码环境使情况变得更糟。在工作中,编辑器开发人员习惯于使用自动完成建议、脚本、宏、代码片段等进行调整。而在代码考试中,经常会用到CoderPad之类的东西,它没有上述调整功能,时不时会导致浏览器窗口关闭等情况,浪费了更多的时间。后记开发人员参加面试时,经常会被要求手写一段代码。这种做法在网上一直持有反对的声音:“考试时背题能力强”、“代码写得好不代表可以面授算法”等等。通过文中“阅读一段代码,让应聘者预测输出结果”的面试过程,是一种有效的初步技术筛选方法,可以节省淘汰不合适者的时间和成本。输入代码是工作中最不重要的部分。阅读、理解和解决问题是工作中比较重要的能力。毕竟,如果您让面试官参加40-60分钟的编码挑战,您实际上只是在选择最快的打字员。由此看来,面试的时候看代码比手写代码更重要!