转自58沈剑
粉絲提問,自己寫的程式碼,就像親手養大的孩子,怎麼看怎麼順眼。但偏偏那些藏在犄角旮旯的 bug,總能在你最有自信的時候,給你結實實上一課。為什麼我總是發現不了自己的Bug?
主題:為什麼程式設計師總是發現不了自己的Bug?https://www.zhihu.com/question/587995936/answer/1899859112629630331【回答1】因為程式設計師在用自己的產品時,總是會按他寫程式碼的邏輯去用,bug會避開的所有的程式設計師。
【回答2】我們組的產品代碼有一個參數是國家代碼,例如中國就是CN美國就是US這樣。照理說沒啥問題吧,結果有一次突然報錯了。
因為傳進來了挪威,縮寫是NO,yaml轉完就直接變成false了。
【回答3】我想起來我在一次組會上和領導的幽默對話;領導:你這個PPT還需要改改,整體邏輯還是不好;我:具體改哪部分呢?領導(托腮):你先把你覺得+的地方改掉;我:我要是覺得我做PPT時就不這麼做了,然後一個組不好的人都在憋笑。我沒憋住…
【回答4】甲方需求:要喝水。乙方解決方案:給了客戶一瓶礦泉水。甲方回饋:喝不到水,能看到水,但是喝不到。乙方調查後回覆:請旋開礦泉水蓋後再喝水。甲方回饋:扭開蓋子後水全撒地上了,還是喝不到水。乙方調查後回覆:請保持瓶口垂直向上的狀態下旋開蓋子,再喝水。甲方回饋:保持瓶口向上旋開蓋子,能看見水,但還是喝不到水。乙方調查後回覆:請不要舔瓶子外面,從瓶口喝水。甲方回饋:能喝到了,只能喝一點點,然後就再也喝不到了。乙方調查後回覆:請一面喝水一面慢慢傾斜瓶子,並且保持瓶口在嘴的範圍以內喝水。甲方回饋:太麻煩了,我就是想喝個水,怎麼這麼多限制。你們這產品用戶友善度太差了,bug還這麼多,尾款不給了。
【回答5】簡單來說,程式bug 並不是單純寫錯了。而是「寫出來的程式沒有按照程式設計師的設計運作」。寫錯了的叫錯誤,程式會崩潰,跑不了。而 bug 是,程式本身正常運行,但是沒有按照我設計的思路運行。例如我要10個蘋果,程式給了我三個梨子;或是我踩油門,車子沒動,天窗打開了。
程序複雜度稍微提升,各種邏輯錯綜複雜,牽一發動全身。很多bug 並沒有那麼直觀,一眼瞪上去根本看不出來,只有跑了才知道。有的更甚,正常跑,99.99% 都沒事,只有很特殊的那 0.01% 的例子裡才會產生 bug。例如我要10個蘋果,一般來說,程式都會給我10個蘋果,但是在星期二下午四點,如果剛好下中雨的話,向它要蘋果,它會給我10個榴槤。
所以,bug 是程式邏輯複雜的產物。例如之前的例子,如果需求不是“給我10個蘋果”,而是“給我一些能吃的東西”,那麼吐出3個梨子和10個榴蓮的程式就不算 bug。不想要 bug,那需求就必須簡單粗糙;又要對付複雜精細的需求,又要沒有 bug,世界上沒有那麼好的事情。