是否甚至需要编码标准?


13

我知道已经证明编码标准可以提供极大的帮助。但是,有许多不同的工具和IDE可以格式化为程序员喜欢的任何标准。只要代码整洁/评论(而不是意大利面条混乱),我就看不到需要编码标准。

是否有关于开发编码标准的争论(我们没有一个,但我一直在考虑创建一个)?


如果您决定实施编码标准,请考虑在持续集成过程中予以实施。
雷夫·卡尔森

10
是否应该要求团队中的每个人都使用相同的IDE?
基思·汤普森

10
除非在特殊情况下特殊情况,否则没有大量的代码重新格式化将替代“ 不要重载运算符”之类的准则。如果您的编码标准主要是关于代码格式化的方式,那么您需要更好的标准。
Caleb 2012年

并非所有人都使用IDE,例如,我使用Acme。
dysoco 2012年

Answers:


33

但是,有许多不同的工具和IDE可以格式化为程序员喜欢的任何标准。

祝你好运。以我的经验,只有极少数的工具(零!)可以正确地将代码从格式X格式化为格式Y。制表符与空格,多行语句等。只需看一下GNU对C ++标准库文件的实现。您可以做的就是让您的IDE始终使用空格而不是制表符,而不必费心重新格式化外部代码。现在,您的代码看起来像您喜欢的样子,而外部代码看起来像原始作者编写它的样子。

特定的缩进样式是编码标准应指定的最后一件事。那正在发动一场编程宗教战争。IMO,一种编码标准应指定一套合理的可接受的缩进样式,但具体细节留给软件包的作者。缩进样式是或应该是编码标准的一小部分。编码标准的零号规则:不要汗流the背。缩进样式是一件小事。

更大的东西:

  • 我如何命名事物?
  • 语言的某些部分是否超出限制?
  • 代码是否需要进行干净的编译,以及使用哪些编译器设置?
  • 代码是否必须通过某些指标?
  • 需要什么样的测试?
  • 在代码(注释)和其他地方都需要什么样的文档?
  • 最重要的是,如何获得豁免标准?

附录
也许甚至更重要的是不包含在编码标准中的内容。诸如如何编写要求之类的主题不属于编码标准。关于测试的细节也不属于。项目不应使用编码标准作为项目管理计划,测试管理计划,验证计划的替代。编码标准的目标是提高代码安全性,质量,可理解性,可维护性,和其他“污秽”。有很多方法可以确保不会发生这种情况。仅举几例:使标准成为一本与某些国家的税法一样复杂的书,煽动编程战争,并制定不良的命名约定。

编码标准可能会产生意想不到的后果。例如:一个项目工程师的一些傻瓜会解释“无幻数治”意味着if (index == 0) {...}for (ii = 0; ii < 3; ++ii) {...}必须更改为if (ZERO == index) {}for (ii = ZERO; ii < NUMBER_OF_DIMENSIONS_IN_THE_UNIVERSE; ++ii) {...}不笑。我已经看到了它的发生。如今,当我编写编码标准时,这是“没有魔术数字的准则”,而不是消除这种愚蠢的规则。

编码标准并不是针对不良编程风格/危险编码实践的第一道防线。代码审查是。尽管进行了许多年的自动化,但没有什么比让主观的人眼观察并通过大量代码做出判断更好的了。


+1是个很棒的清单-是我最喜欢的答案。特别是禁止使用的代码,编译器警告,测试和文档。但是我仍然认为制表符与空格和缩进非常重要。有人提到了在更改源代码管理的更改时造成的噩梦。
GlenPeterson 2012年

处理制表符和空格的一种简单方法是在编码标准中禁止制表符。强制执行此操作的一种简单方法是使用一个签入钩子,该钩子要么拒绝签入,要么将用作空白的制表符转换为空格。自动验证某些编码标准(例如在每晚构建期间或在签入时进行验证)(最好是由于即时反馈而导致)是一项非常不错的功能。如果允许(或强制)签入并且转换混乱,该怎么办?也有一个简单的答案:代码审查。丑陋的POS机不应通过召集;它甚至不应该被审查。
David Hammen 2012年

请注意,“无选项卡”规则(之所以会在列表中避免使用,是因为意见确实有所不同),并不意味着您在键入代码时就不能使用选项卡。体面的编辑器可以将程序员键入的选项卡转换为空格。如果您的编辑器无法执行此操作,则可以考虑切换到更好的编辑器。
David Hammen 2012年

