軟體開發中的最佳實踐是什麼?

labazhou發表於2015-05-11

  剛才,我在 Pluralsight 網站釋出了一個教程,標題為“促成商業交易的最佳實踐”。(如果你想閱讀、但沒有 Pluralsight 賬號,請註冊右邊側欄中的郵件列表,我將給你傳送一份免費的 30 天訂閱)。這個標題有個不太認真的元素,它在媒介上或許不是必要的最好想法,我這裡的好處是和標題吸引力最大化有著關聯。但是,如果你在笑,生活會更加有趣。

  不管怎樣,它有些不太認真的理由是,我發現“最佳實踐”這個術語在很多語境中是騙人的。最好情況下,它是模糊的、主觀的、和語境高度相關的。本質上,這個課程的目的是,“嘿,如果你認為,你的團隊應該採用 X 實踐,那麼你最好搞清楚在管理上得到純利益的東西——‘最佳’實踐是有利可圖的實踐。”因此,我想可以送出這份教程介紹部分的副本,我在這個部分詳細討論了這個術語。事實上,第一部分稱之為“‘最佳實踐’究竟是什麼?”

  最佳實踐:理想的、真正的和憤世嫉俗的

  我提供的“最佳實踐”【注1】的第一個定義是,某個人或許將其描述為“官方”版本,但是我把它稱作“理想版本”。維基百科對其定義為,“為持續有效地達到企業目標而採取的最成功的解決方案或解決問題的方法,它被用作一種基準。”換句話講,一種“最佳實踐”,多多少少在經驗上驗證過是最好的一種實踐。舉個例子,如果你準備雞肉有三種可能方法:生的、半生不熟、完全熟,那麼根據死亡和疾病的事故次數,完全熟將顯現為一種最佳實踐。我把這種定義稱為“理想”的原因是,它意味著明確地有一種做某個事情的最好方法,現實生活很少如此齊整。拿雞肉的例子。完全熟好於半生不熟,但是並不缺乏完全弄熟雞肉的方法——你能用火烤、用烤箱、用烤爐、有油炸等。任意一條這些方法是經驗上認為的“最佳”、或者它變成了偏愛和看法的一種方式?

  這導致我將輕率地將其稱為最佳實踐的“真正的”定義,我的意思是,這也變成了最被普遍應用的定義。它通常被稱作是做某事的、可接受方式的一種約定,經常為某些標準機構所推崇,比如 ISO 或其它類似的機構。從這個角度看,或許,關於最佳實踐的更好名字可能是“標準化實踐”或“可接受的實踐”。關於這種情況的例子或許是,外科醫生洗手的優先順序要高於外科手術。它是如此地被廣泛接受且被標準化地實踐,以致於那些不遵循此實踐的實習生,會讓人心生反感。洗手相較於不洗手,在病人治療效果方面已經從經驗上被論證為是更好的了。在該領域,外科醫生令人信服地在手術之前洗手,那麼這種洗手是絕對的“最佳”實踐嗎?好吧,這個哲學問題相對於我把最佳實踐稱作“理想的”定義,不是特別重要。重要的是,洗手是有好處的、且廣為接受。

  現在,談談憤世嫉俗的定義。對於很多人來說,“最佳實踐”基本上是一種無意義的漂亮口號,讓一個人的行動看起來比實際情況更重要、更合理、或更正當。我敢肯定,不只是我聽到人們把“最佳實踐”的術語掛在嘴邊,以此評判人們的行動,明顯的是,這種實踐既沒有在經驗上被論證為最好的可能實踐,也沒有受到規範或標準組織的通過。你將經常聽到開發人員把他們解決某些問題的方法談論為一種“最佳實踐”,當他們在高資歷的位置、或控制著組織的技術決定時,就更明顯了。但是,它是一種真正的最佳實踐嗎?或者,他們只是使用這個詞語來避開爭論?

  通過考慮這三種定義,我們可能定義成一種連續統一體。憤世嫉俗版本在最佳實踐術語的使用上,有著最少的可信度,而理想版符合這個術語防彈的用法。這樣,有人把某種實踐定義為“最佳實踐”,如果他不能提供證據,就符合憤世嫉俗版。如果他成功地論證了價值,並建立了一種正當的標準,就符合真正版;如果他或多或少地論證了這種實踐基本上是可能的最佳實踐,就符合理想版。

  軟體開發的“最佳實踐”

  我們已經討論過了“最佳實踐”術語的一些定義了,接下來說一些例子, 它們通常在某種程度上提到了最佳實踐,或者我剛才提到的連續統一體。我打算討論一個小組或組織中的某些具體東東,比如你們的設計師認為,一個小組的“最佳實踐”就是使用她寫的校驗資源庫。我也不打算討論家喻戶曉的、已經定義好的行業實踐。不是這些實踐沒有被一致通過或沒有他們的詆譭,而是多數開發人員貌似看到了採用的潛在價值,即使他們相信,可能地,採用的價值比其成本和麻煩更加重要。換句話說,可能是相信某些東東是最佳實踐,而不是值得這樣做

  下面是軟體開發領域裡的一些例子。

  • 敏捷方法論如日中天。現在整個行業都在致力於幫助公司採用敏捷實踐。
  • 自動化測試幾乎被普遍贊同而作為一種值得讚美的目標。
  • 測試驅動開發或許更多地歸結為有爭議的影響,但是根本就不缺乏那些認為這是最佳實踐的開發人員。
  • 持續整合,相對於倉庫分支的開發,有著大量的合併工作量,很大程度地被視作有益處。
  • 有原始的、所謂的 Gang of Four【注2】物件導向設計模式清單,但是模式清單已經擴大了,超過了這四位作者建議的清單。總之,在策略上使用這些模式被視作為一種最佳實踐。
  • 程式碼審查廣泛被視作是促進程式碼質量的、不可或缺的方法。
  • 結對程式設計把程式碼審查帶到了下個階段,讓開發一直處於連續的審查狀態。
  • 一鍵化自動開發,對於大多陣列織而言,被視作重要目標;與之形成鮮明對比的是,某個勞動力用半天時間,才能讓軟體達到可部署狀態。

  上面的清單不一定是全面的,可能也不是沒有爭議的。你可能認為其中一條或幾條甚至不是優秀的思路。然而,總的來說,這個行業已經朝著一個方向前進,一種背道而馳的視角。不論好壞,這個行業共同認為,這些都是值得達到的目標。

  但是,在共同維護一種優秀思想的利益和曇花一現之間,有一條分界線。在傳統智慧和普遍誤解之間,有一條分界線。該怎樣才能知道這些實踐是真正的優秀思想,更重要的是,該怎樣知道這些實踐對他自己和組織是有好處的?

  喔,這就是本教程的主旨(這裡有個暗示——向錢看)。

  要點

  我是一名軟體開發人員,我可以假設你們很多讀者也是。幾乎可以肯定,你是一名開發人員、一名前開發人員、或與有一定能力的開發人員共事的人。那麼,我們都知道,對於軟體開發人員而言,存在一種自然傾向,他們想在工作中嘗試新東西,並收穫寶貴的經驗。我們都知道,想採用最新的開發實踐、語言、流程和框架的開發人員(因為他們對這樣做有興趣)和想做對他們的組織或專案最有意義的事情的開發人員之間存在著一種天然的緊張局勢。這只是走在該行業中的一條普遍分界線。

  我對本教程的目標非常簡單,是為了幫助你走過在這兩種關注點之間的分界線。我想給你一種方式來看待被行業吹捧為最佳實踐的東東,來鑑別採用這些實踐對你的組織是否有著實際意義。還有,我想給你一種方式,讓你沿著“最佳實踐連續統一體”,從“我想去做因為人們說它好”變成“我們可以公正評判的習俗”,變成理想的、在某種程度上的、“我們這樣做是因為它從經驗上被論證過,要好於其它方法”。

  有了我向你展示的啟發和結構,你可以得出結論,所謂的行業最佳實踐,實際上對於你的團隊或組織沒有意義。不錯,是這樣的。重要的是,你根據可測量的經驗和資料做決定,而不是嘴裡的詞語和猜測。最重要的是要明白,所謂的最佳實踐是否為真正的最佳實踐。


  注1:最佳實踐(best practice),是一個管理學概念,認為存在某種技術、方法、過程、活動或機制可以使生產或管理實踐的結果達到最優,並減少出錯的可能性。http://zh.wikipedia.org/wiki/%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5

  注2:The authors of the DesignPatternsBook came to be known as the “Gang of Four.” The name of the book (“Design Patterns: Elements of Reusable Object-Oriented Software”) is too long for e-mail, so “book by the gang of four” became a shorthand name for it. After all, it isn’t the ONLY book on patterns. That got shortened to “GOF book”, which is pretty cryptic the first time you hear it. http://c2.com/cgi/wiki?GangOfFour

  via:http://www.daedtech.com/what-is-a-best-practice-in-software-development

相關文章