《Google軟件工程》讀后感

軟件工程的意義在于能夠快速響應(yīng)變化。

1. 前言

只看書名就知道這本書屬于必讀之物,尤其對(duì)于像我這種身處傳統(tǒng)軟件行業(yè)技術(shù)團(tuán)隊(duì)的從業(yè)者 —— 多年經(jīng)歷讓我明白技術(shù)并不是發(fā)展的桎梏點(diǎn),而恰恰相反的是整個(gè)公司對(duì)于規(guī)范化和流程化的重視程度,技術(shù)團(tuán)隊(duì)對(duì)于軟件工程的認(rèn)知以及執(zhí)行情況,才是作為一家軟件公司規(guī)模持續(xù)擴(kuò)大,并且走得快、走得穩(wěn)的關(guān)鍵。

整本書很厚,中版多達(dá)570頁左右,疊加我這么多年也是閱讀了諸如《人月神話》,《構(gòu)建之法》等多本軟件工程經(jīng)典著作,所以雖然書名讓我有著一睹為快的沖動(dòng),但實(shí)際執(zhí)行起來發(fā)現(xiàn)還是步履維艱,隨著年齡的增長(zhǎng),發(fā)現(xiàn)很多時(shí)候?qū)幙伤⑺⒍兑舳疾辉敢饽闷饡尽?/p>

最后想到個(gè)討巧的辦法 —— 把書放在單位,早上8:30 - 9:00的時(shí)間,采用螞蟻搬家的戰(zhàn)術(shù),一點(diǎn)點(diǎn)把這本書給磨下來。

最終歷經(jīng)半年多,終于有了這篇讀后感。

2. 全書印象

有了多本相關(guān)經(jīng)典的鋪墊,以及過往多年來未曾敢放下手上的書籍,所以這本書中的絕大部分知識(shí)點(diǎn)對(duì)于我而言,并不會(huì)感到陌生。

而在翻開這本書之前,我也未曾有過非常高的期待,借著一本有著權(quán)威性的書籍,能夠結(jié)構(gòu)化,系統(tǒng)、全面地了解相關(guān)領(lǐng)域知識(shí),幫助補(bǔ)充完善自己的知識(shí)體系,并且將自己對(duì)于該領(lǐng)域的總結(jié)與業(yè)內(nèi)一流實(shí)踐和理論進(jìn)行對(duì)照。

看到自己平日里搜腸刮肚,反復(fù)迭代的總結(jié)被理論化地總結(jié)并且詳細(xì)解答出來時(shí),就會(huì)感覺這本書買得值。

整本書以二十五章節(jié),從理論、文化、流程、工具三個(gè)方面闡述了三個(gè)基本原則,以及Google對(duì)此的探索,以及當(dāng)前的解決方案:

  1. 時(shí)間如何影響軟件的可持續(xù)性,以及如何使代碼隨著時(shí)間的推移而具有韌性。
  2. 規(guī)模如何影響工程組織內(nèi)軟件實(shí)踐的可行性。
  3. 在評(píng)估設(shè)計(jì)和開發(fā)決策時(shí),一位典型的工程師需要做出哪些權(quán)衡。

3. 部分摘抄

3.1 非職權(quán)影響力

讓組織之外的人去做你認(rèn)為需要做的事情。

關(guān)于這一點(diǎn)在過往讀過的多本書籍中都有談及。這項(xiàng)能力的構(gòu)建需要刻意,需要時(shí)間,需要持續(xù)性地建設(shè)。你需要小心翼翼地培育它,如履薄冰地呵護(hù)它;等待在某個(gè)時(shí)刻,你需要在自身權(quán)力無法覆蓋的范圍外推進(jìn)某些前景尚不明確,但卻是你職業(yè)生涯必經(jīng)之路上的計(jì)劃時(shí),它將是你最大的依憑,而這個(gè)依憑完全取決于你的個(gè)人魅力 —— 非職權(quán)影響力。

