在面试中语法正确是多么重要?[关闭]


40

当要求面试候选人在白板上编写程序时,您是否希望该候选人编写语法上正确的代码?

我有两个候选人,其中一个编写了在语法上正确的程序,但是逻辑不符合要求,另一个候选人的逻辑编写得更好,但是语法很糟糕。

我赞成第一位候选人。


75
我想,如果您希望他们在记事本中编写代码,那么您的选择就很有意义。
Benjol 2011年

20
伪代码语法怎么会不正确?还是您要他们用某种真实的语言写东西?!
SK-logic

6
取决于职位描述…复制编辑器?
康拉德·鲁道夫

9
可以学习语法,这是一项微不足道的任务,它在工作中需要几个星期。基于程序员的技能水平,即使不是不可能,也很难学习用更好的逻辑解决问题。当您在浏览器中编译或查看工作时,不正确的Synax会自行解决(即不正确)。
Ramhound 2011年

26
虽然我同意第二个候选词更好的答案,但我认为这也取决于语法的“废话”。类似于编程语言,申请人说他们对这种语言有很多经验,然后出了点问题
Thomas Bonini 2011年

Answers:


125

我希望能够推理出问题的人,想出一个好的解决方案,然后向我解释他们的解决方案。即使他们的逻辑不是100%,如果他们处在正确的轨道上并通过问题进行推理,提出正确的问题并走正确的道路,那也将是我的赢家。

在开发工作中的代码时,您有许多工具-IDE,编译器,静态分析,单元测试,集成测试和验收测试过程-查找语法和逻辑错误。如果您在白板上书写,则没有这些工具,并且肯定会在语法上犯错误(忘记方法名,分号,花括号),我可以原谅。

我唯一的问题是:为什么要让候选人在白板上写实际的代码,而不是专注于算法,设计策略和逻辑思维?编程语言不断变化,解决问题却没有。


6
+1,但有时这是衡量某人使用特定语言的舒适度的体面指标。就我个人而言,我从没有过分强调(绝对同意该算法很重要),但并没有什么坏处。
Demian Brecht

2
对我而言,权重首先在思维过程上,其次在算法和逻辑上,其次在语言上(加分将用于伪代码-它表明您可以抽象地思考)。我会聘请一位优秀的问题解决者,他可以在掌握特定语言之前学习并适应各种语言(即使该语言是我组织当前选择的语言)。
Thomas Owens

1
关于我自己的编码,我已经注意到一件事-如果我使用多种语言,则与仅使用一种语言相比,编译器捕获的语法错误要多得多。
洛伦·佩希特尔

12
我总是有人在白板上写代码。我遇到了太多的人,他们知道适当的东西,但在需要时似乎无法生成代码。
Dietbuddha 2011年

5
@dietbuddha无论您如何提出问题,实现语言或伪代码,这三点都适用。一个面试问题也无法识别开发人员可能有的不良习惯,因为很容易在短时间内隐藏您的不良习惯。除了软件工程师最重要的一项技能就是解决问题和沟通外,我没有其他有说服力的证据可言,这两个问题都可以通过使用标准工具使开发人员处于现实环境中或者通过使用开发工具来解决。通过使用伪代码。
Thomas Owens

46

我希望第二位候选人。逻辑是很难(辛苦,有时),以获得准确的权利。当IDE和编译器以及其他各种工具提供帮助时,语法容易正确。

第一个候选者可能永远不会触发编译器错误,但是如果他的代码在各种奇怪的(且不太奇怪的)边界情况下经常失败,那么他知道在何处放置分号就不那么值得了。


1
究竟。您可以教授语法(特别是如果他们已经知道其他语法的话)。您几乎不容易讲授声音推理。
Tridus

19

根据实际的语法错误,我想我会选择第二个候选者,因为检查语法通常最好交给机器

诸如缺少分号,忘记括号,忘记参数列表中的逗号等错误,甚至是非语法错误,例如在调用函数时切换参数顺序通常也被语法荧光笔,编译器或第一次运行代码时捕获,所有通常使用的东西,但在白板上不可用。

但是,存在一些错误,尽管从技术上讲仅是语法错误,但显示出更深的误解。

作为说明问题的一个人为的例子:考虑一个Python程序员,他用$前缀所有变量,或将for循环写为for list as item。从技术上讲,两者都是语法错误,但是即使只有限地接触python,也应该知道合法字符和for循环。很好的猜测是候选人知道php(或perl?)并试图虚张声势了解自己的python技能


15

我更倾向于第二个候选人,因为白板对语法的影响要大于对逻辑的影响,而且语法错误更容易纠正-IDE或编译器通常都可以做到这一点。


15

我已经写SQL和CSS(我所知道的最简单和最基本的语言)已近13年了,我一直都不记得语法。

我的朋友(也是一名开发人员)在一家对冲基金工作,他永远不记得插入语句的语法。

我们俩最终都进入了W3CSchools,我想我们应该为此感到尴尬(他拥有学位,并且拥有博士学位)。

