我的軟體開發書單(截止2018年初)

我的軟體開發書單(截止2018年初)

總結一下這2年看的軟體開發方面的書,入選標準:

1自己基本看完,

2絕不會扔

3讀時做了詳細筆記,今後還仍然會不時翻看

主題是圍繞 降低,控制各種「複雜度」

1軟體工程(開發過程)

2領域邏輯(計算機之外,分析模式)

3設計實現(計算機之內,各種落地用到的語言、框架、設計模式,計算模型)

——這個排序,並不是個人的學習順序。而是回過頭,站在項目整體負責人(總設計師+總工程師)角度,按照「首先確保局面大贏」而設置的:

1理解整個開發過程,保證能定位涉眾、揣摩願景、捕捉需求。盡量把假的需求變更盡量消滅在編碼之前。

2吃透領域邏輯,理解領域專家的視角,再高於領域專家的視角看領域問題。才能保證核心域精簡,邊界清晰,導致清晰穩定的介面。這個一旦穩定了,實現即使矬一點,糙一些,都不太害怕了。

3 最後才是盡量抽象、精簡、可復用的方式實現2中的介面,結合時興的新技術,解決各種非功能需求。

目前正在讀,準備讀完的(軟體開發準備讀完的書2018),以後會增補進來。

——其他的,有的是沒看完的也基本不想看了;那些買回來沒怎麼看,或者看完了,覺得沒啥用的就算了,包括忘了的。

書重要性排名有先後。也就是說,如果給新人每個領域推薦1本書,我只推薦每個分類的第一名。排名靠後的只起到補充的作用。

總的感覺:

1經典書的出現還是分撥的,03-06年是一波。所以看書還是很保值的。應該能作為1w小時練習的一部分。

2書要盡量找薄的讀。找不到薄的就盡量找中溜本的,盡量別找巨厚的。讀書不能替代讀、寫代碼,不是書讀得頁數越多就越會寫。書的薄和代碼的精鍊是一個意思,往往意味著作者更可能功力深厚而不是騙稿費(廢話少,少即是多。)

3書一定要看精鍊過的(多次重版),不怕過時的,才值得寫,值得看。而且往往能沿著某一條主線,一路讓你認識到更多的問題,更多的線索。

4 盡量別看別買技術手冊型的書,過時快,直接看官網文檔OK。

我離開學校才開始被動補軟體開發的課,加上還得讀大量技術之外業務領域知識方面的書,所以其實讀得並不多。(但加上那些翻了幾下,就被放下的,其實也不少了。)

感覺相比研究,我還是更適合做工程的;

相比寫論文用英語、中文、數學公式表達新知和是什麼,我更適合用代碼表達已知和目的。

一、軟體開發過程(UML)

《軟體方法:業務建模和需求(上冊)》UMLChina潘加宇老師目前唯一寫出的的書(去年潘老師讓我給第2版寫了推薦序,誠惶誠恐)。2016當時為了2天的全程實做買的。沒說的,直接速成了我對「軟體編碼之前」整個工作流的認識。幾個小項目每次開始,都要溫習一遍。對我基本起到了「半部軟體方法扛項目」的作用,類似「半部三國打天下,半部論語治天下」。

《大象:Thinking in UML(第2版)》 兼聽則明。有些地方和潘加宇老師講得不一樣,比如用例切分粒度什麼的。但是平心而論,作為實戰派心得,還是有參考價值的(比如儘早把產品原型丟給用戶,防止他們胡提需求變更。潘老師講的是用戶形成習慣後,需求就更不容易捕捉了;角度不同:要當冠軍,深挖需求,聽潘老師的;氪金打錢儘快做項目續命,那就盡量糊弄了)。

需求

《絕密原型檔案 看看專業產品經理的原型是什麼樣》 原型方面,別的從沒看過,就看過這一本2333。作為了解互聯網產品的途徑吧。正好補充一下《軟體方法》中交互步驟在互聯網應用中落地情況和原型設計。

二、領域邏輯-分析:

《領域驅動設計 軟體核心複雜性應對之道 修訂版》學完《軟體方法》之後看的,仍然受益很大,仍然看得很慢。戰術模式(聚合根,倉儲,服務)未必用著順手,但結合書中的幾個業務場景(航運專家眼中有航線,但沒有集裝箱),作為簡單的分析模式,還是對我有實際用處的。但最主要的作用還是正三觀:讓之前沉浸在技術演算法複雜度中的開發者,「開眼看世界」,認識到「在人間」的軟體,還要處理的技術之外的複雜度。摘錄一點對第一章做的筆記:

應用軟體的複雜性不來自技術,而是領域本身。用戶的活動和業務邏輯

模型就是簡化,解決開發、使用中的信息超載問題

選擇性簡化,有意識結構化

領域模型≠領域專家頭腦中的知識

=對領域專家頭腦中的知識 嚴格組織+有選擇抽象 後的結果

是要儘可能建立一個符合「現實」的模型,

建模更像製作電影——出於某種目的概括地反映現實

軟體的核心是為用戶解決領域相關問題的能力

《領域驅動設計模式、原理與實踐》 PPPofDDD。潘加宇老師高階課上引用的。基本看完。雖然用的語言是C# .net對我沒直接參考意義,但還是起到正三觀的作用。前幾章充分講了 「問題域-解空間」,強調了定位核心域(作為分析工作流,非常類似於聯合戰役中「定位敵之重心」),反覆問自己這樣的問題:系統被構建而非購買的原因

