4

我们的几位主要开发人员已经说服管理层指派一名初级开发人员为他们记录他们的代码。

他们的论点是:

  1. 您将有两个熟悉一切的程序员。
  2. 这是结对编程,有点。
  3. 它更具成本效益=他们会做得更多。
  4. 它证明了他们的代码是可读和可维护的。
  5. 他们很乐意回答任何问题;所以这是一种指导形式。

然而,他们保持忙碌以保持最新状态的程序员数量似乎随着时间的推移而增加。

这是一个好主意吗?


哇!这不是我们的经验!

以下是一些被证明很重要的说明。

  1. 高级开发人员是反身的自我记录者。这是一个核心的招聘问题。有时需要告诉他们“把这个留给小伙子”。

  2. 这被视为高级人员的验证工具(我认为我们的初级人员被聘用的门槛很高)。

  3. 是的,代码应该是单一用途和自我记录的。如果后辈不能轻易评论,那是前辈认真对待的反馈。

  4. 小辈们应该把它当作一个重构练习,它的工作方式比你想象的更频繁。尤其是捕捉 YAGNI 问题、范围过大等问题。他们可以让他们的前辈成为目标。事实上,他们发起了这种变化。(如果他们真的开始反对,我们会支持它。老年人非常愿意调整 - 他们明白,他们比任何人都更需要为后辈的成功负责。)

  5. 您的高级人员不想解释他们的代码吗?

  6. 我们对“每个人都拥有代码”的敏捷原则有着坚定的承诺。我们认为这会加速这一进程。

最后,个人笔记 - 当我试图理解别人的代码时,我想做的第一件事就是在我试图理解它时重新评论它。为什么评论被视为如此繁重?

也许我们会过滤掉一些初级申请人,因为我们明确表示这就是我们的工作方式。但这不是营业额问题。(但只有 3 个月。)

4

11 回答 11

13

可能不是一个好主意。出于多种原因:

  • 如果有一串后辈会“扫荡”他们,那么潜在客户编写正确代码的动机就会减少。无论是文档还是其他。我从未见过降低质量的动机得不到回应。

  • 如果团队领导乐于回答问题,为什么不在配对会议中回答问题呢?这实际上会花费更少的时间,因为您将能够立即回答问题,而无需尝试记住您上周所做的事情。

  • 结对编程不仅仅是一个初级开发人员无所事事地看着高级开发人员。即使是最有经验的程序员也可以向晚辈学习。即使只是通过挑战他们长期存在的假设。如果你有麻烦,让初级控制键盘 - 这通常会为我解决问题。

  • 代码应该是“自我记录”。近年来,Javadoc 等东西已经过时,因为它几乎没有增加价值(它总是过时等)。花时间重组代码以使其易于理解更有意义。

  • 我不赞成“更有效率”的说法。如果您有 5 个大四学生全速前进,而 5 个大三学生在他们身后扫地,那么您只有 5 个开发人员在编写代码。如果您有 10 个开发人员以 2/3 的速度运行,那么您将拥有更大的整体容量(约 6 个全速开发人员)。

于 2010-02-07T03:40:38.220 回答
4

这不是一个可怕的想法。阅读好的代码是一种很好的学习方式,并确保您可以编写其他人可以很好地遵循并对其进行评论的代码是有用的。

但是您的高级开发人员仍然需要阅读并验证评论是否正确,否则这只是浪费时间。

并且对于初级开发者的价值是有时间限制的。我会说最多 6 个月后,对初级人员没有真正的价值,甚至更短的时间,您可能会冒着失去(现在受过训练的)初级人员去更令人满意的工作的风险。

所以我给这个可能。如果初级和新员工必须在实习期间评论代码 - 很好。但在那之后,他们停下来,老年人不得不回去写自己的评论。

于 2010-02-07T03:40:04.413 回答
2

哇!!我是唯一一个认为记录代码的时间是你开始敲击键之前的人吗?

如果您的主要开发人员在编写代码(和设计审查)之前不了解设计的概念,那么您会遇到一些严重的问题,并且应用创可贴,例如让初级人员在编写代码之后写下他认为代码的作用,不会有帮助。

你有流程吗?质量保证?

于 2010-02-09T02:05:08.733 回答
2

一个额外的想法 - 通常,工程师在添加和/或测试代码之前对一段代码的作用没有一个全面的概念。是的,可以通过观察来了解代码目的的要点。但是文档的目标应该是涵盖不明显的细微差别和关注点。我认为任何开发人员(无论是否初级)都不会只看代码并编写有用的文档。

