我一生中有十几次面试(我即将毕业),我想知道为什么只要求我阅读和解释一些代码。大约90%的工作主要是关于维护现有系统。IMO读取他人代码的能力是一项重要技能。
为什么面试官不检查它?*
* 在我的朋友中,我是唯一被要求检查一些代码的人。
我一生中有十几次面试(我即将毕业),我想知道为什么只要求我阅读和解释一些代码。大约90%的工作主要是关于维护现有系统。IMO读取他人代码的能力是一项重要技能。
为什么面试官不检查它?*
* 在我的朋友中,我是唯一被要求检查一些代码的人。
Answers:
如果工作包括维护应用程序,那么在面试期间需要测试的技能是:
能够理解大型代码库及其文档,单元测试等。
的能力,重构代码,并带来改变,而不破坏一切。
要求人们阅读代码不会帮助您评估这些能力。
您是否要求编写代码?如果是的话,正如Sign在他的回答中指出的,这就足够了。如果我们概括一下,那么编写清晰,易于理解的源代码的人将能够阅读其他人编写的源代码。
如果不要求您编写代码,那么很可能,您曾接受过人力资源部门的人员面试。这样的面试不能太技术性,而且几乎一文不值,因为它们不重视您的技能和良好的工作能力,而是您上大学的时间和与工作无关的其他事情。
还有其他一些原因不要求读取维护工作的代码:
1.很难做到可靠
具体来说,如果您是面试官,您会怎么做?让您的应聘者阅读一些代码。什么代码?用什么语言?写得好不好?有没有评论?有无文件?
更重要的是,这对候选人有什么启示?它与代码库本身的关联程度如何?
假设您有一个旧版VB.NET应用程序要维护。您知道源代码通常很丑陋且未经测试,并且一些注释已过时或具有误导性。在过去的三个月中,您有一个非常熟练的开发人员来开发该解决方案。他对应用程序的最关键部分进行了重构和单元测试,在需要注释的地方添加了注释,最重要的是,撰写了有关总体体系结构,关键部分和陷阱的详细文档。
您现在正在雇用开发人员来维护此代码库。在面试过程中,您会给出一段遗留(未经测试的丑陋)代码,还是先前开发人员重构的那段代码?
您会提供文件吗?为了阅读文档,候选人将需要花费至少几个小时。这使得在面试中无法做。
2.读取短代码与读取熟悉项目的代码不同
记住,工作就是维护一个项目。当您不熟悉项目时,很难在第一天或几周内维护大型代码库。在编写所有文档并清楚了解整个代码库几个月后,这样做会容易得多。
要测试的最重要的事情是该人在那几个月内是否有效率。您不在乎此人是否在头两天都听不懂任何内容。
通过要求某人从头开始阅读一小段代码,您并没有测试该人如何处理熟悉的,有文档记录的成千上万的LOC。
3.维护源代码不只是阅读它
维护代码库时,您正在对其进行修改。仅仅阅读代码的开发人员不会为公司带来任何有用的东西。
有用的技能是重构代码,添加单元测试,预测更改的影响等的能力。您不会通过要求某人在面试中阅读代码来测试这些技能。
阅读是一种基于存在写作能力的假设。考虑任何语言的概念。编程只是人与机器之间进行交流的一种语言。考虑人与人之间的交流。如果您正在雇用某人担任日语口译员,那么,如果他们能够就某个特定主题写一篇1000字的文章,那么他们就能读懂吗?
作为程序员,我们的主要活动是创建代码并将抽象的思想转换为具体的实现。这通常意味着写作。我同意阅读同样重要,但是在大多数情况下,存在书写能力的人也存在阅读能力。我可以看到明显区别的唯一真实案例是在环境中,随着时间的推移,有许多高度复杂的案例在演变。即使给出了这些信息,您也不会期望某人无需至少学习就能阅读和理解它们。
另外,阅读代码并解释您的想法并不能真正向面试官表达您如何使用批判性思维技能。它显示了一些分析结果,但是大多数雇主都想看看您是否可以不放在盒子里思考。他们想知道您是否可以在没有现有代码的好处的情况下掌握这些概念(甚至没有好处)来告诉您做什么或如何做。
过去,我曾经认为阅读代码应该在面试中得到证明,但是随着时间的流逝,我已经意识到,这对于面试官和被访者来说都是浪费时间。为什么?因为即使是错误的编码人员也可以读取代码片段。
仅当您查看复杂的事物或跨越许多类和文件的代码时,才能够判断某人的代码读取能力才有意义。能够跟踪代码找出正在执行的操作是一个理想的特性,但是没有足够的时间让别人提出一个很好的示例(不是生产代码),也没有时间在面试中提出这样的问题。
因此,不良的编码人员可以读取代码,但不能很好地编写代码。要求查看候选人工作的例子或要求候选人在面试中编写代码是更好地表明其技能的方式。如果他们能写出简洁明了的代码,那么他们阅读代码的机会就很好。
我问每位面试FizzBuzz问题的候选人。它快速,简单,通常可以比我发现的任何其他东西更快地挑选出错误的编码器。优秀的程序员可以非常快速,轻松地获得它,并且可以让您快速了解他们的编码风格和思考过程。