本文转自公众号 GitChat精品课
代码注释的作用,不需要对程序员解释了。有时在查看他人代码,能看到一些令人不禁大笑的注释。比如:
或者:
// 写这段代码的时候,只有上帝和我知道它是干嘛的
// 现在只有上帝知道
最近在Quora 上看到一个帖子,号召程序员分享自己见过最有趣的代码注释。看到了各种有趣的注释,在这里摘取些片段给大家看。
1. Liu Wei 的分享[一位来自中国的工程师]:
我一周前在社交网站上看到很多人在讨论这个网站,网站的源代码包含了这些注释。有人说,这家公司应该加强对代码的审核机制,有人则怀疑这家公司可能没有足够的人力资源来做代码审核,因为至少需要两个程序员才能完成这项工作。
2. Edwin Romero 的分享:
我不确认有多少人熟悉站点内的Robots.txt 这个文件。其实这个文件不是运行必要的代码,但是它声明了爬虫/搜索引擎能爬到/搜到站点的哪些内容。
我在Nike 网站上发现的Robots.txt 文件非常有意思,如下:
3. Anirudha Bose 的分享:
谢尔盖.布林(Google 的联合创始人之一)在斯坦福大学念计算机科学博士学位的时候,他的简历里并不含任何”待遇要求“(Objective)的字眼。但当你去查看他的简历的HTML 源代码的时候,你会看到(他在简历HTML 源文件里明确写了“待遇要求”,只是用注释注掉了,在浏览器页面上不显示。):
(其“待遇要求“的内容是:办公室要大,挣钱要多,干活要少。如果能经常去奇妙的地方旅行而且还能给报销的话,那就更好了。)
4. Abhinav Upadhyay 的分享
/* 我们并不指望你能看懂这段话*/
这段注释并不是我亲眼所见,但是它在网上传得很厉害。这段注释是出自于贝尔实验室的Unix 系统第六发行版,并在《Lions’ Commentary on UNIX 6th Edition, with Source Code》这本书中标注出来的。
代码和标注的细节如下:
5. Kalpesh Singh 的分享:
我有个坏习惯,每当我看到做得不错的网站,我就想去控制台看它的源代码。我想很多前端工程师都喜欢这样做吧。
我订购了Box8 服务,并在他们的console 里看到了如下信息:
伙计们,他们居然在console/源代码里面打招聘广告。我对广告什么的早就受够了,你们就不能搞点儿新花样?
你们可以看看Box8.in 的console。
还有一个比较有意思的注释是target.com 编程游戏网站的源代码
可查看:Code With Target via The Geekiest Contact Form (BETA)
6. Nikunj Madhogaria 的分享
//drunk, fix later
//喝大了,一会儿再改
Catch (Exception e) {
//who cares? // ← 这不翻译了,估计都能看懂吧
}
我最喜欢的一个注释是:
long long ago;
如果你不明白什么意思,请看下图:
7. Bill Poucher 的分享(他是一位计算机科学教授)
我见过的最佳注释是以HTML 格式写在源代码里的,任何想要阅读的人都能看得见,我管它叫“Cerny效应”。
曾经有一位很有天赋的捷克研究生Tomas Cerny,在技术研发部主任Jeff Donahoo 的领导下,负责将一个设计原型转换成实际产品。有一天,Jeff到我的办公室跟我说有人在源代码的注释里写了一些话,冒犯到了其他人。
Jeff 问:“Tomas,你是不是在Joel 的代码上加了注释,说他的代码是愚蠢(retarded)的?”Tomas 倒是很坦白地说:“是的。”Jeff又问:“你凭什么这么写呢?”Tomas 回答说:“因为(他的代码)确实愚蠢(retarded)啊!”
我就站在一边看着,Tomas 一脸懵逼,Jeff 强压怒火,场面真是大写的尴尬。接着,Tomas 拿出了他的《捷克语-英语词典》,上面写着,词义:“开发中(under developed):retarded”(其实retarded 这个词有两个意思,既有“弱智,愚蠢”的意思,也有项目未完成,正在开发中的意思。)这也是造成这个误会的原因。
是的,开发确实还没完成......后来,Tomas 就把注释修改为了“建设中(Under construction)”。然后我和Jeff 都对Tomas 拓展英语能力的热情捧腹大笑。
8. Boris Zamoruev 的分享
我曾经做过一个高性能分布式键/值存储的项目。这是一个设计很精巧的软件,API 非常简洁。如果你要获取一个数值,那么你就用命令:GETN(get, 数值)即可。如果你要存一个数值,那就用命令:PUTN(put, 数值)即可。其他的命令也很简单,比如MGETN(get multiple, 数值),MPUTN(put multiple, 数值),INCR(增量), MINCR(多个增量),基本上命令都可以自解释。
所有的命令都会被送到一个dispatcher 函数去进行解析,辨明逻辑,然后去调用相应的处理函数。处理函数基本上也是自解释风格的,因此代码里面也不需要太多注释,例如:
int Server::handle_getn(…) {…}
int Server::handle_mgetn(…) {…}
不过有一天,有人让我review 一下下面这段代码:
// In Soviet Russia, Putn handles you!
// 在前苏联,Putn 就会搞定你!【Putn 和普京的英文拼写(Putin)非常接近。普京曾经是苏联的克格勃。】
int Server::handle_putn(…) {
}
我当即就选择了通过,然后合并到代码库并且发布了。据我所知,现在这段代码还在代码库里。
9. Michael Dehmlow 的分享
我新入职了一个公司,然后发现了一段三周之前写的注释,这段注释是项目之前的研发团队写的,写的日期就是我来公司面试和正式入职的这段期间。
我有幸在原来负责这个项目的先生们被炒鱿鱼的前一天被派来参与这个项目。