前些日子在腾讯的BBS上看到一片帖子,是讲代码优化的。读着读着不爽至极。内容大抵是对以下一段代码进行优化:
if (a == 5)
return 1;
else
return 0;
我的答案是:
return (5 == a);
然后据评分标准,我应得85分。给90分的是利用A编译器来进行预处理优化,如下:
#ifdef CompilerA // 你已经知道A编译器做为一种特例,将T返回0、F返回-1
return (5 == a) + 1;
#else
return (5 == a);
#endif
当然还有给99分的,如下:
return (5 == a) ^ (1 == 1);
下面讨论的人感慨很多,几乎无一不表示对作者的钦佩。
我开始感到了一种东西:科举的阴魂。
记得我上中学的时候,学过鲁迅先生的《孔乙己》一文,其中有一段非常经典:孔乙己问酒店小伙计会不会写“回”字,然后又告诉他,“回”字有四种写法。课文下边的注释写的是:“回”字有四种写法:回、囘、囬……还有一个“回”,字库里没有,看来GB_2312也将其删掉了,我只好用星号把它画在下面了。——继续说注释,注释说一般只用前三种写法(就是我的三种),极少有用第四种写法的,但是孔乙己这种深受科举教育毒害的读书人,经常会把这些没用的东西当成学问。
**********************
**
**************
****
**************
****
**************
****
**************
**
**********************
当今中国的代码界,竟还有很多把会写第四个回字当成本领的人!
再举一个例子,这个例子是我想出来的。
a <<= 3;
我来解释一下,对于C/C++的初学者而言,他们想表达这个意思,通常会这样写:
a *= 8;
然后我告诉他们,我用的是位运算,效率比他们高。……我已经能听见有人在骂我了。
对于这种现象,我不想多说。唯一要提醒诸位的是现在的时代是讲究团队开发的时代,这样的代码势必只会为团队开发造成麻烦,而不会有人夸奖你的学问。
教我C语言的老师说过,在印度,给出一个题目,不同的程序员能够写出几乎一样的代码。而把一个题目给不同的中国程序员,答案将是五花八门的。
印度的软件工业水平超过中国,大家有目共睹。
中国的代码界需要被拯救。
还好,现在很多人注意到了这个问题,也有一部分关于编码规范的书出版了,我亦曾拜读过几本,其中似乎都在强调这个问题:不要写令人费解的代码。
程序设计语言结构化之前,有很多算法高手操着一把宝剑——goto,goto来goto去,能goto出一段天书般的高效代码。然而结构化的程序设计语言根本没有因为这些代码的高效而被扼杀在摇篮里,相反,goto却被关进了监狱。我不多说了,相信大家都明白我的意思。
如果说不会写第四个回字会被当作文盲,我倒宁愿当文盲。
我始终觉得return (5 == a);挺好。