您可以考虑在合理的时间内编写运行的代码。您可以考虑设计模式、微服务、编程语言和代码语法。还有什么?
我们倾向于忘记,作为一名软件开发人员意味着要整天与人类同胞打交道。与他人互动、交流、解释想法、适应团队成员都是非常重要的技能。
辩论艺术是你需要具备的这套沟通技巧的一部分。这是我们经常做的事情,有时没有真正好的理由。这是一个复杂的课题,有其自身的规律和结果。
我建议今天潜入辩论艺术,让你对你正在做的事情有更大的影响,希望能有更好的影响。让我们拭目以待:
如果你想在这个问题上和我争论一下,评论部分已经准备好了,我们可以讨论一下。
想象一下:您的同事开发人员Dave认为创建一个多级别继承树来专门化10000行的上帝类是一个好主意。显然,如果您与Dave交谈并成功地放下了他破坏代码库的计划,您将为您、Dave和任何参与该项目的人省去一些头疼的事情。祝贺你!。
辩论可以带来价值,并通过创造新想法减少技术债务。它可以避免错误并提高可伸缩性。沟通是一种非常重要的品质,甚至比原始知识更重要。
如果你知道如何争辩,如果你在需要的时候去争辩,你会被视为对他的工作感兴趣的人。你会证明你不是一只密码猴。
辩论,即使一开始可能会很累,而且很难做到正确,但也可以通过与他人对峙你的想法来教会你很多东西。无论结果如何,你总会学到一些东西。它将增加:
这也可能是痛苦的,但就像失败一样,它可以给你带来很多东西。
现在,看看你周围:你的同事愿意讨论吗?你能自由地提出你的想法吗,即使它们听起来可能很愚蠢?他们会让你表达你的担忧并听取你的改进建议吗?
如果你想学到更多,像一朵小花一样绽放,这一点真的很重要:公司文化应该对新想法尽可能开放,即使它会引发讨论和争论。如果没有人听你的,从来不用好的、合理的论点来解释你所说的为什么是错误的,你真的需要努力改善这种情况,并从总体上解释辩论和讨论的好处。…。或者你需要另找一份工作。
讨论和辩论有很大的好处。但在与任何人展开激烈对话之前,问问自己:我应该辩论吗?
老实说:软件界的许多讨论都是无用的。这是关于“空格和制表符”争论的怪诞例子:
这纯粹是基于自我:你认为空格比制表符更好,因为你是对的,而其他人是错的。
如果你试图让某人相信有更好的方法,你应该争论那些对你工作的企业很重要的事情。关于能带来真正的、具体的价值的东西。代码库中的空格而不是制表符不会给公司带来任何价值。相反,例如,改进应用程序的用户体验可以带来很多价值。
通常,当您的同事开发人员Dave怒气冲冲地来找您就代码语法规则争论不休时,要当心:除了他,没有人关心这一点,更不用说为您工作的产品支付高价的客户了。我可以推断出大多数工程师之间的技术战争。如果他们缺乏论据,似乎在说“这项技术更好是因为x个与业务无关的原因”,你就得离开。
也就是说,如果没有人能理解代码库并修复错误或添加新功能,客户将会在意。大多数关于技术的辩论可能是无用的,但有些是非常重要的。
现在让我们设想一下以下情况:您正在与您的同事开发人员Dave就他想要保留和扩展的这个上帝类展开激烈的讨论。你知道这是不对的。每个人都知道这是不对的。尽管如此,戴夫还是想做这件事。也许他觉得你的论点攻击了他个人。他可能缺乏自信。他可能永远不想犯错。
不管是什么原因,作为一个经验法则,不要让辩论超过20分钟。
经过这一圈的时间,你应该能够抛出你最好的论点。如果Dave不想遵循您的想法并扩展GOOD类,而不是重构它,我将建议两种可能的解决方案:
请对话之外的人,因此也就是中立的人,来解决你们之间的分歧。可能是另一位同事,甚至是你的老板(首席技术官、团队领导等等)。不过要知道,如果你的老板认为你是对的,你可能会让戴夫生气。然而,这仍然比让非常糟糕的想法付诸实施要好。
就目前而言,接受这些论点,并保持耐心。在某个地方写下你们讨论过的内容。如果你是对的,就会有后果。当因为辩论的对象而出现错误时,或者当有人对此抱怨时,就用这些新知识展开一次新的对话。展示坏主意的具体后果。
一般来说,当你被证明是对的时,不要通过你的开放式办公室大声宣称:“我告诉过你,你这头可怜的猪!我是对的!因此,我诅咒你和你全家三代人!“。没有人会对著名的“我早告诉过你”做出很好的反应。它不会给任何人带来任何东西,除了可能会在几分钟内吹捧你的自尊心。用简单而具体的方式冷静地解释一个想法已经或可能会产生的不良后果,比责备要好得多,以显示你有多聪明。
我坚持冷静的想法。在辩论中,每个人都会对你的语气和肢体语言更加敏感。我为此而苦苦挣扎,但请尽量保持低声,动作要慎重、流畅、有节制。
有时,您必须让一些令人毛骨悚然的代码、糟糕的想法或无稽之谈的功能存在于您闪亮的应用程序中。不幸的是,作为开发人员,并不是每个人都会考虑您的意见。请记住,编码是一个迭代过程:如果熵没有达到顶峰,您始终可以稍后进行重构。
至少,你试着为我们指路。如果没有人准备接受,他们可能改天再听你的。同样不要忘记,有时人们需要时间来真正理解你的论点并最终接受你的观点。一场辩论,即使没有得到解决,也可以带来新的想法,并可能产生更长期的后果。
问题可以用很多方法来解决。不要因为一开始听起来很傻,或者因为你以前从未听说过,所以对同事告诉你的每一件事都闭口不谈。也许这个解决方案是有效的,但是你从来没有想过。学会停顿和思考很重要:这种方法有什么好处?会有什么缺点呢?
简而言之,试着敞开心扉。如果你真的把每一个想法都考虑进去,你可能会学到更多。值得注意的是,如果与您争论的同事是您信任的感兴趣的开发人员。
同时也要意识到,每件事都有好处,也有得失。每一个决定都有代价:时间、金钱、技术债务。评估你的想法,了解在你所处的特定环境中可能存在的问题,并在你的论证过程中解释它们。
你现在的心情基本上会改变你对一切的看法。如果你觉得你争吵是因为你心情不好,或者是因为其他与谈话主题无关的外部因素,是时候停止辩论了。反思你为什么会做出这样的反应,尽量不要让你的情绪左右你的论证。
当然,说起来容易做起来难。就我个人而言,我知道冥想是在我的情绪占据我的头脑之前意识到它们的一种很好的方式。在怒气冲冲地谩骂之前,能够停下来思考,这真的很有用。
如果你在辩论时需要遵循一条金科玉律,那就接受这条:不要把它放在心上。换句话说:作为一个人,不要觉得受到了直接的攻击。你是专业人士,因此你为某人工作。不是你的问题,是这个人的问题。
如果你试图为自己的想法辩护,只是为了证明自己是正确的,不管是什么原因,你都应该停止辩论。作为一名开发人员,你必须创造价值,这是一项具体的工作。因此,就你个人而言,当谈到辩论时,你是不在方程式之外的。
很容易看出你是为了正确而争辩,还是为了不正确而争辩:只要听听你的论点就知道了。如果他们感到软弱,停止讨论,考虑一下,如果你的想法值得捍卫,就找出好的论据来捍卫它。
另一件重要的事是:当你表达反对意见时,你需要准备好犯错。没有人总是对的;犯错是谦逊的标志,也是你思想开放的证明。你需要能够质疑自己才能成长。
不要把犯错想成负面的事情。它是学习的载体。
当你为一个想法辩护时,只需引用同意你观点的人的话。这个人应该是这个领域的重要人物,像马丁·福勒这样的大人物。他们很可能有很多论据来支持你的想法。
你引用的人越多,你的论证就越有力。这不再是你的想法与别人的想法相对抗,而是有影响力的人被证明是正确的想法与不那么有份量的想法的对抗。
我过去常常在我的笔记系统中复制一些意见领袖关于不同主题的引语(这些主题很重要,而且经常是无休止对话的来源,比如单元测试)。毕竟,这些人经验丰富,热情高涨,花了很多时间思考这些问题。因此,他们的意见是更糟糕的考虑。
不过要小心:并不是所有来自传教士的东西都适用于你的具体问题。在没有任何理由说明为什么单一责任原则有用和有效的情况下,不要调用单一责任原则咒语。意见领袖应该向你提供这些具体的论据;如果他们不这样做,他们的名字本身不应该影响你的决定。
互联网上的其他开发人员可能会有很好的、具体的论点,但并不“出名”。你也可以毫不犹豫地把它们借走。
毫不犹豫地向你正在辩论的那个(或多个)调查结果和科学研究挥手致意。具体数据总是好的,特别是在以下情况下:
这项研究被不同的小组重复了多次,得出了相同的结论。
当你读到一本书(或一篇文章)中提到这些研究时,试着找到原著并阅读它。我经常在我的笔记系统中记录它们,以便在需要的时候能够把它们放在桌子上。
您的同事开发人员Dave认为做单元测试是没用的吗?如果你收集了对你有利的研究,你通常会有一切证据证明测试真的很重要。
研究并不是唯一可用的数据来源。您可以使用静态分析工具来显示项目的一部分需要重构。您有一个依赖图,其中每个类都相互依赖吗?您的应用程序的复杂性超出了范围,而且没有测试来覆盖它吗?这些都是很好的论据,表明需要做些什么。
它之所以强大,是因为它不是关于你的主观观点,而是关于理性的、具体的数据。
如果你没有任何数据来支持你的论点,你可以谈谈你自己的经历。努力做到足够精确,让人们将你的经历与当前环境联系起来。你能在过去和现在之间建立更多的联系,你的论证就会更有效。
为了尽可能准确地分享我的经验,当我看到奇怪的虫子时,我会写日记。我准确地写下了bug发生的原因,如何避免它,以及可能的解决方案。如果有人准备犯同样的错误并发起一场辩论,你可以从日记中拿出你的笔记。
人们喜欢故事。如果你有一个与你所处环境完全相关的精确答案,那就使用它。努力保持清醒和理性是关键。再说一次,纯粹主观的论点应该没有什么份量。
我主要讨论了过去发生的事情(技术债务、遗留系统、不良特性等等)和现在需要修复的事情。关于未来应该做些什么的讨论怎么样?
这是最复杂的事情之一;未来总是不确定的,试图猜测它可能是危险的。然而,公司需要预测他们客户的行为和市场的演变。他们需要对未来有远见。如果您开始与您的同事或管理层争辩说您的应用程序中的这个或那个功能很愚蠢,因为您知道得更清楚,我建议您寻找更好的论点。
建议做一些A/B测试,看看事情是如何发展的,并从那里推断出来。
建议创建精心制作的调查,针对公司的客户目标提出精确的问题。
不要让你的主观判断决定一切。你很可能不是你公司产品的营销目标的一部分,所以你不知道什么才是最适合这个目标的。
我知道并看到太多公司在没有任何事实或数据的情况下预测未来,做出基于感觉的灾难性决定。如果您参与了一场辩论,以了解此功能是否会取悦您的客户,请尝试找出支持您的假设的事实。
您现在可能会想:“我是一个开发人员,我不需要打理它!”这是真的;然而,我深深地相信,我们的工作不仅是编写代码,而且要利用我们的知识为您所在的公司带来价值。你是一个聪明人,你也可以给出帮助你的公司成长的建议。当然,如果你的管理层愿意听取员工的意见并考虑他们的意见。
相信我,如果你采用这种心态,你会觉得更有用,你会学到很多东西。在你的日常工作中找到一个目标并感到有用,可以减轻你的压力,防止精疲力竭。
大惊喜:你是对是错都无关紧要。重要的是你在讨论之后做出的决定。作为一名软件开发人员,赢得一场争论意味着带来(或放弃)最终创造价值的想法。
别忘了:认识到自己错了会让你变得更谦虚,也会暴露出你知识中的弱点。因此,这是一个学习的好机会。如果你认为自己总是对的,你就不会从与同事的辩论中学到任何东西。作为回报,他们可能会认为你是个自命不凡的混蛋。
每一个想法或技术都可能是潜在的有用的;这主要取决于你试图解决什么问题。相应地调整你的想法、论点和决定。
在辩论之后创造一个双赢的局面将是最好的结果。没有敌意,没有怨恨,理想情况下,每个人都应该从中学到一些东西,最终应该推动每个人做出正确的决定。
如果你努力保持这种心态,你的公司、你的客户或你的客户就会兴旺发达。