- 程序員必讀之軟件架構(gòu)
- (英)Simon Brown
- 1946字
- 2020-05-06 16:48:09
關(guān)于本書
這是一本強調(diào)實踐、注重實效、輕量級、面向開發(fā)者的軟件架構(gòu)指南。你將從中學到:
? 軟件架構(gòu)的本質(zhì);
? 為什么軟件架構(gòu)角色應(yīng)當包含編碼、指導(dǎo)與合作;
? 開始編碼前真正需要思考的事情;
? 如何用簡單的草圖讓你的軟件架構(gòu)可視化;
? 為軟件生成文檔的輕量方法;
? 為什么敏捷和架構(gòu)并不沖突;
? “恰如其分”的預(yù)先設(shè)計是什么意思;
? 如何通過風險風暴來識別風險。
這部短文集推倒了傳統(tǒng)的象牙塔,模糊了軟件開發(fā)和架構(gòu)在流程中的界限,將教會你軟件架構(gòu)、技術(shù)領(lǐng)導(dǎo)力以及它們與敏捷之間的平衡。
本書寫作初衷
跟很多人一樣,我的職業(yè)生涯從軟件開發(fā)開始,從前輩那里得到指導(dǎo),和團隊一起工作,交付軟件系統(tǒng)。久而久之,我也開始設(shè)計軟件系統(tǒng)中的一小部分,最后我的職務(wù)變成了這樣:承擔我現(xiàn)在認為是設(shè)計軟件架構(gòu)的任務(wù)。
我的職業(yè)生涯多數(shù)是為IT咨詢機構(gòu)工作,這意味著我參與過的大多數(shù)項目要么是為客戶構(gòu)架軟件系統(tǒng),要么是和客戶一起完成構(gòu)建。IT咨詢機構(gòu)要發(fā)展壯大,就需要更多的人和團隊。要組建更多團隊,又需要更多的軟件架構(gòu)師。這就是我寫這本書的理由。
(1) 軟件架構(gòu)應(yīng)該容易理解。第一次設(shè)計軟件架構(gòu)時,盡管有一些優(yōu)秀的導(dǎo)師,但我還是搞不清自己該干些什么。的確,有很多軟件架構(gòu)方面的書籍,但它們的寫作視角不一樣。我發(fā)現(xiàn)其中大多數(shù)都偏研究方向,甚至完全是學術(shù)派,而我是一個尋求現(xiàn)實建議的軟件開發(fā)者。我想寫一本對我職業(yè)生涯的那個階段有用的書,即面向軟件開發(fā)者的軟件架構(gòu)書。
(2) 所有軟件項目都需要架構(gòu)。我真心喜歡敏捷方法,但其中很多方法缺乏對軟件架構(gòu)的明確重視,這讓我如坐針氈。敏捷方法不是說不應(yīng)該做任何預(yù)先設(shè)計,但它們通常也不明確探討這一點。我發(fā)現(xiàn)這會讓人們得出錯誤的結(jié)論,我也看到了缺乏預(yù)先思考可能造成的后果。我非常清楚大型預(yù)先設(shè)計也不能解決問題。我感覺適當?shù)刈?span id="f1trttr" class="kt_110">一些預(yù)先思考能提供一種愉快的中間狀態(tài),而這特別適合與不同經(jīng)驗和背景的團隊一起工作的情形。我更喜歡輕量的軟件架構(gòu)方法,這樣我就可以盡早讓一些結(jié)構(gòu)單元到位,從而提高成功率。
(3) 傳播輕量級軟件架構(gòu)實踐。這些年我學習和實踐了很多對設(shè)計軟件架構(gòu)很有幫助的做法。這些實踐涉及軟件設(shè)計流程,并通過發(fā)現(xiàn)技術(shù)風險來溝通和記錄軟件架構(gòu)。我總是認為這些實踐都合理,但情況并非如此。過去幾年,我向上千人教授這些實踐,并見證了他們的變化。寫書可以幫助我把這些想法傳遞給更多人,希望其他人也能從中受益。
軟件開發(fā)的新方法
這本書不談創(chuàng)造軟件開發(fā)的新方法。傳統(tǒng)軟件開發(fā)經(jīng)常會過度地預(yù)先思考,而初次接觸敏捷方法的團隊往往又缺乏架構(gòu)思維,本書就是想要在這兩者之間找到一個很好的平衡點。最終要告訴大家,預(yù)先設(shè)計與演化架構(gòu)是可以共存的。
關(guān)于軟件架構(gòu),每個開發(fā)者都應(yīng)該知道的五件事
為了幫助你大致了解本書的內(nèi)容,這里有每個開發(fā)者都應(yīng)該知道的五件有關(guān)軟件架構(gòu)的事。
1.軟件架構(gòu)不是大型預(yù)先設(shè)計
軟件架構(gòu)歷來被認為跟大型預(yù)先設(shè)計和瀑布式項目有關(guān),團隊要周全地考慮軟件設(shè)計的所有細節(jié),然后才開始編碼。軟件架構(gòu)就是關(guān)于軟件系統(tǒng)的高層次結(jié)構(gòu),以及你如何理解它。它是影響軟件系統(tǒng)形態(tài)的重要決策,而非理解數(shù)據(jù)庫每個字段應(yīng)該有多長。
2.每個軟件團隊都需要考慮軟件架構(gòu)
不論產(chǎn)品的大小和復(fù)雜性,每個軟件團隊都需要考慮軟件架構(gòu)。為什么?簡單地說,尚未發(fā)生的壞事往往都會發(fā)生!如果軟件架構(gòu)是關(guān)于結(jié)構(gòu)和愿景的,不考慮這一點就可能產(chǎn)出結(jié)構(gòu)糟糕、內(nèi)部不一致的軟件系統(tǒng)。這樣的軟件系統(tǒng)難以理解和維護,很可能無法滿足一些重要的非功能需求,比如性能、可伸縮性或安全性。明確地考慮軟件架構(gòu),提供了一種引入技術(shù)領(lǐng)導(dǎo)的方式,增加成功交付的勝算也對你有益。
3.軟件架構(gòu)的角色關(guān)乎編碼、指導(dǎo)和合作
很多人對軟件架構(gòu)師的印象還很老套,以為就是“象牙塔”軟件架構(gòu)師向毫不知情的開發(fā)團隊面授機宜。其實并非如此,因為現(xiàn)代軟件建構(gòu)更傾向于成為一種有利于編碼、指導(dǎo)和協(xié)同設(shè)計的方法。軟件架構(gòu)的角色不一定要由一個人來承擔,而且要了解得到的架構(gòu)是否確實行得通,編碼是非常好的方式。
4.無需使用UML
同樣地,傳統(tǒng)觀點還以為軟件架構(gòu)就是試圖捕捉每一個細節(jié)的龐大UML模型。創(chuàng)造和交流共同的愿景很重要,然而你不見得需要使用UML。實際上,可以說UML并不是一個交流軟件架構(gòu)的好方法。如果要保留一些簡單的指導(dǎo)方針,輕量級“框線”風格的草圖是一個交流軟件架構(gòu)的有效方式。
5.好的軟件架構(gòu)是支持敏捷開發(fā)的
有一種普遍的誤解,認為“架構(gòu)”和“敏捷”之間是矛盾的。但恰恰相反,好的軟件架構(gòu)是支持敏捷的,可以幫助你擁抱并實現(xiàn)變化。然而好的軟件架構(gòu)并非與生俱來,需要你努力爭取。
在微博上分享這本書
請幫Simon Brown在新浪微博上宣傳這本書。
推薦本書的微博以#程序員必讀之軟件架構(gòu)#開頭。
點擊下面這個鏈接,在新浪微博上搜索其他人對本書的評價:
http://huati.weibo.com/k/程序員必讀之軟件架構(gòu)