顶尖程序员与注释的“相爱相杀”

关于顶尖程序员是否不屑于写注释的讨论,几乎和“世界上最好的编程语言”之争一样,经久不衰。很多人有一个刻板印象:真正的大神,代码即文档,优雅到不需要任何注释。
这种看法,对,但也不全对。与其说“不屑”,不如说他们对“注释”的理解,早已超越了“解释代码”的初级阶段。
代码的最高境界:自解释的艺术
首先,我们必须承认,追求“代码自解释”是所有优秀程序员的共同目标。这是一种编程的洁癖,也是一种卓越的工程品味。
当你看到一个函数命名为 calculate_user_age_from_birthdate,并且其内部逻辑清晰、变量命名规范时,你几乎不需要任何注释就能理解它的功能。相反,一个名为 process_data 的函数,里面充斥着 a, b, c 这样的无意义变量,即便写满了注释,也像是在为一堆烂摊子打补丁。
顶尖程序员会花费大量精力在代码本身的可读性上:清晰的命名、小而美的函数、合理的模块划分、一致的编码风格。在他们看来,最好的注释,就是不需要注释。每一次当你觉得需要写注释来解释“这段代码在做什么”时,都应该先反思:是不是我的代码写得不够清晰,以至于需要额外的文字来“拯救”?
注释的真正价值:解释“为什么”而非“是什么”
然而,这就意味着完全不需要注释吗?恰恰相反。顶尖程序员不写的,是那些**“坏”的注释**。

  • 废话式注释i++ // i自增1,这种注释除了增加代码的噪音,毫无价值。
  • 谎言式注释:代码已经改了八百遍,注释还停留在最初的版本,误导性极强。
  • “是什么”式注释:过度解释代码的实现细节,比如 // 循环遍历用户列表。拜托,一个 for user in users: 已经说得很清楚了。
    那么,好的注释是什么样的?它们回答的是一个更深层次的问题:“为什么”
    代码能告诉你“做了什么”,但很难告诉你“为什么这么做”。这背后可能隐藏着复杂的业务逻辑、一个罕见的系统漏洞、一个性能上的极致权衡,或者一个被“坑”过之后留下的血泪教训。
    举个例子,你可能会看到一段看起来很“丑”的兼容性代码,旁边有一行注释:
    // 修复 IE11 下的某个渲染 Bug,勿动!相关 issue:#12345
    这行注释的价值是巨大的。它阻止了后来者出于“代码洁癖”而“优化”掉这段代码,从而避免了线上故障的重现。没有这个“为什么”,这段代码的命运可想而知。同样,复杂的算法、非标准的协议、临时的业务妥协……这些都是注释大显身手的舞台。
    从“码农”到“架构师”的思维跃迁
    所以,问题的核心不是“写不写注释”,而是“写什么样的注释”。
  • 初级程序员:可能不写注释,或者写很多“废话式”注释。
  • 中级程序员:努力通过注释解释“代码是什么”。
  • 高级程序员:追求代码的自解释性,让代码自己说话。
  • 顶尖程序员/架构师:他们不仅写出“自解释”的代码,更懂得在关键之处,用言简意赅的注释,去揭示代码背后的设计思想、历史背景和决策权衡(The "Why")。
    他们的代码是写给机器执行的,但他们的注释,是写给未来的同事,以及三个月后忘记一切的自己看的。这是一种更高维度的沟通和责任感。
    结论
    顶尖程序员并非不屑于写注释,他们只是不屑于写平庸的注释。他们对代码的清晰度有着近乎偏执的追求,同时又深刻理解,代码终究是人与人之间沟通的桥梁。
    在这个桥梁上,优雅的结构和命名是路标,而那些画龙点睛般的注释,则是桥梁说明书上最重要的那一部分——它告诉你,这座桥为何如此建造。
    那么,下一个问题是:你的代码,是在建造一座通天塔,还是一座需要不断打补丁的危桥呢?🤔