写程序!=表现自己的无知 从一个可移植的C程序说起
在年初的时候做了一个很小的支持故障转移的简陋的缓存,是用c在ubuntu上实现的,后来希望这个c程序有非常好的移植性,就把c的说明文档大体看了一下,才发现了好多学习c时的误区。
想起前两天跟同学校的几位同学聊起几个技术相关的问题,最大的感觉就是大家都越来越忽视程序了,眼高手低和粗心大意其实不是“失误”或“毛病”,而是“很严重的错误”。
每次遇到说java要不.net好的人,我向来第一感觉都是挺佩服的——能把这两个东东看到很透彻的人水平绝对不差,肯定是我老师级别的,我可以像他学不少东西的——可是几乎每次结果都是让我以“sorry,有点事,离开一下”来中止这段谈话。更有一个我的朋友说“技术牛不牛无所谓,知道大体怎么回事,业务熟就行了”。中国软件业为何差?这样的意识形态绝对不是一两个人生而有之的。
言归正传,我这位同学的宣称“可移植”的c中有几句是这样的:
Code
打眼一看,这是一段把用户输入转换成小写的功能。可是这三行代码能“任意移植”吗?
答案肯定是不能——tolower()和toupper()在早期的c里是被实现为宏的。这个宏是个有利有弊的问题,尤其是在不同版本的c里,宏的使用都是个老大难的问题。比如说tolower(),他的实现如果是:
Code
那就糟糕了,上面的程序如果输入的就是小写,那得到的就是垃圾数据了。
冰山一角,我问了那位同学是否知道a+=b在有的c实现里也可以写成a=+b啊,得到的答案是沉默。我又问了一个知道a=/ *b和a=/*b有什么区别吗?答案还是沉默。
写程序,切忌在喧闹的酒吧里写——浮躁的环境和时代附加给代码的只可能是你的无知。So,如果你认为你是一个程序员,请尊重你的职业。