学会避开金锤
学会避开金锤
原文:https://medium.com/hackernoon/learning-to-avoid-the-golden-hammer-b170834e0c14
开始时,学习如何编码可能相当具有挑战性。你不仅要建立一个坚实的编程概念基础,而且迟早你会遇到无数不同的可能性。
有许多不同的语言可供选择,每种语言都有自己的优缺点。每种语言都有自己的生态系统(或者潜在的生态系统),其中包含不同的框架、构建工具、包管理器、编码约定、部署工具等等。
当然,当涉及到如何构建应用程序时,也有很多种选择。例如,对于 web 应用程序,您可能需要考虑要使用的体系结构类型——是整体式的还是基于简单的分离 web 服务的。或者哪种数据库最能满足您的需求,SQL 还是 NoSQL。
在设计复杂的应用程序时,需要在开发过程的不同阶段做出一些决定——一些由技术需求决定,一些由业务约束决定,还有一些由个人喜好决定。
在构建了几个这样的应用程序后,您自然会对这些选择感到更舒服,通常在解决新问题时会使用以前问题的输入。如果您发现某项技术或范例在过去很容易使用,那么您很可能会倾向于在未来更多地使用它。

这并不全是坏事。显然,例如,如果你精通一门特定的语言,你继续使用它所节省的时间很可能会超过任何可能出现的负面影响。对于小型项目,强调你自己的舒适肯定是有意义的。然而,对它的过度依赖会让你容易受到潜在盲点的影响。
这正是金锤所做的,在知道问题是什么之前就假设了问题的解决方案。这是一种常见的反模式。
如果你唯一的工具是一把锤子,你遇到的每一个问题看起来都像钉子
为什么会这样?
好吧,让我们从显而易见的开始。没有人喜欢改变。为你工作的每个项目学习一个全新的工具集是非常不可取的。从短期来看,简单地使用你熟悉的东西要容易得多。代码行毫无阻力地不断出现,给开发人员带来了他们渴望的快感。

XKCD — Golden Hammer
但是更大的问题在于当这种态度渗透到团队和组织中时会发生什么。如果你是一个长期合作解决问题的大型团队,你可能会对特定的技术产生偏好。此外,建立基础设施是为了支持和鼓励这些技术的发展。作为一个团队,你慢慢地发展出每个人都遵循的惯例。
经过几次迭代后,您往往会陷入这种情况,这种技术是您事实上的解决方案。
如何避免这种情况?
一方面,有一群人非常精通他们所做的事情,使得开发变得更快,这真是太棒了。他们已经学会快速有效地解决在使用他们选择的产品时出现的大多数问题。
但由于几个原因,这也是有问题的。您希望避免这样的情况,即您太依赖于某项技术,而无法利用软件社区提供的最新和最棒的技术。此外,你希望处于这样一个位置:你可以用很少的开销来适应新兴的趋势和标准。
- 有意识地探索新趋势和新技术
这并不是说你应该跳上每一个新出现的框架。许多软件生态系统是如此庞大和杂乱,以至于不可能跟上社区中的每一个新的更新,更不用说在社区之外冒险了。 咳嗽 在此插入愤怒的 JavaScript 咆哮
但与此同时,应该有意识地努力探索新的工具、想法和做法,以避免自满。这可以是一次性项目的形式,用完全不同于你习惯的东西来写。只要有可能,基础设施应该以适应未来变化的心态来建设。
2.鼓励思想交流
除了探索之外,对于开发人员来说,成为致力于围绕技术思想进行交流的大型社区的一部分也很重要。这是一个在你的社区中保持更新和了解新兴趋势的好方法。
与你社区中的其他人交谈可以让你从他们的经历中学习,并理解他们遵循某些实践的基本原理。参加某些会议也会有所帮助。
3.利用技术多样性获利
让团队由不同专业水平和领域的人组成是有益的。如果团队中的每个人都有相同的经历,那么在构建产品时,几乎没有机会对可能的解决方案进行有意义的讨论。建设性的争论可能是一件非常好的事情,自然地鼓励它们的最好方式是利用多样化的人才库。
作为最后一点,我想强调金锤的广泛适用性,它可以以许多不同的方式运用自己。虽然这篇文章完全集中在技术方面,但是当涉及到开发过程而不是工具时,过度依赖也会发生。重要的是不要仅仅因为“事情总是这样做”就去做。
个人和团队应该定期反思他们的开发实践,看看是否有什么可以改变,使他们更有生产力和/或效率。
如果你喜欢这篇文章,一定要点击下面的❤按钮。请在评论中或者通过 LinkedIn 告诉我你对这篇文章的看法。



