讀《構建之法》第四章 第十七章有感

2022-03-20 15:13:00 字數 3682 閱讀 2771

書是我們永遠的朋友

它陪伴我們走過人生的春夏秋冬

在我們的生命中生根、發芽、枝繁葉茂

書是人類發展的錄影機

我們可以在其中看到前輩的足跡

書是知識的海洋

我願是一葉輕舟,載著理想之帆

在海面上蕩漾

它蘊含著祖祖輩輩的希望和嚮往

我依然本著認真地態度,希望通過閱讀能對結對專案有一定的了解和認識基礎。所以連續閱讀五天,有很大收穫。在最初也沒有什麼問題,自己覺得鄒欣老師寫得非常好,可是閱讀三遍之後也有了問題,現在提出來分享給大家,一起討論學習。

查閱部落格1,得知:斷言是一種讓錯誤在執行時自我暴露的簡單有效實用的技術。它們幫助你較早較輕易地發現錯誤,使得整個除錯過程效率更高。使用斷言的最大好處在於,能在解決錯誤的發源地發現錯誤。

斷言是用來發現執行時刻錯誤的,發現的錯誤是關於程式實現方面的。斷言中的布林表示式顯示的是某個物件或者狀態的有效性而不是正確性。斷言在條件編譯後只存在於除錯版本中,而不是發布版本裡。

斷言不能包含程式**。

斷言是為了給程式設計師而不是使用者提供資訊。

我在了解了斷言的基本內容後,明白用斷言是自動發現許多執行時產生的錯誤,但斷言不能發現所有錯誤。

斷言是用來揭示錯誤的,而不是用來糾正執行時刻錯誤的。斷言檢查的是程式的有效性而不是正確性,可通過斷言把錯誤限制在乙個有限的範圍內。同時注意一點,如果你的程式是防禦性的,記得使用斷言。如果你使用斷言,也別忘了防禦性程式設計。這兩種技術最好結合在一起使用。斷言驗證的是正確性,驗證方式是通過簡單製造柵欄的方法,讓問題自己暴露出來,從而實現檢驗正確性。所以採用斷言,就是明確了斷言是什麼,有什麼特徵,並且如書中所言,在明確肯定某事時,就採用斷言。

assert巨集的原型定義在assert.h中,其作用是如果它的條件返回錯誤,則終止程式執行。示例**如下:

#include "assert.h" 

void assert( int expression );

在除錯結束後,可以通過在包含#include 的語句之前插入 #define ndebug 來禁用assert呼叫,示例**如下:

#include 

#define ndebug

#include

使用斷言的幾個原則

使用斷言捕捉不應該發生的非法情況。不要混淆非法情況與錯誤情況之間的區別。

使用斷言對函式的引數進行確認。

在編寫函式時,要進行反覆的考查,並且自問:「我打算做哪些假定?」

當進行防錯性程式設計時,如果「不可能發生」的事情的確發生了,則要使用斷言進行報警。

把斷言看作一種簡單的製造柵欄的方法,這種柵欄能使錯誤在穿過自己時暴露。

檢查函式的輸入

檢查函式的輸出

檢查物件的當前狀態

堅持邏輯變數的合理性和一致性

檢查類中的不變數

因為我們對斷言的認識程度不夠,其實,在專案完成中斷言是乙個很重要的部分。我認識到它的意義,便會關注它。注意一點,assert只有在debug版本中才有效,如果編譯為release版本則被忽略。

使用assert,在理論上,用製造柵欄的方式,暴露錯誤,檢查輸入輸出、狀態、合理性以及不變數;在操作上,首先,

判斷自己是否開啟斷言,如果開啟斷言,則會呼叫斷言語句。然後,開啟斷言:開啟run->run configurations,argument並設定-ea(開啟斷言:-ea,關閉斷言:-da以及刪除:-ea)。最後再測試一下,如果返回true就表示成功了。

