根本復(fù)雜性(essential complexity)指的是問題與生俱來的、無法避免的困難。...與之相反,偶發(fā)復(fù)雜性(addidental complexity)是人們解決根本復(fù)雜性的過程中衍生的。...架構(gòu)師的責(zé)任在于解決問題的根本復(fù)雜性,同時避免引入偶發(fā)復(fù)雜性。
《簡化根本復(fù)雜性,消除偶發(fā)復(fù)雜性》Neal Ford
大多數(shù)項目是由人完成的,人才是項目成敗與否的基礎(chǔ)。如何幫助團隊成員完成項目,這個問題很值得靜下心來好好思考。
關(guān)于對話的技巧非常多,但有幾個簡單的技巧可以顯著改善對話的效果:
1.不要把對話當成對抗。如果你能看到他人的優(yōu)點,并把溝通視為請教問題的機會,就會有所收獲,同時也能避免引起對方的戒備之心。
2.不要帶著情緒與人溝通。當你處于憤怒、沮喪、煩惱,或者慌張的情緒中時,對方很可能會誤認為你的舉動不懷好意。
3.嘗試通過溝通設(shè)定共同的目標。有些人開會時喋喋不休影響別人發(fā)言,與其命令他閉嘴,不如請他協(xié)助你提高其他人的參與度。告訴他有些同事比較內(nèi)向,發(fā)言前需要安靜地理清思路。請他在每次發(fā)言之前稍作等待,讓同事有機會表達意見。
首先與同事達成一致的目標,把處理沖突和矛盾的過程視為學(xué)習(xí)的機會,控制住自己的情緒,那么每次溝通都會有所收獲,你會做得越來越好。
《關(guān)鍵問題可能不是出在技術(shù)上》Mark Ramm
以溝通為中心,堅持簡明清晰的表達方式和開明的領(lǐng)導(dǎo)風(fēng)格。Mark Richards
讓溝通事半功倍,起立發(fā)言是最簡單、有效的方法!《起立發(fā)言》Udi Dahan
工程師總是想盡辦法尋求合作,談判者則絞盡腦汁占得先機。談判時,絕不能在對方的第一個要求上妥協(xié)讓步。《我們常常忽略了自己在談判》Michael Nygard
眾所周知,堅持技術(shù)測試是需要耐心和毅力的,無論是搭建合適的測試環(huán)境,采集適當?shù)臄?shù)據(jù)集,還是編寫必要的測試用例,都須要投入大量的時間。提前開展性能測試,能讓你有條不紊地逐步完善測試環(huán)境,為解決性能問題節(jié)省下大量的時間和精力。《提前關(guān)注性能問題》Rebecca Parsons
以維護流程通暢為重,以浪費他人時間為恥。《草率提交任務(wù)是不負責(zé)任的行為》Niclas Nilsson
如果存在多個可實施方案難以取舍,“先簡單后通用”原則可以成為最終的評判標準。挑選基于具體需求的簡單方案,放棄鼓吹通用性的負責(zé)方案。而且簡單的方案在實踐中完全有可能表現(xiàn)出更好的通用性。退一步來說,修改簡單方案滿足需求,也比修改通用方案容易,因為通用方案常常在最關(guān)鍵的地方使不上勁兒。
追求隨心所欲的靈活性,會使人們在無意中錯失(有些人甚至故意忽略)更簡單的設(shè)計和更有價值的特性。《先確保解決方案簡單可用,再考慮通用性和復(fù)用性》Kelin Henney
稱職的架構(gòu)師應(yīng)該通過示范領(lǐng)導(dǎo)團隊。他能勝任團隊的所有工作,從網(wǎng)絡(luò)布線到配置構(gòu)建流程,從編寫單元測試到擔(dān)任測試工作。對技術(shù)缺乏全面理解的架構(gòu)師,充其量只是個項目經(jīng)理。《架構(gòu)師應(yīng)該親力親為》John Davies
架構(gòu)師應(yīng)該明白魚和熊掌不可兼得的道理。世上不存在十全十美的設(shè)計——既具有高性能,又具有高可用性;既高度安全,又高度抽象;有一個真實的歷史事件,軟件架構(gòu)師應(yīng)該爛熟于心,在與客戶或同事溝通時能派上用場。這就是瓦薩號戰(zhàn)艦的故事。
17世紀20年代,瑞典和波蘭之間爆發(fā)戰(zhàn)爭。瑞典國王迫于戰(zhàn)爭經(jīng)費的壓力,急欲速戰(zhàn)速決,他下令建造一艘名為瓦薩號的戰(zhàn)艦。這可不是一艘普通的戰(zhàn)艦,其設(shè)計要求絕非同時代戰(zhàn)艦可比:戰(zhàn)艦長60米,兩個炮臺上配備64門艦炮,可以將300名士兵從水路安全運送到波蘭。時間緊迫,資金緊張,而且設(shè)計師從未設(shè)計過這種規(guī)模的戰(zhàn)艦,只能憑經(jīng)驗和猜測著手設(shè)計。最終,工匠們按照設(shè)計說明建造了戰(zhàn)艦。下水那天,瓦薩號在隆重的儀式中駛?cè)牒8郏Q完禮炮后,徑直沉入了海底。
瓦薩號的問題很明顯。參觀過17、18世界大型戰(zhàn)艦的人都知道,甲板上空間有限而危險,作戰(zhàn)時情況更糟。建造一艘既能作戰(zhàn)又能運兵的戰(zhàn)艦是一個巨大的錯誤。設(shè)計師為了滿足國王的心愿,設(shè)計了一艘性能失衡、不堪一擊的戰(zhàn)艦。《取舍的藝術(shù)》Mark Richards
《不要輕易放過不起眼的問題》全文 Dave Quick
即便是最精美的架構(gòu),最優(yōu)雅的框架,可復(fù)用性最高的系統(tǒng),也必須滿足下面的條件才可能被復(fù)用。
大家知道他們存在;
大家知道如何使用他們;
大家認識到利用已有資源好過自己動手。
《讓大家學(xué)會復(fù)用》Jeremy Meyer
《架構(gòu)里沒有大寫的“I”》全文 Dave Quick
兩條公認的軟件開發(fā)的真理:
復(fù)制是魔鬼;
重復(fù)性的工作拖累開發(fā)進度。
消滅重復(fù)的內(nèi)容是你的責(zé)任,為此,應(yīng)該重新研究框架,創(chuàng)造更完善的抽象機制,請專門制作工具的程序員幫你完成切面框架,或者使用代碼生成器。要想消滅重復(fù)內(nèi)容必須有人采取行動。
這個人就是你。
《避免重復(fù)》Niclas Nilsson
計算機科學(xué)家設(shè)想的完美世界正在崩潰,我們該怎么辦?克服所有困難的步驟都一樣,首先要接受現(xiàn)實。向令人懷念的調(diào)用堆棧架構(gòu)告別吧,忘掉那些程序員決定程序流程的日子,準備好應(yīng)付隨時出現(xiàn)的亂序事件,不斷根據(jù)具體情境調(diào)整策略。用異步的、并發(fā)的請求代替一個接一個的方法調(diào)用。設(shè)計應(yīng)用時,借助事件驅(qū)動的過程鏈模型或狀態(tài)模型控制無序的狀況,通過調(diào)整、重發(fā),甚至試探的辦法糾正錯誤。
《歡迎來到現(xiàn)實世界》Gregor Hohpe
架構(gòu)師會從主觀的判斷或潛在不確定需求出發(fā),產(chǎn)生調(diào)整解決方案的強烈沖動。請記住一點:試圖猜測未來的需求時,錯的概率是50%,錯得很離譜的概率是49%。今天只需要解決今天的問題就好。《確保簡單的問題有簡單的解》Chad La Cigne
長遠看來,系統(tǒng)維護將比項目初期的開發(fā)消耗更多的資源。進行系統(tǒng)架構(gòu)設(shè)計時,牢記這點非常重要。在項目開發(fā)初期走捷徑,可能會以日后付出高昂的維護費用為代價。
碰到架構(gòu)問題或設(shè)計缺陷,作為架構(gòu)師,一定要堅持成本還很低廉時就動手。擱置越久,為之付出的利息也將越高。《現(xiàn)在走捷徑,將來付利息》Scot ZMcphee
我的建議是:不要屈服于企圖使設(shè)計或?qū)崿F(xiàn)達到完美的誘惑!把目標設(shè)定在“足夠好”就行,當已經(jīng)達成目標時,就停下來。
你可能會問,究竟什么是“足夠好”?“足夠好”指得是,剩余的不完美之處,對系統(tǒng)的功能、可維護性或性能不會產(chǎn)生任何有深遠意義的影響。架構(gòu)和設(shè)計協(xié)調(diào)一致;系統(tǒng)的實現(xiàn)正確可用,并符合性能需求;代碼整合簡潔,文檔化良好。還可以做得更好嗎?當然可以,但這樣已經(jīng)足夠好,所以就到此為止了吧。可以宣布設(shè)計勝利完成,然后轉(zhuǎn)入下一個任務(wù)了。
在我看來,再設(shè)計和實現(xiàn)上追求完美,會導(dǎo)致過度設(shè)計和模糊混亂的解決方案,最終使系統(tǒng)難以維護。
《不要追求完美,足夠好就行》Greg Nyberg
如果出現(xiàn)下面這些關(guān)鍵詞,要小心了:
“如果。。。,會更酷。”實際上,任何語句如果帶有“酷”字,都是危險信號。
“嘿,他們剛剛發(fā)布了YYY框架的XXX版本。我們應(yīng)該馬上升級!”
“由于我們在使用ZZZ,你知道,我們確實應(yīng)該重構(gòu)XXX。。。”
“XXX技術(shù)真的很強大!也許我們可以把它用于。。。”
《小心“好主意”》Greg Nyberg
如果都不知道一個東西應(yīng)該叫什么,那你肯定不知道它究竟是什么。如果你不知道它究竟是什么,那么你也肯定不能坐下來為它編寫代碼。
如果無法給出合適的命名,那也就無法繼續(xù)編程。如果發(fā)現(xiàn)自己需要多次更改命名,那么最好停下來,直到弄清楚要做的究竟是什么。
《命名要恰如其分》Sam Gardiner
聰明的軟件價格昂貴,不易維護,僵脆易折。所以,不要追求聰明,盡量用最淺顯易懂的質(zhì)樸方法,恰如其分的進行設(shè)計。
《棄聰明,求質(zhì)樸》Eben Hewitt
軟件架構(gòu)師工作很大的一部分,是要選擇用以攻克難題的合適技術(shù)。精心選擇熟悉的武器,不到萬不得已絕不輕易拋棄它們。這些技術(shù)在過去給你帶來了成功,盡量讓它們在未來也能為你帶來勝利,同時,以審慎的態(tài)度更新你的技術(shù)武器庫。
《精心選擇有效技術(shù),絕不輕易拋棄》Chad La Vigne
沒錯,你的客戶確實不是你的客戶。你的客戶的客戶,才是你的客戶。如果你的客戶的客戶贏了,你的客戶也就贏了。這意味著,你也贏了。
我們也不配稱得上真正關(guān)愛我們的客戶,如果不能更為關(guān)愛他們的客戶。
《客戶的客戶才是你的客戶》Eben Hewitt
《著重強調(diào)項目的商業(yè)價值》全文 周異
設(shè)計盡可能小的系統(tǒng),幫助成功交付,并推動它向宏偉的遠景目標不斷演化。雖然聽起來似乎是放棄了控制權(quán),甚至是在逃避責(zé)任,但是最終,利益相關(guān)者會感謝你。
《優(yōu)秀軟件不是構(gòu)建出來的,而是培育起來的》Bill de Hora