- 程序員必讀之軟件架構(gòu)
- (英)Simon Brown
- 2127字
- 2020-05-06 16:48:08
推薦序一:架構(gòu)師真正要學(xué)會的事情
1.要學(xué)會去看,然后忘掉
有一本書叫《觀止》,寫的是微軟研發(fā)Windows NT的一段故事?!坝^止”在這里的意思是說“看到這些,就無需再看了”,因為世上之物亦無過于此。20多年過去,如今微軟在操作系統(tǒng)上面臨著的種種挑戰(zhàn)與困境,其實與《觀止》所敘的研發(fā)方法、理念與目標(biāo)有著與生俱來的血緣關(guān)系。
另一個與“看”相關(guān)的詞匯是“所見即可得”(WYSIWYG)。這個詞以及與此相關(guān)的WIMP(Windows, Icon, Menu and Pointer)曾經(jīng)主導(dǎo)了整個人機交互的設(shè)計理念。也是在20多年前,Borland為Windows桌面系統(tǒng)成功地設(shè)計了跨語言的VCL,由此“所見即所得”成為Borland對“如何更便捷地構(gòu)建UI”的基本假想,以至于這家偉大的公司在互聯(lián)網(wǎng)時代來臨時決定“用VCL描述界面的方式來解決‘網(wǎng)站設(shè)計’的問題(RadPHP)”。
然而,互聯(lián)網(wǎng)上的網(wǎng)頁是沒有WIMP的;移動設(shè)備上的操作系統(tǒng)也不再采用與Windows NT類似的方式開發(fā)。
Borland在幾年之前將整個開發(fā)工具產(chǎn)品線都賣掉了。當(dāng)時盛大的一個Delphi圈子發(fā)起了一次“緬懷活動”,組織者說:“愛民,你應(yīng)該會為那個時代寫點什么吧?”
我在那個緬懷網(wǎng)頁上寫下了五個字:所見即所礙。
2.要學(xué)會去聽,然后忘掉
我通常說架構(gòu)是一種能力,架構(gòu)角色則是要求你在具體事務(wù)中行使某些行為,而架構(gòu)師則是用來標(biāo)識這些能力與行為的一個職務(wù)。
當(dāng)一些人將個人成長定義為“職業(yè)發(fā)展”時,就表現(xiàn)為“怎樣成為架構(gòu)師”這樣的問題。對此有三種解決方案,第一種是印一張寫著這樣頭銜的名片,而“是與不是”架構(gòu)師并不重要;第二種是直接否定這個職務(wù)的意義,比如聲稱敏捷天生就是反架構(gòu)的,于是“架構(gòu)師”變成了要打倒的對象,所以成不成為這個將被打倒的對象也就不重要了;第三種則干脆聲稱“人人都是架構(gòu)師”,既然人人都是了,那么“如何成為”也自然就不重要了。
我們大多數(shù)人都具有架構(gòu)的能力,并且也或多或少地行使某些架構(gòu)角色的行為,唯一缺乏的只是一個叫做“架構(gòu)師”的頭銜而已。問題出在我們總是期望別人通過這樣的頭銜來認可自己。于是我們?yōu)樽约嘿N上這樣或那樣的標(biāo)簽,然后跟別人持有的同種標(biāo)簽去比對,期求出現(xiàn)一致或找出某種差別。于是我們聽到種種聲音:某某某真的是/不是、像/不像架構(gòu)師;如果是架構(gòu)師,那么就要這樣那樣,以及怎樣怎樣;其實這個架構(gòu)、這樣的架構(gòu),或某種架構(gòu)應(yīng)該怎么做;以及架構(gòu)是什么,架構(gòu)師是什么,等等。回顧“三種解決方案”,仍是困在這樣的認可求同之中,與之在做著種種斗爭罷了。
其實不單是你的所見阻礙了你自己,你還被別人的所見阻礙著。
3.要學(xué)會去做,然后忘掉
朋友跟我聊他家的兩歲小孩:我剛把桌子收拾好,一轉(zhuǎn)眼杯子碗筷什么的都全摔地上了。我問:“怎么了?”他說:“小孩子什么也不懂啊,她看到桌布覺得喜歡,就一把抓過去……”
小孩子沒能看到桌子上還有杯子,但正因為他們的視線里沒有杯子,他們的行動才簡單直接,才直達需求,才迅速。而我們的眼睛里有杯子、桌子、桌布等一切,我們經(jīng)年累月地維護著其中的次序與關(guān)系直到這些東西混成一體,然后我們便日日坐守在它們的面前,而又無覺他們的存在。
正是我們自己不知不覺地設(shè)定了這些事物之間的界線,并把這些界限、層次與邏輯井然的東西稱為“系統(tǒng)”。當(dāng)我們從那些無序的事物中識別出了這樣的“系統(tǒng)”并用一些概念、名詞去定義了它們之后,我們對此的一切知識也就固化了。當(dāng)這種秩序被建立起來之后,我們也就得到了對有序和無序(沒有你所設(shè)定的“這種秩序”)價值的識別與肯否;當(dāng)我們設(shè)定了種種價值、觀念、觀察與系統(tǒng)的模型概念之后,也就完成了這個系統(tǒng)的架構(gòu)。
但這一過程,包括完成這一架構(gòu)——它可以命名為“世界觀”——的方法以及結(jié)果,在本質(zhì)上不過是讓你從一個格子跳到了另一個格子而已。我們處在種種界限之中,再也無法回到兩歲小孩的、一切無礙的視角:在那個視角下,根本就沒有所謂的界線。你之所以時時在尋求跨界,其實是源自你假設(shè)了“存在界線”,這就如同全棧的含義其實是“沒有?!?,而當(dāng)有人信心滿滿地要“成為全棧工程師”時,他的眼里便又有個“這個?!钡拇嬖?。
所謂跨界不是指你能力與方法上的變化,你的作為取決于你的格局,你的格局取決于你的所見。
4.要學(xué)會超越
架構(gòu)師需要超越自己與別人的所見,因為你觀察與架構(gòu)的對象稱為“系統(tǒng)”,你看到系統(tǒng)多少的真相,決定了你用怎樣的影像去表現(xiàn)它,并進而推進與實現(xiàn)這種影像,亦即是架構(gòu)。我們既已知道的、理解的、明白的,形成了我們的知識與行為的一切,卻也正是阻礙著我們前進的東西。這些障礙正是你以為你最珍視的、最不可放棄的、最鮮血淅瀝體驗過的那些經(jīng)驗與成就。在這些所得與所礙中掙扎與決策,就是架構(gòu)師的全部職責(zé)。因此作為架構(gòu)師,你需要能夠超越自已對系統(tǒng)的既有認識,看到你在光明中——顯而易見之處——所未見的,這是你驅(qū)動系統(tǒng)架構(gòu)進化的主要動力。
所以架構(gòu)中最難超越的并不是某個大師或前輩,而是你以及你為自己所作的設(shè)定。當(dāng)你設(shè)定了“架構(gòu)師”這個目標(biāo),便設(shè)定了這個目標(biāo)所表達的某種影像(角色),你最終可能變得跟這個影像完全一致——成為所謂的“真正的架構(gòu)師”,但你仍不過是困囿于對這個“角色”的一個假設(shè)/設(shè)定而已。唯一破局的方法是:超越別人對某個角色的定義,將自己做成這個角色。
至此,你是否還在這個角色之中,就是你的覺悟了。
周愛民
現(xiàn)任豌豆莢架構(gòu)師
前盛大網(wǎng)絡(luò)平臺架構(gòu)師、支付寶業(yè)務(wù)架構(gòu)師
- pytest框架與自動化測試應(yīng)用
- QTP自動化測試最佳實踐
- PhoneGap開發(fā)指南
- 軟件開發(fā)生產(chǎn)率改進:軟件管理的有效領(lǐng)導(dǎo)力與量化方法
- Cadence系統(tǒng)級封裝設(shè)計:Allegro SiP/APD設(shè)計指南
- 移動Web實現(xiàn)指南:面向移動設(shè)備的網(wǎng)站優(yōu)化、開發(fā)和設(shè)計
- Android應(yīng)用安全防護和逆向分析
- 卡爾曼濾波原理及應(yīng)用:MATLAB仿真(第2版)
- 3D打印創(chuàng)意小創(chuàng)客
- 自己動手構(gòu)造編譯系統(tǒng):編譯、匯編與鏈接
- 大規(guī)模組織DevOps實踐(第2版)
- Android性能優(yōu)化入門與實戰(zhàn)
- 構(gòu)建移動網(wǎng)站與APP:ionic移動開發(fā)入門與實戰(zhàn) (跨平臺移動開發(fā)叢書)
- Scrum捷徑:敏捷策略、工具與技巧
- 微信公眾平臺開發(fā)實例教程