架構師應該遵守的編程原則

程序員擁有一個較好的編程原則能使他的編程能力有大幅的提升,可以使其開發出維護性高、缺陷更少的代碼。以下內容梳理自 StactOverflow 的一個問題:編程時你最先考慮的準則是什麼?

目錄

KISS(Keep It Simple Stupid)

KISS 原則是英語 Keep It Simple, Stupid 的首字母縮略字,是一種歸納過的經驗原則。KISS 原則是指在設計當中應當注重簡約的原則。總結工程專業人員在設計過程中的經驗,大多數系統的設計應保持簡潔和單純,而不摻入非必要的複雜性,這樣的系統運作成效會取得最優;因此簡單性應該是設計中的關鍵目標,儘量迴避免不必要的複雜性。

這個首字母縮略詞根據報導,是由洛克希德公司的首席工程師凱利 · 約翰遜(U-2 、SR-71 等的設計者)所創造的。雖然長久以來,它一直是被寫爲 “Keep it simple, stupid”,但約翰遜將其轉化成 “Keep it simple stupid”(無逗號),而且這種寫法仍然被許多作者使用。詞句中最後的 S 並沒有任何隱涵工程師是愚蠢的含義,而是恰好相反的要求設計是易使人理解的。

說明這個原則最好的實例,是約翰遜向一羣設計噴射引擎飛機工程師提供了一些工具,他們所設計的機具,必須可由一名普通機械師只用這些工具修理。因此,“愚蠢” 是指被設計的物品在損壞與修復的關聯之間,它們的難易程度。這個縮寫詞已被美國軍方,以及軟件開發領域的許多人所使用。

另外相類似的概念也可作 KISS 原則的起源。例如 “奧卡姆剃刀”,愛因斯坦的 “一切儘可能簡單”、達芬奇的 “簡單是最終的複雜性” 、安德魯 · 聖艾修伯裏的 “完美不是當它不能再添加時,它似乎是在它不能被進一步刮除時實現的”。

有兩種軟件設計方法,一種是儘可能的簡單並保證沒有什麼缺陷。另外一種方式是儘可能的複雜並保障沒有什麼缺陷。而第一種方式相比第二種更加困難。

保持簡單(避免複雜)永遠是你應該做的第一件事,簡單的代碼不僅寫起來簡單、不容易出 Bug,還易於維護。簡單規則下,還包括:

如何把 Kiss 原則應用到工作中?

參考鏈接:

Do The Simplest Thing That Could Possibly Work:

http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html

DRY(Don’t Repeat Yourself)

DRY 即 Don’t repeat

ourself(不要重複你自己,簡稱 DRY),或一個規則,實現一次(One rule, one place)是面向對象編程中的基本原則,程序員的行事準則。旨在軟件開發中,減少重複的信息。DRY 的原則是 “系統中的每一部分,都必須有一個單一的、明確的、權威的代表”,指的是(由人編寫而非機器生成的)代碼和測試所構成的系統,必須能夠表達所應表達的內容,但是不能含有任何重複代碼。當 DRY 原則被成功應用時,一個系統中任何單個元素的修改都不需要與其邏輯無關的其他元素髮生改變。此外,與之邏輯上相關的其他元素的變化均爲可預見的、均勻的,並如此保持同步。

我對 DRY 的理解:

相關規則有: 

代碼複用:http://en.wikipedia.org/wiki/Code_reuse

YAGNI – You ain’t gonna need it

YAGNI 是 You Ain’t Gonna Need It(你不會需要它)的簡寫,是極限編程的關鍵原則。YAGNI 意思非常簡單:僅在您真正需要它們時纔去做,而不是在您認爲或預見將來可能需要它們時就提前做了!

您可以將 YAGNI 視爲即時製造的擁護者。在這種情況下,製造業正在編寫代碼並交付功能。只有當有人真的需求功能存在時,您纔可以開始工作並創建它。否則,您將保持自己的懶惰!

它爲什麼如此重要?沒有編寫的每一行代碼都是時間,因此可以節省金錢。但是,甚至更多!它是:

而且還包括:

它可以防止什麼?如今,大多數軟件開發都是根據客戶的需求進行的。無論您是在產品公司,在提供開發服務的公司還是在其他地方工作。總是會在某處某人想要具有某個功能。是您的客戶要求具有某個需求的功能,還是產品經理響應客戶的反饋的功能。無論實際驅動者是誰,無論是早晚,這都是實際需求的體現。您正確預見未來功能請求的機會非常低。因此,您很有可能實現某些功能,而不是您的實際利益相關者想要的功能。過早地執行某些操作很可能會導致一切都被丟棄。這是一個沒人真正喜歡的場景!然後,有時會發生另一種情況:沒有人真正需要該功能!

Code For The Maintainer

爲維護者編寫程序。比如讓代碼有自解釋的功能。在你編寫代碼的時候永遠記得將來需要維護他。

參考鏈接:
Code For The Maintainer:http://wiki.c2.com/?CodeForTheMaintainer

Be as lazy as possible.

人類因 “偷懶” 而進步。懶惰只是創造了需求。需求本身並不算進步。滿足需求形成了進步。

偷懶還包括:

參考鏈接:

Do The Simplest Thing That Could Possibly Work:

http://c2.com/xp/DoTheSimplestThingThatCouldPossiblyWork.html

Programming is only the road, not the way.

編碼只是一種實現方式,而不是解決方案。編碼只是告訴電腦應該如何去做。要編寫高效、可靠的軟件需要精通算法、最佳實踐等其他與變成相關的內容。

編程前需要先了解你要解決的問題是什麼。編程只是手段並不是目的。能實現並不代表需要實現。知道什麼時候不需要編程或沒有必須要去編程。

If you are in a hurry, stroll along slowly. 

If you really are in a hurry, make a detour.

如果你很忙,那就放慢速度。如果你真的很忙,那就先放一放。這聽起來很愚蠢,但是千萬不要讓自己陷入會導致後期問題的妥協。如果你正在編寫程序的核心部分,儘可能保證精確。如果你在編寫離核心代碼較遠的方法,可以儘可能的加快速度。

Know your path, Neo.

知道你的實現路徑,你需要了解你每天使用的環境、工具及其他依賴的內容,並且把它調試到適合自己的配置。如果你的編程環境真的很好,那麼你編程中的基本不需要關心他。如果你需要完成一項任務,最好的方式是不要引進 “新的內容”,只有當你完全掌握“新的內容” 的時候再去考慮引入。

If it wasn’t tested, it is broken.

如果沒有經過測試的代碼都是不能運行的。

與程序溝通時分辨原因和結果,與人交流時要分辨事實和觀點

相關的準則,包括:

原文鏈接:What do you consider the 1st principle(s) of programming?
http://programmers.stackexchange.com/questions/91527/what-do-you-consider-the-1st-principles-of-programming

參考鏈接:Programming Principles
https://github.com/webpro/programming-principles

作者:錢魏 Way

來源:www.biaodianfu.com/principles-of-programming.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/6zbTfVnyfnFeqwETsH1D-g