那里没有争论。只是说缩进/格式属于列表。选项卡可能适用于HTML或在运行时下载或解析的文件。
GlenPeterson 2012年

@GlenPeterson-缩进/格式在我的列表中,或者在我的列表之前:“ IMO,编码标准应指定一组合理的可接受的缩进样式,但具体细节留给软件包的作者。” 是的,“无标签”规则也有例外。例如,Makefiles。
David Hammen 2012年

60

编码标准不仅涉及受支持的参数indent-它们还包括命名约定,注释约定,以及大量关于成语,使用语言功能的建议。

更重要的是,您仍然需要在所有地方记录所有这些信息。最后,并不是每个人都希望使用以这种方式重新格式化代码的IDE ...


1
好的答案,它很好地解释了我从未想到的事情,从而扩展了我的知识。+1
SomeKittens 2012年

它们还可以涵盖诸如如何处理跨平台兼容性之类的问题,如果新开发人员没有编写跨平台代码的经验,这将非常重要。
Velociraptors 2012年

3
如果您认为此答案是一个很好的答案,并且可以回答您的问题,则将其标记为这样。
marktani 2012年

3
更不用说当您在其中提出另一个好的标准:源代码控制时,大规模重新格式化可能会引起头痛。
马修·沙利

1
@MatthewScharley通常,您将更改后的代码通过格式化程序推送,然后提交(也许在最后一次运行以确保格式化程序不会破坏任何内容之后),因此只有格式化后的代码才能在存储库中使用
棘手的怪癖

13

如果您在团队中使用一致的样式,则代码将更易于阅读。当您的代码变得更易于阅读时,您的团队将变得更有效率。它们将变得更有效率,因为它们不必在脑海中解析代码,并且在查看和维护代码时可以专注于逻辑而不是语法。

如果每个人都让IDE重新格式化代码以选择他们,那么您将遇到以下两个问题之一:要么必须确保在保存时始终将其转换回原始格式,要么因为差异会显示很多噪音,使得很难看到代码逻辑中发生了什么变化。


4
差点!我没想到。
SomeKittens 2012年

1
是的,绝对不要让每个人每次工作时都按照自己喜欢的方式重新格式化代码。那只是pandemonium。甚至糟糕的标准也比这更好。如果有选择,我将尝试使用该语言中最受欢迎的语言,以便新开发人员可以快速上手。使用网络查找您的语言的标准标准。
GlenPeterson 2012年

5

简短的回答:是的,它确实反映了质量

这是什么,为什么我们需要它?

编码标准是高质量软件中非常重要的一部分。它们确实提高了开发过程的生产率,使代码更易于维护,并且避免将代码绑定到一个人或团队中。编码标准的一致性还将过早创建的代码与精心制作的艺术品区分开。

在此处输入图片说明

好的,每个开发人员都知道编码约定是好的。但是标准应该从哪里来?

它主要由拥有产品的供应商决定。每个开发人员都可以从许多行业编码标准中进行选择。Microsoft,Oracle和Sun Microsystems的某些公司提供准则。

是否有关于开发编码标准的争论(我们没有一个,但我一直在考虑创建一个)?

是的,建议使用行业标准。但是,每种编码标准都是特定于开发平台的。因此,编码标准主要是特定于语言的。例如,Java与.NET具有不同的标准。例如,C#.NET在本参考中使用该标准

通用标准

通用标准不依赖任何编程语言。除了供应商提供的标准(又称上述行业编码标准)之外,还有其他编程符号,例如匈牙利符号CamelCase。我认为Microsoft .NET编码标准最初是基于CamelCase表示法的。

团队编码标准和准则

在思想上,每个开发团队都应该在项目开始时就编码标准达成一致。编码准则通常由团队负责人或公司的首席架构师创建。它通常是一个公开文档,需要时应加以遵循和改进。例如,在我们的公司中,我们有Wiki页面,此文档已上传到该页面,可供公司开发人员使用。


我认为问题是为什么这些事情很重要。您描述了编码标准的内容,但问题是为什么需要它。
布莱恩·奥克利

我尚未完成我的回答
Yusubov 2012年

While Not完全应该是一个Do Until
2012年

2

我将接受有争议的意见,并说不,您不需要编码标准。就像您所说的那样,这些规则是IDE强制性准则,每个公司的每个人都应遵循的一般最佳实践,或者是每个团队的逐案判断调用,应由一个有能力的团队中的多个人员做出通过配对编程或代码审查。

