与编码风格不一致的同事打交道?


30

当您与倾向于编写风格上很差的代码的人一起工作时,您会怎么办?我正在谈论的代码在技术上通常是正确的,结构合理的,甚至在算法上可能是优雅的,但看起来却很丑陋。我们有:

  • 不同命名约定和标题的混合(underscore_stylecamelCaseUpperCamel以及CAPS全部或多或少地随机应用于同一函数中的不同变量)
  • 奇异且不一致的间距,例如 Functioncall (arg1 ,arg2,arg3 );
  • 注释和变量名中很多拼写错误的单词

我们有一个很好的代码审查系统,可以正常工作,因此我们可以仔细研究并修复最糟糕的问题。但是,发送包含50行“在此处添加空格。正确拼写'itarator'。更改此大写字母等”的代码审核确实很琐碎。

您如何鼓励这个人更加小心并与这些细节保持一致?


2
“漂亮打印机”帮助。另外,您的公司有风格指南吗?
chrisaycock 2010年

1
没有语法的同事呢?;)
Muad'Dib 2010年

4
@JSBangs:安装预提交样式检查器并拒绝提交。这样可以使它们快速正确格式化。或者让预提交挂钩为您运行格式化程序。看起来有些东西,但我想它比怪异的要好于“可怕的”。
haylem 2010年

3
再想一想-看起来似乎很琐碎,但对于目的而言却是琐碎的(假设a)有一个编码标准,b)其他所有人都同意并遵守它)
Murph 2010年

3
这个程序员的背景是什么?听起来他在太多不同代码格式约定的公司中工作过,他的大脑将它们内部化为混乱。:-)
Carson63000 '12

Answers:


19

同意编码约定

即使这是一个寻呼机。我建议整个团队坐下来,大家都同意整个团队可以使用的基本工作编码约定。


1
绝对是-然后a)每个人都在尝试达到相同的标准,并且知道它是什么,并且b)您在代码审查时的拒绝可以减少为“未能遵守编码标准”(至少如果整个文件是一团糟-如果只是一两件事,您需要具体说明)
Murph 2010年

通常我从来没有见过一个团队能够在一小时内就任何一种语言的完全一致的编码约定“同意” :)但是,如果同意,您的意思是“讨论直到分歧,然后按等级和权限强加”。作品。您必须在某些方面放下脚步,因为您无法达成共识,或者您对团队非常幸运。
haylem 2010年

28

我认为您只需要继续做自己正在做的事情即可。有一套清晰的编码准则,并在代码审查期间执行它们。如果开发人员每次尝试签入某项内容时得到50或100行“在此处添加空格”和“正确拼写“迭代器””,而实际上在所有这些问题都得到解决之前,他实际上不被允许签入,为了避免麻烦,必须开始编写更简洁的代码。

我认为,如果您自己修复这些问题(如NimChimpsky建议的那样),那么您将永远在清理这个人。


5

我打电话给BS,每个人都说变量名的拼写错误和格式无关紧要。显然,他们只阅读自己的代码。并注意那里的单词-阅读。想象一下,读一本书时会遇到很多拼写错误,杂乱无章的格式设置,行距不一致以及许多源代码中普遍存在的其他惰性现象。这将是乏味的。

对于您的语法必须100%正确工作的专业而言,任何真正的开发人员都没有没有干净,一致的代码风格的借口。其他就是草率和懒惰。我总是质疑草率格式化的代码在实现中的正确性。


4

我们有一个很好的代码审查系统,可以正常工作,因此我们可以仔细研究并修复最糟糕的问题。但是,发送包含50行“在此处添加空格。正确拼写'itarator'。更改此大写字母等”的代码审核确实很琐碎。

我会自己更改它,然后在代码中添加一个礼貌的注释。

假设问题已经存在,如:

我们有一个好的代码审查系统

因此,我的建议是不得已而为之,我认为自己进行更改和发表评论一样快,就像发送电子邮件或其他内容一样。


10
那很快就变老了。
罗伯特·哈维

3
对于您来说,这可能比发送电子邮件要快,并且可以更快地解决问题,但与没有发生问题时相比,它要慢得多。
haylem 2010年

4

我认为诸如类和变量的命名之类的约定很重要,并且优雅,高效的代码也应遵循这些约定,但是冒着我的答案被多次否决的风险,我不得不说,一般来说,“漂亮的代码”范式在恕我直言,很多推是非常高估的。

首先,编写它的开发人员必须首先维护它,如果他被总线撞到了而另一个程序员无法弄清楚它是如何工作的,因为代码不是“漂亮”的,我会说反正其他开发者也不是很好。而且那里有很多自动格式化程序/美化程序,因此任何人都可以在必要时使用它们来美化代码,而不必浪费时间在“流程中” /“在区域中”。

请注意,我在这里不提倡意大利面条/牛仔风格的编码,实际上,我已经看到了一些格式很好的意大利面条代码(功能主体跨越4-5个屏幕,全局变量分散在不同的源代码文件中,通常名称不正确等)。