例子也印象很深:在線圖書銷售系統的核心域,是用戶感覺不到的文檔加密機制。

《分析模式》《企業分析模型手冊1-3》 大概看了, 沒有都看完,知道各行業有各種分析模型就OK了。畢竟不太容易直接復用。

三、設計實現

軟體開發者通識,職業基礎素質:

《程序員修鍊之道:從小工到專家》《代碼大全(第2版)》。雖然好像都很老,但都是經典,很難取捨,所以只能並列了。小工到專家更精粹,更抽象,沒經驗的人初讀甚至覺得完全不接地氣,讀不下去,但其實裡面的故事和提法,更像詩和警句,更值得回味;《代碼完成2》 貫穿了編碼全過程的方方面面,從需求開始,更全面,連工資,性格都談到了。書單中最厚的一本書,也很老,但仍然不得不放第一梯隊里。

《代碼整潔之道程序員的職業素養》很薄,但開篇的推薦序就很扎心,甲方代表更信任法務人士的專業性,而BS技術開發人員;文章中甲方之前急著趕上線,但當作者真的加班趕出來了,甲方反而不急了。都是實際工作中似曾相識的場景,先在書里看一遍的話,親身遇到就不會那麼憤怒沮喪了,233。

《項目百態軟體項目管理面面觀(修訂版)》 很薄,用來對公司和團隊對號入座。

系統落地:

《分散式服務框架原理與實踐》《大型網站技術架構 核心原理與案例分析》大公司開發者的經驗彙集,出書稍微比較早了,作為一線純技術層面有點落伍,但思想還是非常值得學習的。「複雜網站都是從簡單架構(比如LAMP)慢慢生長變得複雜的」的觀點,暗合了《偉大的中國工業革命》里,「工業革命都是要經過相似的演化過程才能引爆」的觀點。

web後端開發:

《Python Web開發 測試驅動方法》。認識了測試山羊。雖然已經能寫django了,但也不是那麼好讀,斷續了幾次。整部書通過一個項目——用django實現一個todolist站點——作為線索,除了主要講解了測試驅動開發TDD的思想和實作,更重要的是涉及到了web後端開發的方方面面,特別適合萌新全面接觸實戰技術,和從0開始養成良好的編碼工作習慣。從版本控制GitHub到文件夾結構和文件名,到前端測試,到CI,Jenkins,還引出了適配器模式,六邊形架構。對完全不理解測試,沒聽過這些「技術」,只知道單純寫models views template 然後就認為開發好了的初級、半路出家、自學、3流開發者來說,打開了很多新的未知之門,特別有用。

《Python Web開發實戰》作為flask各種常見庫的索引。完全不懂web後端技術Nginx,gunicorn等等等的時候,用這個入門一下

《Python高效開發實戰:Django、Tornado、Flask、Twisted》走馬觀花了解一下各框架

前端相關:

技術點太雜,就不分排名了。

《JavaScript語言精粹(修訂版)》 蝴蝶書。挑最薄的看的,毒瘤糟粕什麼的。大概知道就OK了,畢竟後來遇到了ts

《精通D3.js(第2版)》 用D3做可視化,一般應用看這本夠用了。

《Web開發技術叢書:深入理解Bootstrap》沒看完。用到了就翻翻。

《Learning TypeScript(中文版)》 其實如果只為了用angular2+,根本不需要看。但是看了絕對有幫助。並不難。

GIS相關:

《開源GIS與空間資料庫實戰教程》 薄。國人寫的教材。主要作為外行,了解一下這個領域的技術路線圖和基礎概念名詞,osg,wtk,gdal。。。

《Python地理數據處理》,《Python地理空間分析指南(第2版)》 這兩本,該涉及的python實現基本都講到了,也基本能理解GIS領域的語言了。

python

主要是提高自己在編碼實現方面的基礎素質,也是為了把python語言壓榨到極致。

我從來就不是個學習能力很強的人。

對python,2006年2.5時代,就看過了《programming python》、《learning

python》巨厚的英文版。雖然也做了基於wxpython的GUI程序作為實驗室生物信息集成採集的平台;博士畢業前也用過一點點作為機器學習框架,但是對python印象還是不深,掌握得還是不夠。

《華章程序員書庫·Python編程實戰:運用設計模式、並發和程序庫創建高質量程序》。受益非常多的一本書。很有深度,已經超出python語言本身。雖然很薄,但看起來絕對非常得慢。基礎不牢的時候看得非常吃力,因為涉及到了很深的東西(__subclasshook__()之類的反正我是驚到了,原來py里還有這種操作?!)。前1/3把21個設計模式用py實現,但省掉了好幾個py里不需要的。後面涉及到並行與並發,與C集成等等。

能把這麼深的東西里結合代碼寫得很明白的作者是有的;但能寫這麼薄的,就極少了,足見作者Summerfield的功力。

《Effective Python:編寫高質量Python代碼的59個有效方法》《編寫高質量代碼:改善Python程序的91個建議》,兩本很薄的書,但要精讀。要把這些tips從半生不熟,到完全融會貫通,寫出的py代碼才不那麼生澀。

《Python3面向對象編程》,21種設計模式的python版落地。

《Python面向對象編程指南》封面看著和上一本相似,其實不然。更深更廣。

推薦閱讀:

中國史上有哪些對世界影響深遠的書?
《百年孤獨》
2017年我讀過的書籍推薦
良心推薦——金字塔原理

TAG:技術書籍 | 書單 | 書籍推薦 |