這是一本為專業程式設計師而寫的書,也是開源框架COLA的技術指導手冊

程序員書屋 發佈 2019-12-23T07:50:27+00:00

就像RobertC. Martin說的:「不管你們多敬業,加多少班,在面對爛系統時,你仍然會寸步難行,因為你的大部分精力不是在應對開發需求,而是在應對混亂。」

這是一本為專業程式設計師而寫的書,寫好代碼、追求卓越和工匠精神是每個程式設計師都應該具備的優秀品質。

寫好代碼的技藝不是一蹴而就的,它是一個系統化的工程,不是看幾本書、寫幾年代碼就能輕鬆習得的,而需要我們對自己的思維習慣、學習方法和工程實踐進行徹底的反省和重構。

每每看到「剪不斷、理還亂」的代碼,我都會感到懊惱和羞愧。懊惱的是,不知道如何能有效地治理混亂、控制複雜度;羞愧的是,我真的無能為力嗎?

一邊是無止境的業務需求,一邊是補丁加補丁的業務代碼,開發人員被夾在中間,像一隻困獸,向左走,還是向右走?方向在哪裡?我倍感困惑。就像Robert C. Martin說的:「不管你們多敬業,加多少班,在面對爛系統時,你仍然會寸步難行,因為你的大部分精力不是在應對開發需求,而是在應對混亂。」

上述問題是不是也是你常遇到的?剛剛好,終於有了這樣一本解決問題的書,讓你少走彎路。


《代碼精進之路 從碼農到工匠》記錄了一個普通碼農如何通過認知升級、知識重構、持續學習,繼而轉向工匠的過程。作為一個技術人,我有義務將這個過程分享出來,以期給同樣在路上的你帶來一些啟發,縮短你「從碼農到工匠」的探索路徑。

由於認知水平有限,本書的很多觀點可能只是一家之言,因此我更希望讀者帶著批判的眼光來看這本書,取其精華,並對有疑問的地方提出質疑和見解。

靈活性和沒有銀彈(Silver Bullet),也是軟體行業的有趣之處。在這個行業里,一個問題會有很多種解法,即使是最簡單的函數也至少可以寫出10種不同的代碼來實現。因此,知識儲備、判斷力和思辨力是軟體行業給我們提出的更高要求,任何不區分上下文和情景的教條都有可能在實施過程中遭遇慘敗。

本書的結構

《代碼精進之路 從碼農到工匠》共分為三大部分:技藝部分、思想部分和實踐部分。

技藝部分(第1~7章)
這部分詳細介紹了一些實用的編程技巧和方法論,並配以詳盡的代碼案例。掌握這些方法論可以有效地提高我們的編程素養,培養更好的編程習慣,寫出更好的程序。

第1章命名。好的命名可以極大地提升代碼可讀性和可理解性,本章主要介紹命名的重要性、命名要注意什麼,以及我們如何對不同的軟體構建(Artifact)進行命名。

第2章規範。在Google的代碼審查(Code Review)實踐中,代碼是否符合規範(Norms)是最重要的檢查項。在本章中,我們將了解必需的規範、如何制定規範,以及如何貫徹規範的實施。

第3章函數。有時即使你不採用任何面向對象(Object Oriented,OO)技術,只把函數寫好,代碼也會呈現完全不一樣的風貌。本章介紹許多寫函數的技巧和方法,非常實用。

第4章設計原則。本章介紹了很多前人總結的優秀設計原則,包括最著名的SOLID,它為我們提供了非常好的OO設計指導原則,比如擴展性的終極目標是滿足OCP。我個人特別推崇DIP,因為它是架構設計的重要指導原則。

第5章設計模式。好的設計模式能夠使代碼具有恰到好處的靈活性和優雅性,工程師之間的溝通也會變得簡單。本章沒有詳細介紹GoF中的全部24種模式,只重點介紹幾個日常使用頻率高、實用性強的設計模式。

第6章模型。軟體工程就是一個對現實世界的問題進行分析、抽象、建模,然後轉換成計算機可以理解的語言,解釋執行,實現特定業務邏輯的過程。本章主要介紹了什麼是模型、軟體工程中常見的建模方法論,以及如何運用這些模型為軟體服務。

第7章 DDD的精髓。領域建模是面向對象技術的精髓,本章的主要思想都來自於領域驅動設計(Domain Driven Design,DDD),但是並沒有教條地照搬,而是結合實踐對DDD進行了改良、萃取和優化。

思想部分(第9~11章)
思想是比技藝更高層次的能力要求,如果說技藝是「術」,那麼思想就是「道」,領悟這些道理,對我們的職業發展會大有裨益。

第8章抽象。抽象能力是工程師需要的核心能力之一。本章介紹了什麼是抽象、抽象的層次性、如何進行抽象,以及如何培養結構化思維和抽象思維。

