软件设计中“说不”的力量:拒绝糟糕想法,构建简洁系统

本文探讨软件设计中拒绝糟糕功能实现的重要性,提出识别坏想法的准则,强调设计师需要勇气说“不”以避免系统变得臃肿混乱,同时保持团队沟通的礼貌与建设性。

说不的力量 » 代码简洁性

代码简洁性:说不的力量

2011年1月20日 by Max Kanat-Alexander

多少次你使用过充满极其复杂功能、奇怪决策和不可用界面的软件?你是否曾因为电脑无法正确工作,或者你无法弄清楚如何使其正常运行而想要物理或口头虐待它?又有多少次你想到,“任何程序员怎么会认为这是个明智的想法?”

如果你曾经经历过这些事情,你的下一个想法可能是“**这台电脑”或“**让电脑这样行为的愚蠢程序员”。毕竟,系统的疯狂行为难道不是程序员和硬件设计师的错吗?在某种程度上,是的,他们是。但在深入参与软件设计多年后,我现在对实现不佳的功能有了另一种反应。我不再对实现系统的程序员生气,而是问自己,“是谁授权了这个功能的软件设计师?”谁在有能力阻止它时默默站着,让这个功能发生?

诚然,有时根本没有软件设计师,在这种情况下,你几乎保证会有一个破碎的系统。但当有软件设计师时,他们最终对系统的组装方式负责。现在,这项工作的大部分涉及在功能进入系统之前设计其结构。但软件设计师工作的另一部分是防止坏想法被实现。事实上,如果我在软件行业多年学到的任何教训,那就是:软件设计师词汇中最重要的词是“不”。

问题是,如果你给一群人完全的自由来实现任何随机想到的想法,那么几乎每次他们都会实现坏想法。这不是对开发者的批评,更像是生活的事实。我对个别开发者的智力和能力有极大的信心。我钦佩开发者在软件开发中的奋斗和成就。这只是一个不幸的存在事实,即没有某种中央指导,群体中的人倾向于演化出复杂系统,这些系统无法尽可能好地帮助用户。

然而,个别设计师通常能够为用户和开发者创造一致且愉快的体验。但如果那个个别设计师在另一个开发者开始以错误方式做事时从不站出来说“不”,那么系统将自行崩溃,变成坏想法的混乱混乱。因此,拥有一个有权力说“不”的软件设计师非常重要,然后设计师在适当的时候实际使用这种权力也很重要。

仅仅对任何真正值得“不”的想法说“不”,你就能改善产品的程度真是令人惊讶。

识别坏想法

在应用这一原则之前,有一件事你必须知道:如何识别坏想法。幸运的是,有很多软件设计原则可以帮助你 clue in on 什么是坏想法,并在真正需要时引导你说“不”。例如:

  • 如果功能的实现违反软件设计法则(例如,它太复杂,无法维护,不易更改等),那么该实现是坏想法。
  • 如果功能对用户没有帮助,是坏想法。
  • 如果提议明显愚蠢,是坏想法。
  • 如果某些更改没有解决 proven 问题,是坏想法。
  • 如果你不确定它是好想法,是坏想法。

此外,随着时间的推移,人们倾向于学习什么是好想法和什么不是,特别是如果你使用上述作为指导方针并理解软件设计法则。

没有更好的想法

现在,有时设计师可以识别坏想法,但他们仍然实现它,因为他们现在想不出更好的想法。这是一个错误。如果你只能想出一个问题的解决方案,但它明显愚蠢,那么你仍然需要对其说“不”。

起初,这似乎违反直觉——问题不需要解决吗?我们不应该以任何方式解决这个问题吗?

嗯,问题是:如果你实现一个“坏想法”,你的“解决方案”将迅速变成比原始问题更糟糕的灾难。当你实现一些可怕的东西时,它“工作”,但用户抱怨,其他程序员都叹气,系统坏了,你的软件受欢迎度开始下降。最终,“解决方案”变成如此大的问题,以至于需要其他坏“解决方案”来“修复”它。这些“修复”然后本身变成巨大的问题。继续沿着这条路走下去,最终你最终得到一个臃肿、混乱且难以维护的系统,就像今天许多现有的软件系统一样。

如果你经常发现自己处于感觉被迫接受坏想法的情况,很可能你实际上接近这一事件链的末端——也就是说,你实际上建立在系统过去一系列预先存在的坏想法之上。在这种情况下,解决方案不是继续“修补”坏想法,而是找到系统最根本、潜在的坏想法,并随着时间的推移重新设计它们,使其变好。

