网易首页 > 网易号 > 正文 申请入驻

为什么有这么多开发者讨厌面向对象编程?

0
分享至

  作者丨David Cassel

  译者丨阿拉丁

  策划丨蔡芳芳

  关于面向对象编程,有人喜欢它,也有人讨厌它。

  面向对象编程(OOP)已经存在了很长时间。它是一种编码风格、一种思想流派、一种学校里的教授实践。它的核心思想是将代码组织成有意义的“对象”,这些“对象”是现实问题的模型,将描述模型各个“状态”的变量和修改这些变量的方法(子例程或函数)捆绑在一起。

  面向对象编程思想与人们在现实世界中思考问题的方式是一致的。他们将代码组织成有意义的代码块,这些代码块之间有着各种直接的关系。他们最终得到的是不同类型的对象,这些对象之间进行离散的交互,相互交换数据状态变更消息。

  但在实践当中,有些批评者声称,OOP 并不总是这么回事。

  Ilya Suzdalnitski 是这种“憎恨者”阵营的一员,他是一位高级全栈工程师,上个月发表了一篇 6000 字的文章,说 OOP 是“万亿美元的灾难”。而且事实证明,他并不是唯一一个有这种强烈感觉的人。在写完另一篇系列文章后,他发现,“这两篇文章在一个月内达到了 50 万的阅读量”。

  文章链接:

  https://medium.com/better-programming/object-oriented-programming-the-trillion-dollar-disaster-92a4b666c7c7

  Suzdalnitski 说,“OOP 没能把它本应该要解决的问题解决好”,反而把事情变得更加复杂。OOP 代码的变量及其可变状态“在不同的对象之间被随意共享”。

  他在一封电子邮件中写道:“在大多数情况下,OOP 代码最终会变成带有全局状态的大泥团,任何人都可以随意修改它”。

  Suzdalnitski 还认为,面向对象代码难以重构,也难以进行单元测试。他在文章中大胆宣称:“写出好的、可维护的面向对象代码很难……”

  他写道:“程序员宝贵的时间和精力都花在思考‘抽象’和‘设计模式’上,而不是解决现实世界中的问题。”

  Suzdalnitski 指出了 OOP 的另一个主要问题:并发。他在电子邮件中说:“OOP 生于单核 CPU 时代,那时的程序员不需要担心并发问题……而函数式编程(还有 Go 语言和 Rust 等)崛起的一个主要原因是它们能够有效地处理并发问题”。

  他在文章最后指出,函数式编程将是更好的选择。函数式编程是 OOP 的竞争编程范式,在函数式编程中,问题不是被建模成对象,而是纯数学函数,并强调要避免让状态发生变化。三周后,Suzdalnitski 以欲扬先抑的讽刺性笔调发表了另一篇文章(《不要再尝试函数式编程了》),对函数式编程大加称道了一番。

  读者的反应

  Suzdalnitski 敢于挑战 OOP 编程范式的论调激起了其他开发者的强烈反应。Suzdalnitski 的第一篇文章在 Medium 上得到了 174 个回复,其中有一个来自德克萨斯州的软件工程师 Jesse Dickey,他说 OOP 这个名字本身就是一个错误。“你不是在用对象编程,而是用类。所以,你可以把它叫作面向类编程……”他后来补充说,更准确地说,类应该是“自定义类型”。

  Suzdalnitski 第一篇文章的链接也出现在了 Reddit 的 10 个讨论话题中,开发者开始对哪种编程范式更好产生了尖锐的分歧——是函数式编程还是面向对象编程:

  “我使用的是 OOP 语言,但却以 FP(函数式编程)的方式编写代码(大部分是 TypeScript)。函数和数据是相互独立的。与 FP 相比,重构一个混乱的 OOP 代码库简直是一场噩梦……”
  “我研究了一下‘纯函数式编程’,但感觉这就是一场灾难,就像是在没有电子表格软件的情况下处理电子表格……”

  很快,他们开始争论问题到底是该归咎于编程范式还是程序员本身。

  “软件应该由普通程序员开发来开发,而不是精英程序员。如果你的编程范式或技术栈需要精英程序员,那么随着时间的推移,很可能会以失败告终,因为精英程序员很难留住……”
  “OOP 倾向于让代码变得混乱,而函数式编程倾向于让事情变得尽可能清晰……”