3.2 問題分為兩個(gè)領(lǐng)域

對(duì)問題負(fù)責(zé),而不是對(duì)解決方案負(fù)責(zé)。

這種現(xiàn)象在公司中很常見,尤其是在面對(duì)部分不稱職的所謂"高級(jí)人才"時(shí) :

  1. 他總是跟你就眼前的問題細(xì)節(jié)掰扯,你說得稍微深入一些,他就給你往旁邊拉扯,有時(shí)候你真的懷疑他是認(rèn)知不足,還是根本就是故意的?
  2. 你希望他能夠就著眼前的問題,能夠深入研究之后發(fā)展為解決一類問題,借著本次問題對(duì)整個(gè)產(chǎn)品做一次迭代,讓產(chǎn)品的新版本中不再出現(xiàn)類似的問題(不僅是同樣癥狀和原因的同類問題,而且是底層邏輯相似的近似問題都應(yīng)該被杜絕)
  3. 很可惜,滿足這樣要求的高級(jí),甚至資深人才,我這么多年的職業(yè)生涯里所見甚少,這也許與我這上學(xué)期間過于貪玩有關(guān)。

針對(duì)本小節(jié)的解釋,書中使用了兩個(gè)例子:

  1. 針對(duì)Google搜索慢的問題,合格的工程師除了處理延遲癥狀的工作,還需要處理延遲原因的工作。 解決了前者就覺得萬事大吉的,配不上工程師這個(gè)稱謂。
  2. 負(fù)責(zé)一個(gè)問題,而不是一個(gè)解決方案。例如你負(fù)責(zé)的是提供"版本控制"這個(gè)問題的答案,而不是"管理GIT倉(cāng)庫(kù)"這么個(gè)解決方案。

3.3 希望不是一種策略

工作或者生活中,總能夠在事后聽到諸如"我們也是希望把它做好的",“要是XX就不會(huì)出現(xiàn)這個(gè)問題了”。

每次聽到類似的言論,我心中就有千萬只草泥馬奔騰而過,你在這里假設(shè)有個(gè)毛線用?你當(dāng)時(shí)就意識(shí)到了這個(gè)問題,你采取了哪些措施進(jìn)行減緩性規(guī)避,以及做了哪些提前預(yù)警并進(jìn)行了留痕操作。我一點(diǎn)這樣的操作沒看到,而你也只有一個(gè)我跟xx說過這種無法被證偽的論據(jù),我是真的很懷疑你這所謂的高級(jí)職稱是怎么升上來的?

3.4 作為領(lǐng)導(dǎo),你的工作是做那些只有你能做的事情。

這個(gè)建議主要針對(duì)那些剛剛邁上管理崗位的技術(shù)型人才。

他們因?yàn)樽陨砟芰?qiáng)而很容易陷入:
教你怎么做還不如我自己上 --> 下屬?zèng)]有成長(zhǎng)的機(jī)會(huì) ---> 所有的事情都親自上 --> 下屬更沒有成長(zhǎng)的機(jī)會(huì) --> 自己累得半死,下屬還覺得沒有成長(zhǎng)空間。

作為領(lǐng)導(dǎo),最重要的意識(shí)之一就是要學(xué)會(huì)放權(quán)。 你要有"眼睜睜看著下屬把事情干砸"的定力,然后在下屬失敗后再介入告訴他如何才是正確的方式。

作為領(lǐng)導(dǎo),非常重要的一件事就是學(xué)會(huì)將精力放在重要的事情上,而不是緊急的事情上,以下是一些方法來幫助你:

  1. 授權(quán)。將緊急但不重要的事情交給下屬去做。
  2. 安排專門的時(shí)間。定期抽出兩個(gè)小時(shí)或更長(zhǎng)時(shí)間安靜地坐著,只做重要但并不緊急地事情。例如團(tuán)隊(duì)?wèi)?zhàn)略,或者你計(jì)劃如何與周邊團(tuán)隊(duì)開展合作的事情。
  3. 找到一個(gè)有效的跟蹤系統(tǒng)。將TODO LIST負(fù)載從大腦中移出來,大腦是用來思考的,不是用來記憶的。關(guān)鍵是你要嘗試不同的系統(tǒng),并確定什么適合你。

