您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

毫不留情!大佬再开“怼”:干净代码多余!

时间:2023-04-28 11:16:53  来源:51CTO  作者:

“如今流行的许多关于干净代码的‘最佳实践’是引发程序性能灾难的直接原因。”这是西雅图资深游戏开发专家凯西·穆拉托里在其个人网站所发表文章中的一段言论,而他的这个观点在过去一个多月中引发了各大开发者社区的激烈争论。

部分人赞同了穆拉托里的理念,也有部分人站了出来为干净代码发声,这其中便包括《代码整洁之道》一书的作者——世界级编程大师Bob大叔(Robert C. Martin)。在二者于Twitter上进行了一场难分胜负的辩论后,还嫌不过瘾的穆拉托里近期又通过New Stack的采访再次针对干净代码的性能缺陷进行了无情输出。

1、一篇文章引发的海啸

说起这场旷日持久的“战争”,就不得不提到穆拉托里上个月所发表的一篇名为《“干净”的代码,糟糕的性能》的文章了。文中,穆拉托里通过近10项代码测试验证了干净代码与程序性能间的冲突,并提出了“干净”编程规则根本不靠谱的观点。

在文章发布后不久,各大技术社区中的开发者便快速自发的分成了两大派系,支持者认为过分关注代码的“干净”将使程序损失大量性能,这有悖于程序开发的初衷,而反对者则认为干净代码更易于维护和改进,一点点的性能损耗对如今的绝大部分程序来说都无伤大雅。

就在两边势力争论不下之际,双方各自的老大穆拉托里与Bob大叔决定通过一场辩论决一胜负。然而即便两人在Twitter上从编程语言聊到开发工具,又从开发工具聊到程序需求,最后直到硬件性能为止。但在经历了5轮对峙后,各执一词的穆拉托里与Bob大叔最终都没能成功说服对方。

2、穆拉托里的最新回应

然而正当人们以为两位大佬不分胜负的battle将为这场对峙暂时画上一个不完美的句号时,穆拉托里却再次现身接受了New Stack的采访,并总结了自己所发现的“干净代码”的缺陷。

穆拉托里表示,对于干净的代码而言,开发者经常被要求避免列出代码中可能出现的分支,例如C语言中的switch语句。但我曾亲自做过测试,利用干净代码所倡导的方式和switch语句创建不同的图形面积计算函数,结果是switch语句函数的性能要比干净代码版提高了1.44倍。

当你把问题弄得越复杂时,这些想法会对你程序产生的伤害就越大。有时,放弃干净代码不仅会让你的程序变得更快,也能让它们的语义变得更好理解。总有人说使用数百万个包含小函数的类会使程序变得更易读、更灵活,但在实践中情况并不一定如此,它只会给CPU带来更大压力。

或许有人认为代码的合理性只能通过对代码的高度优化来实现,但这其实并不是一个正确的观点,只要你所写的代码具有合理性,那么无论他们是否被干净原则所修改过,它都是易读和灵活的。显然一些技术基础较差的开发者没有写出或是接触过这样的代码。

除此之外,穆拉托里还提到了非常关键的一点,他认为很多干净代码的倡导者并没有真正理解CPU的工作模式。“这并不仅仅是一个学术问题,如果你的代码运行在云服务器上,那么你每月所收到的账单与程序性能是成正比的。如此以来你的软件越慢,你需要购买的服务就会越贵。”

3、干净与性能,你会如何选择

显然,穆拉托里的这番话再次一石激起千层浪,采访文章发布后不久便收到了超过900条评论。

游戏开发者Daniel Kvick表示穆拉托里对于CPU的观点太过古老顽固。而游戏开发商Jonathan Dickinson则反驳了他的这一观点“如果给你一个10年前的代码库,你就不会再这么说了。”

软件工程师Joshua Rumbut则表示了对穆拉托里的赞同,“很多时候对于开发者来说严格的干净代码约束的确很令人厌烦,尤其是在涉及到程序性能的部分,取消这些约束是一个非常明智的选择,并且我也没见过哪些按照干净代码原则的代码库更易于维护和开发。”

对于网络上的留言,穆拉托里也在后续的回访中向记者表述了自己的观点,“一些回应令人感到担忧,许多反对意见似乎是基于对事实判断的错误。但总的来说,我收到了令人感到惊讶的大量不喜欢干净代码并希望为此做点什么的人的鼓励,这对未来的软件发展而言兴许是个好兆头。”

归根结底,虽然穆拉托里对于干净代码的抨击显得有些偏激,但这也不得不让我们开始思考干净代码与程序性能间的关系。理想与现实总会存在一定差距,那么当更整洁的代码与更高的性能无法兼得时,你又会如何作出选择呢?



Tags:干净代码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
毫不留情!大佬再开“怼”:干净代码多余!
“如今流行的许多关于干净代码的‘最佳实践’是引发程序性能灾难的直接原因。”这是西雅图资深游戏开发专家凯西·穆拉托里在其个人网站所发表文章中的一段...【详细内容】
2023-04-28  Search: 干净代码  点击:(310)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(6)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(13)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(9)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(11)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(9)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条