作者的想法

  面对读者的激烈反应,Suzdalnitski 作何感想?

  Suzdalnitski 在邮件中写道:“我一生中的大部分时间都在编程。我获得的经验越多,就越开始意识到我以前写的代码有多糟糕,真的很糟糕。这些年来,我花了大量时间学习 OOP,但具有讽刺意味的是,我得到的回报非常少……”

  即使是简单的功能也需要“大量时间”来实现,而且代码库越大,实现起来就越困难。

  “问题越来越多,而且问题出现得越来越频繁”。

  2014 年,Suzdalnitski 发现了 F#——微软在 2010 年发布的多范式编程语言。

  “这门语言看起来很奇怪,但同时又很优雅……从那时候开始,函数式编程的想法一直萦绕在我脑海里”。

  “危险的 OOP”

  多年来,他开始将函数式编程思想应用到他的 C# 代码中。随后,他所在的公司完成了向 JavaScript 的迁移。从那天起,“我非常努力地寻找 OOP 的使用场景,但从来没有找到过”。

  “在使用非 OOP 语言时,比如 JavaScript,函数可以独立于对象存在。我们再也不用为了包含这些函数而去发明一些奇怪的概念(比如 SomethingManager),这真是一种解脱。”

  这一切都让他相信“OOP 是危险的。OOP 程序固有的非确定性让代码变得不可靠”。程序在运行时会有很多不同的路径,因为会有很多不同的对象,而且会不断动态创建出新的对象。“这种看似无辜的编程范式对世界经济造成的破坏性影响是人们难以理解的”。

  他知道他的观点会让一些人感到生气。但在文章浏览量达到 50 万之后,他有没有听到什么可以让他改变主意的东西,或者从另一个角度看问题呢?

  Suzdalnitski 表示,“有一条评论引起了我的注意”。一个读者评论说,现在存在着一种制度潜流,这种潜流导致不断产生大量 OOP 程序员。“对于管理者来说,继续使用 OOP 是有道理的,因为廉价的 OOP 开发者遍地都是,很多应届毕业生都熟悉 OOP”。但 Suzdalnitski 认为他们最终会为此付出代价。或者,换句话说,“OOP 之所以流行,是因为廉价的 OOP 开发者随处可见,而函数式程序员通常更聪明、更贵……”

  “当然,交付 OOP 产品通常需要更长的时间,不仅难以维护,而且由于 OOP 的非确定性,通常会有很多 bug”。

  这也就是为什么 Suzdalnitski 开始在网上发表他的文章,因为“如果我能激励一千个人质疑 OOP 的好处,并尝试函数式编程,那么他们将会写出更好、更可靠的代码。”

  他认为自己成功了,他的文章浏览量达到了 50 万,让世界走上了一条新道路。这条道路通往另一个世界,在这个新世界里,有更快乐的开发者、更快乐的用户和更省钱的公司……

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
又一位“电诈头目”!阿努廷撤销其泰籍冻结7000万,骗子组织崩盘

又一位“电诈头目”!阿努廷撤销其泰籍冻结7000万,骗子组织崩盘

素衣读史
2025-11-04 18:17:45
上海一大妈走后留700万,银行要求本人签字才给,女儿做法太解气

上海一大妈走后留700万,银行要求本人签字才给,女儿做法太解气

兰姐说故事
2025-03-19 15:00:05
邵佳一可能只是备选,足协中意人选被总局否定?央视确认有外交

邵佳一可能只是备选,足协中意人选被总局否定?央视确认有外交

林子说事
2025-11-06 12:47:19
我代表公司和同学签1.2亿大单,同学说他被裁员,我:合同不签了

我代表公司和同学签1.2亿大单,同学说他被裁员,我:合同不签了

秋风专栏
2025-11-04 16:22:01
毕丽娜:费翔母亲,传言是大陆特工,17岁赴台,两任丈夫身份特殊

毕丽娜:费翔母亲,传言是大陆特工,17岁赴台,两任丈夫身份特殊

阿胡
2025-10-20 11:24:06
三甲医院丑闻后,网友一句话戳心:能好好看病就是好医生

三甲医院丑闻后,网友一句话戳心:能好好看病就是好医生

奇思妙想草叶君
2025-11-06 18:20:56
朱元璋御审贪官幼女,女孩却指着龙椅问了一句,满朝文武瞬间死寂

