11 條程式設計經驗分享

2021-09-14 05:39:35 字數 2144 閱讀 8317

1. 從小事做起,然後再擴充套件

無論是建立乙個新的系統,還是在現有的系統中新增新的功能,我總是從乙個簡單到幾乎沒有任何所需功能的版本開始,然後再一步一步地解決問題,直到滿意為止。我從來沒有妄想過能夠一步登天。相反,我一邊開發一邊學習,同時新掌握的資訊還可以用於解決方案中。 我很喜歡 john gall 的這句話:「複雜系統總是源於簡單系統的演化。」

2.一次只做一件事

當我們在開發時,碰到測試失敗和功能無效的情況,如果你一次只研究乙個問題,那將會更容易找到問題的關鍵。換言之,就是使用短迭代。必須確保這個問題解決之後,再轉移到另乙個問題上。這適用於向下提交。如果在你新增新功能之前需要先重構**,那麼先提交重構,然後再新增新的功能。

3.盡早地新增日誌和錯誤處理

在開發新系統時,我做的第一件事就是新增日誌和錯誤處理,因為這兩者從一開始就非常有用。對系統來說它比一大把**更有用,你需要一些了解程式狀態的方法。如果系統不能照常工作,那麼你就需要知道程式中發生了什麼——這是日誌的作用。錯誤處理也是如此——錯誤和異常越早處理越好。

4.每一行新**必須至少執行一次

在你真正完成乙個功能之前,你必須對它進行測試。不然,你怎麼知道它是不是按照你的想法在執行呢?通常情況下,最好的方法是通過自動測試,但並非總是如此。不過,不管怎麼說,每一行新**必須至少執行一次。 一般,我們想觸發某種條件很難。但幸運的是,我們可以作弊。例如,資料的錯誤處理可以通過臨時拼寫錯乙個列名來觸發。或者,乙個if語句可以暫時顛倒過來(從 if error 變成 if not error),這樣來觸發那些平時很難觸發的條件,這樣只是為了確定**是否正常執行和它會出現什麼結果。有時,我發現有一些行**永遠都不會被執行。當我們做**檢查是它看起來沒有什麼問題,但就是不工作。你要避免這樣的尷尬狀況,如果你想你的每一行新**都會被執行。

5.在整體測試之前先進行模組測試

先進行部分模組測試可以節省時間。通常說來,我們在整合不同的模組時也會出現問題,例如模組之間的介面不匹配。但是如果我們能夠信任各個元件的話,那麼跟蹤整合問題就會變得簡單得多。

6.所有事情所花費的時間總是比你預期的要長

特別是在程式設計中,即使一切進展順利,我們也很難對功能所需的時間做出正確的預算。並且,開發軟體時碰到各種意想不到的問題是非常常見的。乙個簡單的合併操作會導致一系列小bug,一次框架公升級意味著一些函式必須改變或者一些api不按照你想象的那樣工作。

hofstadter law( 霍夫施塔特定律)其實道出了真諦:做事所花費的時間總是比你預期的要長,即使你在預期中已經考慮了 hofstadter law( 霍夫施塔特定律)。

7.先了解現有的**

大多數的編碼都需要以某種方式改變現有的**。即使是新功能,也需要適應現有的程式。所以,在你加進去新的內容前,首先需要了解當前的解決方案。否則,你一不小心就很有可能會打破現有的功能。這意味著,閱讀**和編寫**都是必要的技能。這也是為什麼看似微小的變化仍可能需要很長時間才能解決的原因之一,因為你首先必須了解上下文。

8.閱讀和執行**

幸運的是,對於理解**,我們有兩種互補的方法。你可以閱讀**,也可以執行**。執行**的確是個非常棒的好方法。所以,請確保充分利用這兩種方法。

9. bug總是難免的

10.解決故障報告

每個開發人員都應該花時間去處理來自客戶的故障報告,並修復bug。這能讓你更好地理解客戶的意圖,明白如何使用系統,知道排除故障的難易程度,了解系統的設計情況。這也是為自己的開發成果負責的好方法。不要錯過這些好處。

11.重現問題

修復bug的第一步就是重現問題。然後你得確保修復之後,問題能夠徹徹底底地消失。這樣乙個簡單的規則,可以確保你不會誤將非問題當作是問題,並確保解決方案真的能夠奏效。

分享20條程式設計經驗

編者按 原文作者喬納森 丹尼可 jonathan danylko 是一位自由職業的web架構師和程式設計師,程式設計經驗已超過20年,涉足領域有電子商務 生物技術 房地產 醫療 保險和公用事業。正如喬納森在文中所言,本文適合剛畢業的大學生和剛入門的程式設計師。如果你已是高階開發人員,或許你能在本文中...

C 程式設計經驗分享

程式的時間效率是指執行速度,空間效率是指程式占用記憶體或者外存的狀況。全域性效率是指站在整個系統的角度上考慮的效率,區域性效率是指站在模組或函式角度上考慮的效率。規則1 不要一味地追求程式的效率,應當在滿足正確性 可靠性 健壯性 可讀性等質量因素的前提下,設法提高程式的效率。規則2 以提高程式的全域...

C 程式設計經驗分享

1.不要在建構函式中做初始化操作 要求類 尤其是對外介面類 提供init 函式,在該函式中進行相關初始化操作,初始化失敗能夠返回錯誤碼。可以規避問題 建構函式中難以返回錯誤碼,外部呼叫者無從判斷初始化結果。當該類作為全域性變數使用時,構造函式呼叫發生在main 函式執行之前,出現問題難以追蹤。2.所...