本書以Facebook(Meta)等硅谷企業(yè)的研發(fā)經(jīng)驗(yàn)為背景,結(jié)合作者17年的研發(fā)經(jīng)驗(yàn),講解了如何實(shí)現(xiàn)個(gè)人和團(tuán)隊(duì)的高效研發(fā)。
全書主要從以下5個(gè)方面對(duì)硅谷的高效研發(fā)方法進(jìn)行了總結(jié),提供了非常系統(tǒng)的指導(dǎo)原則和實(shí)踐指南。
(1)研發(fā)效能綜述
主要了講解研發(fā)效能的定義、模型,以及研發(fā)效能度量的正確方法。希望借此幫助讀者梳理出研發(fā)效能的主脈絡(luò),構(gòu)建一幅清晰的知識(shí)圖譜。
(2)個(gè)人高效研發(fā)實(shí)踐
主要講解如何提高個(gè)人研發(fā)效能,具體涉及深度工作、Git、命令行、VIM、工具環(huán)境集成等內(nèi)容,旨在幫助讀者提高技術(shù)的專精程度和持續(xù)成長。
(3)研發(fā)流程優(yōu)化
主要講解研發(fā)流程優(yōu)化的基本目標(biāo)和原則、代碼優(yōu)化、分支管理、DevOps、團(tuán)隊(duì)協(xié)同等,希望幫助讀者深入理解研發(fā)過程中的關(guān)鍵流程,以及流程優(yōu)化的基本原則,從而能夠針對(duì)自己的實(shí)際情況,找到合適的工程實(shí)踐,讓軟件開發(fā)的整個(gè)流程更加順暢、高效。
(4)團(tuán)隊(duì)高效研發(fā)實(shí)踐
主要講解團(tuán)隊(duì)高效研發(fā)實(shí)踐過程中各關(guān)鍵步驟的高效工程方法,內(nèi)容涉及研發(fā)環(huán)境搭建、代碼審查、合理處理技術(shù)債、開源利弊分析、測(cè)試等,同時(shí)對(duì)研發(fā)流程及工程方法的趨勢(shì)進(jìn)行解讀,希望幫助讀者掌握這些具體工程方法的正確使用。
(5)管理和文化
系統(tǒng)分析了硅谷研發(fā)團(tuán)隊(duì)的管理和文化,尤其是Facebook的工程師文化,并根據(jù)作者在國內(nèi)公司的具體落地經(jīng)驗(yàn),給出推薦的文化引入和建設(shè)方法。
什么是研發(fā)效能,為什么要關(guān)注研發(fā)效能
●為什么寫作本書
近這十幾年,國內(nèi)互聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展速度不亞于硅谷,在商業(yè)模式創(chuàng)新方面甚至完成了超越,但是我們?cè)谘邪l(fā)效能方面始終比較落后。難以否認(rèn)的是,在互聯(lián)網(wǎng)行業(yè)繁榮發(fā)展的背景下,國內(nèi)很多公司采用了拼工時(shí)的做法,卻忽略了應(yīng)該關(guān)注的研發(fā)效能。
你是否也曾為下面這些問題感到困擾?
團(tuán)隊(duì)角度:
1)加班也不少,但是產(chǎn)品發(fā)布還是常常延期,上線后產(chǎn)品問題頻發(fā)。
2)從需求分析、產(chǎn)品設(shè)計(jì)、開發(fā)、測(cè)試到部署一個(gè)環(huán)節(jié)都不少,但終發(fā)布的產(chǎn)品卻與用戶需求偏差很大。
3)產(chǎn)品發(fā)布上線時(shí)出現(xiàn)大量提交、合并,導(dǎo)致后時(shí)刻出現(xiàn)很多問題,團(tuán)隊(duì)成員集體熬夜加班,卻將大把的時(shí)間花在了等待環(huán)境、等待驗(yàn)證上。
4)開發(fā)提測(cè)質(zhì)量不好,大量壓力聚集到測(cè)試這一步,導(dǎo)致代碼返工率很高。引入單元測(cè)試、代碼審查,效果卻不明顯。
個(gè)人角度:
1)疲于應(yīng)付業(yè)務(wù),沒有精力去精進(jìn)技術(shù)。
2)工作過程中有大量的電話、即時(shí)聊天消息干擾,工作思路常常被打斷。
3)對(duì)眾多的工具(比如Git、命令行)的使用僅限于表層,工作效率較低,想提高卻因?yàn)楣ぞ咛嗖恢缽暮蜗率帧?br />4)有知識(shí)焦慮,但是沒有找到好的辦法系統(tǒng)地提高個(gè)人工作效率。
這其實(shí)是研發(fā)效能出現(xiàn)了問題。那么,研發(fā)效能到底是什么呢?一提到研發(fā)效能,很多人的反應(yīng)都是開發(fā)的速率,也就是能否快速開發(fā)、發(fā)布產(chǎn)品。但事實(shí)上,速率只是效能的三大支柱之一。
相比快,產(chǎn)品開發(fā)更重要的是方向正確,因?yàn)椴荒転橛脩艉凸菊嬲峁﹥r(jià)值的產(chǎn)品做了也是白做。另外,高效能還需要有可持續(xù)性,否則短期的高產(chǎn)出可能會(huì)嚴(yán)重傷害長期的產(chǎn)出。比如,連續(xù)熬夜加班雖然短期能增加一定的產(chǎn)出,但其帶來的身體問題會(huì)導(dǎo)致后續(xù)工作效率低下,得不償失。
因此,研發(fā)效能的完整定義應(yīng)該是持續(xù)為用戶產(chǎn)生有效價(jià)值的效率。它包括有效性(Effectiveness)、效率( Efficiency)和可持續(xù)性(Sustainability )三個(gè)方面。簡單來說,就是能否長期、高效地開發(fā)出有價(jià)值的產(chǎn)品。對(duì)于團(tuán)隊(duì)研發(fā)效能和個(gè)人研發(fā)效能來說,其核心都是這三個(gè)方面,只不過在價(jià)值的側(cè)重點(diǎn)上有所不同。團(tuán)隊(duì)研發(fā)效能更注重對(duì)公司、團(tuán)隊(duì)、客戶產(chǎn)生價(jià)值,而個(gè)人研發(fā)效能更注重個(gè)人的產(chǎn)出、技術(shù)的成長、個(gè)人的提高。
可喜的是,近幾年,國內(nèi)越來越多的公司開始在研發(fā)流程、工具、文化等方面下功夫,很多百名研發(fā)人員規(guī)模的公司開始組建專門的效能團(tuán)隊(duì),以提高整個(gè)公司的研發(fā)效能。
這是一個(gè)很好的現(xiàn)象和趨勢(shì)。但很多公司在推進(jìn)研發(fā)效能的時(shí)候,常常不知道從何下手,或者花了精力、加大了投入?yún)s看不到效果,產(chǎn)出抵不上投入。比如,我在一些公司做內(nèi)訓(xùn)和顧問工作的時(shí)候,經(jīng)常會(huì)遇到類似以下案例的情況。
1)想通過指標(biāo)度量的方式來衡量團(tuán)隊(duì)的效能,要求每個(gè)團(tuán)隊(duì)達(dá)到一定的測(cè)試覆蓋率。研發(fā)團(tuán)隊(duì)在產(chǎn)品完成后進(jìn)行突擊來編寫單元測(cè)試,終達(dá)到了要求,但產(chǎn)品質(zhì)量卻沒有提高。
2)引入業(yè)界先進(jìn)工程實(shí)踐,學(xué)習(xí)Google使用大的代碼倉,但因?yàn)榛A(chǔ)設(shè)施不成熟,對(duì)大量二進(jìn)制文件支持很差,結(jié)果算法團(tuán)隊(duì)有很多的二進(jìn)制模型文件,每次執(zhí)行g(shù)it clone命令都需要半小時(shí),導(dǎo)致怨聲載道。
3)希望建設(shè)工程師文化來提高產(chǎn)出和活躍氣氛,跟公司管理層以及HR商量了好幾條價(jià)值觀在公司宣傳推廣,還組織了幾次團(tuán)建活動(dòng),但是收效甚微,大家真正工作起來還是老樣子。
這些問題的根源都在于,軟件開發(fā)的靈活性決定了研發(fā)效能提升的困難性:需要關(guān)注的點(diǎn)太多,可以使用的方法也很多,但如果只是簡單照搬業(yè)界研發(fā)實(shí)踐的話,效果往往不好,有時(shí)甚至?xí)斐韶?fù)面效果。
●本書結(jié)構(gòu)
在本書中,分五個(gè)部分系統(tǒng)講述如何做到研發(fā)的高效能。
研發(fā)效能綜述(第1~3章)。這一部分講解研發(fā)效能的定義、模型,并著重介紹研發(fā)效能度量的正確使用方法,希望幫助讀者梳理研發(fā)效能的主脈絡(luò),構(gòu)建清晰的知識(shí)圖譜。
個(gè)人高效研發(fā)實(shí)踐(第4~15章)。這一部分講解如何提高個(gè)人效能,具體涉及深度工作、Git、命令行、Vim、工具集成等內(nèi)容,旨在幫助讀者提高技術(shù)的專精程度,實(shí)現(xiàn)持續(xù)成長。每個(gè)開發(fā)人員都應(yīng)該提高自己的效能,只有這樣才能持續(xù)學(xué)習(xí)、持續(xù)提高,避免被業(yè)務(wù)拖著跑。
研發(fā)流程優(yōu)化(第16~21章)。這一部分講解研發(fā)流程優(yōu)化的基本目標(biāo)和原則、代碼優(yōu)化、分支管理、DevOps、團(tuán)隊(duì)協(xié)同等話題,希望幫助讀者深入理解研發(fā)過程中的關(guān)鍵流程以及流程優(yōu)化的基本原則,使讀者能夠針對(duì)自己的實(shí)際情況,找到合適的工程實(shí)踐,讓軟件開發(fā)的整個(gè)流程更加順暢、高效。
團(tuán)隊(duì)高效研發(fā)實(shí)踐(第22~30章)。這一部分講解團(tuán)隊(duì)高效研發(fā)實(shí)踐過程中各關(guān)鍵步驟的高效工程方法,內(nèi)容涉及研發(fā)環(huán)境搭建、代碼審查、合理處理技術(shù)債、開源利弊分析、測(cè)試等,同時(shí)對(duì)研發(fā)流程及工程方法的趨勢(shì)進(jìn)行解讀和展望,希望幫助讀者加深對(duì)這些具體工程方法的理解,并學(xué)會(huì)正確地使用這些方法。
管理和文化(第31~36章)。這一部分系統(tǒng)分析硅谷管理和文化,尤其是Facebook的工程師文化,并根據(jù)我在國內(nèi)外公司的具體落地經(jīng)驗(yàn),給出推薦的文化引入和建設(shè)方法。
這里要著重強(qiáng)調(diào)一下個(gè)人高效研發(fā)實(shí)踐部分。團(tuán)隊(duì)由個(gè)人組成,所以團(tuán)隊(duì)研發(fā)效能和個(gè)人研發(fā)效能密不可分。然而,個(gè)人研發(fā)效能是很多公司和團(tuán)隊(duì)在進(jìn)行提效工作時(shí)容易忽略的一個(gè)點(diǎn)。所以在本書中我會(huì)在個(gè)人效能方面多花一些筆墨,介紹如何從指導(dǎo)思想、工具、溝通等方面提高個(gè)人效能,往10x 程序員的方向努力。
研發(fā)效能和軟件開發(fā)一樣,都具有很大的靈活性,提高研發(fā)效能不是生搬硬套就能做好的。所以我會(huì)著重講解目標(biāo),帶你深入了解效能實(shí)踐背后的原理,然后才是具體的實(shí)踐。因?yàn)橹挥猩羁汤斫庠,才能靈活運(yùn)用。
同時(shí),我會(huì)分享大量成功的案例,帶讀者一起了解國內(nèi)外公司的優(yōu)秀做法,分析它們成功的經(jīng)驗(yàn)。當(dāng)然,我也會(huì)分享失敗的案例,分析其背后的原因。不過更重要的是,我希望讀者能夠跟著我一起分析,通過對(duì)比思考,找到真正適合團(tuán)隊(duì)和自身的實(shí)踐。這正是我寫作本書的真正初衷。
前言 什么是研發(fā)效能,為什么要關(guān)注研發(fā)效能
●部分 研發(fā)效能綜述
第1章 高效學(xué)習(xí)、實(shí)踐方法論3
1.1 使用黃金圈原則3
1.2 如何有效落地實(shí)踐4
小測(cè)試7
第2章 研發(fā)效能定義及模型8
2.1 為什么要關(guān)注研發(fā)效能8
2.2 研發(fā)效能定義9
2.3 提高研發(fā)效能的坑9
2.4 研發(fā)活動(dòng)的本質(zhì)10
2.4.1 軟件研發(fā)本質(zhì)之一:流水線11
2.4.2 軟件研發(fā)本質(zhì)之二:靈活性12
2.5 研發(fā)效能模型12
小測(cè)試14
第3章 效能度量謎題15
3.1 研發(fā)效能度量的定義和作用16
3.2 效能度量的三個(gè)失敗案例16
3.3 效能難以度量的三大原因18
3.4 效能度量的正面案例19
3.5 使用效能度量的根本原則20
3.6 正確使用效能度量的方法21
小測(cè)試27
●第二部分 個(gè)人高效研發(fā)實(shí)踐
第4章 精準(zhǔn)打擊目標(biāo):通過提高準(zhǔn)確性來提高投入產(chǎn)出比32
4.1 以終為始,尋找重要的任務(wù)33
4.1.1 自己定義任務(wù)33
4.1.2 聚焦目標(biāo),以終為始33
4.1.3 無情的篩選,少即是多34
4.2 追根究底,尋找效的解決方案34
4.3 高效溝通,利用信息的準(zhǔn)確傳遞來尋找、調(diào)整目標(biāo)35
4.3.1 同理心原則36
4.3.2 外在與內(nèi)在同樣重要36
4.3.3 冰山原則37
4.3.4 建設(shè)性沖突37
4.4 管理者視角38
第5章 唯快不破:如何利用速度提高個(gè)人研發(fā)效能39
5.1 應(yīng)用高效實(shí)踐提高完成任務(wù)的速度39
5.2 應(yīng)用快速迭代的思路獲取快速反饋40
5.2.1 完成比完美更重要40
5.2.2 讓代碼盡快運(yùn)行起來41
5.2.3 設(shè)置本地代碼檢驗(yàn)機(jī)制42
5.2.4 盡早解決合并沖突43
5.3 管理者視角43
第6章 不僅是當(dāng)下的成功:持續(xù)地提高個(gè)人研發(fā)效能45
6.1 精力管理45
6.1.1 擁抱無聊,控制手機(jī)依賴46
6.1.2 用反向行事日歷來確保休息和高效工作46
6.2 使用80/20原則尋找研發(fā)活動(dòng)中的關(guān)鍵因素47
6.3 對(duì)關(guān)鍵活動(dòng)進(jìn)行優(yōu)化48
6.3.1 研發(fā)活動(dòng)中長期有效的原則48
6.3.2 高頻發(fā)生的活動(dòng)49
6.4 目標(biāo)驅(qū)動(dòng)和興趣驅(qū)動(dòng)相結(jié)合51
6.5 管理者視角52
第7章 高效選用工具提高研發(fā)速度54
第8章 工程師常見工作任務(wù)的系統(tǒng)性工具優(yōu)化56
8.1 個(gè)任務(wù)類別:操作系統(tǒng)上的通用操作56
8.2 第二個(gè)任務(wù)類別:輸入和編輯59
8.3 第三個(gè)任務(wù)類別:知識(shí)管理62
8.4 第四個(gè)任務(wù)類別:瀏覽網(wǎng)頁64
8.5 第五個(gè)任務(wù)類別:編程65
8.6 小結(jié)65
第9章 高效Git基本操作66
9.1 Git和代碼原子性66
9.2 Git支持原子性的五種基本操作67
9.3 小結(jié)80
第10章 實(shí)現(xiàn)代碼提交的原子性的Git工作流81
10.1 工作流一:使用一個(gè)分支完成所有需求的開發(fā)81
10.2 工作流二:使用多個(gè)分支完成所有需求的開發(fā)97
10.3 小結(jié)101
第11章 每個(gè)開發(fā)人員都應(yīng)該學(xué)一些Vim104
11.1 Vim簡介104
11.2 Vim的前世今生105
11.3 Vim的兩大特點(diǎn)105
11.4 小結(jié)108
第12章 高效學(xué)習(xí)Vim的實(shí)用技巧110
12.1 學(xué)習(xí)Vim的命令模式和命令組合方式110
12.2 學(xué)習(xí)Vim常用的命令113
12.3 在更廣泛的工作場景中應(yīng)用Vim技能118
12.4 小結(jié)120
第13章 高效命令行環(huán)境選擇和設(shè)置122
13.1 為什么要使用命令行122
13.2 命令行配置的四個(gè)步驟124
13.3 小結(jié)133
第14章 研發(fā)場景的有效命令行工具134
14.1 日常操作中的工具和技巧134
14.2 開發(fā)中的常見工作143
14.3 小結(jié)146
第15章 工具的高效集成147
15.1 工具集成147
15.1.1 使用管道對(duì)命令行工具進(jìn)行集成147
15.1.2 IDE和周邊工具集成150
15.2 提高工具一致性151
15.3 小結(jié)153
●第三部分 研發(fā)流程優(yōu)化
第16章 研發(fā)流程優(yōu)化的基本目標(biāo)和原則157
16.1 尋找用戶價(jià)值157
16.2 提高用戶價(jià)值的流動(dòng)效率158
16.3 小結(jié)162
第17章 代碼入庫之前的流程優(yōu)化163
17.1 規(guī)范化、自動(dòng)化核心步驟163
17.2 提供快速反饋,促進(jìn)增量開發(fā)166
17.3 小結(jié)168
第18章 代碼入庫之后的流程優(yōu)化169
18.1 三個(gè)持續(xù)的定義和作用169
18.2 CI/CD流水線的原則及具體實(shí)踐171
18.3 案例:Facebook如何落地CI/CD來提高效能172
18.4 小結(jié)174
第19章 選擇適當(dāng)?shù)姆种Ч芾聿呗蕴岣吡鞒毯彤a(chǎn)品質(zhì)量175
19.1 共主干分支管理和發(fā)布策略175
19.2 共分支管理策略的優(yōu)點(diǎn)178
19.3 其他主要分支方式180
19.4 如何選擇、應(yīng)用分支管理策略181
19.5 小結(jié)182
第20章 使用全棧思路打通開發(fā)和運(yùn)維184
20.1 DevOps和SRE的異同184
20.2 DevOps和SRE的目標(biāo)、原則185
20.3 落地實(shí)踐187
20.4 小結(jié)189
第21章 研發(fā)流程中的高效信息流通190
21.1 團(tuán)隊(duì)成員愿意共享是有效溝通的前提191
21.2 設(shè)計(jì)流程和使用工具,推動(dòng)研發(fā)信息高效溝通192
21.3 溝通工具的選用技巧194
21.4 小結(jié)195
●第四部分 團(tuán)隊(duì)高效研發(fā)實(shí)踐
第22章 研發(fā)環(huán)境:讓開發(fā)人員不再操心環(huán)境199
22.1 開發(fā)機(jī)器200
22.2 IDE200
22.3 本地環(huán)境與聯(lián)調(diào)環(huán)境201
22.4 開發(fā)過程中使用的各種工具、數(shù)據(jù)和配置203
22.5 測(cè)試環(huán)境與類生產(chǎn)環(huán)境203
22.6 提供高效研發(fā)環(huán)境的原則204
22.7 小結(jié)204
第23章 代碼審查:高效代碼審查實(shí)踐206
23.1 代碼審查的作用206
23.2 代碼審查方法的分類207
23.3 代碼審查方法選擇的三個(gè)成功案例210
23.4 小結(jié)212
第24章 代碼審查:如何有效引入、執(zhí)行代碼審查213
24.1 引入代碼審查的步驟和方法213
24.2 推進(jìn)代碼審查的兩個(gè)關(guān)鍵操作216
24.3 推行代碼審查的兩個(gè)關(guān)鍵原則218
24.4 小結(jié)220
第25章 合理處理技術(shù)債:讓快速研發(fā)可持續(xù)222
25.1 技術(shù)債的成因223
25.2 技術(shù)債的影響223
25.3 處理技術(shù)債的兩個(gè)基本原則223
25.4 控制技術(shù)債的四個(gè)步驟224
25.5 小結(jié)226
第26章 開源:從Phabricator的開源歷程看開源利弊228
26.1 Phabricator開源過程的關(guān)鍵步驟229
26.2 開源對(duì)公司的利弊233
26.3 小結(jié)234
第27章 高效上云:運(yùn)用云計(jì)算提高效能235
27.1 云計(jì)算的優(yōu)勢(shì)235
27.2 云計(jì)算的挑戰(zhàn)及解決方法238
27.3 小結(jié)239
第28章 測(cè)試左移:測(cè)試如何應(yīng)對(duì)新的開發(fā)模式240
28.1 測(cè)試左移的定義240
28.2 測(cè)試左移的四個(gè)原則241
28.3 小結(jié)243
第29章 測(cè)試右移與高效部署:應(yīng)對(duì)頻繁發(fā)布帶來的挑戰(zhàn)244
29.1 三種部署方式的定義244
29.2 目標(biāo)246
29.3 原則247
29.4 具體實(shí)踐247
29.4.1 部署階段的實(shí)踐247
29.4.2 發(fā)布階段的實(shí)踐249
29.4.3 發(fā)布后階段的實(shí)踐249
29.5 小結(jié)250
第30章 持續(xù)進(jìn)步:研發(fā)流程、工程方法趨勢(shì)解讀和展望251
30.1 協(xié)作方式的發(fā)展趨勢(shì)251
30.2 云計(jì)算平臺(tái)的發(fā)展趨勢(shì)252
30.3 應(yīng)用開發(fā)的發(fā)展趨勢(shì)254
30.4 AI方面的發(fā)展趨勢(shì)255
30.5 小結(jié)256
●第五部分 管理和文化
第31章 業(yè)務(wù)目標(biāo)和技術(shù)目標(biāo)兩手抓:打造高效團(tuán)隊(duì)的三個(gè)步驟259
31.1 尋找目標(biāo)259
31.2 目標(biāo)管理260
31.3 任務(wù)執(zhí)行261
31.4 小結(jié)263
第32章 從奈飛的著名PPT談硅谷公司文化264
32.1 定義核心價(jià)值觀265
32.2 在招聘、流程方面設(shè)計(jì)方案推動(dòng)文化建設(shè)266
32.3 持續(xù)推動(dòng)文化建設(shè)267
32.4 關(guān)于奈飛公司文化的思考268
32.5 小結(jié)268
第33章 Facebook創(chuàng)造力引擎:工程師文化270
33.1 Facebook的工程師文化270
33.2 Facebook推行工程師文化的具體實(shí)踐271
33.3 個(gè)人角度感受Facebook工程師文化帶來的效果272
33.4 小結(jié)273
第34章 Facebook工程師文化實(shí)踐三大原則之一:讓員工做感興趣的事274
34.1 Facebook工程師文化落地的三大原則274
34.2 讓員工做感興趣的事275
34.3 Hackathon落地經(jīng)驗(yàn)277
34.4 小結(jié)278
第35章 Facebook工程師文化實(shí)踐三大原則之二:讓員工擁有信息和權(quán)限279
35.1 讓員工擁有信息279
35.2 讓員工擁有權(quán)限281
35.3 Facebook之外的落地經(jīng)驗(yàn)282
35.4 小結(jié)283
第36章 Facebook工程師文化實(shí)踐三大原則之三:績效調(diào)節(jié)284
36.1 360度績效考評(píng)系統(tǒng)285
36.2 360度績效考評(píng)系統(tǒng)的兩個(gè)原則286
36.3 360度績效考評(píng)系統(tǒng)的問題287
36.4 績效考評(píng)落地實(shí)踐287
36.5 小結(jié)288
結(jié)束語 超越昨天的自己,享受成長的快樂289