當突破先階段後,你又會有什麼訴求。我認為,我們沒有必要總是全身心投入,偶爾做做旁觀者和參與者也是可以的。沒有任何一項工作值得一直全身心的去做,不是所有的工作都值得全身心的投入,甚至不是所有的工作都值得去做。而這一切,都取決於,你想要的是什麼。但是當你下定決心做一件事情時,無論那件事情是什麼,在做那件事情的時候就一定要全身心的投入做這件事情。但是這和一直全身心投入做一件事不是乙個概念,因為你主觀的「一直投入」和實際的「一直投入」不是相等的。在實際中沒有人可以100%投入一件事。但是在思想上卻可以一直投入,也是必要的,一本心理學的書中也得到這樣的結論:專心致志可以忘掉自我,忘掉疲勞,增加時間的持續性,提高效率。

查閱書籍,得知:

閱讀完第十七章我知道了領導力、績效 管理辦法、團隊成長階段和道德規範的基本要求,但是仍然對實現這些「正名詞」的真實意義理解不足。所以提出為啥要講人、績效和職業道德的問題,希望自己深入思考收穫更多。

愛因斯坦的話,激盪著我的心靈,說得很好。首先,專業知識可以讓我們有生存的保障,是績效的條件;其次,職業道德可以讓我們保持良好素質修養的個人形象;但是,他們都不滿足我們生活的全部;所以,我們要追求的是什麼?擁有績效和職業道德的真實意義又是什麼?其實,我們追求的是一種自然,辨別自己是否需要績效,需要職業道德。當我們選擇「需要」這個動詞的時候,我們就是站在真善美的立場,追求著我們心中的自然。每個人心中的自然都不同,我的心中,自然除了外界需要我擔當的角色(如:高績效,良好職業道德),更多的是體現在我自己的辨證領悟中。例如,在《乙個程式設計師的生命週期》中,主人公的辨證領悟令我折服。他說人的一生,不知道要遇到多少坎坷和磨難。很多事情都是在無法預料中發生。而他樂觀從容,選擇堅強。還有,「我們曾如此渴望命運的波瀾,到最後才發現,人生最曼妙的風景,竟是內心的淡定與從容。我們曾如此期盼外界的認可,到最後才知道,世界是自己的,與他人毫無關係。

」——楊絳《一百歲感言》。楊絳作家的感悟好似追求自然,獨韻深長。

總之,我們在任何立場和時機(如:績效,職業道德)都要保持一顆追求自然的心,還要充滿辯證的領悟。

每個人都有潛在的能量,我們都需要去挖掘。沒有天生的信心,只有不斷培養的信心。想法決定行動,行動決定結果。多閱讀,多思考,多寫筆記、總結,是一件我們切實可做且有意義的事情。所以我選擇去做,也認真去做,心裡接受,然後一切便水到聚成。

1   錯誤處理技術學習

2   斷言(assert)的用法

讀《構建之法》第四章 第十七章有感

問題1 程式各方面的質量只取決於水平較高的程式設計師麼?引用 在結對程式設計中,因為有隨時的複審和交流,程式各方面的質量取決於一對程式設計師中各方面水平較高的那一位。結對程式設計在我看來是一種合作,對於實力的不均勻,讓我想起來了短板問題的故事。所以對於書中提到的程式的質量取決於更高水平的程式設計師,...

《構建之法》 第四 第十七章

第四章,主要內容為講述兩個程式設計師 從作者大篇幅講述 規範等內容來看 應該是把大部分閱讀此章的讀者看作基礎的程式設計師了 如何合作。這章我在看完之後分了兩個板塊 交流 與 合作交流 交流 主要就是向讀者傳授如何碼出讓別人看的懂的 規範啦,風格規範等內容 合作交流 部分則是更進一步的向讀者闡述兩個合...

讀第四章及第十七章之後的思考

讀第四章及第十七章之後的思考 第四章我在讀了p69頁中寫 函式最好有單一出口,為了達到這一目的,可以使用 goto 只要有助於程式邏輯的清晰體現,什麼方法都可以使用,包括 goto 我的問題是 我一直腦海裡對goto就沒什麼好印象,覺得 goto 是不可以出現在 裡的,這讓我很矛盾與疑惑。不過在群裡...