这是一个老问题,也是大问题。记得去年,一个朋友招几名资深程序员,我做面试官,问到一个有10年经验的程序员,这位仁兄说道,写程序也就是到处copy代码,不能运行的我改改就能让它运行。这句话我听了很恐怖,建议这人还是不要的好,会害死人。但是还是招聘了,造成了项目的bug满天飞。
根据我写代码的经验,代码分为3种,可以运行的代码,正确的代码,和好的代码。
写大多数时间能够运行的代码很easy的,使用几种常用的输入,得到几种常用的输出,一旦给一个不常用输入数据,程序就over了。
正确的代码不会over的,所有可能的输入数据,都是正确的,一般来说,所有可能的输入是测试不到的。
但是正确的代码并不一定是好的代码,正确的代码可能逻辑混乱,或者垃圾代码很多。
编写好的代码是我们的目标,好的代码具有鲁棒性,运行起来高效,即使不常见的输入也不导致当机或错误的输出,当然也必须满足其他的要求,线程安全,数据库的事务处理等等。
坏的程序,我总结了一下,出了问题大家的说法
1.函数不能这样调用,它的参数必须合法。
2.这段代码一直工作,它不会产生任何错误。
3.我的文档说明了这个全局变量是内部用的,只有我可以用。
经验告诉我们,你的代码在某个时间,某种情况下,会出错,很多人解释就是,不正确的输入,他当然会出问题。
当我们写程序的时候,我们不能做任何假设,我们不能想它不能发生。当你写的代码越来越多,工作也越做越快,你没有时间验证每一种情况,你的程序鲁棒性下降,你的代码的bug也越来越多。
举个我遇到的例子
这个一个给停车场的读卡器设置频率的程序,因为这种使用日立SuperH系列芯片的读卡器,可以设置各种读卡频率,使用函数setFreq,原型为 int setFreq(int array[],int arraylenth);传入参数有两个,一个int数组,后面的数组长度,返回的设置成功的频率个数,这位仁兄把这函数封装一下,认为后面的那个arraylenth不需要,因为sizeof(a)就是得到数组长度了。
函数写成这样
int SetFrequency(int a[])
{
int retcode=setFreq(a,sizeof(a)/sizeof(int)););
return retcode;
}
因为是交叉编译平台,公司没有购买相应的调试设备,无法经行调试,关于调试的问题,我以后会说的。当时公司只有一张频率的卡用于测试,我们测试通过,就ok了。
到了客户那里,不久就有投诉,很多频率的卡读不到,当时感到很是奇怪,后来发现问题。因为SuperH是32位的RISC CPU,a是指针,sizeof(a)的长度为4,setFreq只是设置4个频率,恰巧我的3张卡,在这4个频率之内。马上修改了这段代码,事后这位仁兄喋喋不休到,
int a[]={1,2,3,4,5,6,7};
printf("%d",sizeof(a)/sizeof(int));
得到就是数组长度吗?注意你一旦传递数据,被调用的函数得到是个指针。
|
相关推荐
程序员表白专用
程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用程序源码 (demo)程序员表白专用...
即便不去理解代码的意图,只要看一眼,好的程序员写的代码与差的程序员写的代码基本上就可以看出来。好的程序员写的代码,整洁而规范,视觉上自然有一种美感。空白错落有致,注释恰到好处,命名和排版遵守统一的规范...
这是我为自己写的一款表白的程序,并且己用它表白成功,于是几经努力把它完成为一个完整的程序,这是我准备完成的程序之爱系列第一辑,希望能多做几辑吧。
黑马程序员微信小程序——本地生活案例实现所用图片——不是黑马老师的原课件图片,是我自己找的图片——只是为了方便各位,节省时间。
这个资源主要讲解整个软件的开发过程,让大家对整个过程有所了解
程序员写的后台模板,偷懒,采用mvc3的模式,图片均是来从网络,觉得不好看的可以替换。没有静态化。c#程序员可做参考用。
程序员高级程序员 程序设计辅助理解软件.rar
全面介绍高级程序员编程方法~
程序员如何写文档
《JavaWeb程序设计任务教程》一书源代码,中国工信出版社出版,黑马程序员编著,传智播客旗下高端教育品牌“黑马程序员”项目实战配套用书
程序员交接文档!IT项目交接文档概要
练习打字程序.exe是一个适用于Win7-32位的 C/C++程序员练习打字的神器!!
最新程序员写的辞职信程序员辞职申请书WORD文档模板.docx
程序员Word文档程序语言部分,帮助要考程序员的学子们。
软件工程思想——程序员与程序经理.doc
台湾程序员写的,显示干支,节气,28星宿,12建星,每日喜忌等等.很实用.
程序员必读非程序书籍,多读读有意。