本書涵蓋程序員應(yīng)知應(yīng)會的16種思維能力,共18章,分為三部分。第一部分主要介紹抽象思維、邏輯思維、結(jié)構(gòu)化思維、批判性思維、維度思維、分類思維、分治思維、簡單思維,以及成長型思維等解決日常問題的基礎(chǔ)思維能力。第二部分結(jié)合軟件行業(yè)的特點(diǎn),主要介紹解耦思維、契約思維、模型思維、工具化思維、量化思維、數(shù)據(jù)思維,以及產(chǎn)品思維等專業(yè)思維能力。第三部分主要是對上述思維能力的綜合運(yùn)用實(shí)踐。
張建飛,阿里巴巴前高級技術(shù)專家,目前在某大廠擔(dān)任軟件教練。作者于2007年計(jì)算機(jī)工程碩士畢業(yè)后,先后在國內(nèi)外知名互聯(lián)網(wǎng)企業(yè)擔(dān)任高級研發(fā)和技術(shù)專家,有著豐富的一線研發(fā)、應(yīng)用架構(gòu)和領(lǐng)域建模經(jīng)驗(yàn)。作者提倡“工匠精神”,曾獲阿里巴巴新零售技術(shù)部2019年“極致匠心獎(jiǎng)”,并憑借《代碼精進(jìn)之路:從碼農(nóng)到工匠》一書獲得2019年人民郵電出版社“IT類最具影響力作者”稱號。作者開源的COLA應(yīng)用架構(gòu)是國內(nèi)頗具影響力的DDD架構(gòu)之一,在GitHub上的Star數(shù)量超過6100。同時(shí),COLA也是阿里云的官方推薦架構(gòu),被廣泛應(yīng)用于國內(nèi)各大應(yīng)用系統(tǒng)中。
第一部分 基礎(chǔ)思維能力
01 抽象思維 2
1.1 抽象 = 抽離 + 具象 3
1.2 抽象是哲學(xué)思維的基礎(chǔ) 4
1.3 語言的抽象性 5
1.4 軟件設(shè)計(jì)中的抽象 7
1.4.1 面向?qū)ο蟮暮诵氖浅橄?7
1.4.2 抽象設(shè)計(jì)的評判標(biāo)準(zhǔn) 8
1.4.3 抽象缺失之基礎(chǔ)類型偏執(zhí) 9
1.4.4 抽象缺失之重復(fù)代碼 12
1.4.5 抽象設(shè)計(jì)要完整 14
1.4.6 不要為了抽象而抽象 15
1.5 抽象的層次性 17
1.5.1 對抽象層次的權(quán)衡 17
1.5.2 軟件中的分層抽象 20
1.5.3 強(qiáng)制類型轉(zhuǎn)換中的抽象層次問題 22
1.5.4 抽象層次一致性原則 24
1.6 鍛煉抽象思維能力 28
1.7 精華回顧 30
參考文獻(xiàn) 30
02 邏輯思維 31
2.1 邏輯就是關(guān)系 32
2.2 邏輯三要素之概念 33
2.2.1 概念要明確且清晰 34
2.2.2 制定團(tuán)隊(duì)通用語言 35
2.2.3 管理者的概念技能 36
2.3 邏輯三要素之判斷 37
2.4 邏輯三要素之推理 38
2.4.1 演繹推理:因?yàn)椋驗(yàn),所?38
2.4.2 歸納推理:從特殊到一般 40
2.4.3 溯因推理:大膽假設(shè),小心求證 41
2.5 邏輯鏈 42
2.5.1 5Why思考法 43
2.5.2 5So思考法 44
2.6 邏輯謬誤 45
2.6.1 偷換概念 46
2.6.2 錯(cuò)誤假設(shè) 46
2.6.3 循環(huán)論證 47
2.6.4 以偏概全 48
2.6.5 滑坡謬誤 48
2.7 非理性思考 49
2.8 精華回顧 50
參考文獻(xiàn) 50
03 結(jié)構(gòu)化思維 51
3.1 結(jié)構(gòu)與架構(gòu) 51
3.2 從無序到有序 52
3.3 金字塔結(jié)構(gòu) 54
3.4 金字塔中的邏輯 57
3.4.1 縱向邏輯關(guān)系 58
3.4.2 橫向邏輯關(guān)系 60
3.5 如何搭建結(jié)構(gòu) 64
3.5.1 自上而下 65
3.5.2 自下而上 66
3.5.3 上下結(jié)合 70
3.6 更多結(jié)構(gòu)思維框架 71
3.7 精華回顧 73
04 批判性思維 74
4.1 理解批判 75
4.2 批判中臺 77
4.2.1 中臺的底層邏輯 77
4.2.2 業(yè)務(wù)中臺為何低效 77
4.2.3 解決中臺的困境 79
4.3 批判架構(gòu)師 82
4.3.1 尷尬的架構(gòu)師 83
4.3.2 尷尬的架構(gòu)部門 83
4.3.3 人人都是架構(gòu)師 84
4.4 批判技術(shù)管理者 85
4.4.1 技術(shù)不作為 86
4.4.2 業(yè)務(wù)不思考 87
4.4.3 脾氣超火爆 87
4.5 自我批判 87
4.6 精華回顧 89
參考文獻(xiàn) 89
05 維度思維 90
5.1 維度究竟是什么 90
5.2 多維度思考 91
5.3 不做if else程序員 93
5.3.1 多態(tài)擴(kuò)展 94
5.3.2 代碼分離 95
5.3.3 矩陣分析 96
5.3.4 殊途同歸 98
5.4 無處不在的矩陣分析 99
5.4.1 波士頓矩陣 99
5.4.2 訂單要素分析 100
5.4.3 RFM模型 101
5.4.4 邏輯推理中的矩陣 103
5.4.5 相關(guān)系數(shù)矩陣 104
5.5 設(shè)計(jì)模式中的維度思維 105
5.6 組織管理中的維度思維 109
5.6.1 人員分工矩陣 109
5.6.2 人才盤點(diǎn)矩陣 110
5.6.3 需求管理矩陣 110
5.7 精華回顧 111
06 分類思維 112
6.1 分類是本能 112
6.2 分類無處不在 113
6.3 分類的本質(zhì) 114
6.3.1 尋找共同屬性 114
6.3.2 經(jīng)典分類與概念聚集分類 115
6.3.3 多種多樣的分類角度 116
6.4 沒有“完美”分類 117
6.5 軟件設(shè)計(jì)中的分類 118
6.5.1 對象分類 118
6.5.2 構(gòu)建分類 119
6.5.3 領(lǐng)域分類 121
6.6 組織架構(gòu)中的分類 122
6.6.1 業(yè)務(wù)型組織 123
6.6.2 職能型組織 124
6.7 互聯(lián)網(wǎng)產(chǎn)業(yè)分類 125
6.8 精華回顧 127
參考文獻(xiàn) 128
07 分治思維 129
7.1 分治設(shè)計(jì)模式 129
7.1.1 管道模式 130
7.1.2 責(zé)任鏈模式 133
7.2 分布式系統(tǒng) 138
7.2.1 x軸拆分 139
7.2.2 y軸拆分 140
7.2.3 z軸拆分 140
7.2.4 xyz軸拆分對比 142
7.3 分治算法 142
7.4 解決問題的黃金三步 143
7.5 “分治并”的應(yīng)用 144
7.5.1 流式計(jì)算 145
7.5.2 分布式數(shù)據(jù)庫 146
7.6 精華回顧 149
參考文獻(xiàn) 149
08 簡單思維 150
8.1 簡化是逆向做功 151
8.1.1 壓縮、隱藏與賦予 151
8.1.2 減少選擇 152
8.1.3 奧卡姆剃刀 155
8.2 干掉流程引擎 156
8.3 極簡狀態(tài)機(jī)的實(shí)現(xiàn) 157
8.3.1 領(lǐng)域?qū)S谜Z言的分類 158
8.3.2 極簡狀態(tài)機(jī)的模型設(shè)計(jì) 159
8.3.3 連貫接口設(shè)計(jì) 161
8.3.4 無狀態(tài)設(shè)計(jì) 164
8.3.5 極簡狀態(tài)機(jī)的使用 165
8.4 COLA的壯士斷腕 166
8.5 復(fù)雜的產(chǎn)品沒人用 167
8.6 精華回顧 169
09 成長型思維 170
9.1 走過至暗時(shí)刻 170
9.2 成長型思維與固定型思維 171
9.3 大腦的可塑性 173
9.4 培養(yǎng)成長型思維 174
9.4.1 明確努力的意義 175
9.4.2 改變歸因習(xí)慣 175
9.4.3 擺脫精神內(nèi)耗 176
9.4.4 持續(xù)精進(jìn) 178
9.4.5 保持好奇心 179
9.4.6 守住平常心 180
9.4.7 慢也是快 181
9.4.8 掌握表揚(yáng)的技巧 182
9.5 成功人士的成長型思維 184
9.6 精華回顧 185
第二部分 專業(yè)思維能力
10 解耦思維 188
10.1 耦合與解耦 189
10.2 依賴倒置解耦 189
10.2.1 抽象比具體靈活 190
10.2.2 面向接口編程 191
10.2.3 應(yīng)用與日志框架的解耦 192
10.3 中間層映射解耦 195
10.3.1 DNS的解耦設(shè)計(jì) 196
10.3.2 CDN的解耦設(shè)計(jì) 197
10.4 解耦的技術(shù)演化 199
10.5 應(yīng)用架構(gòu)中的解耦 201
10.6 精華回顧 204
11 契約思維 205
11.1 軟件設(shè)計(jì)中的規(guī)范 206
11.1.1 命名規(guī)范 206
11.1.2 異常處理規(guī)范 207
11.1.3 架構(gòu)規(guī)范 210
11.1.4 規(guī)范的維護(hù) 211
11.2 軟件設(shè)計(jì)中的標(biāo)準(zhǔn) 212
11.2.1 前端標(biāo)準(zhǔn)化之路 212
11.2.2 Java規(guī)范 213
11.2.3 API設(shè)計(jì)標(biāo)準(zhǔn) 216
11.3 依賴契約的擴(kuò)展機(jī)制 218
11.3.1 基于接口的擴(kuò)展 218
11.3.2 基于配置數(shù)據(jù)的擴(kuò)展 220
11.4 掌握標(biāo)準(zhǔn)制定權(quán) 222
11.5 精華回顧 225
參考文獻(xiàn) 225
12 模型思維 226
12.1 模型及其分類 226
12.1.1 物理模型 227
12.1.2 數(shù)學(xué)模型 227
12.1.3 概念模型 228
12.1.4 思維模型 228
12.1.5 模型不能代替實(shí)物 229
12.2 UML建模工具 229
12.2.1 類的UML表示法 231
12.2.2 類的關(guān)聯(lián)關(guān)系 232
12.2.3 類的依賴關(guān)系 236
12.2.4 類的泛化關(guān)系 237
12.2.5 類與接口的實(shí)現(xiàn)關(guān)系 238
12.3 領(lǐng)域模型 239
12.3.1 限界上下文 240
12.3.2 上下文映射 241
12.4 領(lǐng)域模型與數(shù)據(jù)模型 243
12.4.1 錯(cuò)把領(lǐng)域模型當(dāng)數(shù)據(jù)模型 244
12.4.2 錯(cuò)把數(shù)據(jù)模型當(dāng)領(lǐng)域模型 246
12.4.3 兩種模型各司其職 248
12.5 精華回顧 249
13 工具化思維 251
13.1 你我都是“工具人” 252
13.2 工具化的一般步驟 252
13.3 TestsContainer小工具 253
13.4 組合創(chuàng)新也是創(chuàng)新 258
13.5 ORM工具 261
13.6 基礎(chǔ)設(shè)施即代碼 267
13.7 巧用便簽貼 269
13.8 精華回顧 270
參考文獻(xiàn) 270
14 量化思維 271
14.1 量化的步驟 271
14.1.1 定義指標(biāo) 272
14.1.2 將指標(biāo)數(shù)字化 273
14.1.3 優(yōu)化指標(biāo) 274
14.2 研發(fā)效能度量 275
14.2.1 度量不是“指標(biāo)游戲” 275
14.2.2 力求合理的度量 276
14.3 目標(biāo)管理 278
14.3.1 SMART原則 278
14.3.2 OKR考核指標(biāo) 279
14.3.3 不要迷信指標(biāo) 280
14.4 量化網(wǎng)站運(yùn)營 281
14.5 量化技術(shù)貢獻(xiàn) 282
14.6 精華回顧 284
15 數(shù)據(jù)思維 285
15.1 “精通”數(shù)據(jù) 285
15.2 數(shù)據(jù)體系概覽 286
15.2.1 數(shù)據(jù)源 286
15.2.2 數(shù)據(jù)倉庫 287
15.2.3 ETL 289
15.2.4 元數(shù)據(jù) 291
15.2.5 數(shù)據(jù)應(yīng)用 292
15.3 數(shù)倉建模 292
15.3.1 維度模型 293
15.3.2 事實(shí)明細(xì)表 295
15.3.3 事實(shí)匯總表 297
15.4 數(shù)據(jù)產(chǎn)品平臺 299
15.4.1 看我情 300
15.4.2 看行情 301
15.4.3 看敵情 301
15.5 用數(shù)據(jù)說話 302
15.6 精華回顧 303
16 產(chǎn)品思維 304
16.1 產(chǎn)品的三要素 305
16.1.1 用戶 305
16.1.2 需求 305
16.1.3 場景 306
16.2 產(chǎn)品的分類 306
16.2.1 用戶關(guān)系角度 307
16.2.2 用戶需求角度 307
16.2.3 用戶類型角度 307
16.2.4 產(chǎn)品形態(tài)角度 308
16.3 產(chǎn)品架構(gòu) 308
16.4 產(chǎn)品化 310
16.5 平臺化 312
16.5.1 企業(yè)平臺化 312
16.5.2 平臺化建設(shè) 314
16.5.3 平臺產(chǎn)品化 316
16.6 精華回顧 318
第三部分 思維能力的綜合應(yīng)用
17 我的商品團(tuán)隊(duì)之旅 322
17.1 落地新團(tuán)隊(duì) 323
17.1.1 熟悉人 324
17.1.2 熟悉業(yè)務(wù) 325
17.1.3 熟悉技術(shù) 328
17.1.4 熟悉文化 328
17.2 深入商品領(lǐng)域 329
17.2.1 領(lǐng)域概念 330
17.2.2 概念模型 336
17.2.3 產(chǎn)品架構(gòu) 338
17.3 商品上架重構(gòu) 340
17.3.1 復(fù)雜的商品上架流程 340
17.3.2 無用的流程引擎 341
17.3.3 問題的本質(zhì)在于結(jié)構(gòu) 342
17.3.4 結(jié)構(gòu)化分解后的問題 345
17.4 復(fù)雜業(yè)務(wù)應(yīng)對之道 348
17.4.1 上下結(jié)合 348
17.4.2 能力下沉 349
17.5 精華回顧 352
參考文獻(xiàn) 352
18 COLA的演進(jìn)過程 353
18.1 COLA 1.0 354
18.1.1 復(fù)雜度來自哪里 354
18.1.2 COLA 1.0的設(shè)計(jì) 356
18.1.3 COLA 1.0的整體架構(gòu) 365
18.2 COLA 2.0 366
18.2.1 新架構(gòu)分層 366
18.2.2 新組件劃分 367
18.2.3 新擴(kuò)展點(diǎn)設(shè)計(jì) 369
18.2.4 新二方庫定位 371
18.3 COLA 3.0 375
18.3.1 去掉Command 375
18.3.2 去掉Interceptor 377
18.3.3 去掉Validator等 377
18.3.4 優(yōu)化類掃描 378
18.3.5 用Adatper代替Controller 378
18.4 COLA 4.0 379
18.4.1 架構(gòu)的頂層設(shè)計(jì) 379
18.4.2 技術(shù)維度與領(lǐng)域維度的劃分 381
18.4.3 COLA組件 383
18.4.4 COLA 4.0的改動(dòng)點(diǎn) 383
18.5 如何使用COLA 386
18.6 精華回顧 388
后記 389