代碼里的世界觀:通往架構師之路 | 被動收入的投資秘訣 - 2024年7月

代碼里的世界觀:通往架構師之路

作者:余葉
出版社:人民郵電
出版日期:2018年11月01日
ISBN:9787115495235
語言:繁體中文

本書分為兩大部分,第一部分講述程式師在編寫程式和組織代碼時遇到的很多通用概念和共同問題,比如程式裡的基本元素,如何物件導向,如何面向抽象程式設計,什麼是耦合,如何進行單元測試等。
 
第二部分講述程式師在編寫代碼時都會遇到的思考和選擇,比如程式師的兩種工作模式,如何堅持技術成長,程式師的組織生產方法,程式師的職業生涯規劃等。

余葉,現任IBM架構師,曾就職於是德科技和中國航信。

愛代碼,愛思考。

研究過已經死亡的MFC,還精通步入頹勢的.NET,之後又在方興未艾的iOS領域做架構師,順勢玩了玩Java,瞭解了服務端開發。不知不覺中,前端也積累了一定的經驗。越做越雜之後,有了個體面的稱呼“遮羞”:全棧工程師。

第1章程式世界的兩個基本元素
1.1資料和代碼的相互偽裝
1.2資料和代碼的關係
1.3總結

第2章用物件導向的方式去理解世界
2.1好的程式師是安徒生
2.2封裝——招兵買馬,等級森嚴
2.2.1從單細胞到高等生物
2.2.2public——對象的外觀
2.2.3private——水下的冰川
2.2.4protected——內外兼修
2.2.5封裝總結
2.3繼承——快速進化
2.4多態——抽象的基石
2.5總結

第3章面向抽象程式設計——玩玩虛的
更健康17n
3.1抽象最討厭的敵人:new
3.2消滅new的兩件武器
3.2.1控制反轉——髒活讓別人去幹
3.2.2工廠模式——抽象的基礎設施
3.2.3new去哪裡了呢?
3.3抽象到什麼程度?
3.4總結

第4章耦合其實無處不在
4.1耦合的種類
4.1.1資料之間的耦合
4.1.2函數之間的耦合
4.1.3資料和函數之間的耦合
4.1.4耦合種類的總結
4.2耦合中既有敵人也有朋友
4.3壞耦合的原因
4.3.1刻舟求劍
4.3.2“談戀愛”是個危險的行為
4.3.3侵佔公共資源
4.3.4需求變化——防不勝防
4.4解耦的原則
4.4.1讓模組邏輯獨立而完整
4.4.2讓連接橋樑堅固而相容
4.5總結

第5章資料的種類——生命如此多嬌
5.1常用資料類型
5.1.1string類型:人機溝通的橋樑
5.1.2int類型:多變的萬花筒
5.1.3bool類型:能量巨大的原子
5.2按生命週期劃分資料
5.3兩個重要的資料容器
5.3.1陣列——容器之王
5.3.2散列表——銀行的保險櫃
5.3.3容器總結
5.4對象的種類
5.4.1實體物件——光鮮的主角
5.4.2值對象——配角或道具
5.5描述資料的資料
5.6總結

第6章資料驅動——把變化抽象成數據
6.1三個案例
6.2資料驅動的好幫手:反射
6.2.1反射是將代碼資料化
6.2.2反射也是一把雙刃劍
6.2.3各種語言對反射的支援
6.3總結

第7章物件之間的關係——父子、朋友或情人
7.1繼承——父子關係
7.1.1裡氏替換原則——兒子頂替父親
7.1.2鴕鳥非鳥
7.1.3不聽老人言
7.2組合——朋友關係
7.2.1組合與繼承的區別
7.2.2組合和繼承的聯繫
7.2.3策略模式——組裝車間
7.2.4組合的總結
7.3依賴——情人關係
7.3.1依賴和組合的差別
7.3.2迷人的雙向依賴
7.3.3撲朔迷離的訪問者模式
7.3.4依賴的總結
7.4總結

第8章函數的種類——迷宮的結構
8.1物件導向的函數叫方法
8.2參數是函數的原材料
8.2.1參數在函數中的地位
8.2.2參數存在的形式
8.3返回值對函數的意義
8.3.1有返回值函數
8.3.2void函數
8.4值傳遞、引用傳遞和指針傳遞
8.5有狀態函數和無狀態函數
8.6靜態函數和普通函數
8.7能駕馭其他函數的函數
8.8編譯器做過手腳的函數
8.8.1函數重載
8.8.2泛型函數
8.9總結

第9章面向介面程式設計——遵循契約辦事
9.1介面和抽象類別——分工其實挺明確
9.2介面的應用場景
9.2.1先簽約,後對接
9.2.2專注抽象,脫離具體
9.2.3解開耦合,破除纏繞
9.2.43個場景的總結
9.3介面和函數指標
9.3.1原來是親兄弟
9.3.2介面的優勢
9.3.3函數指標的優勢
9.3.4兩兄弟的總結
9.4函數指標的應用場景
9.4.1簡化版的Command模式
9.4.2行為外包
9.4.3結尾回檔——非同步搭檔
9.5總結

