天儿真好,
这与my question on star developers和this question regarding telling someone that they're writing bad code有关,但我正在考虑更具体的情况。
也就是说,我怎么告诉一个“明星”他们对我编写的程序的更改很难做到并且执行不一致而不仅仅是因为我对某人“玩我的东西”感到恼火?/ p>
添加的新功能被明确地遗漏在此shell脚本的原始版本之外,以使其尽可能简单,直到我们了解到我们将在负载下看到的错误。
基本上,我认为尝试再次猜测所有错误情况是不可能的,事实上可能会让我们在完成大量工作后走上完全错误的道路。
在看到需要添加的内容之后,有人潜入并添加了但不幸的是:
我总是尝试从Damien Conway的角度来看待编码“总是编码好像你的系统将由一个知道你住在哪里的精神病患者维护。”也就是说,我试图让关注变得容易,而不是作为我自己的才华的广告。 “这段代码做了什么?”练习很有趣,最好留给混淆比赛恕我直言。
任何建议都很受欢迎。
欢呼声,
答案 0 :(得分:10)
我会诚实地对待它。你不一定需要指出每一个错误的小细节,但是值得你做几个通用点的几个例子。您可能希望在第一次简短反馈中记下您未呼出的其他示例,以防他们质疑您的推理。
尽量确保反馈完全是关于代码而不是人。例如:
好:foo()
中的参数验证似乎与bar()
中的参数验证不一致。在foo()
中,如果来电者通过NullPointerException
,则会引发null
,而bar()
会引发IllegalArgumentException
。
糟糕:你的论证验证到处都是。您将NullPointerException
投放在foo()
IllegalArgumentException
但bar()
{{1}}。请尽量保持一致。
即使是“请”,第二种形式是讨论开发者而不是代码。
当然,在许多情况下,你不必担心如此小心,但如果你认为他们会对此非常敏感,那么值得付出努力。 (仔细阅读你所写的内容,如果有书面反馈意见:我在第一个版本中意外地包含了一个“你”,以便开始:)
我发现大多数开发人员(超级明星与否)都非常合理地接受,“不,我没有实现该功能,因为它有问题X.”虽然我很幸运。
答案 1 :(得分:6)
从另一个角度来看,我鼓励你考虑一下。我将描述一种“假设的”体验。
要记住的一些事情:
请记住并与他们交谈。教他们。不需要大喊大叫或小便比赛。请记住,他们并没有故意让你的生活变得困难。
答案 2 :(得分:3)
我看到你问过很多关于如何处理某些开发人员的问题。这对你来说似乎是一个共同点。你一直在询问如何改变你周围的人。如果这对你来说一直是个问题,那么也许你就是问题所在。
现在我知道你在提问如何处理你认为困难的人,这很好,但是,你一直在询问(并得到答案)如何改变人。
在我看来,你需要改变。与这些人一起将代码更改为您想要的代码。跟他们。不要试图让他们这样做。只要这样做,并告诉他们你做了什么和为什么,并提出进一步改进的建议,并相互学习。发挥彼此的经验和优势。我的2美分。
答案 3 :(得分:1)
如果您已为项目明确定义编码标准,请指出需要更改代码以满足这些标准。你在那里的列表似乎是非常合理的反馈(尽管#3有很多争论;我只会强调记录真正令人困惑的部分,因为修复其他三点,希望这会使代码更容易混淆)。
答案 4 :(得分:1)
如果您的存储库中存在任何其他几个月的开发人员的示例,请向他展示一个并询问他正在做什么。 (几个月后给他看这个)。当他必须拉链以找出他的变量实际上是什么,并解构每行代码以弄清楚它在做什么。在那里进入代码审查/配对编程会话。重构并重命名,以便他有希望开始亲眼看看为什么这些事情很重要。
答案 5 :(得分:1)
那么你就会进入政治的其他影响......
您提出的问题无法真正孤立地回答。如果代码是废话,那么扔掉它并自己正确地做。如果有原因你不能这样做,那么你需要问问自己这个地方的好处是否超过了负面因素。
干杯,
-R
答案 6 :(得分:1)
创建程序然后将其发布以供其他开发人员使用是很困难的。您将代码置于其他人的开发风格,编码约定等方面。
在代码进入后,告诉那些开发人员他们编码效果不佳的问题,这是你可以做的最困难的事情之一。在开始使用代码之前,最好先解决您的疑虑。这可以通过两种方式完成:维护详细的编码标准,要求提交的代码遵守这一标准并维护开发路线图,而不仅仅是概述新功能何时进入,而是创建依赖关系以避免此类错误。
更适合您的情况,重要的是不要批评或者它可能导致敌意和更糟糕的代码进入。也许您可以与该开发人员合作创建标准文档。您将能够表达您对标准应该是什么的想法,并且您将获得他们的意见,而不会产生任何困难的感觉。
始终指出代码中的好东西,并确保在讨论构建它们的弱点时指出它将使每个人(包括开发人员)受益的原因,从不批评。
祝你好运。答案 7 :(得分:1)
我会做以下事情:
希望这项练习能帮助他更好地融入文化项目。
答案 8 :(得分:1)
我们主动尝试解决这些潜在的“问题”:
通过这些正式的“领导”(以及不断变化的角色),我认为人们对他们贡献的部分(建设性)批评的问题较少。
答案 9 :(得分:1)
是的,尽可能保持反馈意见,专业和技术,用可能的“最坏情况”情景支持您的担忧,以便这些功能和/或此特定实施的缺点变得明显。
此外,如果这是关于非常具体且对大多数用户没有任何用处的功能/代码,请表达您对代码/使用率的担忧 - 表示对增加的代码库复杂性等的担忧。
理想情况下,将您的问题视为开放式问题 - 在以下意义上:“我想知道这种做法是否可以长期发挥作用,因为...”。因此,您实际上鼓励贡献者之间进行积极对话。
邀请您的贡献者和用户提出他们对这些问题的看法,实际上询问其他人/贡献者他们对此添加的看法(在优缺点,要求,代码质量方面),做出声明如果其他贡献者/用户可以提供相应的见解,您愿意重新考虑当前的位置。
您基本上鼓励进行非正式审核,要求您的社区也查看建议的添加内容,以便讨论优缺点。
因此,无论做出何种决定,它都将得到社区支持,而不仅仅是由您制作。
您是原始设计的架构师,也非常有能力提供架构理由,说明为什么某些内容(还)不适合包含/部署。
如果稳定性,复杂性或代码质量是一个真正的问题,请说明其他贡献如何也必须通过某个审核流程才能被接受。
您还可以提及具体代码如何与您当前的设计没有真正对应,或者如果未来扩展到您当前的设计可能无法很好地扩展,同样您可以突出显示为什么某些内容被明确省略。
如果你真的喜欢这些功能或核心理念,请务必强调这些功能在如果正确实施和集成时能够提供的优秀功能,但同时也要强调现有实现并非如此适当的原因有很多。
如果可以,请提出具体的改进建议,提供如何更好地做事的示例,以及要避免和表达您希望的内容,可以在项目社区的帮助下重新添加。
理想情况下,提出实际接受此贡献的要求并提及您的要求的背景,事实上您可能会说自己讨厌这些要求。
最好,提出并讨论您自己贡献类似代码(甚至更糟糕的代码)的情况,并且由于您自己的代码而最终面临巨大问题,因此现在这些策略已经到位以防止此类问题。通过实际谈论自己的不良代码,你实际上可能非常主观。
强调您一般都很欣赏这些努力本身,并且您愿意提供必要的帮助和指示,以便将有问题的代码变为更好的形状和形式。此外,鼓励在您的社区内适当协调将来的类似贡献,以避免类似的问题。
始终考虑功能和特性(并提醒您的贡献者也这样做),而不是代码 - 想象它就像一个彻底的代码审查过程,最终代码最终被提交/接受,可能几乎没有任何东西与原始实施相同。
这也是一个很好的可能性,提供一些示例,您自己开发的代码最终会在很大程度上重新编写,因此现在大部分代码都被更好的实现所取代。
同样,代码中始终存在没有活动维护者的问题,因此您可以轻松地建议您担心可能最终无法维护的代码,您甚至可以询问相应的开发人员是否愿意提供帮助维护该代码,可能在一个单独的分支中。
同样,始终要求新代码附带适当的注释,文档和其他更新。换句话说,添加新功能或更改现有功能的代码应始终伴随所有相关文档的更新。
最终,如果您知道在不久的将来您不能也不会接受任何代码,您至少可以邀请开发人员分支甚至分叉您的项目,可能在您的存储库中并在您的帮助下指导,以便您仍然对您的项目表示感谢。