天天看點

程式員們,曾經是否有個bug讓你開始懷疑人生

相信程式員們都有一個共同的女朋友。這個女朋友總是陰魂不散,時不時還不忘調戲下男朋友程式員,而且你依然對她欲罷不能、想入非非。

不瞞大家,最近這個女朋友找上俺了。她就是StringIndexOutOfBoundsException:

程式員們,曾經是否有個bug讓你開始懷疑人生

優秀的程式員們一看就知道,你這是越界問題啊!還有的可能是工具類問題、邏輯問題、字元串截取,索引越界等等,說實話都對。然而 ,問題到現在仍然沒解決掉;什麼回事?先簡單說下bug的由來,那是6月2号的上午11點鐘左右,依稀記得當時是在寫RecyclerView上拉加載和修改資料對應的數組位置,(時間有些長了,記得不是很清楚),寫完馬上彈出bug,時間已經到12點就沒有當時解決,出去吃飯了,想的是先吃飯下午回來再解決。哪知道下午回來之後就解決不了,正好當天下午要搬家,回來簡單百度查閱資料,有個前輩部落格說那是越界問題,因為你擷取的資料大于數組本身的長度大小而抛出異常,例如,String.length()<10;而你又要取index>=10的字元。心想,這個bug情況似乎有些不一樣!修改資料對應的數組位置,在之前也改過幾次,而且沒有問題,且這個數組是集合數組List[] msgSt;我隻是修改了數組的位置【0】。

if (msgSt!=null) {
    nowList.clear();//清空緩存
    for (int i = 0; i < nowNum; i++) {
        nowList.add(msgSt[0].get(i));
    }
}           

複制

那好,我們看第二中情況,當時不是在寫RecyclerView上拉加載嗎,搬好家之後,我把相關的代碼注釋掉,重新運作,問題依舊。情緒開始失控,接下來幾天,又把一部分代碼注釋掉,開始進行排查,發現一個問題,在程式運作到報錯那行就崩潰,後面的代碼沒法排查,注釋也沒有用。後來,重新又梳理一遍,思索,這個情況不太像網上大牛們說的那樣越界的問題,首先能确定的是,邏輯代碼沒有問題,索引也沒有問題,在bug出現之前是可以運作起來的,bug出現最大可能是後面新增的代碼功能有誤引起異常,最讓人頭疼的是,報錯行代碼沒有問題,問題出現在其他地方,程式運作到報錯行,後面代碼沒有執行,無法進行Debug調試。

排查幾日無果,情緒越來越不好,開始胡思亂想,為了逃避問題而選擇玩遊戲;在遊戲裡并不得到解脫,常常比對到坑爹隊友,情緒反而更加低落,破口罵人少不了,浪費時間不說,除了口出狂言,出言不敬之外束手無策,情緒下的言語和行動隻不過是證明自己的弱小、證明自己沒有辦法解決問題而已。

這讓我想到了習得性無助。如果你每次去上高數課都發現自己什麼都聽不懂,每次做高數作業都像是看天書一樣,那麼你還願意去上高數課嗎?你還願意去做高數作業嗎?這種經曆了挫折和失敗之後,面對問題時無能為力的心理狀态和行為就是習得性無助。習得性無助的人們往往不能給自己确立恰當的目标,遇到困難時容易自暴自棄,他們對于失敗的恐懼遠遠大于對成功的渴望。他們不相信自己能夠按照指定水準來執行某個行動,即自我效能感低,面對需要高品質完成的任務時他們有經常很強的焦慮感。期末考試時朋友圈流行的“我可能有一個假腦子”系清單情包便是低自我效能感的一種展現。

話說今年的一期一會的谷歌大會,真的不把咱們程式員當人看啊!說什麼人工智能、VR也就算了,居然在本次大會宣布 Kotlin成為Android 開發的1級程式設計語言,更好笑的是,你谷歌跟人家甲骨文公司幹架就算了,居然搞個Kotlin程式設計語言還和Java互通。。。。。等等,谷歌幹什麼咱管不着,想想自己又要從零開始,又要多學一門語言,大寫的尴尬啊!

未來的世界變化不僅會變化得越來越快,估計還會讓人喪心病狂。生活不都這樣嗎?

程式員們,曾經是否有個bug讓你開始懷疑人生

本來改變就不易,我想現在的人們對未來更多的不是滿懷信心、滿懷希望,更多的是擔憂吧!不敢說别的,估計上個廁所都能錯過一個億!你覺得這個很恐怖嗎?不不不不~~,人家王思聰他爸一個小目标就是一個億。人類就是一個自作孽的物種,為咋這麼說?咱也不想這麼說呀,要知道說一句謊話,要用十句謊話來說明這句謊話。喂喂喂~~~~言重了吧!好像有點了過了,來點正能量激勵一下,擔心什麼呢?活在當下就好了,反正

程式員們,曾經是否有個bug讓你開始懷疑人生

再說了,今天不開心沒關系,反正明天也不會好過。

程式員是吃青春飯的,幹這一行很難吃到退休。江山代有才認出,一代比一代浪,請做好從入門到被裁員的覺悟吧!

通過二十多天的沮喪,問題終于解決了,但不是我解決的,說起來很奇葩,是bug自己不見 了。是這樣的,首先聲明代碼沒有太大的問題,隻是之前有寫錯代碼,可能真的是字元串截取索引越界,不過當時很快改過了,然而,運作程式bug一直存在,就好像Android Studio有記錯功能一樣,一直儲存這個錯誤。那幾天沒法解決,沮喪幾天後想了個辦法,把報錯的地方注釋掉,先寫其他的功能;寫着寫着,奇迹發生了,bug不見了,然而我并不高興,總感覺有個更大的bug要發現,這時候還得 問問度娘,百度搜尋:Android Studio run多次,經過一番查閱,終于知道問題發生的原因所在,他就是Android Studio2.0之後的逆天功能Instant Run。Instant Run作用是節約程式員在花大量的時間bulid,使用instant run, 在第一次運作之後,就可以快速的在真機中(或模拟器)看見修改後的結果。也正因為這樣,instant run可能會有記憶功能,把錯誤也記住了(我是我的一種猜測),你接下來修改了代碼,增加了代碼,還會報錯。如果大家以後遇到這樣的情況,可以這樣做,在Run菜單中Clean and Rerun找到它,點它運作程式

程式員們,曾經是否有個bug讓你開始懷疑人生

這是我在網上找到了一種解決方案。

出現bug的因素及解決方案:

1.80%的bug是程式員自己不小心、不認真、不負責出現的。這種情況解決方法就是多檢查代碼,檢查再檢查。

2.有些bug是工具出了問題。解決方法是檢查、更新、換工具、百度

3.咱們程式員不怕bug,就怕不知道bug出在哪裡。這種bug很難解決,最快最好的解決方法就是注釋掉(别打我别打我,我也是這樣過來的),注釋排除法:重要功效就是确認bug出現在哪裡。簡單的說是找bug的方法。

N-2.轉移傷害。當你絞盡腦汁還是沒解決bug,這是你可以換個想法,假設你的一位程式員女同僚出現了這麼個bug,且她正在向你求助,你考慮如何幫助她。這樣的話,你的注意力會轉移,壓力會得到一些緩解,且你的想法會更大膽,思路會更寬闊。

N-1.求助。向同僚或者朋友求助,也可以到技術讨論區把遇到的問題拿出來大家幫忙,總之利用一切能利用的資源進行求助,大牛技術QQ群,微信公衆号、知乎、CSDN等等。

N.重寫代碼