我应该如何从经验不足的程序员那里修复代码?


19

一点背景:我是我们10人部门的两名程序员之一(其余是艺术家和管理人员)。我们两个人完成了使事情顺利进行所需的所有编码,并开发了所有即将出现的项目。我从事编程已有4年了,这是他的第一份“实际”工作(如他所说)。我们通常在任何时间点都在从事不同的项目。

几个月前,我开发了一组(绝不是完美的)类,这些类将用于以后的项目。该项目的很大一部分(出于计费原因)委托给他来设计和编程GUI界面。由于他是新手,所以我在设计上提供了一些帮助,并说如果他需要其他的帮助,请寻求帮助。几周前,他完成了该界面的演示,以演示该界面是否有效,尽管有点慢。

该项目的下一部分已经开始,我正在努力。我打开了界面,从下一步开始,然后立即遇到了问题(有点慢是有点轻描淡写,常见操作有错误等)。我查看了代码中的一些问题,并发现O(n^n)应该是的调用,O(n)没有错误检查的类型假设(在Python中),对原始代码添加的对GUI的引用等等。

现在,我绝对想教他什么地方出了问题以及如何解决它,但是他已经开始进行下一个项目,而这是在几周前。恐怕我说:“回去做对吧!” (当然有帮助)太苛刻了,与此同时,我们还有其他项目需要完成。我是否应该现在自己修复代码并在将来尝试捕获问题?


4
将来,是否有可能就编码准则达成共识,以防止您所描述的错误?
本尼

5
很好的事情是,您不必立即去找管理层并告诉他。一些公司以责任为导向。当您检入这些修补程序时,找到一种将它们分组在一起的方法,然后让这个家伙稍后再看。另一方面,O(n^n)除非没有别的办法,即使是应届毕业生也不应编写任何编码。如果他们这样做了,那么他们可能会在算法上获得C或没有接受C或teacher脚的老师。利用某种工具来发现常见问题会很好。也许作为下一个任务,这个家伙可以编写一些性能测试?
工作

一个没有证明为什么错的O(n ^ n)句号。如果您确实需要这样做,则最好在注释中说明原因。
洛伦·佩希特尔

正要写“嘿,O(n * n)并不那么糟糕,许多应用程序都需要它...”,但后来我意识到这不是乘法符号,而是杀手^!
马克斯

如果O(n)具有很大的常数且n很小,则O(n ^ n)的幅度可以比O(n)快一个量级。encodinghorror.com/blog/2007/09/…再说一次,n ^ n是极端的:D
Coder

Answers:


33

听起来好像制定某种代码审查策略可能在多个级别上都是有益的。一些直接好处:

  • 您可以在提交代码之前直接影响其代码的质量,从而保持较高的代码库质量
  • 让您避免犯另一类眼睛可能会犯的类似错误
  • 在没有编码准则的情况下,评审自然会导致编码风格的一致性
  • 知识共享。如果你们只有两个人,一个人被公共汽车撞了...

现在,当您开始清理他的代码时,当您寻求对此代码的复习时,可以将其用作教学练习。您将对您的内容进行审查,他下次可能会学习如何做得更好。


3
+1代码审查是解决此问题的好方法。我建议将措辞改成“请介意看一下我所做的更改以确保我不会错过任何事情”,而不是“这里是我改进代码的方式”。
史蒂夫·杰克逊

1
+1我想说代码审查比任何“黄金规则编码准则”都适合得多。. 从来没有很多事情可以做。
最多

我真的很喜欢这个主意,谢谢。现在,我只需要研究一些进行代码审查的好方法!
TorelTwiddler 2011年

1
实际上,mumak.net / stuff / your-code-sucks.html上有一篇不错的娱乐文章,其中包含一些基本知识。这主要是关于以建设性方式进行评论的行为技术,这对于成功的评论至关重要。
nithins 2011年

@TorelTwiddler,只记得代码审查是为了学习,而不是责备。指出他做得很好的事情,因此他在建议改进方法的同时知道它们是好的。
CaffGeek

5

永远不要修复他们的代码,否则他们将学不到任何东西,除非他们犯了错误,否则您会发现并修复它们。直到完成任务才完成。当我开始专业时,我真的很幸运,我的直接主管重新检查了我所做的一切,如果有更好的解决方案,或者我犯了一个愚蠢的错误就会告诉我,这意味着我的技能会提高,这意味着我会更快地发展较硬的皮肤。

让它滑下来会滋生坏习惯,现在纠正将使他们更好地应对批评,并在声称做到这一点之前进行三重检查。


2

我们能否推断出该项目“可行”并在合理的时间内完成(尽管存在一些令人震惊但可修复的设计问题)?如果是这样,它的状况要比我多年来看到的许多项目要好得多。

我认为,更多的交流将对您的团队有所帮助,而这可以通过定期的代码审查来完成。

最好对“过分苛刻”敏感,并且我想您要记住,代码审查不必是让下辈们被烧烤和审查的令人沮丧的热座体验。对于高级开发人员来说,这也是一种展示良好做法的方法,并且即使在存在“错误”的情况下,每个人也可以通过礼貌和友好来互相信任。

人们看到真正好的东西看起来会学得很好。这比系统地指出每个小缺陷要好。但是,应轻轻且建设性地指出O(n ^ n)。


0

分享您的知识。

我会为他的新项目提供帮助,以换取从高级到初级的一些教学。

为什么不对两个项目进行编程配对?

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.