初级程序员是否应该作为高级程序员项目的代码审阅者参与?


55

我的团队成员之一是初级程序员,就他的经验水平而言,他具有令人印象深刻的编程技能。

在代码审查期间,我相信强调学习,而不是指出错误。

但是,初级程序员是否应该参与更多高级程序员的代码审查?还是仅由具有相应经验的程序员来参加代码审查?


54
这些“初级”和“高级”的东西到底是什么?IMO,程序员无论是否有资格审查别人的代码应该根据能力和经验决定-不是标题....
蚁丘

23
职位通常应根据能力和经验确定。如果那个大三学生足以复习老年人的密码,那就该改变他们的头衔了。
superM

18
但是有时这个头衔是由人力资源政治和游戏决定的:)
Michal Franc

4
您所说的“初级程序员”到底是什么意思?这些人是在应用方面经验较少还是在行业方面经验较少?以我的经验,可能有一个初级人员是给定项目中最有经验的人,因为他们从事该项目的时间最长或最近。
Thomas Owens

4
@ThomasOwens,我是指“初级程序员”,是指行业经验较少的人。
Md Mahbubur Ra​​hman

Answers:


62

代码审查的主要目的是发现缺陷或潜在问题。评审所需的参与者应该是最能识别这些问题的人员,无论其职称或资历如何。

例如,如果正在使用Python开发应用程序,并且初级工程师比使用编写代码的高级工程师对Python语言有更多的经验,那么它们可能是指出做某事的替代方法的宝贵资产,但是他们可能对整个系统的了解也较少。

除了工具和技术方面的经验外,还应考虑应用程序领域的经验。拥有20年经验,但在金融行业中只有1或2个经验的人,可以通过让一个总体经验不足,只有5年金融行业经验的开发人员来回顾他的工作来获得帮助。

邀请经验不足的工作人员尽可能多地观察和参与代码审查过程,这也可能有益于使他们学习代码库,提出问题并了解他们不仅期望在代码审查中而且在代码审查中期望得到什么。他们产生的代码。但是,您可能不想在过程中涉及太多的人(而是专注于可以完全支持代码审查及其目的的人员)。

这实际上适用于任何类型的审核-需求,设计,代码...


4
+1表示“评论中要求的参与者应该是最适合识别这些问题的人员,无论他们的职称或资历如何。” 并提供出色的答案。
Md Mahbubur Ra​​hman

60
“代码审查的主要目的是发现缺陷或潜在问题。” 完全不同意。代码审查的主要目的是知识共享。代码审查的第二个目的是建立编码标准;审查期间发现的任何错误都比判断要幸运。programmer.97things.oreilly.com/wiki/index.php/Code_Reviews
PDR

8
@pdr应该在编写第一行代码之前就建立一个编码标准。如果您要使用评论来建立标准,那就太迟了。这可能是在开发过程中调整编码标准的好时机-您可以使用评论指出缺陷或提出对标准的改进,但是我无法想象没有某个标准就可以开始开发项目(即使只是一个标准)语言的建议准则)。
Thomas Owens

5
您甚至如何知道在项目开始之前要在编码标准中添加什么,并且通过代码审查就可以清楚地看到不同的团队成员以不同的方式处理相同的问题?我们不是在谈论方法名称上的大小写,通常情况下存在语言标准,我们在谈论诸如NUnit与MSTest之类的东西;仓库模式;可以说:“嘿,我已经为WCF客户编写了一个包装器。看看我的包装,充分利用每个包装,使其成为标准。” 这些内容仅来自代码审查,这是进行审查的最佳理由。
pdr

4
单元测试框架可能是一个不好的例子,但是常见的是,两个不同的开发要求解压缩文件。两个不同的开发人员可能会使用不同的库,因为他们之前使用过它们。您不可能事先进行所有这些讨论,否则您将陷入比开发更多的会议中。通过代码审查进行的知识共享是确保这些问题不扩散的最重要的事情。
pdr

81

初级程序员是否应作为高级程序员项目中的代码审阅者参与?

是的,他们应该。阅读他人的代码是一种很好的学习经验。(这对于好的代码和坏的代码都适用。尽管人们希望高级开发人员的代码不会很糟糕……)

