“我去!怎么回事儿?明明改过的,怎么连Log都没有呢?” 周权一边大喊一边跑步往来于调试机和自己的开发机之间。
大家笑着说:“加油!跑跑更健康!”
第三遍后,终于找到了root cause,原来是自己把程序传错了,他一直测没有被修改的程序呢,当然看不到新加的log。
大家哈哈大笑,感觉又年轻了几岁。
人不比机器,有七情六欲会影响着你的行为,没有机器那种按部就班执行指令的简单。从这一点上看,人类是复杂的。
越是复杂的事物,越是容易出错。人类的行为也不例外,尤其当我们的状态下降时,更是如此。在某些行业比如医生要保证在手术中不出错,不出偏差,真的很难。他们的那种压力我们IT痴汉也深有体会。那些关乎生命的程序,真的容不得半点差错。还好,现在我们的工作并么有那么严苛。有时出了低级错误,就好像是出了一个笑话一样,讲给大家听听,给大家减减压。
**致命的低级错误**
这是我心中永远的痛啊。大家在项目开始时就进入了赶进度的状态,代码review不多,通常都是自己忙自己的。
后期,我们的程序会不定期的Crash,C++程序对Crash还是比较难抓的。就这样我们不断的调试,也改了我们认为是野指针的问题。Crash出现的不多了,大家也有时间互相review下代码了。就在给我review的时候,江涛发现了数组越界的问题。就那我之前写的wlan代码为例子吧。大家也看看。
**[cpp]** [view plain](http://blog.csdn.net/lincyang/article/details/39102117# "view plain")[copy](http://blog.csdn.net/lincyang/article/details/39102117# "copy")[![](https://box.kancloud.cn/2015-10-13_561c56d3593bb.png)](https://code.csdn.net/snippets/465057 "在CODE上查看代码片")[![](https://box.kancloud.cn/2015-10-13_561c56d363c1b.svg)](https://code.csdn.net/snippets/465057/fork "派生到我的代码片")
~~~
1. for (int i = 0; i int) pIfList->dwNumberOfItems; i++) {
2. pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
3. wprintf(L" Interface Index[%u]:\t %lu\n", i, i);
4. iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString,
5. sizeof(GuidString)/sizeof(*GuidString));
6. ...
7. if(my judge) break;
8. }
~~~
就用它举例吧,我觉得这很典型。在循环体中,我有一个判断,如何符合条件,就跳出循环。就是这么简单的一个遍历网卡的例子。大家看出来问题没?
对,就是多循环一次。
很明显,int i=0;i<=dwNumberOfItems; 不是我的本意。我真的 是顺手就把“=”号打出来的。而问题为啥不容易发现,是因为我的条件(my judge)通常会在头几次循环中符合,程序就会跳出循环。但某一情况,循环全部进行完就会出现数组越界的问题。
我说这是笔误,你们信吗?
**自己忽悠自己**
这个例子类似与周权的问题。我在写代码时,喜欢加注释。不得不说,这是一个好习惯。当数月之后,再回头来看比较有特殊背景的代码,会比较容易与当时的自己沟通。
当时的代码类似于下面的:
**[cpp]** [view plain](http://blog.csdn.net/lincyang/article/details/39102117# "view plain")[copy](http://blog.csdn.net/lincyang/article/details/39102117# "copy")[![](https://box.kancloud.cn/2015-10-13_561c56d3593bb.png)](https://code.csdn.net/snippets/465057 "在CODE上查看代码片")[![](https://box.kancloud.cn/2015-10-13_561c56d363c1b.svg)](https://code.csdn.net/snippets/465057/fork "派生到我的代码片")
~~~
1. //try 10 times do my job. magic number you know.
2. for (int i = 0; i
3. ...
4. }
~~~
而有些时候,10次貌似次数还不够,需要变成15次更好。但大部分时候,10次已经足够。下面我就进行下修改, 然后跑到测试机上测它个10次。
**[cpp]** [view plain](http://blog.csdn.net/lincyang/article/details/39102117# "view plain")[copy](http://blog.csdn.net/lincyang/article/details/39102117# "copy")[![](https://box.kancloud.cn/2015-10-13_561c56d3593bb.png)](https://code.csdn.net/snippets/465057 "在CODE上查看代码片")[![](https://box.kancloud.cn/2015-10-13_561c56d363c1b.svg)](https://code.csdn.net/snippets/465057/fork "派生到我的代码片")
~~~
1. //try 15 times do my job. magic number you know.
2. for (int i = 0; i
3. ...
4. }
~~~
结果很令我满意,但提交代码时我一看,天啊,我只是修改了注释。
瞬间感觉自己跟自己玩的挺开心啊。
**跟For循环较上劲了**
这一次是齐天的故事,还是for循环,循环次数貌似要经历一次神奇的运算。
**[cpp]** [view plain](http://blog.csdn.net/lincyang/article/details/39102117# "view plain")[copy](http://blog.csdn.net/lincyang/article/details/39102117# "copy")[![](https://box.kancloud.cn/2015-10-13_561c56d3593bb.png)](https://code.csdn.net/snippets/465057 "在CODE上查看代码片")[![](https://box.kancloud.cn/2015-10-13_561c56d363c1b.svg)](https://code.csdn.net/snippets/465057/fork "派生到我的代码片")
~~~
1. int count = %&&**((%$#$%^&*(*&^^&*;
2. for (int i = 0; i
3. ...
4. }
~~~
这段代码我认为没有问题。循环3次,对于我不清楚逻辑的情况下,不觉得有问题。但是,周权知道逻辑,对齐天说,你把循环次数计算完就不管了?然后就只循环三次?
原来是酱紫啊!
**[cpp]** [view plain](http://blog.csdn.net/lincyang/article/details/39102117# "view plain")[copy](http://blog.csdn.net/lincyang/article/details/39102117# "copy")[![](https://box.kancloud.cn/2015-10-13_561c56d3593bb.png)](https://code.csdn.net/snippets/465057 "在CODE上查看代码片")[![](https://box.kancloud.cn/2015-10-13_561c56d363c1b.svg)](https://code.csdn.net/snippets/465057/fork "派生到我的代码片")
~~~
1. int count = %&&**((%$#$%^&*(*&^^&*;
2. for (int i = 0; i
3. ...
4. }
~~~
写程序是个细致活,马虎不得。但往往我们也会出现这种啼笑皆非的低级错误,是我们的责任不假,但跟当时的疯狂赶进度和疯狂加班都有关系。
并不是加班就会出成果,一个好的心情,好的工作、团队氛围更容易出成绩。
- 前言
- IT痴汉的工作现状
- IT痴汉的工作现状2-女人
- IT痴汉的工作现状3-临时工
- IT痴汉的工作现状4-沟通与分享
- IT痴汉的工作现状5- 一分钟的工作
- IT痴汉的工作现状6-寂寞的夜
- IT痴汉的工作现状7-TB
- IT痴汉的工作现状8-三思而后行
- IT痴汉的工作现状9-会哭的孩子有奶吃
- IT痴汉的工作现状10-Sprint Planning
- IT痴汉的工作现状11-程序员的烦恼
- IT痴汉的工作现状12-叶志坚离职了
- IT痴汉的工作现状13-恐吓电话
- IT痴汉的工作现状14-段子
- IT痴汉的工作现状15-低级错误
- IT痴汉的工作现状16-职业发展
- IT痴汉的工作现状17-健康警钟
- IT痴汉的工作现状18-思维定式
- IT痴汉的工作现状19-公司组织结构
- IT痴汉的工作现状20-职业规划
- IT痴汉的工作现状21-Android开发前景论
- IT痴汉的工作现状22-由Dalvik虚拟机引发的口水战
- IT痴汉的工作现状23-乡关何处
- IT痴汉的工作现状24-Just for fun
- IT痴汉的工作现状25-技术之养成
- IT痴汉的工作现状26-好项目,坏项目
- IT痴汉的工作现状27-高冷MM与奶茶姑娘
- IT痴汉的工作现状28-刀客许三爷(上)
- IT痴汉的工作现状29-社会工程学
- IT痴汉的工作现状30-刀客许三爷(下)
- IT痴汉的工作现状31-跳槽小贴士
- IT痴汉的工作现状32-四次面试
- IT痴汉的工作现状33-HTML5的春天是原生App的冬天?
- IT痴汉的工作现状34-技术选型
- IT痴汉的工作现状35-不要让你擅长的技术限制了你
- IT痴汉的工作现状36-做好准备再上路
- IT痴汉的工作现状37-我想找一个人
- IT痴汉的工作现状38-让我的笔记本上网冲浪--无线路由的桥接技术
- IT痴汉的工作现状39-客户demo这件小事
- IT痴汉的工作现状40-将其存成pdf,永久保存
- IT痴汉的工作现状41-亲历招投标
- IT痴汉的工作现状42-Android越用越慢?立场不同,谈何信任!
- IT痴汉的工作现状43-开发者宣言