3.5 牛 VS 寵物

這里面有兩層含義:

  1. 前者表示穩(wěn)定性高,不需要投入過多的維護(hù)成本。后者則是一點(diǎn)小事就要死要活,一幅要馬上斷氣的感覺。
  2. 后者往往由個(gè)別工程師完成,所以很容易產(chǎn)生個(gè)人綁定,對(duì)其的質(zhì)疑會(huì)被懷疑是人生攻擊;前者則往往規(guī)模大,且自動(dòng)化完成,不在乎小規(guī)模損失。

3.6 CI/CD是必備品,而不是奢侈品

這句放在頁腳部分的句子真是深得我心。

工作中遇到不少團(tuán)隊(duì),整個(gè)產(chǎn)品迭代過程中,如果沒有演示需求的話,甚至可以一兩個(gè)月都不進(jìn)行一次CICD;還有"因?yàn)槊刻熘恍枰虬淮危源虬臅r(shí)長(zhǎng)一點(diǎn)沒關(guān)系"的論調(diào) —— 我聽到這樣言論的時(shí)候,我是真想當(dāng)場(chǎng)開除這個(gè)貨 —— 不是每天只需要部署一次,是每天只能部署一次,就是因?yàn)槟阊景汛虬龅眠@么慢,導(dǎo)致了每天只能打包一次,倒果為因,你小子是何居心?你是認(rèn)知不夠還是故意的?前者是能力問題,后者更嚴(yán)重 —— 態(tài)度有問題。

"必需品"是什么意思?就是如吃飯喝水一樣。不是正在做,也不是馬上開始做,更不是計(jì)劃要做,而是產(chǎn)品被立項(xiàng),開始編碼那一刻起,就應(yīng)該同步進(jìn)行。

3.7 一個(gè)組織長(zhǎng)期成功的關(guān)鍵

  1. 任何一個(gè)組織長(zhǎng)期成功的關(guān)鍵始終在于它能夠?qū)⑾敕ūM快付諸實(shí)施并交到用戶手上,并對(duì)用戶的反饋?zhàn)龀隹焖夙憫?yīng)。
  2. 不要讓"發(fā)布成功"成為一個(gè)高度人工參與且勞動(dòng)密集的工作。這一點(diǎn)在中小規(guī)模的傳統(tǒng)軟件行業(yè)非常普遍。每次發(fā)布都如臨大敵,需要大量的前置準(zhǔn)備時(shí)間,稍微一點(diǎn)預(yù)期之外的事情發(fā)生將直接導(dǎo)致加班,甚至延期現(xiàn)象的出現(xiàn)。
  3. 頻繁發(fā)布使得每次變更的內(nèi)容少,從而更容易定位和解決問題。
  4. 更快就是更安全。理由同上。
  5. 運(yùn)行處理程序的成本不應(yīng)該比編寫處理程序的成本高。 這一點(diǎn)真是戳到我過去這兩年的痛楚了。

3.9 簡(jiǎn)單的事情要簡(jiǎn)單處理,復(fù)雜的事情要盡可能簡(jiǎn)單化。

形成鮮明對(duì)比的是現(xiàn)實(shí)工作中,不少秉承著"簡(jiǎn)單的問題復(fù)雜化",以此增加個(gè)人職位的不可替代性的騷操作。

3.10 可持續(xù)性的思想是軟件工程的核心。

產(chǎn)品決策時(shí)候要謀長(zhǎng)遠(yuǎn)。

