飛行的架構師和奔跑的程式設計師

2021-09-07 05:47:18 字數 3199 閱讀 6183

**

飛行的架構師和奔跑的程式設計師

關於程式設計師和架構師的討論很多,我想從不同的角度說下。

當我剛進入軟體行業成為一名程式設計師時,我的理想就是成為一名架構師。架構師這個詞的英文叫 architect,原意是建築師,因為軟體行業參照借鑑了很多建築行業的概念,所以就借用這個詞。我是在學校讀書時知道架構師這個名詞的,當時很多軟體方面的書都是翻譯過來的,現在也不知道是誰最早把 architect 翻譯成架構師的了。總之從那時起,架構師這個名詞對於我這個還剛準備走出校門的學生來說就特別高大遙遠,自然當成了最初的乙個職業目標。

可惜,我進入第一家公司後,這是乙個家民營 it 服務企業,我發現居然沒有架構師這個職位。我所在的乙個幾十人團隊裡,本科剛畢業的是助理工程師,碩士剛畢業的是初級工程師,然後是中級,高階工程師。再往上就變成了專案經理、這個團隊就是乙個專案經理,下面有幾個高工,然後一堆初級和助理工程師。讓我頗為失望的是,我當時明顯覺得未來我的職業發展目標並不是當時團隊專案經理所處的方向。不過一想我離架構師這個目標還早,當時估計最快也要十年吧,先把程式寫熟再說,我也不太可能在這裡幹十年,以後換個就好了。

實際,一年後我就換了個公司,入職後又失望了,發現還是沒有架構師這個職位。不僅沒有架構師職位,連工程師都不分初、中、高階了,全是軟體工程師,再上面是組長、科長、部長,然後就是總經理。科長、部長這類職位是國營性質的,而經理這類職位更像民營公司性質的,這就是一家正在從國營向公司製轉型的公司,所以職位也很奇特的混合著。我當時也是想還早,先專注好眼前的事,寫好程式做好事情,至於有沒有架構師這個職位將來再說。

在這裡工程師雖說不分級,但團隊裡也有一位大家口中的牛人,姓陳,大家稱呼陳總,實際並沒有承擔任何管理職責。工作了十多年了,專注於 ibm aix 和 hp ux 小型機以及 oracle 資料庫調優。我們那時經常長期出差在客戶現場開發、實施,支援上線等,陳總一般不出差。他出現的時候一般都是我快把資料庫搞掛的時候,然後就來現場救火,分析磁陣 io,抓 sql 調優什麼的(當時應用系統都是圍繞資料庫為中心的)。通過從底向上來發現效能瓶頸,再建議程式優化,當時我覺得他最符合我對架構師這一角色的一些想象,但又總覺得還差點啥,當時是說不上來。總之當時我是很期盼看到乙個真正的架構師是怎樣的,他們是如何工作的?

在第二家公司工作了幾年後,工作了已快 5 年了,我還是沒有找到答案,而且感覺走程式設計師技術發展道路在當前的公司碰到了瓶頸。再次跳槽後,我想之前民營和具有國營性質的公司都沒有架構師職位,而且這個名詞來自國外,那麼外企應該會有吧?嘗試去面試過幾個外企,不幸的是英語口語太差都沒有通過面試,而我那段時間也從廣州搬回成都。老實說成都當時的程式設計師就業環境比廣州差不少,工作找的有些鬱悶,就乾脆休息了半年,好好想想清楚下個五年我該何去何從?

也正是在這賦閒的半年,我突然發現原來除了國企、民營 it 服務(外包)企業和外企之外,還有一類公司和它們很不一樣。這就是網際網路公司,而可惜的是成都當時幾乎沒有任何網際網路公司在這邊有研發。而正在我等待的時間裡,一家新興快速成長的網際網路電商公司正好在成都設立研發中心,時機正好也就加入進去。

進了網際網路公司後,不僅有了架構師職位還有架構師團隊,有了方向又可以放心的作一名程式發力狂奔。不停的寫程式,優化**,追求更優更簡潔的**,重構了一遍又一遍,解決乙個又乙個問題。我曾在以前的文章中將程式設計師具體和**相關的工作比作劍術,修煉**技能類似練劍的過程。很多程式設計師夢想著有一天能成為一代高手,面對敵人,抽刀拔劍,剎那間交擊,歸劍入鞘,敵人倒下。就像線上系統突然出現大問題,你開啟電腦,查了幾行日誌,敲下幾行**,分分鐘系統恢復。

好吧,實際這也就在電影裡能有,隨著系統規模的擴大,程式設計師需要解決的問題和解決問題的方式完全不同。以前看過一篇文章說,進入大規模分布式時代,區域性的**優化已不是最重要的,不像二十年前硬體制約了軟體的規模。更重要的是程式之間的協作方式,溝通路徑的簡潔清晰性。

乙個好的程式設計師當然能寫一手好**,在我學習寫程式的前七八年裡,業餘時間做了一些練習性質的專案。在 github 之前的時代,google 還能訪問,在 google code 上維護了應該不止十萬行的業餘之作。後來 github 興起後遷移過來,不斷練習重構優化維護自己的專屬工具庫,刪減了很多冗餘**又新增了不少,目前還剩下幾萬行。這個過程持續了七年,基本每年重構優化一次,在 github 持續 commit 時間最長有 118 天(最近看到有人連擊 365 天的,真心佩服)。如今過去兩年再回頭看曾經的**,不能說覺得完美到不能再優化了,只是覺得繼續下去於我劍術精進終究有限,而更大的價值如今已不再區域性的優化上。

此時我已在團隊承擔總體的系統設計工作,專注於區域性**優化其實是在驅動細節而非本質。資深程式設計師出身的架構師,單兵作戰能力都是極強的,就像《進擊的巨人》中的利威爾兵長,具備單挑巨人的能力。可當你面對成群結隊的巨人來襲時,個人單挑能力的作用始終有限。這時從程式設計師到架構師不僅僅是乙個名稱的變化,有時它也意味著技能和視角的轉變。在地上飛奔了七八年的程式設計師,在面對成群的巨人襲來時,深深的感覺到,殺光巨人不應是目的,真正的目的是到達彼岸。選擇合適的路徑,堅定的前行,清除或繞過擋道的巨人,到達目的地。

資深的程式設計師,每天大部分時間和**打交道,當需要轉變為架構師時,卻有乙個障礙,借用一句台詞來說:

汝今劍術已成 ,而道心未明,唯不能斬絕與**之情。

開發功能,解決 bug,優化**,這是乙個資深程式設計師的拿手技能,也是地面作戰的基本技能。而乙個架構師還需要掌握其他維度的技能,也許就像乙個立體機動裝置,讓你能在需要時飛在空中看清全域性,也能落地發起凌厲一擊。多了乙個空中的維度,過去在地面練到精熟的劍術,飛在空中還有效麼,這需要時間去學習,適應新維度的技巧。

這不是乙個容易掌握的技能,這正是我曾經寫過的從乙個點到另乙個點連成線的技能公升級,需要乙個公升維的學習過程。所以很多討論架構師到底還要不要寫**這事兒的,我思考後的結論是,需要拔劍時就拔劍,而無需在意如果每天不拔劍是不是劍就銹住了?當劍術精進後總覺得每次拔劍就要殺人(只處理難題),其實有時拔劍也可以只是切菜(擋路的小問題),只要有助於達到目標。就像《火星救援》裡的馬克為了回家便要去種土豆,只要開始,解決乙個問題,解決下乙個問題,解決下下個問題,等解決了足夠的問題,就能回家了。飛在空中的架構師就是要在高處看清都有哪些擋在回家路上的必要問題,落地成為進擊的程式設計師們將其一一斬殺。

如今問我,還出劍麼?劍還在手,該出就出。那麼還練劍麼?練,練空中出劍,術還未成,但道心已明。

如何從程式設計師到架構師?

程式設計師是一種比較耗腦力 比較辛苦的職業。在中國,年齡比較大的程式設計師是很尷尬的,你去投簡歷,人家一看三十幾歲了,可能就把你往後排,看看有沒有那種小年輕 能夠加班的。程式設計師一定要規劃好自己的發展道路,到了某一天,你是繼續做開發,還是做技術管理,還是做產品,還是做架構師,或者說去送外賣,跑滴滴...

程式設計師,架構師,軟體工程師的區別

程式設計師 僅僅會寫 不會寫文件 軟體工程師 會寫 也會寫一些專案的文件,如需求,詳細設計,系統整體方案設計 架構設計,使用者手冊,開發計畫等 架構師 一般需要從資深軟體工程師裡面提公升為架構師 主要負責大系統專案 如乙個1000萬使用者併發訪問的 伺服器 系統設計 的架構設計。如果是小型專案,一般...

學習演算法 從程式設計師到架構師

include 意願 include 想象力 include 離散數學 include 思考 include 良知 include 意志 include 技巧 收穫 s 0 章節 n 1 章節號 收穫 p n 學習 while n 1 n 35 if 練習沒做 做練習 良知 思考 回顧總結 n 1 ...