您对这样的代码怎么说:stackoverflow.com/questions/6221098/save-mapview-as-a-bit-map / ...您是否仍然认为处理这种“样式”的程序员是个不好的程序员,如果他有严重的麻烦吗?
WarrenFaith 2011年

@WarrenFaith,您可能想回顾我的第3段,特别是这里的这一段:“请注意,我在这里不提倡意大利面条/牛仔风格的编码……”。
Jas,

3

我的一位同事以使我的皮肤爬行的方式编写html。想象一下我的html很好,结构上有两个空格缩进,被添加到我的末尾的标签砍成碎片,这些标签在同一行或下一行结束,就像一些醉酒的人,他需要用胳膊将你抱住以保持站立。新行很少缩进,但如果是新行,我敢肯定,在银河系的某些部分会出现一些高度混乱的黑洞,以不合理的温度值吐出,以某种方式使其数字反映出这种缩进中使用的空格或制表符的数量由这个女人。如果幸运的话,我会看到一个以“ </input>” 关闭的输入标签。您可以理解的噩梦。

似乎也没有人理解这一点,看到对他们来说,对于大多数较高级别的用户来说,有组织的代码或无组织的代码的感觉就像我们将瑞士奶酪或美国奶酪放在三明治上的区别一样,也就是说,他们实际上不太在乎。我开始让它滑动,因为我承受着另一个项目的压力,而且我认为她开始意识到在想要改进之前很难理解这样的代码。我的建议是证明为什么比起简单地告诉他们这样做,更喜欢对代码进行样式设置。


3

我正在谈论的代码通常在技术上是正确的,结构合理的,甚至在算法上也可能是优雅的...

为您获得所有这些而高兴。大多数程序员可能会在清单上给您第一件事。我认为变量命名和间距是最不重要的事情。


3
与编写代码相比,程序员花费更多的时间阅读代码。如果代码不可读,则扩展或维护代码的成本将变得巨大。而且,如果变量名前后不一致,拼写错误且不具有描述性,则将使代码不可读。
Dima 2010年

@Dima,是的,但是比起残破不雅的代码,已经可以轻松且有效地运行该代码了。
jjnguy 2010年

1
我的观点是,您应该能够查看变量名,类名或函数名,并且立即知道如何使用它,而不必深入研究整个代码库。您还应该能够按照约定键入名称并正确设置名称,而不必查找它。我建议您阅读Robert C. Martin的“清洁代码”。
迪马

@Dima,我同意变量应具有描述性名称。OP并没有提到名称不好,只是名称不一致。
jjnguy 2010年

1
以我的经验,当名称不一致时,它们也往往是非描述性的。但是还有另一个问题。当名称不一致时,您将需要更长的时间来记住它们的名称,并且您必须花费时间查找它们。好的IDE可以有所帮助,但不能完全解决问题。编程已经给您的大脑增加了足够的负担,因此您希望减少思维导图的数量并尽可能地进行双重检查。
Dima 2010年

2

听起来您需要设置并同意样式约定。如果不这样做,您将拥有包含3个空格缩进的库,其他包含4个缩进的库,其中一些使用Camel Case,另一些使用underscore_case。


2

是要根据个人喜好进行更改,还是要遵循实际标准?如果您没有实际的标准,则不要这样做。首先设定一个标准。然后,您可以获得可以设置为将代码重构为标准设置(至少在某些情况下)的软件。

如果您有标准,请在代码审查中开始执行。如果您没有在代码审查中强制执行标准,那没有任何意义。这将意味着需要进行大量额外的维护工作,因为人们在接触原始代码时,必须修复最初不符合标准的旧代码。

即使没有标准,也要坚持解决变量名中的拼写错误(我不会特别担心注释),因为它们会使所有接触代码的人永远疯狂。


2

需要确定编码标准,以便每个人都知道它们是什么,然后才需要执行它们。不遵守规则会有后果。

以下是一些应该提供激励的东西:

  1. 代码审查将很繁琐,而且比必要的时间还要长。
  2. 代码将被更频繁地拒绝。
  3. 时间表将无法实现。

如果这个人不必因为没有人执行您的规则而担心这个问题,或者他们不在乎它们是否无效(也没有人对此做任何事情),那么您对此无能为力。


2

我很想建议进行私人聊天,看看你们俩是否都能找到根本原因:

  1. 同事是否赶时间,并且因为某人昨天想要该代码,所以该人正试图使某些东西尽快工作?这可能是一个机会,可以告知此人更多地关注质量而不是工作速度。如果这不会适得其反,那么“花点时间”这样的口号可能会很有用。

  2. 这个人如何看待他们的工作?如果有一种自豪感,那么您可能有一个角度可以用来改善自己。如果仅仅是支付账单的工作,则找零可能会困难得多。他们是否知道自己做得并不出色,但情况如此接近?

  3. 此人是否不同意公约并试图编写代码以示抗议?如果是这样,那么您可能会有一个大问题,但这值得一查到底是这样还是该人只是懒惰?什么样的动机在这里可能有用,例如,您可以诉诸于贪婪,自尊心或其他恶习来使人得到改善。这是偷偷摸摸的,但如果尝试通过好人路线却无济于事,可能会有效。

  4. 如何赢得朋友和影响力人们在说服力方面可能有一些建议,例如赞美改进并给予人以良好的声誉以维护。