即使迫于眼前形勢(shì),必須選擇那個(gè)短視的選項(xiàng),那也應(yīng)該是在取得共識(shí)的情況下,留下足夠的痕跡,讓后來者知曉當(dāng)時(shí)為什么這么做?而不是滿眼的糊涂賬,一切只能歸結(jié)于歷史原因。

如此,才能算得上高級(jí)工程師。

3.11 可訪問性

對(duì)于需要團(tuán)隊(duì)內(nèi)部知曉的信息,應(yīng)該放在一個(gè)公共的位置,其他人可以通過非常便捷的方式訪問到 —— 比如瀏覽器。

以上其實(shí)是我個(gè)人對(duì)這個(gè)名詞的解釋。職業(yè)生涯里我也確實(shí)發(fā)現(xiàn)不少團(tuán)隊(duì),你說它諱莫如深,藏著掖著吧,你問它問題它也如實(shí)相告,但就是與它們合作的時(shí)候,每次出現(xiàn)點(diǎn)什么問題,都能夠給你搞成會(huì)診,剛討論兩句話,就得拉進(jìn)來另外一個(gè)人,因?yàn)橹挥羞@個(gè)人才知道這部分信息,而且這部分信息團(tuán)隊(duì)其他成員是無法知曉或者在知識(shí)庫(kù)里找到的。

3.12 精力管理

這本來是書中最開始部分的內(nèi)容,我特意放在了最后。

  1. 享受真正的假期。周末不是假期。至少花三天時(shí)間"忘記"你的工作,至少花一周時(shí)間來徹底恢復(fù)精力。這里的意思是你要徹底斷開工作的聯(lián)系,讓自己全身心投入到假期中
  2. 讓切斷聯(lián)系變得輕而易舉。 將電腦留在辦公室,不要將工作手機(jī)帶在身邊。
  3. 享受真正的周末。雖然周末不等于假期,但思路是一樣的 —— 徹底斷開與工作的聯(lián)系,這樣的"充電"才會(huì)起作用。
  4. 白天小憩。大腦是以90分鐘為周期在進(jìn)行運(yùn)轉(zhuǎn)。你也要遵循這個(gè)生理規(guī)律,每個(gè)間隙里花10分鐘做下簡(jiǎn)單的熱身運(yùn)動(dòng) —— 比如散戶什么的。
  5. 如果發(fā)現(xiàn)當(dāng)天無理由地情緒低落,那就給自己放一天假吧。不要為此有心理負(fù)擔(dān)。

4. 后記

長(zhǎng)達(dá)半年多的閱讀時(shí)長(zhǎng),等到寫下這篇筆記的時(shí)候,其實(shí)能夠留在腦海里的概念基本也沒剩下多少了,本篇其實(shí)更多是留給未來的自己一個(gè)錨點(diǎn) —— 自己曾經(jīng)完整地讀完這本著作,以及里面的關(guān)鍵信息有這些。

如果你之前沒有過相關(guān)的理論知識(shí)儲(chǔ)備,而當(dāng)下或主動(dòng)或被動(dòng)來到了一個(gè)團(tuán)隊(duì)管理者的角色,那么非常推薦這本書,它會(huì)是你一個(gè)非常好的起點(diǎn)。

5. 相關(guān)

  1. Software-Engineering-at-Google
  2. 走出軟件作坊 - 文集 - 簡(jiǎn)書
  3. 《精益產(chǎn)品開發(fā)》讀后感
  4. 《構(gòu)建之法》讀后感
  5. 《走出軟件作坊》讀后感
  6. 《人月神話》讀后感
  7. 《進(jìn)化——從孤膽極客到高效團(tuán)隊(duì)》讀后感
  8. 《精力管理》讀后感 - 簡(jiǎn)書
  9. 帕金森瑣碎定理 --- 大型組織會(huì)花費(fèi)大量時(shí)間在討論無關(guān)緊要的瑣事,但是真正重大的決議反而可以輕松過關(guān)這種現(xiàn)象。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容