朱元璋御审贪官幼女,女孩却指着龙椅问了一句,满朝文武瞬间死寂

凯裕说故事
2025-10-28 11:34:31
浙经贸的三分钟战士大二弟弟火了

浙经贸的三分钟战士大二弟弟火了

杭城村叔
2025-09-11 12:54:47
贝克汉姆盼了14年终于获封爵士头衔,单膝跪地受封画面公开,西装由妻子维多利亚设计

贝克汉姆盼了14年终于获封爵士头衔,单膝跪地受封画面公开,西装由妻子维多利亚设计

极目新闻
2025-11-05 15:38:00
特朗普突然下令出兵,中国战机等到一个,和美军大战一场的机会?

特朗普突然下令出兵,中国战机等到一个,和美军大战一场的机会?

空天力量
2025-11-06 13:06:50
赖清德下令让台军实弹备战,蒋万安也亮明立场,坚持反对两岸统一

赖清德下令让台军实弹备战,蒋万安也亮明立场,坚持反对两岸统一

文雅笔墨
2025-11-04 09:18:55
紧急叫停!这5类人禁用甲钴胺!医生警告:出现5个症状必须停药

紧急叫停!这5类人禁用甲钴胺!医生警告:出现5个症状必须停药

朗威游戏说
2025-11-07 00:54:15
克莱谈替补出战:我一定会打出精彩表现 非常坚信这一点

克莱谈替补出战:我一定会打出精彩表现 非常坚信这一点

北青网-北京青年报
2025-11-06 19:47:03
文班:比赛节奏对我来说感觉有点快 以前没见过这样的防守

文班:比赛节奏对我来说感觉有点快 以前没见过这样的防守

北青网-北京青年报
2025-11-06 21:27:04
首次披露!六代机歼-36可搭载鹰击-19,航母无用论真的来了?

首次披露!六代机歼-36可搭载鹰击-19,航母无用论真的来了?

头条爆料007
2025-11-05 18:35:22
建工集团董事长和多名下属被一锅端!

建工集团董事长和多名下属被一锅端!

新浪财经
2025-11-06 19:41:47
两性关系:女人过了60岁,最渴望的3个需求,男人一定要懂!

两性关系:女人过了60岁,最渴望的3个需求,男人一定要懂!

匹夫来搞笑
2025-11-07 03:45:53
特朗普不敢做,高市早苗做了!日本撕毁承诺,公开会面台当局?

特朗普不敢做,高市早苗做了!日本撕毁承诺,公开会面台当局?

文史旺旺旺
2025-11-05 20:44:09
封杀四年,49岁赵薇突传消息,因胃癌去世传闻5个月前就真相大白

封杀四年,49岁赵薇突传消息,因胃癌去世传闻5个月前就真相大白

书雁飞史oh
2025-11-06 19:05:31
记者:泰山以次顶薪续约瓦科,有海滨城市球队报价但球员无意

记者:泰山以次顶薪续约瓦科,有海滨城市球队报价但球员无意

懂球帝
2025-11-06 14:39:03
2025-11-07 05:31:00
InfoQ incentive-icons
InfoQ
有内容的技术社区媒体
11663文章数 51536关注度
往期回顾 全部

科技要闻

小鹏机器人里藏真人?何小鹏发一镜到底视频

头条要闻

美参议员提议:政府不“开门”国会议员就停薪

头条要闻

美参议员提议:政府不“开门”国会议员就停薪

体育要闻

送走两位全明星,公牛成了东部第一

娱乐要闻

“黑料缠身”的白百何 谁给她的勇气?

财经要闻

南银法巴加速发展背后:资金饥渴症待解

汽车要闻

是我眼花了么?怎么大猩猩都来参加新车发布了?

态度原创

旅游
数码
健康
艺术
亲子

旅游要闻

11月6日最佳情报|济南郎茂山日出美如画,三媳妇山奇峰峻美!

数码要闻

苹果Apple TV全新开场动画幕后:相机结合玻璃Logo实拍

超声探头会加重受伤情况吗?

艺术要闻

惊人!一幅画拍出3.45亿,竟然他早已去世62年!真相令人震惊!

亲子要闻

让宝宝少咳嗽、让孩子晚近视、为罕见病早行动 进博展商交出儿童健康民生答卷

无障碍浏览 进入关怀版