文章翻译自Object-Oriented Programming is The Biggest Mistake of Computer Science

C++和Java语言或许是计算机科学中最大的错误之一,它们都曾被Alan Kay(OOP的创造者)和其它计算机科学先驱严厉批评过,C++和Java为最臭名昭著的编程编程范式-OOP铺平了道路.
OOP的流行是巨大的不幸,它曾经对现代经济造成了巨大的伤害,间接造成了数万亿美元的损失.数以千计的人们因为OOP而丢失性命.如果我们正确地回顾近30年,我们会发现没有那个行业没有受过OO危机的潜在影响.
为什么OOP会如此危险,让我们一起来弄清楚.
试想在一个美好而阳光灿烂的周天,你和你的家人开车外出旅行,你们全家都在车上,你驾驶在你早已行驶过一万次熟悉得不能再熟悉的道路上.
但是,这次有些事情不同,纵使你已经松开了油门,车子依然不受控制地加速,制动器也失灵,他们看起来已经失去了作用.为了挽救这种情况,你绝望地尝试各种方法,你拉动紧急刹车.这会在道路上留下150英尺长的防滑痕迹,在你的车撞上到路边的防护栏之前.
听起来像一场噩梦?但是这正是在2008年9月发生在Jean Bookout身上的一件事,她当时整驾驶着她的丰田凯美瑞(Toyota Camry).这不仅仅是一次独立的偶发事件,而是许多与被称作"意外加速"事件中的一件.这个问题困扰了丰田汽车超过了10年,并且造成了接近100起死亡.汽车厂商快速的将这些事件归因于"粘性踏板",驾驶失误,甚至是地毯.然而,一些专家长久以来怀疑是有问题的软件是着一系列事件的罪魁祸首.
一些来自NASA的软件专家被招募进来帮助解决这个问题,却未发现任何问题.仅仅几年后,在对事件调查过程中,另外一组专家发现真正的元凶.他们花费了将进18个月的时间深入研究丰田的代码.他们将丰田的代码库形容为"面条式代码"(speghetti code)--程序员形容混乱代码的行话.
这些软件专家演示了超过1000万种方法使丰田的代码造成"意外加速".最终丰田被迫召回超过9百万辆车,并支付了超过30亿美元的和解费和罚款.

"面条式代码"是一个问题吗

因为错误的软件而造成100多人丧生,这样的代价真的是太大了,然而真正令人害怕的是像丰田这样的问题代码并不罕见.
两辆波音737Max客机相撞,造成了346起死亡,超过600亿美元的损失,这些全是由软件问题造成的,并且百分百是由"面条式"代码造成.
在全球范围内,无论是在机载计算机,医疗设备,核电站上运行的代码中,面条式代码困扰着太多的代码库了.
程序代码不是为机器编写的,而是为人编写的.正如Martin Fowler曾说"机器能懂的代码是任何傻瓜都可以编写的,好的程序员只编写那些人能够看懂的代码."
如果代码不能运行,说明它已经崩溃;如果代码不能被人们读懂,说明这个代码不久将会崩溃.
让我们抛开其它问题,谈论一下人的大脑.人脑是世界上最强大的机器.然而,它也有自身的局限性.我们的工作记忆是有限的,人脑一次只能思考5件事.这意味着,程序代码不应按照使人脑不知所措的方式编写。
"面条式代码"使人脑无法理解代码库.这具有非常深远的影响--它使人们无法知道一些代码的变化是否会破坏其它代码.对缺陷进行详尽的测试变得不可能.没人能够确定这个系统能否正确运行.甚至即使它确实能够运行,也没人知道它为何能够运行.

什么造成了"面条式代码"

为什么OOP是万恶之源

让我们谈谈可预测性

非确定性101

从确定性到非确定信

副作用

有一个银弹