第9章分治。分治思想的偉大之處在於,我們可以將一個很複雜的問題域分解成多個相對獨立子問題,再各個擊破。分治思想在軟體領域可謂是無處不在。

第10章技術人的素養。做一個優秀的工程師不容易,然而還是有一些特質是值得我們學習的。本章主要介紹了技術人應該具備的一些素養,以及如何培養這些素養。

第11章技術Leader的修養。一個優秀的工程師不一定是一個好的技術Leader,一個技術Leader在很大程度上決定了團隊的技術味道和技術追求。在本章中,我會介紹自己在技術管理上的一些心得。

實踐部分(第12、13章)
「Talk is cheap, show me the code」,一本沒有實戰的技術書是難以服眾的。如果說思想是務虛的最高境界,那麼實踐就是務實的最低要求。

第12章 COLA架構。本章主要介紹了什麼是架構,重點介紹COLA)架構及其背後的設計理念和設計原理。

第13章工匠平台。本章通過COLA架構在工匠平台實際業務場景中的落地,介紹如何使用COLA來搭建一個完整的應用架構,以及如何通過領域建模來實現業務邏輯。

讀者群體有哪些?

本書的目標讀者是專業程式設計師。無論你使用哪種程式語言、從事哪個崗位的工作,寫好代碼、追求卓越和工匠精神是每個程式設計師都應該具備的優秀品質。

本書最適合的讀者是具有一定經驗、從事以Java語言為主的業務應用開發人員,主要有以下兩個原因。

首先,書中所有的示例和討論都是基於Java語言編寫的。熟悉Java語言和面向對象技術,能夠更好地理解本書內容,尤其是第5章和第6章,以及思想部分的內容。

其次,COLA是面向業務應用的框架,第13章的實戰也一個基於COLA和Spring Boot的業務項目,因此更適用於具有一定工作經驗、從事業務開發的讀者。
最後,我想特別提醒以下不同類型的讀者。

新程式設計師:如果你是在校生或初入職場的新人,在追求技術寬度的同時,請一定要養成「寫好代碼」的習慣。充分利用這本書,寫好代碼,能讓你站在一個更高的起點上。

資深程式設計師:職場的資深人士能夠選擇本書,說明你和我一樣,還懷有一顆「不安分」的心。「種一棵樹最好的時間是十年前,其次是現在」,在追求卓越的路上,我們都沒有遲到,現在上路還不晚。更何況,我們多年來一直在堅持寫代碼,這就是一種勝利!

架構師:熟悉我的人都知道,我不贊成在業務團隊設置專門的架構崗位,因為我認為架構是一種能力,而不是職位。如果恰巧,你就在這樣的崗位上,那麼請一定不要畫完架構圖就算完成工作,要深入代碼細節中去,這樣才能發現設計中存在的問題,贏得程式設計師的尊重。如果你對技藝部分已經比較熟悉,建議重點閱讀思想部分和實踐部分。

技術團隊管理者:管理者的一個很重要的使命就是幫助團隊成長,包括制定規範和技術傳承。倘若你和我一樣,不僅僅把自己定位為一個「管理者」,那麼請重點閱讀第11章。

簡要目錄

第 一部分 技 藝
第 1章 命名 / 3
1.1 命名的力量 / 3
1.2 命名其實很難 / 4
1.3 有意義的命名 / 5
1.4 保持一致性 / 7
1.5 自明的代碼 / 10
1.6 命名工具 / 14
1.7 本章小結 / 15

第 2章 規範 / 16
2.1 認知成本 / 16
2.2 混亂的代價 / 17
2.3 代碼規範 / 18
2.4 埋點規範 / 28
2.5 架構規範 / 30
2.6 防止破窗 / 30
2.7 本章小結 / 31

第3章 函數 / 32
3.1 什麼是函數 / 32
3.2 軟體中的函數 / 33
3.3 封裝判斷 / 33
3.4 函數參數 / 34
3.5 短小的函數 / 35
3.6 職責單一 / 36
3.7 精簡輔助代碼 / 37
3.8 組合函數模式 / 40
3.9 SLAP / 43
3.10 函數式編程 / 48
3.11 本章小結 / 49

第4章 設計原則 / 51
4.1 SOLID概覽 / 51
4.2 SRP / 52
4.3 OCP / 53
4.4 LSP / 54
4.5 ISP / 57
4.6 DIP / 58
4.7 DRY / 61
4.8 YAGNI / 61
4.9 Rule of Three / 62
4.10 KISS原則 / 62
4.11 POLA原則 / 63
4.12 本章小結 / 63

第5章 設計模式 / 64
5.1 模式 / 64
5.2 GoF / 65
5.3 攔截器模式 / 69
5.4 插件模式 / 73
5.5 管道模式 / 75
5.6 本章小結 / 79

第6章 模型 / 81
6.1 什麼是模型 / 81
6.2 UML / 84
6.3 類圖 / 85
6.4 領域模型 / 95
6.5 敏捷建模 / 96
6.6 廣義模型 / 97
6.7 本章小結 / 99