但是,老实说,我认为我们有正确的优先事项。语法不是一项重要技能。


13

很少有人想到语法错误...我想知道您是否已经明确指出两种语法都必须正确。有时人们认为伪代码是可以的。

另外,如果某人声称拥有多年的语言经验并且无法正确设置基本语法,则您应该对此主张表示怀疑。

语法错误可能会有所不同,因此,如果有人忘记了方法名称(对我而言)就可以了,但是如果有人不知道如何在类中引用方法(点符号)或不知道基本思想,例如语法简单的课,那么这个人很可能已经很久没有使用该语言了。

对于没有正确使用语法的人,您是否认为使用适当的语言编辑器可以轻松解决他的错误?如果是这样,我投他一票。

我想我在这里想的是语法错误在一定范围内是可以接受的。


5

如果逻辑很好,那么初级的助理程序员甚至软件工具就可以找到并修复错误的语法。错误的逻辑...不能保证任何修复。所有程序员都会搞砸。我会选择那些容易发现和解决问题的人。


5

除非问题很微妙,而且大多数面试问题都不是,否则第一位候选人将被取消参赛资格。学习语言语法要比算法设计容易得多。我将聘用一个拥有多种语言成功工作经验的程序员,即使他对我当前的技术经验为零。如果我今天需要做一些事情,这不是最好的策略,但是如果我在接下来的十二个月中需要做很多事情,那么我将始终选择具有特定经验的一般能力。


5

语法检查是编译器的作用。编译器无法使您的逻辑更好,但是它可以告诉您如何修复语法。这意味着,在使用编译器编写代码的任何工作中,逻辑本质上都比语法正确更有价值。


5

面试总是很尴尬的情况-您可以说出来,因为当您走出去时,您会立即想到应该说的所有内容,或者对问题的正确答案以及想问他们但忘记了的事情。因此,鉴于此,期望没有语法错误的完美编写的代码是不现实的。

另外,您对完美代码的期望(在白板上!)可能与面试官不符-例如,在我参加的一次面试中,我被要求写一堂课,我这样做是为了让面试官不让我投入在复制构造函数中。所以我写了一个,除了设置a = b之外什么也没做,但这足以让他满意。我对问题的期望不需要复制ctor,因此我把它排除在解决问题之外-我没想到必须编写完全合规的编译代码(按照他的隐藏编码标准),只是显示我对解决方案的理解。(同一位面试官也不喜欢我的解决方案,这也不是他会怎么做的,所以很显然我错了,叹了口气)。

如果要从受访者处获得工作代码,请给他们一个编译器。然后,当他们为您开具发票时不要抱怨:)

因此,去找一个知道自己在做什么的人,而不是一个会模仿单词但不理解含义的人。


3

在面试中,面试官对看到您的兴趣更感兴趣

  1. 解决问题
  2. 解决问题的技巧和
  3. 有效提供适当解决方案所需的时间

语法虽然不是那么重要,但是在解决问题时确实占有重要的位置,语法上的重大错误使您无法期望给面试官留下深刻的印象。

将适当的逻辑和语法结合在一起可以在面试中为您解决问题。

如果逻辑足够好,那么一个小错误或小错误永远不会花费您太多。

还有更多可用的IDE,可以很容易地使任何语法都具有适当的形状。但是,使用哪种方法何时何地,最重要的为什么,只知道与实际对象的正确的逻辑和知识的人。

我希望并敦促您提供除白板或记事本之外的更多东西来编写代码。

我会和第二位候选人一起去..


2

好吧,有些人想要伟大的Java开发人员,伟大的C#开发人员,伟大的C ++开发人员,等等。我会担心的是,如果他们不能推理解决问题,您如何期望他们推理和解决您的业务问题?

其他人只想要优秀的开发人员,他们可以使用任何需要的语言进行工作。他们考虑/建模问题,然后以任何语言实施。如果您突然决定.NET很烂并切换到Java,反之亦然,那么这些开发人员就不会跳槽或拒绝学习。另外,如果您获得某种类型的具有专有语言的自动化程序包/计算程序包,并且您需要一些自动化的任务,那么这些类型的开发人员就可以做到这一点。现实生活中的示例...我需要找出一种用于地图软件包的自定义专有脚本语言,以便为老雇主提取自定义绘制区域的邮政编码。另一个例子...我的现任雇主拥有专有的财产管理系统,其中包含用于编写报告的自定义语言...无论如何,

此外,白板上还有额外的压力/紧张感,因此没有人处于最佳状态。另外,我非常怀疑在编写代码时每次都能做到完美。我怀疑您编译或只是运行并发现一些错误。另外,它取决于语言。C足够小,您可能可以记住大多数语言/核心库(尽管我不需要它)。Java / C#具有如此庞大的库(经常更改),因此记住该库是不可能的。

同样,了解多种语言也会对您不利。C#和Java彼此干扰。但是,了解多种语言也可以拓宽您的视野,特别是如果您除了C#/ Java之外还知道脚本语言和功能语言时,尤其如此。

