为什么我们不使用评论

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

当我 1986 年在 TU Budapest 学习 PASCAL 编程时,有一个专门为学生代码开发的预处理器。如果内联注释的数量少于可执行代码的数量,它会停止编译过程。有一条规则:我们必须有至少 50% 的代码有意义的注释。 30 年过去了,现在我们与行内评论作斗争。干净的代码纯粹主义者鼓吹根本不要有内联注释,并且只在界面上有单元文档(JavaDoc)。解释实现的任何其他内容都必须从代码本身进行自我解释。

那个时候甚至有工具可以将内联注释提取到文档中,部分包括可执行代码。你还记得 WEB 和 TANGLE 吗?那个时候,有一种语言可以编译成 TeX 用于文档目的,也可以编译成 PASCAL 以便代码可以执行,这似乎是非常令人兴奋的。 30 年后,我们可以看到那是一条死胡同。我们不混合编程和文档。我们宁愿将它们分开。

态度转变的原因是什么? 30年前的计算机科学家都“傻”?他们是否提倡过去和现在都不好的东西?还是那时候好,现在好?世界上是否发生了根本性的变化,我们生活在一个不同的世界?

我最近在考虑这个问题,得出的结论是:两者兼而有之。 “愚蠢”这个词有点刺耳和粗鲁,但说计算机科学家不像今天这样了解是可以接受的。毕竟那是发展。如果知识保持不变,那就意味着我们还处在 30 年前的状态。我们学到了很多与计算机科学相关的东西。其中很多东西都与人文科学有关,应该属于心理学或类似的领域。那是菜的一面。

30 年前需要评论。今天我们说评论不好是因为它们变得过时和具有误导性。 30 年前的口头禅是保持注释与代码一起维护并保持最新。说起来容易,但人们往往不会听从这个建议。有一段时间,你可以推动这个咒语,你可以试着强迫人们保持他们的评论是最新的,但这就像禁止青少年发生性行为一样徒劳。这就像试图命令重力停止并在雨滴漂浮在您的头顶时干燥地走回家。人类的工作方式不同,你无法改变人类。我们似乎在 30 年中学到了什么解决方案?使实践适应人类能够和将要做的事情。

如果评论变得过时和具有误导性,那么最好不要有任何评论。另一方面,我们需要一些东西来补偿所提供的功能评论的损失。我们现在的目标是可读代码。这是天平的另一面。这是改变世界的事情。我们有新的编程语言和新工具。如果您需要在 FORTRAN 或 COBOL 中创建可读代码以便不需要内联注释,您就会遇到麻烦。因此,强烈要求发表评论。那些日子里,评论弥补了语言的不足,包括误导性评论在内的平均结果比裸代码要好。

今天我们有 Java、Scala、C#、Go、Swift、Ruby、Python。所有现代语言(对于我错过的那些感到抱歉)都可以用不需要注释的可读和简洁的格式来表达行为和实现。我们还使用单元测试,这是 30 年前还不为人知的东西,它更像是实现的文档而不是测试。我们使用代码来记录,并且越来越少的文档从瀑布流向敏捷。我希望这是一段时间内的一个好方向,我对未来充满好奇。