2008-09-22 54 views
11

我是一名机械工程博士研究生,没有广泛的计算机科学背景。我们编写代码是我们研究的一部分,但它通常是高层次的(例如Matlab),而且通常是临时的。学术界的代码审查

这听起来像这里的学者代码评论对于(a)从其他人学习技术,以及(b)发现代码中的不足之处很有价值。 (有时候我觉得有些论文被发表,其中的理论是在代码中实例化的,但作者从未看过!)。学术界是否应该与他们的同行进行强制性的代码审查? (有没有人见过这样的事情?)

更重要的是,在这种情况下需要多长时间才能进行有效的代码审查?当特定资源总是非常稀缺时,似乎很难证明额外的时间。


附录:一些人询问“出版物”是否构成了充分的评论。根本不在我的领域。 结果是重要组成部分,因此如果您使用无法理解的代码编写算法和/或数据分析,并在经过数小时处理后吐出图形,则这与清晰,可共享且快速的代码没有区别。

你可能会写出错误的代码,产生的结果看起来关于的权利,永远不知道那里有一个错误!

但我认为将电子版发行的出版物与用于在手稿中产生结果的代码一起发布将是一个好主意。问题是时间问题:每个人的代码都是丑陋的,不可维护的(推广;毕竟我们是工程师,而不是程序员),所以清理出版需要很长时间。代码评论可能会有助于这种情况。代码审查的时间

+1

我一直认为,如果你的研究依赖于数据由程序操纵,无论是数据和程序要求审核你的研究被认为是同行评审之前。这是不是这种情况? – Will 2008-09-22 11:47:18

回答

6

在花了学术界我发现了很多产生的代码仅仅是代码,把工作做了一些时间。

代码通常是由一个人一起黑试验测试任何假设。而在行业中,代码是由小团队生成的,而可维护性则是一个重要因素。

除非审稿是熟悉的代码库,以及代码量是非常小(一对夫妇的千行?)的代码审查要么是非常费时或不很严格。

我花了一天代码审查一个同事写了5000行的程序是的,我发现了不少问题,但我要说,我不会愿意这样做太频繁。根据我的经验,代码审查在评估功能项目而非整个应用程序方面效果最好。

说实话,是的代码审查如果正确完成对学术界来说是一个福音,但是找到有足够时间审查代码的人的机会在学术界是渺茫的,因为每个人都试图尽快完成他们自己的项目尽可能。从本质上讲,学术界的环境并不真正有助于代码审查。

并且让本科生做这件事很愚蠢,理想的情况是代码审查应该由具有比一般大学生更多的软件开发经验的人进行。所以除非本科生的能力超强,否则你不可能从他们的代码审查中获得太多好处。

1

长度取决于:

  • 的代码长度
  • 复杂的代码
  • 技能评审的

所以很难量化究竟多久将采取。我知道我工作的一些人可以复习约400loc/h,但是有几个项目已经把200的最高loc/h率限制在200,因为他们认为加快速度会降低代码审查的质量。

此外,代码评审是最常用的编码标准,因为评审是为了确保其符合标准。代码审查不是重新设计代码的地方,所以如果您缺乏编码标准,那么代码审查难以实施。

2

我的建议是有1或2个会话,看看团队/同事如何处理它。 “有效”的答案基本上取决于人。

我一直在很多评论中,人们审查并没有真正花时间坐下来跟踪代码。很多时候,人们会简单地忽略来源,并写下拼写错误和'需要评论'类型的'缺陷'。尽管这些信息很好,但它并不能真正帮助你列出上面列出的a,b原因。

请注意,我也一直在非常有成效的评论。

我最后的建议是一次检查一小段代码。发送完整项目的评论不会得到您期望的结果。大多数人在阅读大量代码时会感到厌倦,并开始为了完成所有工作而略过。

在我最新的职位上,最棒的是即兴代码评论。所以,如果我刚刚完成了一段代码,我会再次请另一位开发人员来查看源代码控制分支中的任何内容。没有什么正式的,只是一个快速的看,所以别人知道什么是与代码决定。

1

研究论文是不是所有的同行评审前发表?而研究本身,是不是有某种形式的导师? (不知道正确的术语,我不是在学术界...)

