写点什么

代码行数是致命因素吗?

  • 2007-12-26
  • 本文字数:1874 字

    阅读完需:约 6 分钟

Steve Yegge最近的一个帖子触动了开发社区的神经。Steve 主张将代码数量保持在一个绝对的最小值,是软件开发中最重要的事情。依他的看法,即便仅仅出于缩减代码行数的理由,你或许也该牺牲一些设计模式和避免一些重构。如果问题域太大,做不到这一点——那么你可以换到另一种编程语言。

……我相信,相当坚定地相信,对于一个代码库来说,最坏的事情就是它的大小。

Steve 认为,代码大小有毁灭性的影响:

多数人可能不认同我的观点:山一样的代码是一个人、一个团队、一家公司所能遭遇的最严重的灾害。我认为代码的重量会压垮项目和公司,它迫使人们在达到一定大小后就不得不重写,明智的团队会尽其所能阻止代码库变成一座大山。

Steve 说他本来也可以用代码肿胀的说法,但问题是开发者鉴别不出肿胀,而且他要说的也不是一般偶然遇到的复杂性。

我说的“大小”只是用来代替一个相对更加合适的概念,因为我暂时找不到更好的词汇来表达。我会来回说明这个词所代表的含义,直到你理解我的意思,或者帮我找到一个更合适的词。“肿胀”这个词可能更准确,因为每个人都知道肿胀是不好的,但不幸很多所谓有经验的程序员都不知道该怎么检测肿胀,他们会指着一个剧烈肿胀的代码库,说它瘦得像电线杆一样。

这个帖子的背景是 Steve 曾经用 Java 写了一个在线游戏,现在已经达到了 500,000 行代码,他无法再自己一个人维护这么大的代码库。因此不久前他把游戏撤了下来,现正用 JavaScript 重写。

我是经历过很多才得出这样的观点。人们很少关心代码库的大小,它并不被广泛认为是一个问题,实际上它被广泛认为不是一个问题。

那工具又如何呢?工具能让代码管理变轻松吗?

这一行的人们对于名义上有助于对付巨大的代码库的各种思路非常热衷,比如能把代码当成“代数结构(algebraic structure)”来操弄的 IDE,搜索索引之类。这些人看待代码库的眼光和建筑工人看待一堆土差不多:他们想要能把这堆土随意搬来搬去的大机器。

如果只是说到这个份上,很多开发者都还同意 Steve 的观点。凡是曾经接手大型代码库的人都清楚,代码行数本身就令人头痛。

如果你有 1 百万行代码,按每“页”50 行算,那就是 20,000 页的代码。你读完一本 20,000 页的说明书需要多长时间?仅仅是浏览代码库,尝试辨认出总体的结构可能就要花费数周甚至数月,取决于信息的密度。重大的架构变更可能需要数月甚至数年。

Steve 比大多数开发者更激进,他主张出于最小化代码库的目的,避免设计模式和重构可能是好的选择。

重构在 Java 这类语言身上表现出来的问题,很接近我的命题的中心:重构会使代码库变大。我估计现有 IDE 所支持的各种标准重构当中,能使代码库变小的不超过 5%。

至于设计模式,他写道:

设计模式——至少 GoF 书中的大部分模式——使代码库变得更大。可悲的是,唯一有助于缩小代码库的 GoF 模式(Interpreter)被那些程序员全然忽略了,而他们甚至把设计模式的名称纹在了身上。

不久之前 InfoQ 总结过对依赖注入的争论,Steve 把 DI 也归入了代码肿胀的类别:

像依赖注入这类流行的新 Java 设计模式,Ruby、Python、Perl 和 JavaScript 程序员可能从未听过。即便听过,他们也很可能(正确地)断定自己不需要它。依赖注入是一种极其精妙的基础架构,它在某些方面令 Java 更加动态,而那些方面正是更高级语言的本质所在。而且,用不着猜,DI 会让你的 Java 代码库变得更大。 用 Java 就要忍受它变大。活着就要生长。Java 就像是俄罗斯方块游戏,没有哪一块能完全填满其他块造成的缺口,而不造成新的缺口,因此你只能无休止地叠下去。

在跟贴里人们争论得很热烈。很多人觉得解决的方法是把代码分解成库,这样就不需要去理解全部的代码,至少不需要一下子全部理解。 Udi Dahan 问:

假如你按照这样的方式去组织代码,比如说每次做一件有意义的工作时只需要查阅不超过 1000 行代码,那么总共有 50 万行代码是一个大问题吗?

Jay Levitt 插了进来,他不同意 Udi,还借用了“成层现象(stratification)”这个词来表述他的意思。

我不断看到这样一种反模式,不过还没给它找到很好的名字。我叫它“成层现象”。 简单说,你越是编写高级的库来包装低级的库,低级库就用得越少,于是你就更不了解它们。渐渐地,你甚至忘了它们的存在。到了那个时候,你将(不可避免地)在高级库之上编写更高级的库,目的却是重新实现低级库的功能。

大小重要吗?我们都同意偶然的复杂性是不好的,应当消除;但如果代码实际上是清晰的,却仍然很庞大呢——我们是接受现实,还是采取非同一般的手段,像回避重构或者换用其它编程语言,去缩减代码的大小?大小有多重要?

查看英文原文: Does lines of code kill?

2007-12-26 16:581498
用户头像

发布了 225 篇内容, 共 65.3 次阅读, 收获喜欢 50 次。

关注

评论

发布
暂无评论
发现更多内容

珠海“云上智城”新动力:华为云与华发数智合作签约,共创智能未来

Geek_2d6073

【AI落地应用实战】如何高效检索与阅读论文——302.AI学术论文工具评测

中杯可乐多加冰

LLM 文本生成图像

敏思达:用数字化打造跨境电商一体化供应链,提高竞争壁垒

最新动态

近千名学子齐聚 HDC 2024 HarmonyOS学生公开课:探索前沿技术,激发创新思维

最新动态

元宇宙与接入层

dappweb

ao 元宇宙

大数据系统软件助力工业数字化转型

快乐非自愿限量之名

大数据

Web前端开发与低代码开发——现状分析与未来发展

不在线第一只蜗牛

前端 Web 低代码

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS Huawei (华为) FusionServer 定制版

sysin

macos huawei esxi OEM unlocker

MatrixOne最强体验官 等你来战

MatrixOrigin

云原生数据库 国产数据库 开发者活动

华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座

最新动态

超20个鸿蒙原生应用样板间,让各行业开发者高效拎包入住

最新动态

鸿蒙生态伙伴SDK市场正式发布,驱动千行百业鸿蒙原生应用开发

最新动态

元宇宙的安全与隐私保护

dappweb

ao 元宇宙

PDF文件免费转为PPT!用这2个软件轻松搞定!

彭宏豪95

PPT 在线白板 格式转换 AIGC AI生成PPT

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS xFusion (超聚变) 定制版

sysin

macos esxi OEM BIOS unlocker

培训机构和科班出身的程序员,存在鄙视链吗?

高端章鱼哥

OpenAI 收购桌面实时协作公司 Multi;iOS 18 开放 iPhone 镜像测试丨RTE 开发者日报 Vol.231

声网

开源图片编辑器推荐-可用于海报编辑、商品设计、封面设计、标签设计等场景

秦少卫

#开源项目 海报编辑器 图片编辑工具 在线设计工具 快图设计

23家开发服务商获优秀表彰,将持续推动鸿蒙原生应用开发

最新动态

加速鸿蒙生态共建,蚂蚁mPaaS助力鸿蒙原生应用开发创新

最新动态

丰图科技:利用华为云FunctionGraph搭建质检推理系统实现降本增效

最新动态

元宇宙与网络层

dappweb

ao 元宇宙

代码行数是致命因素吗?_编程语言_Niclas Nilsson_InfoQ精选文章