显然,这是不明智的,只有有晚辈在做代码审查。对初中生发现的东西寄予过高期望是不明智的。但是,初级程序员可以带给我们新鲜的见解,您也会感到惊讶。


另一个答案提到大三生/被吓倒了。这不是针对审阅者或审阅者的代码审阅。如果发生这种情况,您的小组需要更改其代码审查的方式……也许恐吓者需要排成一列。


我认为mouviciel的意思是,前辈的代码可能令人生畏,而不是前辈本人(如果是,那么,是的,与谁来审查代码相比,团队存在更严重的问题)。
yannis 2013年

6
@YannisRizos-1)我不那样看。2)这就是“不期望太多”的地方。如果老年人的代码“令人生畏”,那么对于初中生来说,尝试阅读/理解它就特别有益。
Stephen C

1
学习高级程序员的想法是初级开发人员代码审查的另一重要部分。当我还是一名初级开发人员时,一旦高级开发人员与我一起审查,代码就变得更加有意义。
Michael Shopsin

38

我想补充一点,如果一个“少年”程序员可以理解老人代码,然后这本身是代码的一个很好的措施。是的,有时可能无法编写所有人都能理解的代码,但是希望这是例外情况-如果只有一两个人可以理解代码,那么当这些人不可用并且出现问题时会发生什么它?

给人们新的挑战可以帮助他们发展;也可能不是每个人都被要求审查代码,而是坚持认为某人具有资格(由人力资源政治和游戏确定),然后才有资格帮助审查,这似乎是条条理的。

正如其他人指出的那样,代码审查可能是一个双向过程。它可以帮助所有人理解代码基础,因此可以共享知识,可以帮助下级向年长者学习新的更好的方法和技术,还可以帮助年长者提高理解力,并通过书写来确保每个人都可以遵循代码,从而拥有更多的眼睛发现错误。


6
现在,这是一个很好的开场白。
2013年

如果代码使用的是更高级的技术(例如,使用集合操作而不是数组和循环),那么发生的事情是团队中的某人提高了游戏水平。
凯文·克莱恩

1
在进行代码审查时,这是一个非常有力的指示,表明如果有人必须询问特定代码的作用,则该代码需要注释一两个。
布莱恩·安德森

24

代码审查的目的是捕获测试无法捕获的问题,例如可维护性问题和极端情况。我认为在许多方面,初级程序员适合于此目的:

  • 他们通常有更多时间可用。
  • 他们出于理解代码的需要而更可能逐行慢慢地使用它。
  • 当您谈论代码的可维护性时,这意味着公司中的所有人,而不仅仅是您的顶级程序员。这意味着您的初级程序员必须能够理解代码才能声明其可维护。
  • 他们常常不太可能做出错误的假设,他们相信某事会像他们认为的那样起作用。
  • 他们使用编程语言进行的教育较新,并且不太可能与多年使用另一种语言的经验混为一谈。例如,一个大四生可能会意外地使用他从C ++中挑选出来的一种习惯,这种习惯可以编译,但在Java中的工作方式却稍有不同。大三学生更容易发现这些错误。
  • 代码审阅者仅需要确定问题,而不必提出更好的解决方案。他们经常会这样评论:“我真的无法弄清楚如何做得更好,但是由于所有重复,这部分确实令人困惑。” 即使经验丰富的程序员起初可能没有注意到问题,他们也可以轻松地进行改进。

这并不是说没有其他方法可以使高级程序员更适合进行审阅,但是我的意思是,如果您没有充分利用团队的多样性,那么您的工作就会受到损害。


13

经常会要求青少年维护代码,他们能够理解它是至关重要的。

有时,初级人员是唯一可以查看高级开发人员代码的人员。因为高级老板正在休假,代码是否应该等待去进行质量检查(如果没有代码审查,我们不会将任何事情从开发人员中挤出,我也假设这种类型的代码审查)?

我还特别要求初级人员在知道他们不久将为不同的客户做类似的事情时,或者如果我知道他们在从事其他类似的事情或具有特定技能的情况下,对某些内容进行代码审查。

