通常,人們對(duì)軟件架構(gòu)師持兩種錯(cuò)誤的看法。有人認(rèn)為軟件架構(gòu)師是一種高高在上的職位;有人認(rèn)為軟件架構(gòu)師完全不懂開發(fā),只是會(huì)畫條條框框的指揮家。《程序員必讀之軟件架構(gòu)》將打破這些傳統(tǒng)的認(rèn)知,模糊軟件開發(fā)和架構(gòu)在流程中的界限,進(jìn)而為軟件架構(gòu)正名。《程序員必讀之軟件架構(gòu)》是一本強(qiáng)調(diào)實(shí)踐、注重實(shí)效、輕量級(jí)、面向開發(fā)者的軟件架構(gòu)指南。
如果你是一名想成為軟件架構(gòu)師的程序員,那么《程序員必讀之軟件架構(gòu)》就是為你準(zhǔn)備的。
軟件架構(gòu)在成功的軟件交付中扮演著重要角色,但I(xiàn)T行業(yè)一直對(duì)軟件架構(gòu)存在誤解,缺乏應(yīng)有的重視。提到軟件架構(gòu),人們腦海中浮現(xiàn)的畫面通常是架構(gòu)師閉門造車,提前作好大型預(yù)置設(shè)計(jì),然后將UML模型或數(shù)百頁客戶需求文檔扔給毫不知情的開發(fā)團(tuán)隊(duì)。很多組織也將軟件架構(gòu)看做一種職位級(jí)別而非工作角色,甚至為了節(jié)省成本,將編碼工作外包,將本地開發(fā)人員推上“高高在上”的架構(gòu)師職位。種種現(xiàn)狀導(dǎo)致軟件架構(gòu)與編碼嚴(yán)重脫節(jié),也致使軟件架構(gòu)師在開發(fā)人員群體中名聲不佳,被視為脫離實(shí)際工作、只會(huì)畫框框線線的“指揮家”。其實(shí),下至接口設(shè)計(jì),上至技術(shù)選型,每個(gè)程序員多多少少都接觸或參與過一些架構(gòu)工作,架構(gòu)師也自然而然成為相當(dāng)一部分程序員的職業(yè)發(fā)展方向。
本書從全新的視角重新解讀軟件架構(gòu),揭示軟件架構(gòu)的本質(zhì),是一本強(qiáng)調(diào)實(shí)踐、注重實(shí)效、輕量級(jí)、面向開發(fā)人員的軟件架構(gòu)指南。本書作者是一位備受好評(píng)的軟件架構(gòu)講師,為全球20多個(gè)國家的軟件團(tuán)隊(duì)提供咨詢和培訓(xùn),其中不乏家喻戶曉的大型企業(yè)。在過去幾年中,他的實(shí)踐經(jīng)驗(yàn)已令數(shù)千人受益終生。
如果你是一名軟件開發(fā)人員,那么本書定會(huì)對(duì)你的職業(yè)發(fā)展有所助益。
架構(gòu)師真正要學(xué)會(huì)的事情
要學(xué)會(huì)去看,然后忘掉
有一本書叫《觀止》,寫的是微軟研發(fā)WindowsNT的一段故事!坝^止”在這里的意思是說“看到這些,就無需再看了”,因?yàn)槭郎现镆酂o過于此。20多年過去,如今微軟在操作系統(tǒng)上面臨著的種種挑戰(zhàn)與困境,其實(shí)與《觀止》所敘的研發(fā)方法、理念與目標(biāo)有著與生俱來的血緣關(guān)系。
另一個(gè)與“看”相關(guān)的詞匯是“所見即可得”(WYSIWYG)。這個(gè)詞以及與此相關(guān)的WIMP(Windows,Icon,MenuandPointer)曾經(jīng)主導(dǎo)了整個(gè)人機(jī)交互的設(shè)計(jì)理念。也是在20多年前,Borland為Windows桌面系統(tǒng)成功地設(shè)計(jì)了跨語言的VCL,由此“所見即所得”成為Borland對(duì)“如何更便捷地構(gòu)建UI”的基本假想,以至于這家偉大的公司在互聯(lián)網(wǎng)時(shí)代來臨時(shí)決定“用VCL描述界面的方式來解決‘網(wǎng)站設(shè)計(jì)’的問題(RadPHP)”。
然而,互聯(lián)網(wǎng)上的網(wǎng)頁是沒有WIMP的;移動(dòng)設(shè)備上的操作系統(tǒng)也不再采用與WindowsNT類似的方式開發(fā)。
Borland在幾年之前將整個(gè)開發(fā)工具產(chǎn)品線都賣掉了。當(dāng)時(shí)盛大的一個(gè)Delphi圈子發(fā)起了一次“緬懷活動(dòng)”,組織者說:“愛民,你應(yīng)該會(huì)為那個(gè)時(shí)代寫點(diǎn)什么吧?”
我在那個(gè)緬懷網(wǎng)頁上寫下了五個(gè)字:所見即所礙。
2.要學(xué)會(huì)去聽,然后忘掉
我通常說架構(gòu)是一種能力,架構(gòu)角色則是要求你在具體事務(wù)中行使某些行為,而架構(gòu)師則是用來標(biāo)識(shí)這些能力與行為的一個(gè)職務(wù)。
當(dāng)一些人將個(gè)人成長定義為“職業(yè)發(fā)展”時(shí),就表現(xiàn)為“怎樣成為架構(gòu)師”這樣的問題。對(duì)此有三種解決方案,第一種是印一張寫著這樣頭銜的名片,而“是與不是”架構(gòu)師并不重要;第二種是直接否定這個(gè)職務(wù)的意義,比如聲稱敏捷天生就是反架構(gòu)的,于是“架構(gòu)師”變成了要打倒的對(duì)象,所以成不成為這個(gè)將被打倒的對(duì)象也就不重要了;第三種則干脆聲稱“人人都是架構(gòu)師”,既然人人都是了,那么“如何成為”也自然就不重要了。
我們大多數(shù)人都具有架構(gòu)的能力,并且也或多或少地行使某些架構(gòu)角色的行為,唯一缺乏的只是一個(gè)叫做“架構(gòu)師”的頭銜而已。問題出在我們總是期望別人通過這樣的頭銜來認(rèn)可自己。于是我們?yōu)樽约嘿N上這樣或那樣的標(biāo)簽,然后跟別人持有的同種標(biāo)簽去比對(duì),期求出現(xiàn)一致或找出某種差別。于是我們聽到種種聲音:某某某真的是/不是、像/不像架構(gòu)師;如果是架構(gòu)師,那么就要這樣那樣,以及怎樣怎樣;其實(shí)這個(gè)架構(gòu)、這樣的架構(gòu),或某種架構(gòu)應(yīng)該怎么做;以及架構(gòu)是什么,架構(gòu)師是什么,等等;仡櫋叭N解決方案”,仍是困在這樣的認(rèn)可求同之中,與之在做著種種斗爭罷了。
其實(shí)不單是你的所見阻礙了你自己,你還被別人的所見阻礙著。
3.要學(xué)會(huì)去做,然后忘掉
朋友跟我聊他家的兩歲小孩:我剛把桌子收拾好,一轉(zhuǎn)眼杯子碗筷什么的都全摔地上了。我問:“怎么了?”他說:“小孩子什么也不懂啊,她看到桌布覺得喜歡,就一把抓過去……”
小孩子沒能看到桌子上還有杯子,但正因?yàn)樗麄兊囊暰里沒有杯子,他們的行動(dòng)才簡單直接,才直達(dá)需求,才迅速。而我們的眼睛里有杯子、桌子、桌布等一切,我們經(jīng)年累月地維護(hù)著其中的次序與關(guān)系直到這些東西混成一體,然后我們便日日坐守在它們的面前,而又無覺他們的存在。
正是我們自己不知不覺地設(shè)定了這些事物之間的界線,并把這些界限、層次與邏輯井然的東西稱為“系統(tǒng)”。當(dāng)我們從那些無序的事物中識(shí)別出了這樣的“系統(tǒng)”并用一些概念、名詞去定義了它們之后,我們對(duì)此的一切知識(shí)也就固化了。當(dāng)這種秩序被建立起來之后,我們也就得到了對(duì)有序和無序(沒有你所設(shè)定的“這種秩序”)價(jià)值的識(shí)別與肯否;當(dāng)我們?cè)O(shè)定了種種價(jià)值、觀念、觀察與系統(tǒng)的模型概念之后,也就完成了這個(gè)系統(tǒng)的架構(gòu)。
但這一過程,包括完成這一架構(gòu)——它可以命名為“世界觀”——的方法以及結(jié)果,在本質(zhì)上不過是讓你從一個(gè)格子跳到了另一個(gè)格子而已。我們處在種種界限之中,再也無法回到兩歲小孩的、一切無礙的視角:在那個(gè)視角下,根本就沒有所謂的界線。你之所以時(shí)時(shí)在尋求跨界,其實(shí)是源自你假設(shè)了“存在界線”,這就如同全棧的含義其實(shí)是“沒有!保(dāng)有人信心滿滿地要“成為全棧工程師”時(shí),他的眼里便又有個(gè)“這個(gè)!钡拇嬖。
所謂跨界不是指你能力與方法上的變化,你的作為取決于你的格局,你的格局取決于你的所見。
4.要學(xué)會(huì)超越
架構(gòu)師需要超越自己與別人的所見,因?yàn)槟阌^察與架構(gòu)的對(duì)象稱為“系統(tǒng)”,你看到系統(tǒng)多少的真相,決定了你用怎樣的影像去表現(xiàn)它,并進(jìn)而推進(jìn)與實(shí)現(xiàn)這種影像,亦即是架構(gòu)。我們既已知道的、理解的、明白的,形成了我們的知識(shí)與行為的一切,卻也正是阻礙著我們前進(jìn)的東西。這些障礙正是你以為你最珍視的、最不可放棄的、最鮮血淅瀝體驗(yàn)過的那些經(jīng)驗(yàn)與成就。在這些所得與所礙中掙扎與決策,就是架構(gòu)師的全部職責(zé)。因此作為架構(gòu)師,你需要能夠超越自已對(duì)系統(tǒng)的既有認(rèn)識(shí),看到你在光明中——顯而易見之處——所未見的,這是你驅(qū)動(dòng)系統(tǒng)架構(gòu)進(jìn)化的主要?jiǎng)恿Α?br />
所以架構(gòu)中最難超越的并不是某個(gè)大師或前輩,而是你以及你為自己所作的設(shè)定。當(dāng)你設(shè)定了“架構(gòu)師”這個(gè)目標(biāo),便設(shè)定了這個(gè)目標(biāo)所表達(dá)的某種影像(角色),你最終可能變得跟這個(gè)影像完全一致——成為所謂的“真正的架構(gòu)師”,但你仍不過是困囿于對(duì)這個(gè)“角色”的一個(gè)假設(shè)/設(shè)定而已。唯一破局的方法是:超越別人對(duì)某個(gè)角色的定義,將自己做成這個(gè)角色。
至此,你是否還在這個(gè)角色之中,就是你的覺悟了。
周愛民
現(xiàn)任豌豆莢架構(gòu)師
前盛大網(wǎng)絡(luò)平臺(tái)架構(gòu)師、支付寶業(yè)務(wù)架構(gòu)師
SimonBrown,全球知名軟件架構(gòu)獨(dú)立咨詢師、講師,創(chuàng)辦了專門討論軟件架構(gòu)問題的網(wǎng)站“編碼架構(gòu)”(codingthearchitecture.com)。他自稱是寫代碼的軟件架構(gòu)師和明白架構(gòu)的軟件開發(fā)者。自2008年以來的7年時(shí)間里,Simon在全球28個(gè)國家做過有關(guān)軟件架構(gòu)、技術(shù)領(lǐng)導(dǎo)力及其與敏捷的平衡等主題的百余場演講,并于2012年8月在中國舉辦的ArchSummit全球架構(gòu)師峰會(huì)上以“郁悶的架構(gòu)師”和“如何設(shè)計(jì)安全的架構(gòu)”為主題發(fā)表演講,深受與會(huì)者好評(píng)。Simon已為全球20多個(gè)國家的軟件團(tuán)隊(duì)提供咨詢和培訓(xùn),他的客戶既有小型技術(shù)初創(chuàng)企業(yè),也不乏全球家喻戶曉的品牌公司。
推薦序一:架構(gòu)師真正要學(xué)會(huì)的事情
推薦序二
譯者序2.0
序
關(guān)于本書
軟件架構(gòu)培訓(xùn)
Part Ⅰ 什么是軟件架構(gòu)
第1章 什么是架構(gòu)
第2章 架構(gòu)的種類
第3章 軟件架構(gòu)是什么
第4章 敏捷軟件架構(gòu)是什么
第5章 架構(gòu)對(duì)上設(shè)計(jì)
第6章 軟件架構(gòu)重要嗎
第7章 問題
Part Ⅱ 軟件架構(gòu)的角色
第8章 軟件架構(gòu)的角色
第9章 軟件架構(gòu)師應(yīng)該編碼嗎
第10章 軟件架構(gòu)師應(yīng)該是建造大師
第11章 從開發(fā)者到架構(gòu)師
第12章 拓展T
第13章 軟技能
第14章 軟件架構(gòu)不是接力運(yùn)動(dòng)
第15章 軟件架構(gòu)要引入控制嗎
第16章 小心鴻溝
第17章 未來的軟件架構(gòu)師在哪里
第18章 每個(gè)人都是架構(gòu)師,除非他們有其他身份
第19章 軟件架構(gòu)咨詢師
第20章 問題
Part Ⅲ 設(shè)計(jì)軟件
第21章 架構(gòu)驅(qū)動(dòng)力
第22章 質(zhì)量屬性(非功能需求)
第23章 處理非功能需求
第24章 約束
第25章 原則
第26章 技術(shù)不是實(shí)現(xiàn)細(xì)節(jié)
第27章 更多分層等于更高復(fù)雜度
第28章 協(xié)同設(shè)計(jì)是一把雙刃劍
第29章 軟件架構(gòu)是對(duì)話的平臺(tái)
第30章 SharePoint項(xiàng)目也需要軟件架構(gòu)
第31章 問題
Part Ⅳ 可視化軟件
第32章 溝通障礙
第33章 對(duì)草圖的需要
第34章 效的草圖
第35章 C4:語境、容器、組件和類
第36章 語境圖
第37章 容器圖
第38章 組件圖
第39章 是否包含技術(shù)選擇
第40章 你會(huì)那樣編碼嗎
第41章 軟件架構(gòu)和編碼
第42章 你不需要UML工具
第43章 有效的草圖
第44章 C4的常見問題
第45章 問題
Part Ⅴ 為軟件生成文檔
第46章 代碼不會(huì)講述完整的故事
第47章 軟件文檔即指南
第48章 語境
第49章 功能性概覽
第50章 質(zhì)量屬性
第51章 約束
第52章 原則
第53章 軟件架構(gòu)
第54章 外部接口
第55章 代碼
第56章 數(shù)據(jù)
第57章 基礎(chǔ)設(shè)施架構(gòu)
第58章 部署
第59章 運(yùn)營和支持
第60章 決策日志
第61章 問題
Part Ⅵ 開發(fā)生命周期中的軟件架構(gòu)
第62章 敏捷和架構(gòu)的沖突:神話還是現(xiàn)實(shí)
第63章 量化風(fēng)險(xiǎn)
第64章 風(fēng)險(xiǎn)風(fēng)暴
第65章 恰如其分的預(yù)先設(shè)計(jì)
第66章 初識(shí)軟件架構(gòu)
第67章 問題
Part Ⅶ 金融風(fēng)險(xiǎn)系統(tǒng)
第68章 金融風(fēng)險(xiǎn)系統(tǒng)
Part Ⅷ 附錄:"技術(shù)部落"的軟件指南