晚上。
已經和王曉雪收拾好了明天需要帶回家的東西之后,葉新晨就打開了曹慶陽發給他的東西。
趁著現在時間還足,所以葉新晨也是準備直接花費一點時間幫曹慶陽給搞定。
打開文件,葉新晨看著這個代碼,陷入了沉思,他陷入沉思的原因不是因為這個修復漏洞很難,相反,很簡單,葉新晨半個多小時就給他修復好了。
他感覺到的只是修改BUG和找BUG那真的是兩個情況。
不過有些人也肯定很疑惑,程出現BUG是必然出現的情況還是程序員水平有限導致的?
這個嘛……仁者見仁,智者見智。
就比如這個——
print(“hello,world.“)
你看,這個“程序”就是沒有BUG漏洞的……
實際上但凡有過一點正式開發經驗的程序員,寫個簡單的helloworld都能寫出BUG的恐怕不多見吧。
別說helloworld了,一個簡單的、不涉及“隱秘”機制的百行小程序,絕大多數資深程序員也可以直接寫成0bug。
因為這些實際上是對計算機的原理深度決定的,比如你對計算原理或者語言機制理解越深,對你來說“隱秘”的東西就越少,寫出高質量代碼的機率就越高。
而且,就像黑土平臺里面的交流板塊哪怕只是在上敲一篇一千個字的灌水文,有幾個可以保證無語法錯誤、無錯別字且標點符號使用正確呢?
尤其這還是在機器替你寫字,使得“提筆忘字”“書寫錯誤”之類錯誤無法存在的前提下:這樣你都不能保證全對……
那么不僅大小寫敏感、而且邏輯更為曲折復雜、容不得半點含糊的計算機程序呢?
因此,有BUG漏洞那真的是無可避免。
當然還有一種情況,你的程序本身是無bug的;但支持環境比較坑……
這種正常來說不算程序bug,當然實踐中,你可能沒辦法坐等OS或者瀏覽器等廠商修改——所以結果就是你只好積極行動起來,在自己的程序里為別人的錯誤擦屁股……
這在業界被稱為workaround:Workaround-Wikipedia。
正常來說,workaround是臨時的,并且,如果不是諸如0day之類特別關鍵、刻不容緩的問題,搞workaround往往是出力不討好的——因為它包含了丑陋,易錯,含糊,難以理解;而且等OS或者瀏覽器等的原始廠商修了它自己的bug,你原本好好運行的workaround往往反而會引起問題。
尤其是,有時候OS或者瀏覽器廠商修復速度比較慢、致使某種workaround反倒成為“主流技術”;那么當“正統”修復方案和workaround沖突時,OS或者瀏覽器廠商往往不得不將錯就錯,以免搗毀那些用了workaround的實現……
這類復雜情況暫不討論,提它主要是為了說明,搞清楚bug的真正發生點是極為重要的。
修不到bug的根源、濫用workaround,度過的是眼前的難關,犧牲的卻是整個項目的穩固性。
類似的,盡量把程序寫的“大眾化”一點,沒有必要不碰新特性,也可以在很大程度上避免“遭遇官方bug”問題——如果你自己理解上再有點偏差,用新特性就和作死無異了。