如果代码相当简单,我通常会请一个初级人员进行审查。如果初级人员有能力胜任这项工作,为什么还要浪费老年人的时间呢?如果大三学生对高级代码的审查感到胆怯,请让他们首先看看较简单的部分。毕竟,您无法摆脱初中的生活,直到您不再感到害怕。

我经常发现,如果我不得不向不懂它的初级人员解释代码,我会看到我犯的一个错误(通常是在假设中),并且没有经验丰富的代码审阅者会捕获该错误,因为该代码确实可以运行但并没有完全按照预期进行。因此,仅仅说明事情的行为通常可以帮助开发人员在代码审查者没有发现问题的情况下发现问题。由于经验丰富的人员通常不会一步一步地学习代码,因此当初级人员进行审阅时,更容易发现这些类型的事情。

我发现让大三学生参与评论有几个好的效果。首先,这使他们在理解高级人员的代码时更加自信。当他们可以在该代码中找到错误时,这使他们更加自信。

它使他们暴露于自己之外的思考过程,并让他们看到处理事物的其他方式。即使是高级人士,这也发生在我身上-看到解决问题的另一种方法可能会为新的可能性大开眼界。

它可以帮助他们学习阅读他人的代码,并且使他们有机会问一下代码在做什么,而这在作者看来仍然很新鲜。这比六个月后(当作者长期不在或忙于另一个项目并且没有时间提出问题)必须维护它要好得多。

这对于年长者是有益的,因为这些问题既暴露了初中弱势的潜在领域,需要指导(因此他们可以承担更多的责任,并给年长者更多的时间去做其他类型的任务),或者代码根本不清楚的领域。除了作者以外的任何人(这意味着从现在起一年后甚至还不清楚作者是否需要更改)。它还可以帮助年长者认识到,初中生可能比他们以前认为的要聪明得多。它可以帮助每个人保持专业地位。毕竟,如果您排除了初级人员,那么您显然意味着您认为他们没有能力理解心理上不幸的代码。

审查老年人代码的青少年可以在您的组织中赢得更多的专业尊重。年长者可能会意识到他们一直低估了大三生,而大三生可能会意识到,年长者确实知道的比他们给他们的称赞还要多。大三学生有时认为自己的技能比自己强。接触到他们不会写的代码对这些人有好处,因为他们开始意识到自己还有很多东西要学习。这也将激发他们中最好的人获得技能。在学校里,有时B学生不明白为什么他们没有得到A,直到有人向他们展示了A级工作的样本。与大三到大四的代码审查相同。


7

我的回答是:有时。程序员与程序员之间,任务与任务之间都将有所不同。

对于:

  • 如果您希望那些初中生学习如何进行有效的代码审查,那么最好的方法就是让他们看看大四生如何做。
  • 在特定语言/领域/等方面,初级程序员可能比高级程序员有更多的经验。
  • 通过强迫下级评估上级的代码,他们不可避免地要学习一些东西。但是,结对编程将是一种更有效的方法,因为初中生可能遇到的任何问题都可以立即得到答案。
  • 没有人的代码是神圣的,没有人如此优秀,以至于他们的代码不应得到审查。如果您不这样做,那么谁来查看您的高层管理人员代码?
  • 并非所有的大三学生都是平等的,也不是所有的老年人都是平等的。有时可能差距不大,所以不要挂在职位上。

反对:

  • 有可能由于初中生的非问题而使评论陷入困境。
  • 所需的知识/技能水平可能完全超出了初中学生的能力。这不仅会浪费他们的时间,而且很可能使他们士气低落。

5

我坚信团队中的每个人都应该参与代码审查的双方。大三学生应阅读高级守则,反之亦然。为什么两者都这样?因为通常这不仅与代码是否“解决问题”有关。我无法告诉您我必须向某人解释一段代码,然后在解释结束时突然想出了一种更好的方法。代码审查可能有3个目的:

  1. 确保代码正确
  2. 让作者考虑别人如何看待他们的代码
  3. 获得读者对可以改进之处的反馈,并获得一般的第二双眼睛

