Stackoverflow上有几个关于是否有任何研究或研究什么是最佳编码约定/风格的问题。这不是这个问题的关键所在。这个问题是关于是否有任何研究来研究是否有任何优势,生产力增益或其他积极的副作用,以具有组织范围的编码惯例和风格。
我对此有自己的看法,基本上就是有这样的标准有很大的好处。老实说,我不能不关心我需要使用哪种风格,只要它在我可能需要使用的所有代码中都是一致的。
我只是想知道是否有任何研究支持我的观点或与之相矛盾。
答案 0 :(得分:14)
有几项研究表明,严格遵守一致的视觉风格有助于有经验的程序员在记忆中保留更多本地问题,而无需记住问题的各个要素。
它与人类记忆的运作方式有关。它被称为 chunking 。例如,一个经过充分研究的现象是,国际象棋大师在记忆国际象棋位置方面比不熟悉游戏的人要好得多。但这只是在片段出现在正常游戏中可能出现的“自然位置”的情况下。如果你把棋子放在随机位置,国际象棋大师在记忆棋盘位置时, 没有比非棋手更好。
同样的概念适用于程序员。当编码样式一致时,编码结构对于程序员来说似乎是“自然的”,并且代码的较大部分更容易被同化。我们的短期记忆容量约为“七个加或减两个”块,因此,熟悉的块越多,我们的思维可以在内存中主动保存的原始数据越多(George Miller)。
当面对随机格式化的代码时,程序员必须花费额外的精力去手动解析他们正在处理的问题的各个部分。这使得在内存中处理大部分问题的能力消失了。这也意味着需要更长的时间才能达到程序员有效解决手头问题的程度。
你有没有发现问题在你继续工作的时候看起来如此清晰但是当你稍后回到这个问题时你似乎“丢失了信息”;即打破流动时间?流程时间在Peopleware中有详细记录(所有程序员都必须阅读)。流程时间是程序员完成大部分工作的时间,只有当您在延长的,不间断的时间内处理问题时才能实现。这是因为程序员需要一段时间才能将足够的问题吸收到认知记忆中以有效地解决问题。格式良好的代码有助于我们的可视图像处理,这意味着程序员可以更快地达到流程时间
我在几家软件公司撰写了编码标准。令人遗憾的是,有多少程序员认为编码标准只是一种断言对他们如何做事的不必要控制的手段;一种创造性的审查形式。说实话,实际标准很少是很重要的。其价值在于让团队中的每个人保持一致,即使这意味着在以我的方式执行或以 方式执行操作时经常做出任意决定。
以下是我上面提到的一些参考资料:
答案 1 :(得分:7)
我们的研究支持这样一种说法,即编程计划和编程话语规则的知识可以对程序理解产生重大影响。在[编程]风格的[The] [编程]风格的书中,Kernighan和Plauger也确定了我们所谓的话语规则。我们的实证结果为这些规则注入了灵感:程序应该以特定的方式编写,这不仅仅是美学的问题。相反,以传统方式编写程序存在心理基础:程序员强烈期望其他程序员将遵循这些话语规则。如果规则被违反,那么程序员随着时间推移建立的期望所提供的效用实际上是无效的。本文所述的新手和高级学生程序员以及专业程序员的实验结果为这些主张提供了明确的支持。
Empirical Studies of Programming Knowledge. Soloway and Ehrlich.
答案 2 :(得分:0)
我在这个问题上获得最多洞察力的地方:
C++ Coding Standards: 101 Rules, Guidelines, and Best Practices(Sutter,Alexandrescu)
即使您不使用C ++,也值得一读。