原来还有一个Underhanded C Contest:卑鄙C程序大赛
C 语言圈子里有一个举办多年小有名气的 IOCCC(The International Obfuscated C Code Contest)比赛,一帮高手利用C语言的各种犄角旮旯特性和花招,写出天书般的C语言代码,体现自己的创意和语言掌握度。基本上每年 10 月公布获奖结果。
前几天在 Hacker News 无意看到还有一个异曲同工的编程比赛叫 The Underhanded C Contest,underhanded 的意思就是表面一套底下另一套的意思,可以翻译为“卑鄙C程序大赛”。这个比赛的提交作品要求表面上看上去是一个很正常的C代码,易读、干净、好懂,但是实际上做的事情却让人大吃一惊,往往是恶意程序。
比赛是命题式的,指定场景,然后让大家各显其能。今年的题目就是一个微博性的服务,政府要来审查用户行为,有某种特征的都记下来,还不让用户自己知道。参赛者的任务是编写审查函数,暗地里把被审查的信息透露给用户和外部世界。
可不要以为这些比赛都是文字游戏,吃饱了没事儿干的。
一方面,这种比赛和各种体育竞技比赛一样,能挑战极限。因此很多高手都乐此不疲,IOCCC 历史上获奖者就 包括 Perl 创始人 Larry Wall,D语言创始人 Walter Bright,Ruby 现在的核心之一 Yusuke Endoh(他写过好多奇奇怪怪的编程语言,主流编程语言编译接力贪吃蛇程序 Quine Relay 可是令人叹而观止啊,见下图,现在已经支持 100 种语言了),《代码阅读》一书的作者 Diomidis Spinellis,还有大神 Fabrice Bellard。
一方面,这种比赛能产生很多有意思而且促使人思考的程序,对于老师和学习者都是很好的资源。很多时候,寻找一些能说明问题又令人印象深刻的 edge case 是非常头痛的事情。