那么,为什么犯规,仅仅包括代码审查吗?研究论文的同行评议也应该是代码评审。 (真理,很少有人知道如何进行有效的代码审查,但是这是一个不同的问题...)


为了澄清,我认为同行评审(公布前?)将验证所有的假设,确认结论,验证数据跟踪等。
验证数据跟踪的一部分(以及因此数据结论的有效性)必须检查处理或生成数据的程序。因此,代码审查是一种必要...

1

假设您的评审组知道你写的语言并了解您所使用的数学/公式,一般不会花费太长时间。已经发布了关于诸如每小时查看的代码行数以及其他统计数据等事情的研究报价和引用,但是审查那些执行一些数学计算的代码所花费的时间比做数学密集程度低的代码花费的时间更长如果你正在将自己的功能转换为X或Y.

当我在学校时,我们没有做代码评论(除非我们被绊倒!然后只发现错误),但它肯定会很高兴看到更多的代码。

在进行代码审查时,我的团队通常会提前几天向审阅人提供代码(取决于代码量),并将其分成若干逻辑上分组在一起的区块很多代码),让审查人员检查出来。然后我们会见一个小时左右,并浏览研究结果。有很多方法可以做到这一点,但对我们来说工作起来相当不错。

我想这让我感到惊讶,有些事情已经不存在。

0

而不是直接跳入代码评论,尝试某种代码分析器可能是一个好主意。像FindBugs这样的东西在指出倾向于存在于“概念证明”代码中的明显问题方面非常出色。

1

我想有一个非常大的差异:学者和软件开发人员以非常不同的方式合作。

代码审查通常是作为团队的一部分完成的,共同的议程。如果应用程序销售,我们会收到付款。他们理解所有的代码并且代码尽可能好是符合每个人的利益的。

学术界有一个非常不同的议程 - 我敢肯定,你知道至少有一位博士生因为与20年前他们的论文相矛盾而不断地挫败了他们的研究成果(大多数联合国大学似乎做了很多) 。

作为一名学生,您可能需要仔细选择您的评论对象,并且他们不会自动改善您的代码。

代码评论不(通常)修复错误或者真正验证代码。他们只是分享理解并提供反馈。

如果你的代码有效但效率低下就是一个问题?如果这是一场噩梦,如果它真的有效,那么记录不完整且不可行?

从某种程度上说,如果这项工作不是专业软件开发,那么我认为特设代码可以成为这项工作的正确工具。有一些我用Matlab做的(在我的数学学位课程中)我现在不想做,但我现在编写的代码由我的团队共享并定期重新访问,然后我编写的代码一直没有被查看,因为我毕业。

1

第一次写出更好的代码,如果只是为了让你更容易在几个月后重新访问代码。与相信编写优秀代码的志同道合的科学家和工程师合作。以您的代码为荣,并记住我们离开机器代码和发明高级语言的原因之一是为了更好地与其他人沟通。如果其他人无法理解你的方法,那么做得并不好,特别是在学术界,其他研究人员的结果的可重复性如此重要。

1

我的背景是作为一个非计算密集型领域的物理学者。

学术编程的思想是,同行评议论文提供了用于处理数据的算法的描述。这可能是纯粹的建模,用某种功能形式拟合数据或某种其他类型的处理。假定作者能够胜任他们所描述的算法。一位敏锐的评论者可能试图重复一些分析(但我想这很罕见)。

一般来说,我期望通过与合成的数据,或者对一个已知的(简单的)分析结果的比较测试,如果程序是中央的工作或小说看的节目的在纸的动作的验证。

回想一下我在其中工作过的小组不会有很多人(有些人接近一个)能够做一个有用的代码审查。在一个模拟小组中,有几个人将使用相同的代码,并且可能会随着他们的发展而开发新的方法。

0

代码质量通常不是学术界关注的重点。通常,代码的唯一消费者是研究人员,所以诸如稳定性和易用性之类的东西并不比简单地完成工作更重要。此外,研究代码必然是实验性的,并且规范变化比其他类型的代码更加剧烈,所以最终的代码将会有许多变更移植到它上面。

但我认为最重要的因素只是学者们不认为自己是专业程序员,编程只是他们工作的一小部分。因此,根本没有能够维持代码审查过程的护理或激情水平。