代码之家  ›  专栏  ›  技术社区  ›  Rob Wells

如何告诉别人他们的mod对我的程序不好?

  •  6
  • Rob Wells  · 技术社区  · 15 年前

    G'Day.

    这与 my question on star developers 并且 this question regarding telling someone that they're writing bad code 但我在看一个更具体的情况。

    也就是说,我该如何告诉一个“明星”他们对我写的程序所做的更改是错误的,并且执行不一致,而不会让人觉得我对“玩弄我的东西”很恼火?

    添加的新功能被谨慎地从这个shell脚本的原始版本中删除,以尽可能简单地保留它,直到我们了解到在加载系统时将看到的错误。

    基本上,我认为尝试和第二次猜测所有的错误情况是不可能的,事实上,在做了很多工作之后,可能会让我们走上一条完全错误的道路。

    在看到需要添加的内容后,有人潜入并添加了这些内容,但不幸的是:

    1. 逻辑不一致
    2. 变量名不再描述它们包含的数据
    3. 几乎没有评论
    4. 变量的使用方式不容易理解,并且大大降低了可读性,从而降低了可维护性。

    我总是试着从达米恩康威的观点来处理编码,“总是编码,就好像你的系统将由一个知道你住在哪里的精神病患者来维护一样。”也就是说,我试着让它更容易被跟踪,而不是作为我自己的才华的广告。这段代码是做什么的?”运动是有趣的,最好留给混淆比赛。

    收到了很多建议。

    干杯,

    10 回复  |  直到 15 年前
        1
  •  10
  •   Jon Skeet    15 年前

    我只是实话实说。你不一定要指出每一个错误的细节,但值得举几个例子来说明你将要提出的一般观点。你可能想记下其他例子, 不要 在第一个简短的反馈中大声喊出来,以防他们质疑你的推理。

    尽量确保反馈完全是关于 代码 而不是那个人。例如:

    好:参数验证 foo() 似乎与 bar() . 在 英尺() A NullPointerException 如果调用方传入则引发 null 巴尔) 投掷 IllegalArgumentException .

    不好:你的论点验证到处都是。你扔 空指针异常 在里面 英尺() 但是 非法数据异常 在里面 巴尔) . 请尽量保持一致。

    即使有了“求求你”,第二个表格也在说 开发商 而不是代码。

    当然,在许多情况下,你不必担心如此小心,但如果你认为他们会对此非常敏感,那就值得你付出努力。(仔细阅读你所写的,如果是书面反馈:我不小心在第一个版本中包含了“你”)。

    我发现大多数开发人员(不管是否是超级明星)接受“不,我没有实现这个功能,因为它有问题X。”这可能是我的幸运。

        2
  •  6
  •   Kekoa    15 年前

    从另一个角度来看,我鼓励你在他们的鞋子里思考这个问题。我将描述一个“假设”的经验。

    要记住的一些事情:

    • 那家伙想做点什么 很好。
    • 程序员很擅长 读心术。他们往往只知道 他们在读什么。
    • 由于需要做什么(或不需要做什么),他可能没有得到完全的指导。
    • 他可能会尽他所能做到最好。

    记住这一点,和他们谈谈。教他们。不需要在比赛中大喊大叫或撒尿。记住他们不是故意让你的生活变得困难。

        3
  •  3
  •   Richard Anthony Hein    15 年前

    我看到你问了很多关于如何处理某些类型的开发人员的问题。这对你来说似乎是一条普通的线。你一直在问如何改变身边的人。如果这对你来说是一个持续的问题,那么也许你就是问题所在。

    现在我知道你在问问题来学习如何与你觉得困难的人打交道,这很好,但是,你一直在问(并得到答案)如何改变人们。

    在我看来你需要改变。与这些人一起将代码更改为您想要的代码。和他们在一起。不要试图让他们这么做。就这么做,告诉他们你做了什么,为什么,并提出进一步改进的建议,互相学习。发挥彼此的经验和优势。只有我的2美分。

        4
  •  1
  •   i_am_jorf    15 年前

    如果您已经为项目明确定义了编码标准,请指出需要更改代码以满足这些标准。你所得到的列表似乎是相当合理的反馈(尽管3有很多争议;我只想把真正令人困惑的部分记录下来,因为修复其他三点,希望能减少代码的混乱)。

        5
  •  1
  •   Matthew Vines    15 年前

    如果这个开发人员在您的存储库中还有其他几个月前的示例,请向他展示一个并询问它在做什么。(几个月后给他看这个)。当他不得不到处寻找变量中的实际内容时,解构每一行代码来找出它在做什么。在那里进行代码审查/配对编程会话。一起重构和重命名,这样他就有希望自己知道为什么这些事情是重要的。

        6
  •  1
  •   Huntrods    15 年前

    坦率地说,我认为这是一个政治问题,而不是编码问题。明确地。。。

    1. 谁说这个人是“明星”?如果这是你在另一个问题中描述的同一个人,那么你已经有了答案:这个人是 “明星”。

    那么你就进入了政治的其他影响…

    1. 谁声称这个人是明星?为什么你不能告诉那个人“这是垃圾代码”?谁在保护他们/保护他们?你是这样做的吗?你能这样做吗?或者你会被炸/降级/放在“待命”堆上吗?

    你提出的问题不能单独回答。如果代码是垃圾代码,那么扔掉它并自己正确地执行它。如果有的话 原因 如果你不能做到这一点,那么你需要问问自己,这个地方的好处是否大于负面影响。

    干杯,

    -R

        7
  •  1
  •   Rob Wells    15 年前

    创建一个程序,然后将其发布给其他开发人员是很困难的。你把你的代码扔给了其他人的开发风格、编码约定等的摆布。

    告诉那些开发人员,他们在代码输入后编码做得很差,这是最难做到的事情之一。最好在开始使用代码之前解决您的问题。这可以通过两种方式来实现:维护一个详细的编码标准,要求提交的代码遵守这一标准,维护一个开发路线图,不仅要概述新特性将在何时出现,还要创建依赖项以避免此类事故。

    更重要的是,不要批评,否则会引起敌意和更糟糕的代码。也许您可以与开发人员一起创建标准文档。你将能够表达你对标准应该是什么的想法,你将得到他们的意见,而不会引起任何不愉快的感觉。

    一定要指出他们代码中的好东西,并且在讨论你给他们安排的弱点时一定要指出它对每个人(包括开发人员)都有好处的原因,不要批评。

    祝你好运。

        8
  •  1
  •   Nick Higgs    15 年前

    我将执行以下操作:

    • 确保他知道他的努力是值得赞赏的(最好这是事实)
    • 问他是否介意做些改变,让事情听起来没什么大不了的,而且很容易解决。
    • 解释这些问题,包括为什么它们是问题,并建议具体的更改以使他走上正确的道路。

    希望这个练习能帮助他更好地融入到文化项目中。

        9
  •  1
  •   ChristopheD    15 年前

    我们试图主动解决这些潜在的“问题”:

    • 每个人一起工作的“更大”项目都会被分配一个项目“codelead”(开发人员之一)。这会旋转每个项目(基于首选项、特定任务的经验…),因此每个人都会偶尔扮演“贡献”和“代码项目负责人”的角色。
    • 我们明确地达成协议 这些项目“领导”可以决定 不管他们想用代码做什么 其他人的贡献 像临时独裁:改变 它,提出建议,让人们 重做东西等)。项目代码 “铅”代表完整 对汇总的 代码工作。

    有了这些正式的“领导”(以及角色的变化),我认为人们对他们所贡献的部分的(建设性的)批评没有那么多问题。

        10
  •  1
  •   none    15 年前

    是的,尽可能保持反馈的欣赏性、专业性和技术性,用可能的“最坏情况”场景备份您的顾虑,以便这些特性和/或这个特定实现的缺点变得明显。

    此外,如果这是关于非常具体的特性/代码,并且对大多数用户没有任何用处,那么就表达您对代码/使用率的关注——表示对增加的代码基复杂性等的关注。

    理想情况下,以开放式问题的形式提出您的担忧,即:“尽管如此,我想知道这种方式是否会长期有效,因为……”。这样你就可以鼓励参与者之间进行积极的对话。

    邀请您的同事和用户就这些问题发表意见,事实上,询问其他人/贡献者他们对这一添加的看法(从优点和缺点、要求、代码质量方面),如果其他贡献者/用户可以提供更正,请务必声明您愿意重新考虑您当前的职位。敏锐的洞察力。

    你基本上是鼓励以这种方式进行非正式的审查,要求你的社区也调查提议的附加内容,以便讨论其优缺点。

    所以,无论决定是什么,它都是社区支持的,而不仅仅是你自己做的。

    作为原始设计的架构师,您也处于一个很好的位置,可以提供一些架构上的原因,为什么有些东西(还)不适合包含/部署。

    如果稳定性、复杂性或代码质量是一个真正的问题,请说明其他贡献如何也必须经过特定的审查过程才能被接受。

    您还可以提到特定的代码与当前设计的实际不一致,或者它与当前设计的未来扩展之间的伸缩性可能不太好,同样,您可以强调为什么某些东西被显式遗漏。

    如果你真的喜欢这些特性或核心思想,一定要突出这些特性所能带来的出色的附加效果。 如果实施和整合得当 但也要强调,由于许多原因,现有的实现并不真正合适。

    如果可以的话,一定要提出具体的改进建议,举例说明如何做得更好,以及应该避免什么,并表达你的希望,这可以在你的项目社区的帮助下重新编写。

    理想情况下,提出您实际接受这一贡献的需求,并提及您的需求的背景,实际上您可能会说您自己讨厌其中的一些需求。

    最好是,展示和讨论您自己贡献了类似代码(甚至更糟的代码)并且由于您自己的代码而最终面临巨大问题的实例,以便这些策略现在能够防止此类问题的发生。实际上,通过谈论你自己的坏代码,你可以非常主观。

    强调您通常很欣赏这种努力本身,并且您愿意提供必要的帮助和指针,以使所讨论的代码具有更好的形状和形式。此外,鼓励今后在社区内适当协调类似的贡献,以避免类似的问题。

    总是从特性和功能方面考虑(并提醒贡献者这样做),而不是从代码方面考虑——把它想象成一个彻底的代码审查过程,最终被提交/接受的代码可能与最初的实现几乎没有任何共同之处。

    这也是一个很好的可能性,可以给出一些例子,在这些例子中,您自己开发的代码最终大部分都被改写了,因此现在大部分代码都被更好的实现所取代。

    类似地,代码总是存在没有活动维护者的问题,因此您可以很容易地建议您对可能最终导致未维护的代码感到担忧,甚至可以询问相应的开发人员是否愿意帮助维护该代码,可能是在单独的分支中。

    在同样的意义上,总是要求新代码附带适当的注释、文档和其他更新。换言之,添加新功能或更改现有功能的代码应始终伴随所有相关文档的更新。

    最后,如果您马上知道在不久的将来您不能也不会接受任何代码,那么您至少可以邀请开发人员分支或甚至分叉您的项目,可能是在您的存储库中,在您的帮助和指导下,这样您仍然会对使用您的项目表示感谢。