我的軟體開發書單(截止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面向對象編程指南》封面看著和上一本相似,其實不然。更深更廣。
推薦閱讀: