最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

争论:编写可维护的代码

  • 2007-06-26
  • 本文字数:1337 字

    阅读完需:约 4 分钟

在.NET 社区里, Sam Gentile Oren Eini(昵称 Ayende) Frans Bouma 正在就如何编写可维护的代码进行一场争论,还有不少人也加入了战局。争论的焦点集中在一个问题:测试驱动开发(TDD)、对象 / 关系映射(ORM)、Model-View-Presenter/Controller(MVP/MVC)以及其他最佳实践是否有助于提高软件的可维护性。

Jdn 以他对可维护性的一些想法开始了这场争论,Jdn 表达了他对 TDD、ORM 和 MVP/MVC 可能妨碍而不是促进了生产效率和可维护性的担心:

我有一个问题(好吧,其实不只一个)。我清楚知道我将把这个程序交给别人。维护它的人不会是我。我了解将要接手的人,因此我知道他们掌握的技能,我知道他们对编码方式的偏好。

Oren Eini 以一篇《可维护,对谁来说?》作出了回应。他同意对于不熟悉 TDD、ORM、MVP/MVC 的开发者来说,维护一个采用这些实践和框架的系统是很困难的(甚至是不可能的)。但他认为保留坏的实践,而只为了方便别人维护是一个糟糕的借口:

走回头路在我看来是最失败不过的了……。这不过是“我们一直都这样做”的老生常谈。当然,你可以用骡子来耕田,没问题。但一架拖拉机可以做得更好,即便你要先学会驾驶它。

Sam Gentile 赞同 Oren 的说法,他也认为向开发者传授最佳实践,如 TDD、DDD 和 ORM 等,对“真实世界”的项目来说,是值得花的代价。他在博客上总结了这场争论,并对 Frans Bourma 写的《没有坚实的文档行不通》作出了回应。Bouma 认为 TDD 无助于理解软件内部的行为,并且“很可能缺乏有深度的设计文档,以来阐述为什么一段代码要这样写,以及比如为什么不采用 B 和 C 算法等等。这些都是提高软件可维护性的重要信息。” Sam Gentile 回应说:

并不是只有单元测试。这些代码都是经过结对编程高度重构过的。当人们谈论代码的可维护性和“可扩展性”时,并不是在说什么插件。而是持续地改进代码的内部实现,将之重构成简单和可维护的代码。我坚持认为这样开发出来的代码更具可维护性,也为将来的代码增长打下了基础,将来不需要破坏一切再重新开始。让我们换个说法:我可以一个月不去看代码库,只要有单元测试和构造良好的代码,在几分钟之内我就能够了解现在的进展。

Frans Bouma 接受了挑战,并反击到:“要正确地分析代码和完全理解代码需要耗费很多的努力。这是‘代码就是文档’流派经常犯的错误”。他认为“代码不能替代你的文档:它只显示了现在的实现是什么,而没有说明为什么没有采用另外一种实现;而且代码是糟糕的文档:它没有用人类最容易理解的方式来说明代码的工作原理。” Oren Eini再次加入战局并声称他对这个问题的解决办法是“投入很多时间来想出有意义的命名,以及在测试里涵盖基础设施的所有方面”。对于 Bouma 的论点“文档并不是与代码分离的实体:它是用某种 DSL(即人类可阅读和理解的语言)写成的对功能性的描述”,Oren 回应说:

文档不是 DSL,而且在很多情况下几乎可以肯定文档是难以理解的。文档可能有很多模糊不清的微妙之处。代码并不是某种 DSL,这种说法假设了代码与文档存在某种关联,但代码才是实际运行的东西,因此对任何系统来说,代码才是权威的。

虽然这场争论很大程度上是在重复“代码就是文档”的老争论,但仍然提出了许多值得深思的新想法和新论点。您的想法如何?

查看英文原文: Writing Maintainable Code

2007-06-26 01:11752
用户头像

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

关注

评论

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

膜拜!“Java葵花宝典”脉脉一周狂转50w次,Github访问量破百万

Java架构师迁哥

Github上星标85k的,图解操作系统、网络、计算机 PDF,竟是阿里的?

Java架构师迁哥

阿里开源的面试全面解析,为什么会在Github一周标星63K?

Java架构师迁哥

双非渣本后端,三个月逆袭字节,入职那天“泪目”了

Java架构师迁哥

花2个月备战字节,3轮面试拿下总包60W Offer!

Java架构师迁哥

超24W字,2021最新一线大厂Java高级架构师面试题总结,共计480页

Java架构师迁哥

Github上标星80k的笔记就是diao,一个月帮我斩获8家大厂offer

Java架构师迁哥

网络攻防学习笔记 Day138

穿过生命散发芬芳

无线网络安全 9月日更

如何看待写作这件事

QualityFocus

个人成长 写作 写作感悟

从月薪7.5K再到拿到字节跳动20K*14薪那天,我泪目了,没人知道我付出了多少

Java架构师迁哥

vue 自定义指令以及模拟实现

法医

Vue 大前端 9月日更

开发者的多媒体梦工厂: AV Pipeline Kit究竟是什么?

脑极体

算法有救了!GitHub上神仙项目手把手带你刷算法,Star数已破110k

Java架构师迁哥

覆盖80%以上Java性能调优场景,三年开发经验以下慎入

Java架构师迁哥

阿里P8近十年的开发经验总结,卖168元,你觉得贵吗?

Java架构师迁哥

知乎上线1小时,5w浏览量被下架的JVM全解笔记,内容太强大

Java架构师迁哥

学生管理系统详细架构设计

毛先生

大专的我,闭关苦学56天,含泪拿下阿里offer,五轮面试,六个小时灵魂拷问

Java架构师迁哥

外包学生管理系统的架构文档

晓波

架构实战营

李某逆道而行闭关三月,直接四杀斩获阿里/腾讯/京东/百度等大厂offer

Java架构师迁哥

足足50W字!行业把我逼成了 “内卷王” 把Github上所有面试题都整理了一遍

Java架构师迁哥

抑制不住的喜悦!耗时2个月整理的Java面试指南在Github上破百万star!

Java架构师迁哥

一妹子揭露美团面试中一些不愉快的事情(Java岗)

Java架构师迁哥

架构实战营第二期-模块三作业

娜酱

#架构实战营

阿里JDK源码小册(2021版)火了!下载量超60W次!

Java架构师迁哥

33岁公司倒闭,被迫走上大龄Java程序员求职之路

Java架构师迁哥

阿里内部不外传的50万字Java面试手册,首次开放,一天遭狂转10w次

Java架构师迁哥

给我站出来!谁说在程序员过了三十岁进不去大厂的!

Java架构师迁哥

83天,从外包到拿下阿里offer,没想到我的阿里梦居然也能实现

Java架构师迁哥

如何使用项目奖金?

石云升

团队管理 管理 9月日更

双非二本,外包苦熬4年,花20天吃透这份Java天梯图,成功上岸京东

Java架构师迁哥

争论:编写可维护的代码_Java_Hartmut Wilms_InfoQ精选文章