Google 軟件工程 - 重寫代碼

Fergus Henderson 是 Google 的資深工程師,他領導著google的 Text-to-speech 開發團隊。過去的十多年來,他在 Google 還開發了編譯工具 Blaze,以及語音識別和聲音操控產品,這些技術和產品是 Siri 的前身。

2017 年 1 月份他發布了一本書,叫做 《Google 軟件工程》,介紹了 Google 公司在軟件開發中的工程方法。

這是一本薄薄的只有 20 頁的書,概要介紹了 Google 軟件工程中的“軟件開發”、“項目管理”、“HR 管理”。其它部分回頭再細說,其中一下子吸引了我的,是“軟件開發”部分的第11節,該節介紹的是 Google 公司如何“頻繁的重寫代碼”。為了便于大家領會,這里附上我的翻譯。

頻繁的重寫代碼

Google 的大部分軟件,每過幾年,就要重寫一遍

這樣做無疑是成本高昂的。確實,重寫代碼耗費了 Google 很多資源。然而,這種做法也帶來了巨大的好處,對于 Google 的能力提供以及長期的成功,可謂至關重要。一般來說,每過幾年時間,產品的需求就會發生巨大的變化。這種變化是隨著產品周圍的軟件環境和其他技術的變化而發生的,而且技術和市場的變化,也影響了用戶的需求、欲求和期望。 用過幾年的軟件,都是在過去老的需求下設計的,其設計思路并不適應當前的需求。還有,老的軟件通常復雜度上升。重寫代碼就能夠降低復雜度,造成復雜度升高的那些歷史包袱是完全不必要的,它們所應對的需求已經不重要了。另外,重寫代碼也是轉移知識的好方法,同時還給新加入的團隊成員帶來主人翁的感覺。這種主人的體驗,對于提高生產率是必不可少的: 當工程師們感到軟件是屬于“自己的”,他們才會投入忘我地開發功能并解決問題。頻繁的重寫代碼還能夠鼓勵工程師在不同項目之間流動,這種流動將多樣化的、新鮮的思想帶到項目中來。 ?頻繁的重寫代碼,也有助于確保代碼所用的技術和方法都是最先進的。

先說這一句:“另外,重寫代碼也是轉移知識的好方法,同時還給新加入的團隊成員帶來主人翁的感覺。” ?

這個說法雷人雷到外焦里嫩。地主家真的有余糧啊! 為了讓收麥子的長工們有主人翁的感覺,干脆燒了裝滿陳糧的倉庫.......這就是有錢人的風格啊,買豆漿要買兩碗,喝一碗倒一碗。

還有這一句:“重寫代碼也是轉移知識的好方法”。 眼前立刻浮現一個場景:開發經理發愁的對部門經理說離職員工的代碼交接工作不順利,部門經理大手一揮說,小鬼啊,思想再開放一些嘛,步子再邁大一些嘛,把代碼重寫一遍就不用交接了。

當然,這些都是開玩笑。代碼重寫一直是個少有人關注、少有人研究的課題。通常,都是產品不成功,或者產品實在老到沒法再用了,我們才會考慮重寫。這都是發揚了我們節約的好傳統,軟件也都是補丁摞補丁鶉衣百結。經常能看到一些軟件產品,已經用了10年,20年都不新鮮。Vb的,Delphi的,開發團隊要小心翼翼的維護那早已停止支持的開發環境。

在軟件產品還能夠運行,甚至運行情況良好的時候,就痛下毒手,行霹靂手段開始重寫,這人心得多狠呢。

這句話:“一般來說,每過幾年時間,產品的需求就會發生巨大的變化。這種變化是隨著產品周圍的軟件環境和其他技術的變化而發生的,而且技術和市場的變化,也影響了用戶的需求、欲求和期望。 ”?

女孩們應該最喜歡這句話,把其中的產品換成服飾看看:“一般來說,每過幾年時間,女士服裝的需求就會發生巨大的變化。這種變化是隨著時尚的環境和其他潮流的變化而發生的,而且市場和潮流的變化,也影響了女士們的的需求、欲求和期望。” Google 就像白富美,一柜子的衣服,每件只穿了一次兩次,馬上就換。常常在早上發愁,沒有合適的“貂兒”來配今天的指甲油。

重寫代碼來降低軟件復雜度,去掉其中無用的那些功能和特性。維護過產品的人,都應該深有體會,看著那疊床架屋的功能和代碼,心里仿佛塞滿了稻草。要查個 Bug,做個調試,那心頭有一萬頭草尼馬呼嘯而過。唉,歧視啊歧視偏見啊偏見,不論是軟件,還是女朋友,程序員們都喜歡簡單、純潔的。帶著心已滄桑、滿腹故事的她去看旋轉木馬,雖然一樣浪漫,但畢竟她已爬不上木馬了。所有的程序員都不愿意維護別人的老代碼,都寧愿重寫.......然后留下自己的老代碼,讓別人發愁。

重寫代碼,較之優化和維護老代碼,區別仿佛革命與改良。在社會層面,人們已經從上個200年的革命熱情中,冷靜下來,認可改良主義,認可保守主義。但是,代碼的社會,與人的社會不一樣,人存在習俗、慣性和新舊利益之爭,而代碼扔掉也就扔掉,沒有舊代碼會抵觸,也不需要做思想工作。可以說,只要你舍得浪費,扔代碼比甩男朋友女朋友容易得多。

Google這樣的大土豪,當然不必考慮成本了,它投資個幾百億美元就跟我們苦逼程序員買個機械鍵盤一樣輕松。但我這樣窮苦出身的程序員,總是對扔掉的代碼、浪費的人月,感到心疼不已。平常吃個飯,都要把米粒扒拉干凈,可想而知,扔掉十萬行還可以運行的代碼,那就跟割肉差不多了。鄉親們那,這是要遭雷劈的啊.....

我覺得,早晚的,科技界會出臺“代碼倫理”或者“代碼法”,用來約束對代碼資源的浪費。就像管理垃圾的《垃圾處理法》......

不過,要想產品好,就不能太小氣。農村老太太用破布爛棉花納鞋底的價值觀和工作方法,并不適合今天的科技界啦。該扔就扔吧,歷史的潮流要向前,女人的衣服要時尚。做不到象Google 那樣土豪,人家每幾年重寫一遍,咱們可以每十年重寫一遍。錢緊張,沒有預算? 那就少喝一碗豆漿,別涂指甲油,也別穿貂,更別去騎旋轉木馬,省下錢來雇程序員。再窮不能窮軟件,再苦不能苦程序員。軟件產品,還是要追求精益求精的。下定決心、排除萬難,團結一心向前看,馬上開始重新寫......程序員們摩拳擦掌好興奮。

只是,重寫后,新的一定比老的好嗎??

全世界的程序員都笑了:好還是不好,那還不都是聽我們的?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,813評論 25 708
  • 先說項目開發過程中團隊人員的分工協作。 一 人員安排 畢業至今的大部分項目都是獨立完成,雖然也有和其他同事協作的時...
    SnowflakeCloud閱讀 10,808評論 3 59
  • 這個人一出現,突然想未來里全部都是他。
    左耳_閱讀 314評論 0 0
  • 冬日偶作 閑書讀罷半壺茶 聽雨還期聽落花 冷眼猶觀人世事 紅塵漠漠度年華
    聽泉閱讀 189評論 0 2
  • 剛剛發生了一件莫名其妙的事,兩個室友因為一件小事互相生氣,現在空氣中尷尬的氣氛越來越強,啊,我仿佛要窒息了,作為此...
    悅心語閱讀 193評論 0 0