至于为什么必须私下完成此操作,有以下几个原因:

  1. 蒙羞,批评或其他不愉快的可能性很大,最好是躲在门后,而不是在露天场所,人们可能会觉得自己的性格被暗杀。

  2. 您想鼓励其他人开放一点。这里的挑战是有些人受到如此谨慎的保护,可能需要很长时间才能使他们倒塌。

  3. 如果可能的话,我建议您在远离办公室的地方尝试这样做。外出享用午餐,散步或做点什么,以使周围的环境发生足够的改变,使人可能会感到更舒适。这可能是一个挑战,需要认识这个人,但是这里的想法是,在办公室里有些人会戴上防毒面具,这在这里可能没有帮助。

  4. 准备使对话变​​得更加热烈或丑陋,但这很可能是一个好兆头,如果您可以让其他人参与其中并进行良好的对话。有些人喜欢将事情公开进行,而另一些人则更喜欢用更微妙的方式来完成事情。关键是要确保您正在倾听对方的声音,以充分体谅并尝试理解对方。



1

unscrutify这样的代码美化将能够解决您的一些问题。如果您准备为此付费,那么可以使用高级软件,例如Parasoft,将规则嵌入源代码中。Parasoft强制必须以统一的样式编写代码。您也可以嵌入自己的规则。使用此类工具时,开发人员被迫使用统一样式。过了一会儿,他们会习惯的。


1

如果使用Eclipse,则为Java编辑器启用“保存操作”,并告诉所有人使用它。这可以解决每次保存时的格式问题,但不能解决大写错误。可能会很有帮助!

替代文字


1

遵循样式约定有多难?我了解拼写错误,但其余部分则表明思维和编码草率。告诉人们,在生产代码方面,他们需要更加一致,因为他们不是唯一会关注代码的人。以不一致的风格编写生产代码只是粗鲁,自私和考虑不周。


0

大声笑。您绝对会讨厌我的代码。我无法拼命挽救生命,也不在乎。

但是我知道有些人确实关心那些事情。

我建议您解雇编写丑陋代码的人,如果他们没有改变,然后找一个能使事情变得非常漂亮的人,并希望他们能写出能够

在技​​术上通常是正确的,结构合理,甚至在算法上也可能很优雅

如果他们不能这样做,那么至少您可以向客户展示损坏的漂亮代码,然后将其出售!

不过实话说。首先关注实际重要的事情。如果您在“它伤害了我的敏锐情感”之外找不到一个很好的可靠理由,那么现在就忽略它。如果真的很重要,请与该人坐下并说服他们。诸如标准之类的东西很容易区分类级别,方法级别,共享常量变量之间的区别。如果有问题的编码人员完全关心他/她的职业,他们将理解并尝试做正确的事情。


5
如果您的变量名拼写错误,那么下一个使用您的代码的人在正确拼写错误时将不得不花费更多的时间来修复编译器错误。这与“微妙的敏感性”无关。这些看似琐碎的事情会导致错误,导致沮丧,并导致更多错误。所有这些都增加了巨大的代码维护成本。
Dima 2010年

4
它不仅仅涉及“微妙的感性”,但是生产力我不介意某个编码风格略有不同的人,偶尔会忘记一个空格等等。我们并不完美。但是,当整个文件看起来像是由一个本科生写的,带有不连续的行距,位置,缩进和一般的代码流时,那么我只需非常快地按下“拒绝”(或“还原”)按钮即可。
haylem 2010年

2
许多成功的开源项目(包括Linux)都可以做到这一点:如果您没有正确的样式(以及单元测试),则将其拒绝。如果太好了,并且解决了一个真正的问题,那就太糟糕了:您不能总是修复别人的代码。总体而言,您会花费很少的时间和金钱,而只是偶尔经历一些天才,但看起来像地狱一样或无法维持。
haylem 2010年

1
有趣的事情。但是,当然,要点似乎没有得到重视。首先,您应该带一些显而易见的东西来使这个人成为您的有力佐证。然后,您就可以处理次要的事情。除了与规则打cho之外,还有其他与人合作的方法。也许,也许只是,强迫症患者会妥协一些或了解为什么其他代码中会有如此多的变化。实际上可能有原因或原因。
ElGringoGrande,2010年

0

当处理外包资源时,我的解决方案没有提供有关格式的&%$#信息(或者很容易避免的错误),我的解决方案是让构建服务器强制执行此操作。我创建了一个CI服务器作业,该作业每天晚上运行,检出代码,运行Jalopy和findbugs,然后将代码检入。一旦其他团队得知不使用标准代码约定会使他们的工作更困难,他们便开始使用IDE保持标准格式。

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.