技術債務和技術投資

jopen 8年前發布 | 13K 次閱讀 程序員

英文原文:Technical debt and technical investment

技術債務

技術債務,是軟件工程討論折衷方案時所用到的一種工具。當你遇到技術債務注1時,你就會堆積一些快速、骯臟的代碼,它們更難以維護、或拉低了圖中的效率曲線。隨著時間的推移,和你一開始用正確的方式開發相比,維護快速、骯臟代碼或基礎架構的成本,要更高一些。你能夠感受到此言不虛,因為我畫了一張圖。

技術債務和技術投資

一些人把技術債務的說法用作糟糕的代碼。這不太正確。技術債務是某種原因導致的糟糕代碼。有時候,你用錯誤的方式,以更快地完成工作;有時候更快速地完成,的確重要。當速度的好處超過維護成本或重構糟糕代碼時,你會選擇承擔債務。

技術投資

技術債務的對立面是技術投資注2。對于技術投資而言,你當下放慢速度,是為了將來能夠加快速度。或許你選擇編程語言或 web 框架。你的團隊花時間學習新工具,但是在某種程度上,如果你選擇得當,它們就更有效率。下圖是沒有標數字的手繪圖,它無可置疑地證明了這一點。

技術債務和技術投資

你需要投資

成功的產品,只會變得更加復雜。如果人們喜歡并使用你的產品,你將會增加更多功能和復雜性。對于人們愿意付費的、或大體上在使用的現有功能,是不可能移除掉的。

在最初原型階段,工具和技巧是有生產力的,但是,有時候它會與較大型產品的復雜度發生沖突。如果你在處理復雜度方面不能投入,隨著復雜度的增加,開發速度就會減緩。隨著產品復雜度和團隊成員的增加,技術投資能夠規模化增加你的團隊生產力。

風險

技術債務和技術投資均有風險。如果你低估了維護技術債務、或承擔它所帶來的好處,你的產品在長期收益方面將放慢腳步。如果你高估了技術投資的價值,你在短期內就會減緩進度,而沒有長期加速。

好的技術投資所需條件?

如果你認同了技術投資,接下來的問題就成了「我該如何評判一項優秀的技術投資呢」?其答案可能和普通投資一樣——你做不到的。你可以審核當前情況,并盡量預測未來趨勢,但是,平心而論,這都是臆測。

技術上很難評判,因為我們經常期望看到立竿見影,如果我們看不到,就會放棄。計算機歷史充斥著過早放棄的好思想,但是也長期散落著壞思想。

既然有了這些警告,下面給出一些預示,它們反映出 web 開發團隊中屬于好的技術投資。我不保證全部都是對的。

Elm、PureScript、或其它語言

靜態類型的純函數式編程是一種老思想了,它從未引起主流編程的注意。我認為,它是未來的一種方式,尤其對于客戶端應用程序,更是如此。Elm 注3 和 PureScript 注4 正在解決文化和教育方面的問題,它們阻礙了類似語言贏得主流的使用,我覺得,在未來幾年,它們當中一定會有一種語言贏得廣泛的用戶基數。

可觀察對象

這包括了類似 RxJS注5 的技術、構建于 Cycle.js 之類的可觀察對象之上的框架,還包括在 JavaScript 應用程序里使用可觀察對象來管理狀態和通信的通用實踐。我認為,我們在管理客戶端 JavaScript 方面還沒找到有效的解決方案。可觀察對象貌似成了更好方式的良好選擇。

雇傭和指導初級開發人員

我可能要多談一下這個問題,但是重點在于,人才市場的初級開發人員有著很低的薪水,他們常常為了找到工作而不顧一切。如果團隊或公司能夠和初級開發人員較有效率地協作,并幫助他們成長為高級開發人員,就會在雇傭方面獲得巨大優勢。

技術債務和技術投資

對于技術債務,你把代碼搞得一團糟,隨后需要自己擦干凈屁股。對于技術投資,你預先理順一切,以后你就能更有效率地工作。二者都可以被理智地使用,它們對于保持一種健康的工程師組織和文化也是必要的。

你對技術投資有什么看法?你有一些好的技術投資想法嗎?


Jamison Dance 是 Kuali Co 的一名軟件工程師。他喜歡小貓、讓計算機更聰明、以及孩子們開懷大笑的魔力。他在 http://jamisondance.com 撰文,推ter 賬號 @jergason,GitHub 賬號 jergason。他還是 JavaScript Jabber 網站上的播客。


譯文: 《技術債務和技術投資 》 臘八粥

注釋

  1. 原文注釋翻譯:對于術語「技術債務」,我所能找到的最早的引用來自于 1992 年 Ward Cunningham 寫的文章,地址為:http://c2.com/doc/oopsla92.html。有意思的是,當 Ward 參與一個財務應用程序的工作時,這種想法就產生了關聯。有時候,我們在和軟件完全不相關的領域里,就能找到不錯的比喻。
  2. 原文注釋翻譯:我是在幾個月前和 Randal Bennet 的一次討論時第一次聽到技術投資的。
  3. Elm 是一種函數式語言,可編譯為 HTML、CSS 和 JavaScript。Elm 為函數式反應編程而設計,便于創建高可交互應用。http://www.oschina.net/p/elm 
  4. PureScript 是個小巧而強大的靜態類型語言,可以編譯成 JavaScript。purescript 主要是由 Haskell 和 PureScript 編寫的。http://www.oschina.net/p/purescript 
  5. RxJS 全名 Reactive Extensions for JavaScript,Javascript 的響應式擴展。響應式的思路是把隨時間不斷變化的數據、狀態、事件等等轉成可被觀察的序列(Observable Sequence),然后訂閱序列中那些 Observable 對象的變化,一旦變化,就會執行事先安排好的各種轉換和操作。http://www.w3ctech.com/topic/1298

來自: www.labazhou.net

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!