第10章if…else的多面性
10.1兩條兄弟語句
10.2if…else的黑暗面
10.2.1永無止境的長長鐵鍊
10.2.2牽一髮而動全身
10.2.3其實黑化不是我的錯
10.3開閉原則——if…else的天敵
10.3.1擴展和修改的區別
10.3.2為什麼擴展比修改好?
10.4化解if…else黑暗面
10.4.1抽出共性
10.4.2利用多態
10.4.3資料驅動
10.4.4動態類型
10.5總結

第11章挖掘一件神秘武器——static
11.1static神秘在哪裡?
11.2static的特性
11.2.1對代碼的直接訪問
11.2.2隔離性和遊離性
11.2.3將函數參數反客為主
11.3static的應用場景
11.3.1實現工具包函數
11.3.2實現單例也有門道
11.3.3實現類擴展
11.3.4讓資料互動起來
11.3.5構建上層建築
11.4總結

第12章把容易變化的邏輯,放在容易修改的地方
12.1一個和用戶的故事
12.2一個和銷售的故事
12.3一個和產品經理的故事
12.4一個和運維的故事
12.5總結

第13章隱式約定——猶抱琵琶半遮面
13.1撥開隱式約定的神秘面紗
13.1.1隱式約定就在你身邊
13.2.2隱式約定的重要特徵
13.2.3隱式約定的其他形式
13.2.4隱式約定的風險與缺陷
13.2調料包數據
13.3越簡單的功夫越厲害
13.4總結

第14章異常,天使還是魔鬼?
14.1三個江湖派別
14.2異常的種類
14.3異常的throw:手榴彈什麼時候扔?
14.4異常的catch——能收炸彈的垃圾筐
14.5異常的使用技巧
14.5.1看病要趁早
14.5.2不要加大catch的負擔
14.5.3避免try花了眼
14.5.4保持克制,不要濫用
14.6總結

第15章多執行緒程式設計——在混沌中永生159n
15.1幾個基礎概念
15.1.1每個執行緒都有獨立的安全港——棧區
15.1.2超乎想像的細微步驟——執行緒安全
15.2互斥——相互競爭
15.3同步——相互協作
15.3.1同步的本質
15.3.2共用變數——一塊公用的黑板
15.3.3條件變數——用交通燈來指揮
15.3.4同步和互斥——本是同根生
15.4非同步——各忙各的
15.4.1非同步的本質
15.4.2等待燒水,順便洗碗
15.4.3明修棧道,暗度陳倉
15.4.4非同步和函數回檔
15.4.5有關非同步的問與答
15.4.6非同步總結
15.5阻塞與非阻塞
15.6總結

第16章單元測試——對代碼庖丁解牛
16.1單元測試的誕生
16.2單元測試的進化
16.2.1大量繁殖
16.2.2尋找盟友
16.2.3劃分地盤
16.2.4反客為主
16.3編寫單元測試的基本原則
16.4如何讓代碼面向單元測試
16.4.1買一個西瓜,無須先買菜市場
16.4.2只是演習,不玩真的
16.4.3人機交互代碼,怎麼攻克?
 16.5最後的忠告:無招勝有招
16.6總結

第17章代碼評審——給身體排排毒
17.1排毒要養成習慣
17.2磨刀不誤砍柴工
17.3經驗點滴——關鍵是流程化
17.411個案例
17.5總結

第18章程式設計就是用代碼來寫作
18.1程式師與作家的區別
18.2如何提高寫作水準
18.2.1英語還是躲不了的
18.2.2重視的態度
18.2.3需要長期的積累
18.3案例解析——咬文嚼字很重要
18.4謹慎對待注釋
18.4.1必須存在的注釋
18.4.2做做樣子的注釋
18.5總結

第19章程式師的精神分裂——扮演上帝與木匠
19.1一個腦袋,兩種身份
19.2上帝模式:開天闢地,指點江山
19.2.1“上帝”在幹什麼
19.2.2和產品設計的爭奪
19.3木匠模式:致富只有勤勞一條路
19.4總結

第20章程式師的技術成長——打怪升級之路
20.1技術成長三部曲
20.2碼農都是好老師
20.3重視程式設計效率
20.4儘量通過工作去鍛煉
20.5三分之一的工匠精神
20.6明白架構師的含義
20.7總結

第21章語言到底哪種好——究竟誰是屠龍刀
21.1軍隊的背後是國家實力的較量
21.2專一和多情哪個好?
21.2.1切換語言的成本到底有多大?
21.2.2海、陸、空齊備最好
21.3如何快速學習一門新語言
21.3.1邊學邊練
21.3.2抓住該語言的主要特性去學
21.4總結

第22章程式師的組織生產——讓大家更高效和親密220n
22.1敏捷開發:及時回饋,小步快跑
22.2雙人程式設計:雙人搭配,幹活超累
22.3封閉開發:並不是蹲大獄
22.4總結

第23章程式師的職業生涯——選擇比努力更重要
23.1程式師到底能幹多久?
23.2程式師的中年危機
23.3自問一:你適不適合當程式師?
23.4自問二:程式師是否最適合你?
23.5自問三:問問自己有沒有雙門檻
23.6自問四:程式師最適合轉什麼行?
23.7總結


相關書籍