程序员观点:过度思考的三种毒


过度思考也就是想得太多,过于注重理性计划,该文是 Rust 和 Go Bloom 的创造者 和Black Hat Rust 的作者博文:
我曾经是一个病态的过度思考者。一切都必须仔细计划,从我对面包师说的要订购法式长棍面包的话,到我参与的任何项目的所有无关紧要的细节。在 18:00 或 18:05 发推文更好吗?生锈还是去?函数式还是命令式?联合还是点对点?FROM scratch或者FROM alpine?开源软件还是免费软件?蓝色还是绿色?
明显是想多了!想太多
然后我意识到还有另一种表达方式来描述这种情况:分析麻痹/分析瘫痪
我们都知道“完美是优秀的敌人”,但我们仍然在试图做出完美的设计、演示、完美的规范文档、完美的数据模型、选择完美的技术或框架方面浪费了无数时间。
结果?项目从未实现或比计划晚了几个月,每个人都感到沮丧。
我已将这个问题的根源追溯到 3 个原因。3种毒药,所有的痛苦都源自于此。这3种毒是:

  • 教育
  • 营销
  • 自我

 
第一毒:教育
教育很少是关于如何行动的。更多的是如何思考。因此,我们学会了如何思考,最终导致整个国家都充满了思考、思考、思考但从未开始做任何事情的人。结果是很多争论,无论是在网上还是在电视上,以及来自需要帮助他们思考、思考、思考的时间的愚蠢规则和官僚机构。
在科技界,阅读一些关于软件架构的博客时,这是公然的。所使用的术语与该领域的现实相去甚远,几乎是荒谬的。我对此事的看法是,任何项目的架构师都需要是开发人员之一,是实干家之一。
 
毒药二:营销
第二个毒药是由企业对开发者 (B2D) 公司推动的营销。
这些公司在解决实际问题(通常是可扩展性或数据处理方面的问题)的同时,有很大的兴趣让我们相信我们有他们正在解决的问题,并且他们是我们解决这些问题的最大希望。
所以现在,在设计我们的系统时,我们不再只考虑最简单的解决方案,而是为了解决我们未来的、想象中的问题而考虑无数的替代方案。SQL 还是 NoSQL?容器还是函数?Java 还是 Kotlin?
老实说,大多数时候(我怀疑它超过 90%),我们只需要PostgreSQL作为数据库,Go、PHP (Laravel) 或 Node.js 作为后端,前端使用 React 或 Vue.js,根据团队的喜好选择。
 
第三毒:自我
我们都害怕被我们的工作评判。当这是你的第一次或第二次发布时,当互联网论坛上的一些随机人开始指出你在数百到数千小时的项目中花费了 10 分钟的这个无关紧要的小事情,您有多糟糕。
因此,为了预测批评,我们开始花时间完善细节。时间越来越多。有一天我们意识到,所有这些时间都在打磨细节,而那些带来真正价值的重要点甚至还没有开始。
我们害怕犯错,然后因为这些错误而被公开指责和羞辱。通过发布和公开分享多个项目,我体验到值得留下深刻印象的人永远不会因为小错误而打电话给你。他们明白我们都是人:容易犯错、缺乏经验、不完美。所有的吹毛求疵的人都对我的项目不感兴趣,他们来这里只是为了告诉世界他们比我们更聪明、更伟大。这几乎不值得我们花时间和注意力。
我注意到,在某种程度上,一个人越聪明,就越需要在他们的工作中表现出来。每个算法都需要完美,每个函数都需要无副作用,每个数据结构都需要最快,每个最佳实践都需要遵循。这本身并不坏,但是当它阻止做真正的事情时,应该避免这种繁忙的工作。
这是我发现 Go 是一门优秀语言的原因之一。一切都是无我的,一切都是一个array或一个map。简单的。基本的。您可以在优秀文章中阅读更多相关内容:Go之道
“我们的生活充满了细节。简化,简化!” ——梭罗
 
解决方案
现在怎么办,我们应该停止所有的设计过程并开始疯狂地建造吗?
不,我不是说我们今天应该关掉大脑。我只是在争辩说,能给你带来大部分结果的事情可能不是你正在考虑的事情。停止评估每个 AWS 服务是否适合您的问题,您最终会发明自己的问题,您不必证明使用这些闪亮的技术是合理的(我过去做过太多次)。
如果您从 0 到 1,那么您不知道和无法控制的事情太多了。无论您是在处理软件项目还是博客文章,您都可以及时更新并修复它。所以放松并运送。
停止尝试提前连接所有点。
拥抱不确定性并开始做。
 

“你不能把点点滴滴地向前看;您只能向后连接它们。所以你必须相信这些点会在你的未来以某种方式连接起来。你必须相信某些东西——你的直觉、命运、生活、业力等等。这种方法从来没有让我失望过,它让我的生活发生了翻天覆地的变化。” ——史蒂夫·乔布斯