螺丝和锤子:热爱问题,而不是你的解决方案。
在您的软件开发生涯中,您听过以下这句话多少次?
如果您唯一的工具是一把锤子,那么您往往会将每个问题都视为钉子。
亚伯拉罕·马斯洛的这句话也被称为“工具定律”或“金锤定律”,描述了一种过度依赖熟悉工具的认知偏差。
在软件开发中,锤子可以是任何你习惯的东西:一种设计模式(工厂和策略?)、一种语言(当一个小小的 shell 脚本就能完成工作时,却要编写大量的 NodeJs 代码)、一个框架(即使对于最小的简单网页也要使用 React + Redux)或架构方法(API 网关 + Lambda 与带有负载均衡器的容器化应用程序)。
一个解决方案解决所有问题
简而言之,工具定律意味着我们往往倾向于过度依赖熟悉的工具,事实上,每当我听到有人谈论 API/微服务时,我的第一个想法就是:
好吧,很简单!让我们使用 APIGateway 和用 NodeJs 编写的 Lambda,如果我们需要排队或持久性,最终添加 SQS 和 DynamoDB,完成!。
这可能是正确的解决方案,特别是对于 MVP 而言;但在某些情况下它可能被证明是非常错误的。
这种认知偏差在解决问题时可能非常危险。
至少,它只是对我们创造力的一个巨大限制,但它可能会导致我们遇到严重的问题,比如完全错误的解决问题的方法或过度设计的实现,仅仅是因为我们真的很难用锤子把螺丝钉进去。
(许多年前,我有一个同事,为了好玩,在一个宠物项目中,决定使用他最近研究的每一个设计模式。相信我,这一点也不好玩,代码非常复杂——当然也是不必要的复杂。)
最近我读到的这句话很好地概括了这个概念(抱歉我无法追溯出处):
爱上问题,而不是解决方案
有时,我们并非仅仅因为习惯了某种工具就觉得它适合任何工作。有时(有意或无意地)我们如此钟爱某个解决方案,以至于我们真的想用它来解决任何遇到的问题(再次强调,我们讨论的可能是装饰器模式、Docker 或区块链,这都无所谓)。
问题是,无论你需要解决什么问题,你都认为你已经知道答案了:
哦,是的...XY 的情况确实如此!!
偏见无处不在
我们感知、看待和理解周围世界和内心世界的方式受到偏见的强烈影响,我们的解决问题的能力也会受到影响。
仅举几个例子。(您可以在此处查看交互式地图)
- 确认偏差:倾向于寻找、解释、偏爱和回忆那些证实或支持我们已经知道和相信的信息。
- 奥卡姆剃刀偏差:最简单的解释通常是最好的解释。
- 注意力偏差:个人在专注于现有思路时未能考虑其他可能性。
工具法则只是其中一种,如果我们愿意的话,它只是众多法则的混合体。我们喜欢某个解决方案,我们投入时间学习和理解某个技术栈,我们比较保守,或者倾向于追求新鲜事物,我们用谷歌搜索,只阅读与我们观点一致的博客等等。我们在解决问题时的创造力最终受到限制和偏见,这很自然。那么,我们该怎么办呢?
好吧。就像其他偏见一样:
- 注意这一点
- 尝试去抵抗并挑战它。
需求分析和问题解决的过程不应该因为你心中已经有了解决方案就立即停止。
不断提问,不断挖掘。
不要着急。一定要想出2到3个替代方案,这样你至少可以比较它们,并将它们呈现给其他人(他们可能与你的偏见不同):
这个是过度设计的,这个不可扩展,这个可扩展且简单但太昂贵,这个是最快的。
付出额外的努力,成为自己的魔鬼代言人。
如果您有很多选择,您(和利益相关者)就可以做出明智的选择。
我们受雇是为了解决问题而不是编写代码。
当然,我们主要通过编写代码来解决问题,但这本身并非重点。
我们的工资不是根据代码量或编写时间计算的(希望你的公司不会用代码行数来评估你的绩效),因此,无论你编写了一个设计超酷的策略模式,还是编写了一个非常复杂、单元测试完美的算法,都无关紧要。如果你从另一个角度来解决问题,或许甚至没有必要这样做。
又或许,购买现成的解决方案比自己内部实现更有意义。
这真的是个问题吗?
我想谈的另一个重要方面是我们必须学会热爱问题。
很多人一遇到问题就会感到压力。
他们会焦虑,感觉被各种障碍压得喘不过气来。
但是,除非有其他因素,例如迫在眉睫的截止日期和极不健康的团队氛围,否则这通常只是感知和视角的问题。
尝试重新定义问题:
一个 bug?
一个需要满足的需求?
在我作为开发人员的早期,我非常讨厌我的项目经理说:
没有问题,只有挑战。
我确实停下来将问题(错误或要求)视为阻碍我快乐轻松的工作日的恼人障碍,而不是具有挑战性的任务,这确实使我的工作日总是充满乐趣。
我开始喜欢Jocko Willink 的那句名言“好!” :
意外的问题?好!这意味着我们有机会找到解决方案。
我喜欢挑战问题——我愿意挑战!
我喜欢攀岩和抱石。抱石攀登中的路线——基本上就是你想攀登的路线,也就是所谓的“难题”。
可以这样想:
你在那里,面对着一堵墙(或者如果在户外则是一块石头 - 实际上是一块巨石),你问自己:
我该如何爬上去?
这就是你的问题。你必须找到解决方案。
你该如何运用你的身体、你的平衡、你的力量,如何利用每个支撑点、抓握点和地面纹理,最终到达顶峰?
这项运动让我对自己有了更深的了解,了解了自己的优势和劣势,也让我学会了如何看待困难并找到克服困难的方法,这无疑对我在生活和工作中解决问题的能力产生了影响。我一定会专门写一篇文章来阐述它。
回顾
-
停下来思考,不要急于寻求快速解决方案。
-
避免陷入一般的、已知的和安全的方法的诱惑。
-
首先了解问题,了解背景。我们是否正在尝试解决正确的问题?
我们失败的次数更多是因为我们解决了错误的问题,而不是因为我们对正确的问题找到了错误的解决方案。——拉塞尔·阿科夫
当然,我并不是说你不应该对自己想出的解决方案感到满意,甚至不应该在出色地解决问题时为自己感到自豪,相反,你应该给予自己和团队应得的认可,但要注意陷阱,下次遇到(类似)问题时,不要试图默认采用相同的解决方案。
康斯坦丁·埃夫多基莫夫 (Konstantin Evdokimov)在Unsplash上拍摄的照片
鏂囩珷鏉由簮锛�https://dev.to/dvddpl/the-screw-and-the-hammer-love-the-problems-not-your-solutions-2i0a