理想情况下,当你拒绝坏想法时,你应该提供一个替代的好想法——这样你是建设性的,推动项目前进,而不是被视为开发道路上的障碍。但即使你现在想不出更好的想法,对坏想法说“不”仍然很重要。好想法最终会来。也许需要一些研究,或者也许有一天你站在淋浴时突然想到。我不知道想法会从哪里来或它是什么。但不要太担心。只需相信总有某种好方法解决每个问题,并继续寻找直到找到它。不要放弃并接受坏想法。

澄清:接受与礼貌

所以说“不”很重要,但需要一些澄清我真正意思的地方。我不是说每个建议都是错的。事实上,开发者通常是非常聪明的人,有时他们真的 nailed it。许多开发者提出完美的建议并进行优秀的实现。即使最差的解决方案也可以有好部分,尽管整体上不优秀。所以很多时候,而不是实际说“不”,你会说的是更像,“哇,这个想法有一部分真的很好,但其余部分不那么好。我们应该取这个想法的最佳部分,通过更多工作将它们构建成 awesome 的东西。”不过,你必须对想法的坏部分说“不”。仅仅因为想法的一部分好并不意味着整个想法好。取想法中聪明的部分, refine it,并围绕它构建好想法,直到你设计的解决方案真正伟大。

此外,与团队其他成员良好沟通仍然至关重要——拥有说“不”的责任并不赋予你粗鲁或不体贴的权利。如果你 continuously 说“不” without any hint of kindness,你将分裂团队,引起不满,并最终浪费数小时时间与你 upset 的人争论。所以当你必须说“不”时,最好找到一种礼貌的方式沟通——一种表达对输入 appreciation 的方式,如何改进事物的积极建议,并轻松地让人失望。我理解不得不放慢速度解释事情有多令人沮丧——更令人沮丧的是对第一次不理解的人重复解释——但如果这是拥有有效开发团队同时仍然对坏功能说“不”所需要的,那么这就是你必须做的。

-Max

分享 点击在Facebook上分享(在新窗口中打开) Facebook 点击在LinkedIn上分享(在新窗口中打开) LinkedIn 点击在Hacker News上分享(在新窗口中打开) Hacker News 点击在Reddit上分享(在新窗口中打开) Reddit 点击在Threads上分享(在新窗口中打开) Threads 点击在X上分享(在新窗口中打开) X

5条评论 留下回复

KurtB 说:2011年2月25日上午8:39 +1 这与我的高中指导顾问办公室墙上的一张海报相辅相成,上面写着:“机智是在不树敌的情况下表达观点的艺术。”学习如何 redirect 思路是一种社交技能,我相信编码者可以从中受益。根据我的经验,从 defensive stance 说“不”或试图通过 coercion 得到我想要的 rarely paid-off。 是的。我在顾问办公室花了太多时间——或者也许不够。 -kb 回复

Max Kanat-Alexander 说:2011年2月25日晚上9:39 嘿Kurt。是的,完全同意你!机智地说“不”的能力是一种真的会受益于更广泛培养的能力。🙂 -Max 回复

Vladimir Dzhuvinov 说:2011年3月26日上午5:20 软件业务,尽管其“逻辑”主题, often governed by 未解决的情绪、固执和意识形态。我知道这一点,因为我偶尔在我自己的行为中注意到这些事情🙂 学习在必须时说“不”不是容易的事, particularly when there is pressure and this pressure comes from the top (from the boss), from clients or investors. Or from my girlfriend 😉 我还观察到,有时我选择不说“不”(或说“不”,但传达得 tactless)不是因为我不想,而是因为在那一刻我 mentally lazy 构建一个好的论据。 回复

Mike W. 说:2017年7月21日下午6:22 今天刚用了这个,并给了这个帖子的链接。“如果你不确定它是好想法,是坏想法。”金玉良言。🙂 感谢在这个实例中为我说“不”增加确定性! 回复

Max Kanat-Alexander 说:2017年7月26日晚上9:35 太好了,很高兴我能帮忙!😀 -Max 回复

留下回复取消回复

联系 关于 书:理解软件 书:代码简洁性

输入您的电子邮件… 订阅 © 2025 版权所有。由The Fox提供支持。 管理同意 为了提供最佳体验,我们使用像cookies这样的技术来存储和/或访问设备信息。同意这些技术将允许我们处理数据,如浏览行为或本网站上的唯一ID。不同意或撤回同意,可能会 adversely affect 某些特性和功能。

功能性 功能性 始终活动 技术存储或访问严格 necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.

偏好 偏好 技术存储或访问 necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.

统计 统计 技术存储或访问 used exclusively for statistical purposes. 技术存储或访问 used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.

营销 营销 技术存储或访问 required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.

管理选项 管理服务 管理{vendor_count}供应商 阅读更多关于这些目的 接受 拒绝 查看偏好 保存偏好 查看偏好 {title} {title} {title}管理同意联系 关于 书:理解软件 书:代码简洁性 转到顶部

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计