拜托:不要像鲍勃大叔那样重构

博客文章“不要像鲍勃大叔那样重构”批评了罗伯特“鲍勃大叔”马丁在其颇具影响力的著作“清洁代码”中给出的重构建议。关键点如下:

重构并不总是答案:

  • 鲍勃大叔提倡不断、强迫性地进行重构,这可能会导致过度工程和浪费精力。
  • 重构应该谨慎进行,而不是作为默认方法。

重构的收益递减:

  • 虽然重构可以在短期内改善代码,但它往往会导致无休止的调整和重做循环,而长期收益甚微。
  • 在某种程度上,成本大于收益。

简单优先于纯粹:

  • 不要通过重构来追求理想化的“干净”代码风格,
  • 而是优先考虑简单性、可读性和满足实际需求,而不是追求理论上的完美。

了解上下文:
Bob 大叔的建议没有充分考虑到代码库的现实情况,这些代码库有遗留的限制、截止日期和有限的资源。

  • 在这种情况下,重构热情可能会适得其反。

总而言之,该帖子告诫不要将鲍勃大叔的重构原则视为教条,而是提倡采用更务实、更具上下文 感知的方法来改进代码。

网友:
1、他在书中提出的理想的代码在我整个职业生涯中从事的任何工作中都无法通过代码审查。无法通过代码审查。不管它是否经得起时间的考验。它会因为难以理解而被立即拒绝。

2、说实话我从来都不喜欢这个人。对我而言,他就像是架构宇航员。

3、抨击鲍勃大叔已经成为一种时尚

4、他是性别歧视者、种族主义者和法西斯主义者。他假装道歉,然后一遍又一遍地重复同样的事情。我看不出能从这样一个讨厌我一半同事的人身上学到什么,而且这个人已经证明他们无法学习任何新东西。他开始大肆宣扬右翼疯狂言论。

5、《Clean Code》不是一本好书,他的文章也不好,他的演示文稿和他提供的作为证明的代码也不好。
但他在品牌推广方面非常擅长。

6、我通常是为他的重构辩护的人,但是……这篇文章说得很对。鲍勃的版本让我很烦——类变量的变异似乎没有必要,而且使事情变得复杂。我们不能只是从头到尾跟着代码,就能明白发生了什么,我们必须跳来跳去。

7、《代码整洁之道》中的很多内容在概念上是有效的,但在其他方面却过时了。

  • 在 Java 世界中,AOP、DI 和 IOC 框架无需所有样板代码即可实现类似的解耦、可扩展性等。
  • 也许是时候拥有一个“代码整洁之道:现代方式”,既可以采用传统方式,也可以采用更“实战”的方式。谈到将代码重构为改变状态的函数的具体示例,不使用参数和参数来提供提示可以隐藏所需的操作顺序。

8、他对自己不使用且永远不会使用的技术有强烈的意见,从而建立了自己的职业生涯。他很幸运,抓住了一些像 SOLID 这样的独立流行的首字母缩略词,并且他能够帮助推销它们。
他还极大地受益于这样一个事实:

  • 开发世界中没有大量的公众演讲者,
  • 而安排活动的人实际上不是业内人士。

他可以说出足够多的概念来完成一个小时的演讲。而少数愿意费心阅读他的东西的经验丰富的开发人员习惯于浏览技术术语并只提取有用的东西。

他的书不是为经验丰富的开发人员写的。它们是为需要建议的新开发人员写的。而且他给出的建议很糟糕。如果你听从这些建议,你就会成为一个更糟糕的程序员。你甚至可能不具备程序员的资格。就像罗伯特·C·马丁一样。


banq注:对于初学者,好像学习鲍勃大叔的理论有好处,其实学习 “上下文”这个哲学概念更重要。

当你学习一项新知识时:

  • 你要意识到你走入了新的上下文
  • 学习过程中看到各种案例,都是有其背景上下文限制的,很多模式无法归纳抽象出来跨越上下文,无法成为最佳实践
  • 如果你忽视上下文,把这些模式套用到其他上下文,就如同你学习一种英语口气,然后把这种语气复用到多个其他说话场景,反而东施效颦。或者,南方人学习北京人的“儿”音,结果说话带儿音很难受。
  • 大语言模型在这种归纳上比人类强,所以说,大模型基本解决了人类的归纳抽象能力,当然人类另外一个演绎推理能力很难超越。