|0x00 「基本功」的比拼
王興總結那場「千團大戰」時,用一個「基本功」概括了自己為什麼能贏。什麼是基本功?就是在該做什麼的時候做什麼,做符合科學符合規律的動作,而不是隨大流去「人云亦云」的做事。在2019年給員工的內部信中,王興提到,「只要練好基本功,就能贏99%的事」。
對於技術人員來講,什麼是基本功?我想,就是從架構師的思維層次上,做好每一件小事。
我們常常稱網際網路大廠的工作是「面試造火箭,入職擰螺絲」,雖然客觀上確實如此,但一家公司之中,造火箭的架構師往往不需要太多的人,但需要大量懂火箭的工程師。架構是一種思維方式,思維方式是可被訓練的,只有大量能夠思考到未來發展的工程師凝聚在一起,一家公司才有了技術力量的「靈魂」。
2012年,微信與米聊的戰爭,實際只持續了兩個月,雷軍在賭騰訊反應不過來,而騰訊卻把公司的重心,全部傾斜到了新生的微信上。彼時,QQ還是騰訊的支柱,當微信因為用戶量的巨大增長,導致服務架構頂不住巨大流量的壓力時,馬化騰果斷把QQ的核心技術人員抽調到微信,從而打贏了那場未來有10億用戶量的即時通訊戰爭。如果你是當時的技術負責人,戰爭降臨時,你是否能夠頂得住壓力?就像拼多多與淘寶的戰爭,看似曠日持久,但當用戶量拐點來臨的時候,戰爭就已經結束了,而這個周期通常只有幾個月。
作為數據從業者,我們在年復一年的做著模型的重構,思考著數據的治理,為的不僅僅是把戰略落地,而更多的是為了處理好數據業務中長期可持續發展的問題。做數據治理的常常感嘆落地實施的難,因為「策略落地」,不僅需要架構師來規劃,也需要一大批有「架構師」思維的工程師來實現。做好每一張表的設計與規劃,用架構師的思維去考慮,積累起來,才能打贏這場最艱難的仗。
「最牛創業團隊」為什麼能二十八年打了天下,緣由就是當年那支無敵的紅軍,我們往往只看到了「軍事民主制」的表象,卻沒有看到全員普及教育的「基本功」,讓每一名戰士都有了指戰員的思考方式,軍事民主制才能落地。
如果不從很高的視角來思考,僅僅從自身的利益出發,架構師的知識也是很重要的。「內卷」是現在很火的一個詞,那麼我們在內卷什麼?從我自身的角度出發,就是在淘汰那些沒有「架構師」思維,沒有前瞻性想法的程式設計師,從而保持組織整體的技術實力。因為企業付出的用工成本一直是很高的,而市場的增長潛力正在逐步消失,從成本優化的角度出發,一定是希望越少的人做越多的事情,那種「1個優秀的程式設計師,頂100個普通的程式設計師」,就一定會進入優化的名單裡,因為行業規則是「3個程式設計師拿4個人的工資做5個人的事情」,那麼2個程式設計師行不行?給你漲薪50%,同時減少1個人的成本,企業還是划算的。
「資本家來到世間,從頭到腳,每個毛孔都滴著血和骯髒的東西」。效率優先的社會,就一定會督促每個技術人都成長為架構師。
|0x01 「架構師」的視角
百度百科對架構師的定義是:「在軟體工程領域中,軟體架構師實際上就是軟體項目的總體設計師,是軟體組織新產品的開發與集成、新技術體系的構建者」。
但我更傾向於用下面的話來描述:「架構師是將不確定問題確定化的工種」。
為什麼會這麼講,因為架構師通常會面臨三個問題:
業務的技術架構要面向未來而設計,滿足未來N年業務增長的訴求;系統的業務複雜度超過了單個人甚至是多個人的理解能力;團隊的協作規模超過了單個人甚至是多個人的組織能力。誰都無法預測未來,誰都無法用自己的力量對抗熵增的系統,但架構師的職責卻需要這麼做。要想解決「不確定問題的確定化」,首要便把問題定義清楚。只有問題定義清楚了,才能有解答問題的方法。我們可以這麼講:「架構師最大的能力,是定義問題的能力」。
例如,一個公司的戰略,往往不是從技術角度出發的,而是從業務角度出發,有些問題在技術人眼裡,甚至是矛盾的。例如今年的目標是「降本增效」,我們要支持更大規模的促銷活動,規模增長20%,同時機器成本又要比去年降低20%。這就要求兩個方面的能力,一個是對過去經驗的總結,如何支持20%的規模增長;一個是對未來形勢的預判,哪些技術能夠降低20%的成本。當設計的架構同時具備了這兩方面的能力時,它才會非常的健壯,同時解決當下和未來的問題。
對一個複雜的技術子系統進行改造,顯然是「不確定」的,那麼通過定義新的問題,來自上向下推動改革,就是把問題「確定化」了。
在過去,架構師提出了「中臺」的概念。之前技術成本的增加,往往來自於重複建設的成本。為了解決「重複建設」的問題,那麼就把能夠抽象的業務問題中臺化,通過避免重複開發的方式,降低了新業務的開發成本。在現在,架構師提出了「雲原生」的概念,因為現在成本的增加,往往來自於業務流量的波動性,例如疫情期間的「釘釘」,為了能夠讓資源具備「伸縮」效果,實現快速資源創建與回收,我們通過系統上雲的方式,來實現資源的動態部署。如果「雲原生」是正確的道路,享受了技術紅利的業務,就能夠在更大規模的促銷活動時,通過資源的快速部署來支撐業務,又能夠在平時將不用的資源撤下來,從而降低全年的成本。
一個簡單的「詞」,就將許多複雜的問題簡單化了,看得懂大的技術趨勢,才能保持技術知識的「前瞻性」。顯然,未來搞「雲原生」的工程師,會比過去搞「全棧」的工程師,更加的吃香。
|0x02 「知行合一」的困惑
但是,僅僅能夠提出治理問題的策略是不夠的,就像「行百裡者半九十」一樣,最後的十步,如何將設想好的策略落地,才是最難的地方。作為架構師,設計了一個很不錯的方案,但到底能不能執行,恐怕心理是沒有底氣的。
我們都理解「知行合一」的內涵,但又往往心存疑惑。
按照傳統的觀點,應該是知先行後的,但是王陽明卻說知行合一。按照哲學的觀點,我們應該堅持「唯物主義」,但經歷的越多,在很多領域內,「唯心主義」卻是佔據絕對的上風。王陽明平定朱宸濠之後,很多人詆毀他。有的弟子說:「是因為先生立下了曠世奇功,很多人妒忌你,所以恨你」,也有的弟子說:「是因為尊崇先生的人多了,根據辯證法,那些反對先生的人就會更加賣力」。王陽明卻說:「你們的話都有道理,但並不是根本。即便全天下的人都講我言行不符也毫無關係,這就是自信,真正的自信就是相信自己的良知,良知告訴你什麼時候該做什麼事,那就去做,不必顧慮不必計較。」
吃透一個領域的問題,就是「知」;解決一個領域的問題,就是「行」。「知」造就了自己的自信,從而為「行」奠定底氣。
例如,我麼把公司整體的戰略,稱之為「雲原生」戰略,從公司的層面,就會制定一些原則性的技術標準;到各個BG/BU的層面,就是各個業務線如何選擇自己的技術方案,如果是成熟業務,走中臺進行管理,如果是創新業務,就通過自建的方式,先讓業務跑起來;再下沉到各個產品線,要考慮子系統的設計方案,我所在的產品形態是怎樣的,用什麼樣的技術結構最合適,這一層才是我們傳統意義上所理解的「架構師職責」;具體到每一個技術小二,就要考慮每一行代碼的合理性,每一張數據表的可復用性,等等。
作為技術人,我們最專業的能力,是站在技術的視角上,去翻譯業務的問題,比如通過「領域模型」來與產品溝通概念上的東西。但翻譯的過程不一定是準確的,因為可能因為KPI的壓力、因為業務的邊界、因為成本的考量、因為自己的「舒適圈」,因為種種原因被「綁架」了,制定了很多的短期方案,這時候就沒有把問題想清楚,沒有把技術方案「吃」到透,落到執行上,無法解決這個領域的問題,底氣就不足,不論是向下推動或者是向上匯報,「知行」就不合一了。
有句話叫「順勢而為」,在架構的工作中往往會遇到一些「做不到」或者「不想做」的事情,也會通過一些新的思路,或者是新的方案來解決。這並不是說架構師就一定要是一個完美主義者,而是說架構師要學會利用已有的一些基礎,去引導系統向更好的方向去轉變。能夠清醒的認識到事情的不完美,學會把事情思考完整,能夠將事情順利的引導推開,「知行」才有了「合一」的基礎。哪怕別人再怎麼不認可自己的方案,如果可以寫一手漂亮的代碼,就像人有了一張漂亮的臉,打起交道來就會少一些戾氣,而合作多了,對方認可了你的態度與方法,也就最終能夠一起完成一套最可行的方案。
架構是一種能力,它不是頭銜。 換句話說,我們需要具備架構能力,但不一定要成為架構師。就像鄧公,他被稱為改革開放的總設計師,但他不是設計師。我們都嚮往著「架構師」的神聖光環,但我們需要架構部門嗎?或許需要,因為公司大了,也或許不需要,因為每個人都應該是架構師。
|0xFF 「擰螺絲」的架構師
回到文章的起點,「擰螺絲」的架構師,就是「把事情做正確」的工程師。
什麼叫「把事情做正確」,大概就是培養自己的三個能力:
學習知識的能力:比如如何快速熟悉一個不熟悉的領域,如今隨著行業發展瓶頸的到來,深耕一個細分市場成為了主流,這就必然帶來更多的陌生知識,以至於影響自己對於技術趨勢的判斷。當然,在知識大爆炸的年代,學習不再是單純的記憶知識,而是搜索、過濾、理解、應用的過程。比如多跟有經驗的人吃飯聊天,比如能夠充分利用搜尋引擎找到自己想要的東西,但知識往往很少有成體系的內容,要學會自己建立體系。嘗試新技術的能力:網際網路行業最大的特點,恐怕就是技術更新迭代的速度非常快,以大數據為例,從早期的分庫分表,但Hadoop的興起,再到Spark/Impala等各種框架的普及,再到現在「雲原生」概念的誕生,大概我們要選擇的技術方案,幾乎每年都有新的花樣出來。而如果不能時刻跟緊這些技術方案,那麼技術方案設計一開始,就會有選型落後的風險。而即了解技術全局,又能夠深入細節去做分析,是嘗試新技術能力的根基。影響其他人的能力:好的技術方案要想應用落地,除了方案本身的爭論之外,大概就是看誰的方案落地的成本更小。不論是其他人自願的來做改造,還是能夠解決某個產品方案的爭端,或者是通過某些演講來推廣自己的成果,總有一些方式來獲得他人的認同。而人的本性決定了,影響自己的追隨者,往往會讓事情付出更小的成本,並獲得更高的收益。初來阿里的工程師,大多都是在困惑中度過第一年的,因為「這也要自己做」、「那也要自己做」,用一句話概括,大概就是把每個人朝著「CEO」的方向去培養。儘管我們經常看到對這種方式的批評,但不可否認的是,這種文化更容易培養一批有能力的「工程師」。
《雍正王朝》這部電視劇中,小多子通過一些見不得人的手段,拿到了二叔曾經的地位,但因為自己的能力匹配不上這個地位,也因此在雍正朝備受冷落。很多人被淘汰,不是因為能力不行,而是因為過早的停止了學習和成長。一個人的能力應該是圍繞著工作的崗位和職責震蕩的,這個震蕩範圍偏差不會太大,遲早會歸於一個相對合理的區間。
技術人要學會追求「最終的正確」,而不是「一開始的正確」。做一名「擰螺絲」的架構師,是為了讓自己的能力匹配上自己的層級,而不是為了「架構師」這個Title。