【面经】为什么编码测试这么糟糕?

May 27, 2021 by Zhang in  Blog

如今,程序员在面试软件工程时,面试题目通常都会涉及某种编码测试或编程实践,我觉得这是一件非常糟糕的事。下面是我的理由:

1.形成慵懒之风(Lazy Tropes)

让软件工程师编写一个算法来生成阶乘(通常是一种常见的算法),或者对[单|双]链表进行排序,这些都很容易,因为可以事先记住。但除了展示死记硬背的能力之外,并不能显示应聘者的技能。而且通过询问字符“A”的ASCII码也可以实现这些。

网上有很多关于这方面的参考资料,而且大部分情况下,也可以在常见的相关面试书籍中找到。

曾经在一家公司工作时,我和一位同事讨论了他们与一家大型对冲基金的详细面试流程。他们问的所有技术性问题,都是他从书中背下来的,而这本书已经成为现任员工所有面试问题的来源。幸运的是,他已经是一名技术熟练的工程师了,但为了保住这个职位,他同意进行这种单调又平凡的练习。但这不仅浪费了他宝贵的时间,还掩盖了自己的实力。总之一年后,他离开了那家公司,因为他厌倦了公司招聘的低技术门槛和持续无效的项目管理实践。

2.总是利用记忆

这个道理在特定编程语言编写算法中也同样适用。现实世界中,没有哪个软件工程师会在没有某种语法检查帮助(比如编辑器的内置代码补全)、没有技术文档参考或者没有复制预先实现解决方案的情况下编写一段代码的。这会白费力气而且没有意义。

我敢打赌,当今世界上运行的许多系统代码都源于Stack Overflow上的一个答案。

所有实践操作中用到的语法其实都来自平时不断的使用与熟悉。可能面试官会把使用语法过程中的一些细节作为衡量标准,但就我自己而言,虽然我已经用C语言快三十年了,仍然会犯一些语法错误。

实际上,随着在软件工程行业的发展,我对自己感兴趣的语言也越来越熟悉,不过还是会经常弄混一些语法上的小细节,比如C和c++,或者Objective-C。但这并不代表我是一个糟糕的软件工程师(虽然可能有些人不同意),只是因为脑海里知识太多,一回忆就全都出现了。

好的软件工程师通常都不会知道某个特定问题的答案,不过它们一定知道能从哪里找到答案。所以下次面试的时候,可以考虑问问在哪里可以查找这种信息之类的问题。

3.执行常规任务

上文有简单提到过,不要白费力气的做无用功。比如你用C语言工作时,需要一个串行端口例程,那么除非有特别要求,一般都不需要你从头再写一遍。可能你会需要一个JSON解析器,这也很正常–除非你在一个资源有限的计算机上(embedded board)、在一个对地静止轨道的卫星上或者在Malbolg中进行编码,不然只需要从库中提取一个预先编写的代码就可以。而且很可能它已经使用了很长时间,经过了全面测试,并且具有详细(正确)的文档。所以是很可靠的!

在现代化软件工程中,一般不太可能遇到一项常规任务,它既无法在预先编写的库中实现自动化,又无法以算法形式得到广泛应用。

如果你像我一样,玩游戏主要是对它的主题感兴趣,那你可能会积极地寻找与之前相似的角色。在其中寻找陌生的新世界,新生命和新文明……

实际上,未来的软件工程师已经不止一次被比作代码方面的考古学家了,他们主要是用现有的代码,花较少的时间设计和编码新的算法。

4.缺乏充分讨论

我完全赞同面试官需要对求职者“是否了解自身才能”有一个了解,但要想通过上述任何一种方法检验,在我看来用处不大,而事实也确实如此。

比如,对现代软件工程中使用的编码范式的简单讨论:特定语言是否适合某个特定实现,或者是否涉及某种特定软件工程方法(我在看你,敏捷),这些都是些很深刻的话题,也很值得讨论。

发起一次综合性的讨论,主要看看应聘者对新问题有什么见解,或许对旧问题有什么新的解决方法,如何看待事物的发展,又是如何开始解决问题的。保持一定的开放性,不过度纠结细节。关键是要讨论。因为确定应聘者的价值并不仅仅是在方框里打勾,在这个过程中让我不断惊讶的是,许多公认为“崭露头角”和“领域领先者”的公司,仍然在采用过时、落后、单调甚至完全可预测的招聘做法,但这些做法在衡量实际技术敏锐性方面几乎没有什么价值。

人们常说,公司在面试求职者,而求职者也是在面试公司。这点我完全赞同。

一位带着一串精确技术问题的面试官就像个危险信号,特别是他们还不希望在任何一个问题上详尽的讨论。而这通常也表明面试官自己可能都没有完全理解所问的问题,还意味着任何与稿子所写不完全相符的答案都会被归类为错误。

5.保持初心

有些公司已经采取了更好的方法,而另一些公司还远远不够。在此,我强烈建议各位软件工程师,不要与那些遵循过时的雇佣惯例、坚持进行编程测试和练习的公司打交道,尤其是长时间的!

我听说过一些公司要求在应聘者在应聘时间内完成项目,但这通常都要好几天。

还有一些针对特定语言的通用“能力测试”选择题,在限定的时间内,只要有一点脑雾(brain fog),游戏就结束了!

如果你是一个游戏新手,那你可能还无法拒绝面试,这点我完全理解,但请你一定要把它当作一种学习经验。即使是走走过场,也要积累经验,尽可能多地学习,如果工作确实让你失望,也要继续前进。因为当你持续前行的时候,信心也会随着你的知识和经验而增长。毕竟,公司受益于你,而你当然也要获益于公司。

但如果你和我一样,有一定的经验,那就去招聘公司吧,可以跟我聊聊。我到过各地,见过很多事,也做过很多事,所有的资历板上钉钉写在简历上,但我讨厌被人从一些一般招聘渠道中选拔,然后进行反复地能力测试。

如果你认为自己是个好雇主,并且不能理解为什么很多优秀的应聘者总是退出应聘,那你应该好好看看自己的招聘实践。

作者:Dr Stuart Woolley

北美求职60秒:后端工程师(Back-End Engineer)需要掌握哪些技能?(11月第3周)

Nov 22, 2022

本期话题,带你了解“ 后端工程师(Back-End Engineer)需要掌握哪些技能?

Data Scientist工作越来越难找,如何把劣势变为优势?

Jun 18, 2021

很多新晋数据科学家都发觉,现在要想找一份工作比以前更难了,但提前了解一下招聘环境的变化,可以帮你找到最符合你目标和兴趣的公司。

如何让被拒绝的工作重新考虑你?

Jul 12, 2022

你认为你的技能完全符合工作要求。你认为你在面试中有效地传达了你的经历。然而,当你打开收件箱时,却发现收到的是一封拒绝信,告诉你梦寐以求的岗位与你无缘了。

Leave a Comment

Your email address will not be published. Required fields are marked *

Comment *