我是一名大三学生,通常会审查高级书面代码。这是公司的总政策,“一切都会让某人检查代码”。这些人回顾了他们的代码并有机会提出关于为什么以某种方式完成事情的问题,我从中学到了很多。有时,我提出了一种更清洁的方式来编写某些代码等。比人们告诉我如何改进我的代码要少得多,但这至少发生过一次。

您的代码审查的正式程度也很重要。我们的程序非常非正式,包含“嘿,您会看我的代码”吗,它们在小隔间或专用IRC频道中被说出。我可以想象,如果您在更正式的环境中查看代码,那么大三学生可能会对查看大四学生的代码更加了解。


2

绝对,初级工程师至少应该在某些时候检查高级工程师的代码。

以我的经验,在一对一的代码审查中,审阅者实际上看到原始编码器会遗漏的错误是非常罕见的,无论审阅者是高级还是初级。评论者甚至不必是人类。另一方面,很常见的是,原始编码器在尝试解释代码时会识别出一个错误,并且审阅者越初级,就越有可能因为需要深度的解释。

我认为,代码复查的一些经常被忽视的好处从长远来看可能比捕获错误更重要:

  • 共享有关代码库中实际运行情况的知识-“等等,我认为Bill有一个执行X的类,我们不需要编写新的类。”
  • 分享良好技术和编程风格的知识。

在这两个方面,初级审查员往往比高级审查员受益更多。


2

初级程序员绝对应该为他们的高级同事执行代码审查!

但是,他们不应该是唯一的审阅者。每次代码审查时,将他们与经验丰富的开发人员配对。

有很多好处:

  • 作者将被迫解释更多的代码。 讨论代码是查找代码问题的最佳方法之一,或者是实现代码的更好方法。

  • 作者将发现其代码中的弱点。 初级开发人员更容易被一些更高级的块所混淆。为了自己的利益,这些方法常常“太棘手”,可以从简化中受益。

  • 初级开发人员将学习更好的编码实践。 代码审查是一个以身作则的机会。

  • 初级开发人员将是一个更有效的代码审查者。 代码审查很难。每个人对代码审查的经验越丰富,代码审查就会变得更快,更有效。

  • 初级开发人员将对代码库有更深入的了解。 要自私!通过尽早拉拔初级开发人员,您将能够尽快将其移交给他们。

  • 初级开发人员会更投入。 初级开发人员将开始认为“高级”代码(及其同事)不那么外国化和令人生畏。这是代码审查的一个巨大且经常被忽视的好处。

  • 初级开发人员是一双崭新的眼睛。 他们不像长期从事代码库工作的人所灌输。初级开发人员在提出问题时更有可能指出完成事情的不同方式。 在没有任何考虑的情况下,不要忽略他们的野蛮评论!

  • 高级开发人员要负责。 我经常看到高级开发人员倾向于掩盖彼此的代码(信任,懒惰等)的情况。额外的眼睛有助于阻止它。

需要考虑的缺点是,所有相关方都将花费大量时间进行代码审查。因此,出售给管理人员可能有点困难。但是,收益完全超过了放慢脚步。


0

代码审查是为了审查代码,而不是为了学习。如果我是一名初级程序员,我会被迫去审查高级代码。

另一方面,前提是高级人员可以回答所有问题,阅读高级人员的代码是一种很好的学习方法。

两种选择可能是:

  • 让大三学生参加代码审查会议,并让每位参加者都可以进行一些教学讨论
  • 练习对编程

7
代码审查可以是学习的经验。也就是说,我完全同意,这不是他们的主要目的。理想情况下,所有团队成员都应该参与其中,但是我明白您的意思,(真正的)初级开发人员要花足够的时间来指出缺陷(假设她可以首先发现它们,这也是我不会的)真诚地希望大三学生审阅大四的代码。
yannis 2013年

OP明确表示初级程序员具有良好的技能。经验不足也并不一定意味着低质量的代码审查。
卡斯卡贝尔

@Jefromi:OP明确表示他/她想将代码审查的目的设定为学习。我只是说这不是他们的意思。
mouviciel

嗯,我认为我们对OP的理解有所不同-这篇文章确实强调学习,但同时也说“参与了代码审查员”,这意味着初级程序员不是唯一的人。
卡斯卡贝尔
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.