Udacity除錯課筆記之簡化的哲學思考

2021-06-18 14:24:56 字數 2249 閱讀 2823

乾貨無幾,水文續之。

嗯,作為乙個完全沒有哲學概念的人來說,寫這麼一篇筆記,那絕對比水文還水了。

接上一回簡化失敗,我們用delta

除錯法從大堆沙子輸入中淘到了,呃,炸藥。這些輸入放到熔爐裡,炸藥就會**,所以我們需要學會使用

delta

自動地完成沙中淘炸藥的過程。

從哲學的抽象層次來看,這堆炸藥就是**的起因(cause)了。

嗚,zeller

教授不是這麼說的,照剛才那麼一說就一點問題都沒有了。

zeller

說的是,

delta

除錯法不只是簡化了輸入——從沙子中淘到炸藥,關鍵的是這些簡化後的結果就是失敗的起因。這就是哲學上的理解。而問題就是為什麼這些簡化後的結果就是起因呢,為什麼delta除錯法這麼厲害,一來就找到失敗的起因呢?

算起來,起因這個東西,沒吃過豬肉還沒見過豬啊——這年頭可能還真有人沒見過豬跑,只見過豬肉了吧,但還是要有個比較準確的定義。

哲學上的因果(causality)

關係可能有點不太直觀。哲學中的起因(

cause

,原因)定義為:

如果存在a,b

兩個事件,a在

b前,所謂

a 引起

(cause) b 

,就是如果

a沒有發生,則

b也不會發生的情況。

zeller教授舉的是球打爛玻璃這個事件。讓我想到快樂大本營某一期,應該是最近一次宋茜來的那期中,維嘉和何炅的心有靈犀第一題就是打爛玻璃,維嘉急得直叫「臣妾做不到」

扯遠了,話說有一些哲學家都置疑因果的存在——物理上,相對論挑戰了很多直觀的時間認知,但是因果關係上好像還是沒有挑戰。既然哲學家自己都置疑因果的存在了,為什麼還要講因果、起因,這個在除錯中很有用嗎?

答案是噎死!就像我自己舉的從沙子中淘炸藥一樣,炸藥會引起熔爐**,這一點很明顯,但假設這些炸藥長得跟沙子像近親一樣(顆粒炸藥嗎),就不知道是哪些「沙子」會**了。

太陽當空照,花兒對你笑,小鳥說早早早,這些跟你背上炸藥包有關係嗎?所以delta

除錯法就會把沙子(無關項)全部過掉,只留下炸藥(有缺陷項),而這些有缺陷地方就是程式失敗的罪魁禍首了。

最後,起因加強版重磅推出——實際起因(actual cause)

。可能應該要有個更規範的中文術語來代表才好。

為什麼會有實際起因這個概念?因為通用的起因會有一些誤導作用,比如說,

把mozilla

瀏覽器弄趴下了,那不用

mozilla

了唄,要麼,這家公司就不要成立,這個產品不就沒有了嗎?這些說話聽起來很荒謬,但不得不說,還真符合前面的起因(

cause

)的哲學定義。所以,就需要更加準確的實際起因這個概念了。

何謂實際起因:

an actual cause assumes and change as little as possible, yet changes the effect.

實際起因除了改變特定的結果——程式失敗的結果,其他影響會盡可能小。也就是***盡可能小。不要怪我,那個assume我確認不了。

delta

除錯法所實現的正是找到了實際起因——從紛繁複雜的背景中,找到了錯誤的實際起因——輸入中的乙個很小的子集,子集裡面每個元素、每個項、甚至每個字母都跟錯誤的產生有關。所以delta除錯法才這麼厲害,成為zeller教授的代表作了。

最後的最後,我們已經從delta

除錯法得到了實際起因的輸入了,要開始修復程式的缺陷了。在修復程式的缺陷時,要確認這個缺陷是否滿足兩點:

1、它是個錯誤。讓我想到了鄭愁予的《錯誤》,可惜我不是文藝青年,一向覺得那詩實在是無聊+八卦的典範。

2、是它引起了程式的失敗。

它得是個錯誤,我們才知道如何去修復它。就拿引起mozilla

瀏覽器崩潰的、由

delta

除錯法從

800行**中挑剩下的

標籤來說吧。這個標籤引起了錯誤,但它本身卻不是個錯誤,首先它語法是對的,其次再怎麼也不該把瀏覽器給弄趴下了。所以

delta

除錯此時返回的實際起因

是乙個導火索,真正「潛伏」在人民內部的還是**中的缺陷,不過我們此時很容易知道缺陷是什麼了,就是

mozilla

瀏覽器中處理

select

標籤的那段**。

它引起了程式的失敗,這樣在我們修復了它之後,程式才不會再度失敗,最起碼不會再出這個錯。

水文筆記一篇送上。

Udacity除錯課第五單元錯誤重現

定義 為什麼需要重現 對執行過程進行觀察,按需試驗,才能將缺陷隔離出來。只有能將錯誤重現,才能證明最終修復了這個漏洞。分類 以下錯誤好像都來自物理學 波爾錯誤 a repeatable bug one that manifests reliably under a possibly unknown ...

JS學習筆記(四)之除錯

使用控制台檢查變數值 console.log 使用 type of 檢查變數的型別 console.log typeof 輸出 string console.log typeof0 輸出 number console.log typeof 輸出 object console.log typeof 輸...

6 21(2)課堂筆記之String

string類有以下構造方法 string 建立乙個內容為空的字串物件 空串 string string value 按字串引數建立字串物件。string char value 按字元陣列引數建立字串物件。string byte value 根據本地平台預設的字元編碼,按位元組陣列引數建立字串物件。...