我記得這個(gè)問(wèn)題,我寫過(guò)。而且我還專門寫了一篇文章來(lái)回答這個(gè)問(wèn)題。
看看我當(dāng)時(shí)是有多無(wú)聊!哈哈……今天再來(lái)回答一遍這個(gè)問(wèn)題。
這個(gè)問(wèn)題一看就知道不是程序員提問(wèn)的,程序員都知道是怎么回事。一定是一個(gè)外行人的提問(wèn)。
所以,對(duì)外行解釋程序中 Bug ,不能說(shuō)的太專業(yè),我講兩個(gè)故事源碼,外行人看了就明白了。
第一個(gè)故事:為啥你家裝修完了,你總是不滿意呢?
很多裝修過(guò)房子的人都知道,裝修房子的過(guò)程有多辛苦,多操勞,裝修完了總是還有很多不滿意和缺憾。
從交房的那一刻起,你就開始尋找設(shè)計(jì)師(跟設(shè)計(jì)軟件的設(shè)計(jì)師異曲同工),開始根據(jù)你家房子的尺寸和構(gòu)造,朝向和你平時(shí)的生活習(xí)慣,儲(chǔ)藏東西的多少,進(jìn)行房主的需求挖掘,這里相當(dāng)于軟件的產(chǎn)品經(jīng)理。設(shè)計(jì)師根據(jù)你的需求設(shè)計(jì)工程圖紙和設(shè)計(jì)效果圖(這里相當(dāng)于軟件設(shè)計(jì)完了)。你感覺(jué)設(shè)計(jì)的不錯(cuò),好開工,水電工,瓦工,木工,油漆工,開始進(jìn)場(chǎng),根據(jù)效果圖施工(這里的各種工互相配合,互相銜接,相當(dāng)于軟件中的前端和后臺(tái)等工程師敲代碼配合開發(fā))。
施工完了,得有工程監(jiān)理和業(yè)主驗(yàn)收,相當(dāng)于開發(fā)中的測(cè)試。
到這里看起來(lái)很正常,但是,可能水電改的有點(diǎn)瑕疵,少了一個(gè)插座,你不滿意了,可能油漆有的地方涂抹不均勻,你也不滿意了,可能木工打的柜體,磕碰了一點(diǎn),你也不滿意了。這就是程序中的 bug 。
你怎么不說(shuō),裝修不能給我一次性裝修好呢?看看有多少工程銜接,各種工種配合,你能保證一點(diǎn)問(wèn)題沒(méi)有么?生活中處處都有不完美的地方,干什么活有十全十美的東西呢?
你這只是驗(yàn)收(相當(dāng)于開發(fā)中的測(cè)試)的時(shí)候發(fā)現(xiàn)的問(wèn)題,等你真正入住的時(shí)候,真正生活的時(shí)候,可能還會(huì)發(fā)現(xiàn)各種當(dāng)初對(duì)設(shè)計(jì)不滿意的地方,很多東西等真正用的時(shí)候,才發(fā)現(xiàn)當(dāng)初應(yīng)該這么設(shè)計(jì)(這也算 bug)。
第二個(gè)故事:不按常理出牌
你在使用一個(gè)產(chǎn)品的時(shí)候,人家明明有說(shuō)明書,有使用步驟,你作為用戶,就是反著操作,比如:使用高壓鍋的時(shí)候,明明得先放氣,才能掀開鍋蓋,你非先掀開鍋蓋。意外發(fā)生了源碼,嗖一下炸了!這就是程序中的崩潰,屬于大 bug 。
人家設(shè)計(jì)程序的時(shí)候是有一套邏輯和操作步驟的,但是呢,用戶不清楚,就知道瞎按,瞎操作,眾口難調(diào),用戶幾十萬(wàn)的產(chǎn)品,每個(gè)用戶操作流程都不給你按照設(shè)計(jì)的來(lái)操作,就容易導(dǎo)致程序出 bug ,甚至崩潰!你說(shuō)程序員能把所有的情況想到么?
還不是盡量想,想不到的等出了問(wèn)題才能知道,才能修改!
最后,編程哪有想象的那么容易啊!作為程序員,自編程伊始,Bug 就會(huì)如影隨形,因?yàn)樗褪悄愕挠白印ug 就是軟件的影子,和軟件就是與生俱來(lái)的,是不可逃脫的好 CP,有著難舍難分的好感情。Bug 無(wú)處不在,對(duì)于程序員的酷愛(ài),超越程序猿的老婆,它對(duì)于軟件的癡迷,比程序猿還要厲害,即使再牛逼的程序猿也逃脫不了 Bug 的魔掌。