鼓励初级开发人员在执行其他任务时增强文档,这是一个好计划,因为他们不可避免地会发现一些对原始开发人员来说似乎“显而易见”的东西。但是,直到您尝试修复错误或增强功能并且您不明白为什么代码没有按计划工作时,这些记录的原因才会变得明显。

于 2010-02-10T19:35:34.730 回答
2

要回答标题问题,

一个程序员是否应该记录另一个人的代码

当我了解它在做什么时,我会记录我正在查看的代码。

我不在乎是谁写的。

于 2010-02-07T03:35:10.307 回答
1

我不够聪明,无法编写自己的答案,所以我会引用比我聪明的人:

乔尔

甚至不要想告诉大学 CS 毕业生他们可以来为你工作,但是“每个人都必须在 QA 工作一段时间,然后再继续编写代码”。我见过很多这样的。程序员不会成为优秀的测试人员,你会失去一个更难替代的优秀程序员。

我认为初级开发人员也是如此,尽管程度可能较小。我不介意不时记录我遇到的一些事情,但我不希望我的工作只包括为高级员工清理工作。

叶格说道

我刚刚采访过的一名华盛顿大学学生告诉我,他的朋友今年夏天在英特尔实习,他非常讨厌它,以至于拒绝了他们提供的一份相当有利可图的全职工作。这位朋友说,他确信英特尔员工为电影《办公空间》编写了剧本。不仅那里的人要向5或6个老板汇报,这已经够糟糕了;他们实际上有TPS报告,每个人都必须这样做。当他们更改封面格式时,会发出一份备忘录,让每个人都知道。

虽然这可能是我听说过的最超现实的实习经历之一,但实习恐怖故事相当普遍。这并不是说实习生在学校没有告诉任何人。消息传得很快。许多公司实际上已将自己列入主要大学的黑名单。告诉我这个故事的 UW 学生说,现在计算机科学系没有人对在英特尔工作感兴趣。英特尔仍在校园里疯狂招聘,但他们实际上已经关闭了管道。

简而言之,如果你让初级开发人员不想在那里工作,他们……就不会在那里工作。如果您没有任何初级开发人员,最终您将没有高级开发人员,然后根本就没有开发人员,如果您明白我的意思的话。

那么,唯一可能的解释是,您,好先生/女士,在谷歌工作,实际问题是招聘顶尖人才变得太容易了,而别有用心的是他们想为小公司创造公平的竞争环境。(没有人敢做让招聘优秀人才变得更加困难的事情。)在此,我祝你好运,因为我的公司不是谷歌,我们希望看到更多合格的候选人走进我们的大门.

于 2010-02-09T02:29:23.810 回答
1

这比不记录代码要好。如果您要这样做,我会尝试扩大角色。尝试挑战开发人员发现错误,改进代码(危险,但在领导的指导下),编写测试用例以及所有应该在第一次完成的事情。

为青少年能找到的最多问题设置某种类型的激励措施。鼓励初级人员在编写代码时放弃他们的基本职责之前更加努力并让领导者多思考一些。

于 2010-02-09T01:16:53.853 回答
1

这是个坏主意。初级或非初级开发人员应该直接影响代码。如果普通开发人员可以以最低的启动成本使用您的代码,那么这将很好地证明您的代码是可维护的。如果新手开发人员会破坏某些东西,那么您的单元测试需要更多关注。但是,如果您将继续创建不属于最终产品一部分的额外工件,那么您作为一个团队就会无缘无故地增加成本。

于 2010-02-09T01:28:50.610 回答
1

如果他们编写清晰的重构代码,他们将很少有评论,如果有的话。

于 2010-02-09T02:39:55.343 回答
0

这真的“取决于”,你需要记录这个过程的具体目标,然后衡量结果。这可能只是一种降低成本的模式,即让薪水较少的员工完成更多所需的工作。也可能有其他值,你举了例子,这些更难衡量(即记录者是否真的获得了他们可以使用的知识)。归根结底,这类问题没有正确的答案,因为它本质上是务实的,即这一行动的后果将证明(或以其他方式)它的存在是正当的。

于 2013-04-09T16:17:33.463 回答
0

这似乎只是摆脱指导的一种聪明方法。有几个问题仍然存在:

  • 审查初级程序员写的文档花了多少时间?例如,如果您的初级程序员的母语不是英语,这可能会耗费大量时间。
  • 这应该如何让初级开发人员获得开发软件的经验?这种形式的指导没有解决从规范到设计再到实现的推理飞跃,这是初级和高级开发人员之间的区别因素。
于 2010-02-07T03:37:27.760 回答