我们应该如何命名该变量?我们应该使用哪些语言功能?我们应该避免吗?什么测试是最好的?最好不要回答这些问题,直到遇到当前我们正在解决狭义问题

从这些微小的决定中结晶出来,基于与当前问题域和所使用技术的交叉点,团队中可能会出现非正式的标准/模式。整理这些意味着我们认为,基于数百个微决策并被这些团队非正式采用的,用于这些项目的诸如命名标准,适当的语言子集之类的东西,应该指导每个项目的前进。

从原则上讲,这听起来像是一件伟大的事情,但实际上,它只是成为政治的磁铁。我们可以强迫所有人使用哪些工具?我想强迫别人避免什么?如果每个人都同意这些问题,我们将不需要一个标准。我们会做的。以我的经验,标准源自对一个开发者子集对另一子集行使控制的愿望。通常,这种政治形式和随之而来的技术政策只会扼杀创新,而不是提供指导。

如果您想要真正的指导,而不是阅读带有无用规则的标准,请去寻找团队中有能力的成员,并询问他们的想法。他们被什么烧死了?他们如何建议您编写代码?您将获得各种有用的答案以及许多宝贵的经验来进行备份。根据常见的经验,您会看到很多交叉路口。除了标准强制实施的单一文化之外,您还将看到很多多样性,这些多样性只能帮助您看到解决问题的许多有效方法。

当有人告诉您不要执行“标准”规则中的某项规定,但是对他们的主张没有经验或没有合理的支持时,请忽略它们。这里的标准并没有为任何人服务或使任何人成为更好的开发人员。


对我来说很好-少浪费一点时间,尤其是如果所有开发人员都拥有Resharper许可证并且fxcop / stylecop正在构建服务器上运行时。
StuartLC 2012年

1
标准应该是并且通常是人民经验的总结和巩固。您提到的非常“有能力的人”。如果他们错了,那就发展他们,但是一发不可收拾是无政府状态的秘诀。
安德鲁(Andrew)

@Andrew这些经验可能并不适用,可能只会使您束缚与您正在解决的当前问题无关
Doug T.

1
+1用于扼杀创新,控制子集,一般最佳做法和政治。教育,不要管!
kirk.burleson 2012年

“没有书面编码标准,要遵循惯例并寻求指导”在小团队中效果很好(不到50到100英镑,我不知道)。当您有成千上万的人,在代码库中的项目之间来回迁移时,确实有助于为代码编写一套书面指南。
Vatine 2012年

1

现在,商用飞机是电传操纵,您希望基于飞行员的输入工作的飞机操纵程序。程序员编写此类代码时,希望他们遵循一套严格的规则,以避免通常可以避免的编程错误。一种实现方法是使用编码标准。

请参阅:联邦航空局C和C ++编码标准提案

需要我多说。

注意:我无法从FAA在线找到实际的标准,但是我已经看到了。


那是典型的不良编码标准。它太长了,引发了宗教问题,最重要的是,它与现代C ++编程背道而驰。例如,它排除了POD(普通旧数据),并且其有关异常的规则从坏到古老。不好:试图赶上std :: bad_alloc真是个很糟糕的主意。过时的:Java的思想是指定所有可能抛出的异常并捕获被调用函数抛出的所有异常,这在C ++中不起作用。更好的方法是根据David Abrahams的异常保证概念编写异常安全代码。
大卫·哈门

1

对我而言,纪律和纪律总是有帮助的,这反映了您制作的作品的质量。

话虽如此,我将使编码标准与IDE和/或使用中的工具保持一致。此外,对于每个开发人员,IDE的配置应相同(例如,每个开发人员的IDE应该使用所有制表符或所有空格进行缩进,并且每个人的IDE应该具有相同的制表符长度),以便每个人都可以轻松遵循标准...

同样,可以开发和使用签入脚本,这可以在一定程度上帮助遵守编码标准,例如,它们可以在实际将签入文件提交到版本控制系统之前修复缩进。


1

编码标准再重要不过了!我是CakePHP的狂热用户,我想查看从版本到版本的变更集,而开发人员并未遵循那里的标准。

实际上,我对风格上的差异感到非常沮丧,以至于我不得不写一篇关于编码约定的短篇小说。将新开发人员带入现有团队需要花费大量的时间和金钱-想象一下,没有标准的新开发人员接...而至...学习代码将是非常不可能的。

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.