第7章 DDD的精髓 / 101
7.1 什麼是DDD / 101
7.2 初步體驗DDD / 102
7.3 數據驅動和領域驅動 / 104
7.4 DDD的優勢 / 109
7.5 DDD的核心概念 / 112
7.6 領域建模方法 / 118
7.7 模型演化 / 127
7.8 為什麼DDD飽受爭議 / 127
7.9 本章小結 / 130

第二部分 思 想
第8章 抽象 / 133
8.1 偉大的抽象 / 133
8.2 到底什麼是抽象 / 134
8.3 抽象是OO的基礎 / 135
8.4 抽象的層次性 / 136
8.5 如何進行抽象 / 137
8.6 如何提升抽象思維 / 143
8.7 本章小結 / 145

第9章 分治 / 146
9.1 分治算法 / 146
9.2 函數分解 / 150
9.3 寫代碼的兩次創造 / 150
9.4 分治模式 / 151
9.5 分層設計 / 152
9.6 橫切和豎切 / 154
9.7 本章小結 / 155

第 10章 技術人的素養 / 156
10.1 不教條 / 156
10.2 批判性思維 / 161
10.3 成長型思維 / 162
10.4 結構化思維 / 163
10.5 工具化思維 / 167
10.6 好奇心 / 169
10.7 記筆記 / 170
10.8 有目標 / 171
10.9 選擇的自由 / 172
10.10 平和的心態 / 173
10.11 精進 / 174
10.12 本章小結 / 174

第 11章 技術Leader的修養 / 175
11.1 技術氛圍 / 175
11.2 目標管理 / 179
11.3 技術規劃 / 182
11.4 推理階梯 / 184
11.5 Leader和Manager的區別 / 185
11.6 視人為人 / 186
11.7 本章小結 / 187

第三部分 實 踐
第 12章 COLA架構 / 191
12.1 軟體架構 / 191
12.2 典型的應用架構 / 193
12.3 COLA架構設計 / 200
12.4 COLA測試 / 209
12.5 COLA架構總覽 / 212
12.6 本章小結 / 214

第 13章 工匠平台 / 215
13.1 項目背景 / 215
13.2 整理需求 / 216
13.3 工匠Demo / 217
13.4 使用COLA / 218
13.5 領域模型 / 219
13.5.1 領域建模 / 219
13.6 核心業務邏輯 / 222
13.7 實現技術細節 / 227
13.8 測試 / 229
13.9 本章小結 / 232

代碼精進之路 從碼農到工匠

張建飛 著

  • 代碼精進教程,程式設計師代碼整潔之道
  • 追求卓越和工匠精神,提高程式設計師的自我修養
  • 阿里巴巴集團高級技術專家多年經驗積澱之作,眾多業內大咖聯合推薦

本書特色

1.全面講解編程技藝與方法,幫助讀者培養良好的編程習慣。
2.著重培養技術人員的思想與素養,分享多年技術管理心得。
3.深度揭秘阿里巴巴團隊在複雜度治理方面的探索與實踐。
4.重點介紹開源框架COLA架構及其企業級應用「工匠平台」。

內容簡介

這是一本為專業程式設計師而寫的書,寫好代碼、追求卓越和工匠精神是每個程式設計師都應該具備的優秀品質。
本書共有13章內容,主要分為技藝部分、思想部分和實踐部分。技藝部分詳細介紹了編程技巧和方法論,並配以詳盡的代碼案例,有助於讀者提高編寫代碼的能力,優化代碼質量。思想部分主要包括抽象能力、分治思想,以及程式設計師應該具備的素養等內容。實踐部分主要介紹了常見的應用架構模式,以及COLA架構的設計原理。

作者簡介

張建飛,阿里巴巴集團高級技術專家,Java全球管理組織(JCP)執行委員會正式會員(Full Member)。2007年計算機工程碩士畢業後,先後在軟體公司InfoSys與網際網路公司eBay擔任高級研發和技術專家的職務。2014年加入阿里巴巴,先後在1688、ICBU和零售通擔任技術主管。

作者精通面向對象技術,有豐富的一線編碼實戰和架構經驗。特別是在應用架構、領域建模和複雜度治理領域,自研了COLA框架。COLA自開源以來,已經被多個技術團隊使用,解決了DDD落地和應用擴展問題,受到了普遍關注和一致好評。

作者提倡「工匠精神」,對於如何打造一個追求卓越、獨具匠心的技術團隊,如何量化考核工程師的技術貢獻,都有著非常深入的思考和實踐,並探索出一套切實可行的方法論。基於該方法論打造的「工匠平台」,在阿里巴巴內部被廣泛使用,「工匠平台」豐富了對技術人員考察的維度,是除業務結果之外的從技術視角給技術人員「照鏡子」的有效工具。

關鍵字: