剛哥談架構 (二) 我眼中的架構師
之前在公司,有小夥伴在向別人介紹我的時候,經常會有人這麼說:“剛哥是我們的architecture”,如果來人是老外,心中一定是一驚,心中暗歎,“這位匪首看上去貌不驚人,難道已經做到了架構和本人天人合一和最高境界了?” 回頭,我不免又要嘮叨兩句,“同學們,沒文化,很可怕,我是架構師architect,不是架構architecture” 就像我上次跟大家聊的一樣,人是架構要解決的核心問題之一,那麼說“人暨架構”,似乎也是有些道理。但是你要是硬說架構師就是架構,恐怕你是對架構師有什麼誤解。
從企業的角度來看,會定義不同的架構師的角色,像什麼系統架構師,解決方案架構師,軟體架構師等等。我們要談論的是軟體架構師這個角色。其實很多的軟體企業和團隊,都沒有定義架構師這個角色。在我早期參與的軟體開發團隊中,主要的角色無非是產品,開發,測試和管理角色。後來的敏捷開發就更為簡單的分成三個角色Scrum Master, Product Owner, Dev。在這樣環境中,並不是說沒有架構師,也不是說不需要架構設計,而是說,架構設計的工作被團隊經理,開發等其它的角色所承擔。
“一千個人眼中就有一千個哈姆雷特”,每個程式設計師,每個組織,每個企業也都會有自己心目中的架構師,那麼我今天就來聊聊我對架構師這個角色的看法。
我眼中的架構師不一定有頸椎病,不一定禿髮,但一定首先是一個程式猿,一個軟體工程師,一個碼農。
經常看到有小夥伴討論架構師要不要寫程式碼?我認為這是個偽命題,就像我之前說的,大家根本沒有對架構師有一個統一,一致的定義,那麼討論架構師要不要寫程式碼根本就沒有意義,有的架構師需要寫程式碼,有的並不需要。但我眼中的軟體架構師一定是一個優秀的程式猿,軟體開發是一個實踐性非常強的工作,你不能指望通過學習幾本二十一天入門類的書籍就能對軟體開發有一個深入的認識。軟體開發並不是有人說的藝術,也不是科學,軟體開發需要的工匠精神恰恰是來自於大量的實踐。 ‘Talk is cheap,show me your code’, 架構師不僅僅是畫畫架構設計圖,做些炫酷的PPT和演講,雖然這幾樣都是我非常喜歡和擅長做的工作。
我眼中的架構師是一個技術領導者。
傑拉爾德ⷦ 溫伯格(Gerald M.Weinberg) 是我最喜歡的軟體類書籍的作家,他是軟體顧問和問題解決的專家。他的《成為技術領導者》也是一本值得反覆閱讀的書籍。
我們經常會有關於領導和領導力的話題和討論,那麼組織中的領導究竟要幹什麼,我們不是有經理麼,經理不就是領導麼?我認為領導和經理的區別在於,領導做正確的事,而經理的主要職責是正確地做事。做正確的事通常意味著作出正確的選擇,這裡的難點在於,什麼才是正確的?回答這個問題就要上升到哲學的角度了。牆裂推薦哈佛大學邁克爾·桑德爾教授法學系列課程《公正:該如何做是好?》。一般來說,按照我們之前對軟體架構的定義,正確的選擇意味著有助於實現軟體功能,有助於使得團隊可以更好的協同工作,有助於提升開發的效率。溫伯格在《成為技術領導者》中說到 “用乘法而不是加法”,好的架構也都是以倍增的方式來改進軟體開發的效率,例如雲平臺Kubernetes,前端框架react等等。在我們日常的軟體開發過程中,經常會面對著這樣那樣的諸多選擇,好的架構師能夠幫助團隊選擇最適合的那個,也就是我們說的“正確”的決策,這個很難,但是這還不是最難的。當你做出了你認為是正確的選擇的時候,下一步是什麼呢?有同學說,那就開始幹唄!很多時候,架構師不像是經理,直接管理團隊,也就是說架構師並沒有最終的決策權。架構師說,“同志們,我看這樣做挺好,咱們就這麼搞吧!” 團隊成員直接懟過來,“為什麼要這麼搞吧?我看那麼做也挺好麼”。要讓一個好的決策落地,架構師需要說服團隊,讓大家相信這真的是一個正確的決策。這就像是“狼人殺”遊戲中,你作為一個邏輯嚴密的玩家,通過聆聽一輪發言,準確的辨別出所有的狼人,然而你卻無力說服隊友你是對的。“狼人殺”這個遊戲的精髓就在於,這是一個團隊遊戲,你怎麼認為並不重要,重要的是你的團隊是怎麼看的。
所以,作為一個優秀的架構師,除了技術之外,你需要有很優秀的邏輯思維和表達能力,良好的人際關係以及不錯的口碑。程式猿是一個很有特色的群體,他們通常都有一個特點,就是非常的“固執”。說服一個程式猿放棄自己的觀點,簡直堪比送神州火箭登上月球。所以永遠不要試圖證明程式猿錯了,也不要證明他的觀點不如你的觀點。因為所處的角度不同,我相信自己是正確地的同時並不意味著要證明別人是錯誤的。
一個好的架構師,作為一個技術領導者的核心能力是影響力。當然這個影響力是建立在能夠真正作出正確的選擇的基礎上的。最糟糕的情況是,作為一個領導者,因為能力不足,選擇一個錯誤的方向,然而因為其強大的影響力,就像喬布斯那樣擁有扭曲現實的能力,而你又恰恰擁有一個執行能力很強的團隊,那麼結果只有一個,你會離你的目標越來越遠。
我眼中的架構師是技術和產品的之間的橋樑
我們圈子中經常會流傳著程式猿和產品經理之間的各種小故事。作為軟體圈裡的世仇,他們的故事還可以講述很久很久
(圖片來自
https://mp.weixin.qq.com/s/hGIuHzD-9VNsS-JO2z7dWw)
我們看到產品和開發作為擁有不同世界觀的兩個群體,很難理解對方,而我眼中的優秀架構師應該成為產品和開發之間的一個溝通的橋樑,一個能理解兩個世界,精通兩門語言的的翻譯。架構師需要把產品功能翻譯成程式猿能夠理解的技術語言,同樣架構師需要把開發面臨的挑戰以非技術的語言,轉達給產品經理。所以架構師應該同時是產品和開發的好朋友!
我眼中的架構師是一個團隊的催化劑
講一個笑話,我的一個朋友最近加入了一家創業公司,他說他入職的那一天,公司的CEO,CTO,CFO,產品經理,測試,市場,司機,廚子,保安都來歡迎他的入職。我對他說,“你太有面子,公司看來對你很重視呀,派出這麼多人來歡迎你。” 他說,“哪裡呀,不就一個人麼!”
今天的軟體開發對團隊的依賴程度非常的高,所以架構師首先是這個團隊的一個成員,需要有良好的團隊精神。諾蘭大師在他的電影《盜夢空間》中講述了一個精彩的關於團隊合作的故事。
架構師(築夢師)無疑是團隊中的重要角色,但是一個良好運作的團隊,需要各個角色協同工作,離開誰,這個團隊都不完美。好的團隊應該是1+1 > 2。公司的意義在於通過把擁有不同的背影,知識,思維模式的人組織在一起,創造出個體無法實現的新的創意,新的產品。而架構師正是實現新的創意和產品的催化劑,讓團隊中的每一個人都能發揮出比之前更出色的作用。
我眼中的架構師是一個導師和佈道者
軟體行業是一個令人激動的行業,技術和產品的以不可思議的速度迅速的發展著,今天的明星技術和明星產品,過不多久就會成為昨日黃花,軟體產品的生命周也越來越短,我想了想我參與的軟體產品,至今仍然在執行的,仍然在給使用者帶來價值的,大概是微乎其微的。所以不斷的學習,不斷的創新是我們這個行業必須要面對的宿命。我眼中的架構師應該是一個創新和新技術的倡導者,這裡我並不是說新技術一定就是更好的或者更合適的選擇,但是我們應該持有開放的心態,積極的去了解這些新技術帶來的影響。作為導師的架構師,應該在團隊中創造這樣的開放心態和持續學習的文化。
在多年的軟體開發生涯中,我和許多優秀的架構師一起工作過,我最後要聊一聊的是我遇到的架構師中的極品。之前在一家德國公司開發ERP產品,我們團隊中的架構師來自德國,我們就稱呼他為“老卡”吧。這位“老卡”繼承了德國人優秀的哲學思維,如果你跟“老卡”討論問題,他總是採取“否定一切”的哲學態度,首先說你錯了,然後會告訴你為什麼你錯了。最為致命的是,通常你只能理解他說的你是錯的這個觀點,而“老卡”所有其它所說的內容,你完全聽不懂。一般而言,德國人的英語水平是非常好的,所以並不存在因為語言問題而帶來的交流困難。“老卡”喜歡用一些古怪的“大詞”或者縮寫,結合一些奇怪的邏輯,給對方產生一種深不可測的錯覺,我想這就是傳說中的架構師的終極形態吧!就像這個故事中的應試者:
面試官:你對電腦懂多少?
應試者(普通青年):懂一點,我戴過電子錶,玩過任天堂,房間有一臺電視……還有,我看過同學用dos開機,兩次…
面試官:下一位!
面試官:你對電腦懂多少?
應試者(2B架構師):嗯,那要看是哪一種電腦了。一般的超次掌上型矽單晶片時脈輸出電腦(電子錶)比較簡單,我小學時候常常使用他的解譯編碼作業流程(鬧鈴功能)。 至於多功能虛擬實境模擬器(任天堂)就複雜得多,不過我曾經完整測試過許多靜態資料儲存單體(只玩卡帶破關)。長大後我對於複頻道超高頻無線多媒體接收儀器(電視)開始產生興趣,每天晚上都會追蹤特定頻道的資料(指八點檔)。 至於傳統的數位電腦,我手下的一位工作夥伴(同學)經常在我的監控之下進行主儲存矽單體與磁化資料存取器之間的訊號交換(指dos開機)……
後來和印度同事聊天,他們好奇的問,你們都是怎麼和“老卡”交流的,他說的你們能聽懂麼?我當然不能給中國人丟人吧,就說能!印度同事投來崇敬的目光,在他們眼中,因為無法理解老卡所說的一切,“老卡”儼然成為他們心目中神一樣的存在,能和神交流的,也應該不是凡人吧!
所以我要對有志成為架構師的小夥伴提個建議,如果你的技術不紮實,學習能力不佳,溝通有困難,這都不是事。努力學習如何讓別人聽不懂你所說的話,漸漸的,你就會成為架構師了。(考慮到大家的閱讀水平和角度的差異,這裡鄭重宣告,請認真思考這是不是一個真誠的建議)