菜鳥的架構師之路

軍說網事發表於2018-06-27

一個剛剛從學校畢業的、致力於投身程式設計事業的年輕人,在投遞了N封簡歷之後,終於如願以償得到了第一份程式設計的工作。如果他在求學期間沒有積累過專案經驗,那麼可以說這就是他職業的起點,他青澀的程式設計之路開始了。

可能他一開始會滿腔抱負、意氣風發的按照自己的方式完成小頭目交給自己的一些練手任務,然後懊惱的發現小頭目對這些看似能夠完成任務的程式碼大搖其頭,指指點點;然後在真正進入專案之後,又會被各種不知道從哪裡冒出來的bug和漏洞搞得暈頭轉向......

這些問題一方面和這位菜鳥程式設計師缺乏經驗有關,但是在過來者看來,造成這些問題的一個主要原因正是在於,這位程式設計師沒能看到問題的本質。

架構師,在開發領域剛入門不久的菜鳥級程式設計師聽起來是如此神祕的一個稱號,在他們眼中,架構師都是高手,都是牛人,都是如此高高在上的存在。
    不過,在搞了四、五年程式設計之後,程式設計師們往往早已失去了當年對這些“高階”職位的神祕感,甚至會對自己所在專案的架構師抱怨不已,背後裡稱他們是一群水王。所以有江南白衣曾撰文述說:“國內的架構師到了三十歲以後很多就往理論上跑,而國外的架構師在往上發展的同時保持下面的程式設計體驗,所以國內多水王,而國外則多大師。”

問題的本質是一個致力於成為架構師的程式設計師,需要儘可能的參加大的專案開發,儘管積累1000個小專案的經驗也是很好的程式設計師,但好的架構師必須參與更大的專案,哪怕數量不多。從中我們能解讀到一個資訊,大的專案意味著學科跨度的增大,所需要學習的跨領域知識必然也足夠大,也就更有利於程式設計師向架構師晉級。

架構師就相當於一支球隊的主教練,如何將自己佈置的戰術交到執行的球員,也就是開發人員的腦袋裡,是關乎勝利的關鍵。那麼怎樣才能成為一名能說會道的程式設計師呢?

一個優秀的軟體架構師,首先一定是一個出色的程式設計師。這句話按照Fred George先生的話來說,那就是“不程式設計的架構師的職業生涯是短暫的”。他說這句話的背景主要是針對有些架構師的設計與實現有斷層的問題而言的,因為如果架構師不去實踐,只是想當然的認為“沒問題,這個想法能實現”,那麼對於專案的落實而言是個很大的隱患。支付寶架構師馮大輝 也表示過,架構師是一個比較“虛”的崗位,主要的問題都在“落地”的過程中。

作為一名卓越的程式設計師,架構師肯定不欠缺開發方面的知識。從架構到方法論,從資料處理到安全監控。可以說IT開發層面上,架構師可以做到爐火純青的地步。但是這僅僅是一名卓越程式設計師的能力級別,離架構師那還有很大的一段距離。

鐵打的程式設計師,流水的技術。程式設計師的開發生涯可能長達幾十年,但一門技術的平均壽命卻不長。因此作為程式設計師們的技術領袖,架構師必須有很好的技術前瞻性,要先於大家瞭解到最新的技術。

外功是從外部獲得最新技術資訊,那麼內功就是自己的邏輯思維能力和接受能力。再新的技術,其實也與以前的技術有結合。這也是為什麼我們說架構師首先是卓越的程式設計師,也就是這個道理。

人們往往發現優秀的數學家、物理學家以及軟體架構師有著很多相似的素質,甚至往往能夠一人精通這好幾個領域(比如UML之父James Rumbaugh ),其中很重要的原因就是這個抽象思維的能力。架構師在接到商業需求之後,最主要的工作就是將其轉化為技術需求。

所以一個架構師確認一個想法究竟能不能落地的最直接的方法,就是自己編寫程式碼,嘗試“實現一個系統最難實現的一部分”(Fred George)。看看Fred,他自己就是最好的示範:年紀一大把了,仍然每天都在編寫程式碼。事實上,我們可以列舉出一個長長的頂級架構師的列表,你會發現他們沒有一個不是頂級的程式設計師。

當架構師對整個系統分析完畢,有一些架構師喜歡昏天黑地的奮鬥幾天,然後寫出一本厚厚的架構書扔給程式設計師。在此之後就不做過多的交流與溝通,“具體實現?那是程式設計師的事情,我怎麼能去幹涉他們呢?”其實在這裡,這位架構師就犯了錯誤,他並沒有將自己真正融入開發團隊中,而是以一種高高在上的救世主姿態出現。其實架構師未必就是神人,很多錯誤還是要大家一起來研究來解決的。

這裡就會出現一個常見的問題“架構師是不是一個只會誇誇其談,只會忽悠下面人而對軟體開發瞭解不多的人?”更尖酸的問題還在於架構師連一段程式碼都不會寫。相信這是一定的誤解,就好像銀行的高層管理人員,要更多的從巨集觀的角度考慮問題,儘管他們點鈔的能力肯定不及下面的櫃檯人員。事必躬親的諸葛亮,最後的結局還是國破家亡,過多的干預細節忽視整體,絕對是要打敗仗的。架構師學習更多跨領域知識,也是為了在接受一個專案時,能更快更準確的找到解決問題的 “命門”。

架構師的溝通方向與專案經理相比,還是有一定的區別。比如專案經理有很大一部分時間需要與客戶進行溝通,進一步弄清需求。而架構師的溝通主要在於開發團隊內部,一種純技術上的溝通。這也是作為技術領路人的架構師,最日常的工作。

有人談到技術高手與架構師的區別就在於,架構師不光是著眼於現在,不僅僅侷限於開發細節,比如如何呼叫,如何併發等等。而是跳出三界外,考慮一下面向未來問題和潛在風險的應對之道。

架構師身為一名技術領袖,需要通過發散知識的光芒來統御開發團隊的。如果只是對本行業知識做到爛熟於心,那還僅僅是一名熟練工的水平。要想晉升更高的層次,還需要跳出“只緣身在此山中”的困惑。例如在目前國內架構師,至少有網路領域為依託,物流金融證券等熟知越多越好,這個是應用級別。比如南天的金融平臺研發部門,但是這個成不了底層平臺架構師。再往上走,很多公司的研發人員不是精通計算機,可能是物理極為精通,比如中軟研發聲納軟體部門很多人對資料訊號極有研究。

相關文章