“我去!怎么回事兒?明明改過的,怎么連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://code.csdn.net/snippets/465057 "在CODE上查看代碼片")[](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://code.csdn.net/snippets/465057 "在CODE上查看代碼片")[](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://code.csdn.net/snippets/465057 "在CODE上查看代碼片")[](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://code.csdn.net/snippets/465057 "在CODE上查看代碼片")[](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://code.csdn.net/snippets/465057 "在CODE上查看代碼片")[](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-開發者宣言