《除錯九法》讀書筆記

2022-06-02 22:27:08 字數 1787 閱讀 2161

《除錯九法》

讀書筆記

婁雨禛pb16060356

理解問題本身,遠比解決問題更加重要

「人們想要掌握本書中的所有有用知識也並非完全不可能,事實上我就是盡全力這樣做的。」

——福爾摩斯 《殺人的五個橘核》

我們總是驚嘆福爾摩斯的能力,將其歸於驚人的天賦。殊不知驚人的天賦總是扎根於辛勤的努力,辛勤的努力總是體現在日常一點一滴的積累。

拋開**中虛幻的情節,回到我們的主題。我們所得出的結論是,盡我們所能地去深入地了解問題本身,得到的收穫將超出想象。這個道理在軟體工程之中尤為體現。

「理解問題本身」要求我們,在遇到每乙個新的系統時,先去全面了解它——了解為什麼會有這麼多系統問題發生,了解是怎樣的構造和原理導致了問題的發生。而備受初高中老師推崇的「快速解決問題」的能力,則被列為下等。其原因很簡單:不理解問題,何談解決問題?即使解決的,也一定是不徹底的解決,不能保證以後不會再次發生。

「求源」精神「遍歷」精神,是每一位優秀工程師都具有的良好品質。看重問題本身的他們,總是在面對各種棘手時顯得更加從容——是他們追著問題跑,而不是問題牽著他們的鼻子走。

引發失敗

這是乙個逆而行之的過程。想要成功,我們先引發失敗,而在摸清失敗的根源之後,創造出成功。這個道理是不難理解的。然而,我們怎麼引發失敗,尤其是引發對成功有益的失敗?

但如何才能讓他失敗呢?一種簡單的方法是進行一次內部預演,還有一種同樣有效的方法是演示給未來的投資者。如果碰巧沒有客戶或投資者在現場,那麼你就必須設法正常使用,並觀察它是如何出錯的。

我們往往需要遵循下面的流程,來將「引發失敗」這個過程變成一次有趣且成效滿滿的探索。

回到開始從最初的源頭開始,而不是從某個看似無錯的中斷點開始,進行下一步的查錯。

模擬失敗發生的場景每乙個失敗都有其發生的原因,但當我們了解它之前,它是隱藏的。我們如果要到達這個失敗,就要通過各種途徑去趨近失敗。而模擬失敗發生的場景,就是一種首要的途徑去趨近失敗。

初學者往往會將「引發失敗」和「模擬失敗」混淆。書中講到很多例子去說明這個道理,而在此處,我對兩者的區別做乙個總結。

引發失敗通過模擬失敗發生的場景,在不知道失敗本身機理的情況下,讓失敗再次發生。

模擬失敗通過某種人為的而非原程式本意的方式製造表觀相同的失敗。這往往是一種拙劣的模仿,為達到失敗而製造失敗,為實現失敗的表象去製造失敗,而不是去將失敗作為出發點,尋求程式中導致失敗的漏洞。

仔細觀察失敗

你必須能看到失敗。如果它不是每次發生,那麼就必須忽略掉不發生的時候,而在每次發生時觀察它。關鍵是在每次執行時捕捉相關的資訊,以便在發生失敗之後檢視這些資料。方法就是讓系統在執行的時候盡可能多地輸出資訊,並把它們記錄到「除錯日誌」中去。

很多人在面對失敗時都會過度相信自己的直覺,認為這個失敗就是處於「某某原因」。也許,這個失敗確實被修復了,但這種可能性非常小。更多時候,它只是乙個表面上被修復的假象,即修復的是表層的現象而不是現象背後的本質。

仔細觀察失敗,就是要盡量避免自己直覺的干擾,讓客觀事實盡可能公正地展現在自己的面前,從而使下一步的判斷更加準確。這個過程往往讓初學者覺得重複和無意義,但如果堅持著去做,一定會避免將來數不勝數漏洞的發生。正所謂「欲進先退」、「欲擒故縱」,這是一種全域性的把控能力在每個細節的展現。

effectiveC 讀書筆記(九)

9.雜項討論 miscellany 1.嚴肅對待編譯器發出的警告訊息。努力在你的編譯器的最高 最嚴苛 警告級別下爭取 無任何警告 的榮譽 2.不要過度倚賴編譯器的報警能力,因為不同的編譯器對待事情的態度並不相同。一旦移值到另乙個編譯器上,你原本倚賴的警告資訊有可能消失 1.c 標準程式庫主要機能由 ...

第九周讀書筆記

這週我的閱讀書目是 程式設計匠藝 像大多數有關書目一樣,該書從圍繞著如何編寫優美的 進行了討論,我著重看了書中關於防禦性程式設計和 優化兩個部分,這兩個部分也是我們在該課程中可以說是最主要的兩個方面。1 關於防禦性程式設計 用書中一句讓人覺得可笑卻又不得不認同的話引入,就是 所有你覺得有可能出錯的地...

《時間投資法》讀書筆記

時間投資法 勝間和代 推薦 5星 時間管理的關鍵並不在於提高要做的事的效率,而在於確定不該做的事。1.首先是時間投資的概念,之前接觸到的書,談的都是時間管理,如何有效的管理時間,提高生產效率,而本書卻將時間視作一種資產,用於投資。全書灌輸的一種觀念也正是投資,如何投資時間,才能使收益最大化。因為有了...