面向对象编程是万亿美元的灾难?
高级全栈工程师Ilya Suzdalnitski最近发表了一篇生动的6,000字文章,称面向对象编程是“万亿美元的灾难”。
人们花费大量的时间和精力思考“抽象”和“设计模式”,而不是解决现实世界中的问题…面向对象的编程(OOP)的创建始终牢记一个目标- 管理程序的复杂性代码库。换句话说,它应该改善代码的组织。有没有客观,公开的证据表明,OOP不是普通的过程式编程更好而不是降低复杂性的…,它鼓励滥交并以其众多的设计模式引入了额外的复杂性。OOP使得不必要的通用开发实践(如重构和测试)变得困难……
在短期内,尤其是在未开发项目上,使用OOP似乎是无辜的。但是使用OOP 的长期后果是什么?OOP是定时炸弹,当代码库变得足够大时,它会在将来的某个时候爆炸。项目被拖延,错过了最后期限,开发人员精疲力尽,添加新功能几乎是不可能的。该组织将代码库标记为“ 遗留代码库 ”,并且开发团队计划进行重写…. OOP为开发人员提供了太多的工具和选择,而没有施加适当的限制。尽管OOP承诺解决模块化问题并提高可重用性,但它无法兑现其承诺…
我并不是在批评Alan Kay的OOP -他是个天才。我希望以他设计的方式实施OOP。我批评现代Java / C#面向OOP的方法…我认为,OOP被很多人视为代码组织的事实上的标准,包括那些非常高级的技术人员,这是完全错误的。许多主流语言除了OOP之外没有提供任何其他替代代码组织的方法也是错误的。
这篇文章最终将OOP的普及归咎于Java,并援引Alan Kay的评论说Java是“自MS-DOS以来,发生在计算领域的最令人困扰的事情”。它还引用了莱纳斯·托瓦尔兹(Linus Torvalds)的观察,即“将项目限制为C意味着人们不会用任何愚蠢的’对象模型’弄乱事情。
最后,它建议将函数式编程作为一种更好的选择,并对OOP做出以下断言:
- “ OOP代码鼓励使用共享的可变状态,这种状态一次又一次被证明是不安全的……封装实际上是美化的全局状态。”
- “ OOP通常需要很多样板代码(低信噪比)。”
- “有些人可能会不同意,但是众所周知,OOP代码很难进行单元测试……如果没有像Resharper这样的专用工具,很难分解OOP代码。”
- “不可能编写良好且可维护的面向对象代码。”