【问题标题】:Research into Advantages of Having a Standard Coding Style研究具有标准编码风格的优势
【发布时间】:2009-08-24 23:50:18
【问题描述】:

关于 Stackoverflow 有几个问题,关于是否有任何关于什么是最佳编码约定/样式的研究或研究。这不是这个问题的目的。这个问题是关于是否有任何研究研究拥有组织范围的编码约定和风格是否有任何优势、生产力提高或其他积极的副作用。

对此我有自己的看法,基本上就是制定这样的标准有巨大的好处。老实说,我不在乎我需要使用什么样式,只要它在我可能必须使用的所有代码中都是一致的。

我只是想知道是否有任何研究支持或反驳我的观点。

【问题讨论】:

  • “巨大的好处”?还是“好处”?你说的巨大是什么意思?标准风格比自动化单元测试更有价值吗?比一门好语言更有价值?比简单有效的设计更有价值?
  • @S.Lott - 有点夸张。我自己更喜欢轻描淡写,人们有时也会误解这一点。
  • 我怀疑你可能不在乎。如果 C 的编码风格包括诸如“不允许不必要的空格(包括换行符)”之类的东西怎么办?或“描述变量用法的多字 cmets 必须与声明的每个字母混合出现:例如 int t/*height*/a/*of*/l/*character*/l;”这些都是极端的例子,但我怀疑“不在乎”是夸大其词。 :)
  • @S.Lott 这不是软件开发过程中不同部分或技术的比较。我坚持这样一个事实,即我认为从维护、团队间灵活性以及能够理解其他代码的角度来看,它具有巨大的好处,而无需花时间将您的内置模式识别适应不熟悉的编码风格。跨度>
  • @William Pursell 也许“不在乎”有点强。让我们在合理范围内说。当整个公司着手设计标准约定时,您所说的边缘情况永远不会发生。话虽如此,与数百个单独的约定相比,我认为我可以更轻松地适应一种严格执行的不良约定。

标签: styles conventions


【解决方案1】:

有几项研究表明,严格遵守一致的视觉风格有助于经验丰富的程序员将更多的本地问题保留在内存中,而不必记住问题的各个元素。

一致的编码风格有助于分块

这与人类记忆的工作方式有关。它被称为分块。例如,一个经过充分研究的现象是,国际象棋大师比不熟悉棋局的人更善于记住棋子的位置。但这仅是当棋子出现在正常游戏中可能出现的“自然位置”时。如果您将棋子放置在随机位置,国际象棋大师在记住棋盘位置方面并不比非棋手好。

同样的概念也适用于程序员。当编码风格一致时,编码结构对程序员来说显得“自然”,代码的大部分更容易被吸收。我们的短期记忆容量约为“七个正负二”的块,因此,那些熟悉的块越大,我们的大脑可以在内存中主动保存的原始数据就越多 (George Miller)。

当面对随机格式的代码时,程序员必须花费额外的精力来手动解析出他们正在处理的问题的各个部分。这消除了在内存中保存较大部分问题以解决问题的能力。这也意味着程序员需要更长的时间才能有效地解决手头的问题。

流动时间

你有没有发现,当你继续处理某个问题时,它看起来很清楚,但当你稍后再回到这个问题时,你似乎“丢失了信息”;即打破你的流动时间?流程时间在Peopleware 中有详细记录(所有程序员都必须阅读)。流动时间是程序员完成大部分工作的时间,并且只有在您长时间不间断地解决问题时才能实现。这是因为程序员需要一段时间才能将足够多的问题吸收到认知记忆中,从而有效地解决问题。格式良好的代码有助于我们的视觉图像处理,这意味着程序员可以更快地达到流程时间。

我曾在多家软件公司编写过编码标准。不幸的是,有多少程序员认为编码标准只是对他们如何做事进行不必要的控制的一种手段。一种创造性的审查形式。说实话,实际标准是什么并不重要。其价值在于让团队中的每个人都保持一致,即使这意味着在以我的方式或以你的方式之间做出经常武断的决定。 p>

以下是我上面提到的一些参考:

【讨论】:

  • 这是一个很好的答案,罗伯特。谢谢。我相信我们都经历过分块。我知道当我查看格式正确的代码时,相对于我认为正确的内容,我可以理解整个代码。但是,一旦代码的格式略有不同(即大括号没有在我期望的位置打开),将其作为一个整体掌握的能力就消失了,导致我不得不遍历每一行。打破虚幻的流动是另一个好点。
  • 根据我的经验,分块往往是消极的而不是积极的,因为它使程序员根据某些错误的一致性做出假设。坚持一致性会导致“更好”的代码是不确定的,并且没有与之相关的真正的双盲研究。确认偏差。
【解决方案2】:

我们的研究支持这样一种说法,即了解编程计划和编程话语规则可以对程序理解产生重大影响。在他们名为 [编程] 风格的 [The] Elements of [Programming] 的书中,Kernighan 和 Plauger 还确定了我们所说的话语规则。我们的实证结果证实了这些规则:程序应该以特定的风格编写不仅仅是美学问题。相反,以传统方式编写程序有一个心理基础:程序员强烈期望其他程序员会遵循这些话语规则。如果违反了规则,那么程序员随着时间的推移所建立的期望所提供的效用就会被有效地取消。本文描述的新手和高级学生程序员以及专业程序员的实验结果为这些主张提供了明确的支持。

Empirical Studies of Programming Knowledge. Soloway and Ehrlich.

【讨论】:

    【解决方案3】:

    我在这个问题上获得最多见解的地方:

    C++ Coding Standards: 101 Rules, Guidelines, and Best Practices(萨特,亚历山大)

    即使您不使用 C++,也值得一读。

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2011-06-17
      • 2010-09-11
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      相关资源
      最近更新 更多