如果两个候选人都用正确的逻辑解决问题,那么语法正确的人可能会有优势。如果一个人解决了问题而一个人解决不了,那么就我个人而言,我会选择可以解决问题的人。

如果有人声称自己是Java方面的专家,并且无法声明使用if语句或while循环的数组,那么他们可能在撒谎。但是我可能会理解,如果有人是Java的专家,但是最近接触了很多C#并尝试做Map之类的事情……。另外,如果您了解该库的详细信息,还是有人做了myArray.length而不是myArray .Length或string.length()/ string.Length / string.length而不是string.length()...我会原谅的小事。或者,如果他们忘记了某些库调用的参数顺序。或这里或那里的错字/半冒号...


1

我不会带任何一个。

如果程序员不擅长解决问题,那么好的语法是没有用的。对于给定语言而言,较差的语法意味着候选人可能对这种特定语言不满意,也许是因为缺乏直接的经验。

无论如何,逻辑远比语法重要。


3
我什至不记得我自己设计的语言的语法细节。而且我也不记得我几十年来一直使用的语言的语法。这根本不是问题,我可以随时查找,并为我使用的所有语言打印了BNF。语法是所有语言中最不重要的部分,语义是一种更重要的方法。
SK-logic

@ SK-logic:我完全同意,但是很多人来这里说他们能够使用xxx语言编程,然后他们甚至不记得是否需要分号。学习新语言的语法很容易,但是如果我正在寻找能精通某种特定语言的人,那一定是这样。此外,我已经指出逻辑远比语法重要。
Jose Faeti 2011年

1

一如既往,这取决于。如果语法错误相对较小,我将忽略它们。如果它们惊人地巨大,我会注意它们并尝试推断它们为什么存在。

我认为逻辑错误比语法错误严重,后者几乎总是可以机械地捕获,而前者则更少(在某种程度上取决于您所编写的语言,某些类型的逻辑错误是由足够高级的类型捕获的)推断和检查)。


1

这肯定取决于面试的职位,也可能取决于语言。

在C ++上工作,让一个人口吃语法简直令人恐惧。C ++充满了黑暗的角落,陷阱无处不在。语法上的断断续续意味着对语言的理解不佳,并且C ++初学者会犯很多错误(并不是说其他​​人有时会犯错)。

要回答您的问题,然后:

  • 如果我需要担任一个简单的开发人员职位,那么我会精通C ++语法。他不会发光,但不应该招来太多灾难。
  • 如果我需要担任首席开发人员职位,那么我也不会任职。首席开发人员应该具有经验和逻辑。

只有一个警告:人们承认自己缺乏经验。理想情况下,人们应该使用自己选择的语言编写代码,或者,如果他们愿意,则使用伪代码(例如学生)。


1

没错,当我不得不手工编写它们时,我仍然忘记了C#事件的语法。有时会在面试中发生。我在键盘上编码时没有问题。

选择一个可以编码的人,而不是一个不能记住语法的人。


0

当我在纸上/白板上编写代码时,即使是面试,我基本上也跳过了语法的很大一部分。我不使用半冒号,我弄不清方法调用,等等。我更可能写一个句子来解释4行真正的基本代码,而不是代码本身。确实,我使用了类似php的伪代码,一边说说自己在做的事情,一边写下简短的评论,以解释我掩盖的内容(从理论上讲,这些内容对于程序)

在面试中进行编码时,我的目标是显示我如何解决问题,而不是指示打字员可以进入记事本运行。

长话短说:我认为您应该考虑为什么第一个程序员语法糟糕。他很容易知道这一点,但只是认为与面试无关紧要,因此他更喜欢专注于这项工作中比较困难的部分(逻辑和问题解决)。


0

逻辑上不能满足答案的人不合格。我们行业中有太多的人在生产垃圾代码,这些代码合规但实际上并未执行应做的事情或处理错误或极端情况。

根据错误的类型和数量以及您希望他们写的内容的难度,第二人称可能会或可能不会不合格。用SQL术语(我写的语言)来说,那些不记得显式联接语法的人没有资格从事要求您查询数据库的工作,没有例外。谁不记得如何进行追溯性CTE(但知道它们的存在并尝试使用一种)的人就不会了。换句话说,我希望该语法对于您始终编写的基本代码更正确,但对于仅偶尔执行的操作而不是复杂语法而言,不会更正确。

如果我考虑一个我认识的人,在相关领域具有出色的资格,但是对我的特定语言只有很少的了解,那么我可能也会宽恕语法错误。我宁愿雇用一位出色的Oracle开发人员,而不是一位普通的SQl Server开发人员来从事SQL Server工作(当然,一位出色的SQL Server人员将是最好的选择),并且不希望该人员知道SQL Server语法,如果他们可以向我展示如何在Oracle中完成。对于Java和C#而言,具有同样出色的解决问题能力的人胜过具有出色的语言能力的人,但是每次都胜出的人(有时很难找到)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.