![寫給程序員的乾貨文章:架構師真正要學會的事情](http://p2.ttnews.xyz/loading.gif)
本文引自周愛民老師[就職於南潮(Ruff),現任架構師一職]寫給《程序員必讀之軟件架構》一書的推薦序。
編者按:軟件架構師是在一個軟件項目開發過程中,將客戶的需求轉換為規範的開發計劃及文本,制定項目的總體架構,並指導開發團隊完成這個計劃的人員。軟件架構師主導系統全局分析設計與實施和關鍵技術決策。所謂的架構角色,是對思維和技術上的雙重挑戰,也應該是所有開發者的終極目標。希望此文對想要成為、即將成為或已經成為架構師的朋友受用。
1. 要學會去看,然後忘掉
有一本書叫《觀止》,寫的是微軟研發Windows NT 的一段故事。“觀止”在這裡的意思是說“看到這些,就無需再看了”,因為世上之物亦無過於此。20 多年過去,如今微軟在操作系統上面臨著的種種挑戰與困境,其實與《觀止》所敘的研發方法、理念與目標有著與生俱來的血緣關係。
另一個與“看”相關的詞彙是“所見即可得”(WYSIWYG)。這個詞以及與此相關的WIMP(Windows, Icon, Menu and Pointer)曾經主導了整個人機交互的設計理念。也是在20 多年前,Borland 為Windows 桌面系統成功地設計了跨語言的VCL,由此“所見即所得”成為Borland 對“如何更便捷地構建UI”的基本假想,以至於這家偉大的公司在互聯網時代來臨時決定“用VCL 描述界面的方式來解決‘網站設計’的問題(RadPHP)”。
然而,互聯網上的網頁是沒有WIMP 的;移動設備上的操作系統也不再採用與Windows NT類似的方式開發。
Borland 在幾年之前將整個開發工具產品線都賣掉了。當時盛大的一個Delphi 圈子發起了一次“緬懷活動”,組織者說:“愛民,你應該會為那個時代寫點什麼吧?”
我在那個緬懷網頁上寫下了五個字:所見即所礙。
![寫給程序員的乾貨文章:架構師真正要學會的事情](http://p2.ttnews.xyz/loading.gif)
2. 要學會去聽,然後忘掉
我通常說架構是一種能力,架構角色則是要求你在具體事務中行使某些行為,而架構師則是用來標識這些能力與行為的一個職務。
當一些人將個人成長定義為“職業發展”時,就表現為“怎樣成為架構師”這樣的問題。
對此有三種解決方案:
- 第一種是印一張寫著這樣頭銜的名片,而“是與不是”架構師並不重要;
- 第二種是直接否定這個職務的意義,比如聲稱敏捷天生就是反架構的,於是“架構師”變成了要打倒的對象,所以成不成為這個將被打倒的對象也就不重要了;
- 第三種則乾脆聲稱“人人都是架構師”,既然人人都是了,那麼“如何成為”也自然就不重要了。
我們大多數人都具有架構的能力,並且也或多或少地行使某些架構角色的行為,唯一缺乏的只是一個叫做“架構師”的頭銜而已。問題出在我們總是期望別人通過這樣的頭銜來認可自己。於是我們為自己貼上這樣或那樣的標籤,然後跟別人持有的同種標籤去比對,期求出現一致或找出某種差別。於是我們聽到種種聲音:某某某真的是/不是、像/不像架構師;如果是架構師,那麼就要這樣那樣,以及怎樣怎樣;其實這個架構、這樣的架構,或某種架構應該怎麼做;以及架構是什麼,架構師是什麼,等等。回顧“三種解決方案”,仍是困在這樣的認可求同之中,與之在做著種種鬥爭罷了。
其實不單是你的所見阻礙了你自己,你還被別人的所見阻礙著。
3. 要學會去做,然後忘掉
朋友跟我聊他家的兩歲小孩:我剛把桌子收拾好,一轉眼杯子碗筷什麼的都全摔地上了。我問:“怎麼了?”他說:“小孩子什麼也不懂啊,她看到桌布覺得喜歡,就一把抓過去……”
小孩子沒能看到桌子上還有杯子,但正因為他們的視線裡沒有杯子,他們的行動才簡單直接,才直達需求,才迅速。而我們的眼睛裡有杯子、桌子、桌布等一切,我們經年累月地維護著其中的次序與關係直到這些東西混成一體,然後我們便日日坐守在它們的面前,而又無覺他們的存在。
正是我們自己不知不覺地設定了這些事物之間的界線,並把這些界限、層次與邏輯井然的東西稱為“系統”。當我們從那些無序的事物中識別出了這樣的“系統”並用一些概念、名詞去定義了它們之後,我們對此的一切知識也就固化了。當這種秩序被建立起來之後,我們也就得到了對有序和無序(沒有你所設定的“這種秩序”)價值的識別與肯否;當我們設定了種種價值、觀念、觀察與系統的模型概念之後,也就完成了這個系統的架構。
但這一過程,包括完成這一架構——它可以命名為“世界觀”——的方法以及結果,在本質上不過是讓你從一個格子跳到了另一個格子而已。我們處在種種界限之中,再也無法回到兩歲小孩的、一切無礙的視角:在那個視角下,根本就沒有所謂的界線 。你之所以時時在尋求跨界,其實是源自你假設了“存在界線”,這就如同全棧的含義其實是“沒有棧”,而當有人信心滿滿地要“成為全棧工程師”時,他的眼裡便又有個“這個棧”的存在。
所謂跨界不是指你能力與方法上的變化,你的作為取決於你的格局,你的格局取決於你的所見。
4. 要學會超越
架構師需要超越自己與別人的所見,因為你觀察與架構的對象稱為“系統”,你看到系統多少的真相,決定了你用怎樣的影像去表現它,並進而推進與實現這種影像,亦即是架構。我們既已知道的、理解的、明白的,形成了我們的知識與行為的一切,卻也正是阻礙著我們前進的東西。
這些障礙正是你以為你最珍視的、最不可放棄的、最鮮血淅瀝體驗過的那些經驗與成就。在這些所得與所礙中掙扎與決策,就是架構師的全部職責。因此作為架構師,你需要能夠超越自已對系統的既有認識,看到你在光明中——顯而易見之處——所未見的,這是你驅動系統架構進化的主要動力。
所以架構中最難超越的並不是某個大師或前輩,而是你以及你為自己所作的設定。當你設定了“架構師”這個目標,便設定了這個目標所表達的某種影像(角色),你最終可能變得跟這個影像完全一致——成為所謂的“真正的架構師”,但你仍不過是困囿於對這個“角色”的一個假設/設定而已。唯一破局的方法是:超越別人對某個角色的定義,將自己做成這個角色 。
至此,你是否還在這個角色之中,就是你的覺悟了。
《程序員必讀之軟件架構》是一本強調實踐、注重實效、輕量級、面向開發者的軟件架構指南。如果你是一名想成為軟件架構師的程序員,那麼《程序員必讀之軟件架構》就是你的不二之選。
《程序員必讀之軟件架構》 作者:[美]Simon Brown,譯者:鄧鋼
作者Simon Brown 全球知名軟件架構獨立諮詢師、講師,創辦了專門討論軟件架構問題的網站“編碼架構”(http://codingthearchitecture.com)。他自稱是寫代碼的軟件架構師和明白架構的軟件開發者。自2008年以來的7年時間裡,Simon在全球28個國家做過有關軟件架構、技術領導力及其與敏捷的平衡等主題的百餘場演講,並於2012年8月在中國舉辦的ArchSummit全球架構師峰會上以“鬱悶的架構師”和“如何設計安全的架構”為主題發表演講,深受與會者好評。Simon已為全球20多個國家的軟件團隊提供諮詢和培訓,他的客戶既有小型技術初創企業,也不乏全球家喻戶曉的品牌公司。
閱讀更多 人民郵電出版社 的文章