1. 程式人生 > >如何成為全棧工程師-Full Stack Developer

如何成為全棧工程師-Full Stack Developer

信息安全 信息 www. 架構模式 post 容災 所有 最有 應用

What 什麽是全

最早來源於Facebook的工程師Calos Bueno在2010年底時寫的一篇文章The Full Stack作者認為全棧是一個通才,能夠自己創建不平凡的應用程序。他也指出,沒人能夠熟悉所有方方面面,但作為一個全棧,能夠看清每個棧的上下之間是如何運作的。他還提出視覺化一個系統的方案:One way to visualize a system is how its data is shaped and how it flows.

百度百科收錄的定義則是:掌握多種技能,並能利用多種技能獨立完成產品的人。收錄的原文其實是這篇:全棧工程師到底有什麽用。本質上來說,和Calos Bueno的觀點大同小異。

對全棧工程師,每個人都有不一樣的定義,不一樣的衡量標準。要求高的,認為全棧=全能,需求分析、產品設計、UI設計、移動開發、前端開發、後端開發、運維等,全部都熟悉。要求低的,認為只要既懂前端開發也會後端開發即可,比如,熟悉H5前端開發和Node.js後端開發,就可以稱得上全棧工程師了。在我看來,其實都沒有錯,工程師也有分初級、高級、資深、專家,全棧工程師也一樣有等級劃分。

那麽,我們就從分級的角度來聊聊什麽是全棧。但我不想從傳統的初級、高級、資深、專家的角度來劃分,我想從另一個更高的視角來劃分全棧工程師。將工程師劃分為五級,如下:

技術分享圖片

第五級:能獨立解決問題,完成工程工作;

第四級:能指導和帶領其他人一同完成更有影響力的工作;

第三級:能獨立設計和實現產品,並且在市場上獲得成功;

第二級:能設計和實現別人不能做出的產品,也就是說他的作用很難取代;

第一級:開創一個產業。

從本質上來說,不同層級的工程師需要有能力獨立解決不同高度的問題。

第五級只要有能力獨立解決技術任務即可,

第四級則需要解決團隊問題,

第三級需要解決產品問題,

第二級需要解決行業問題,

第一級則是最高級的產業問題了。

需要註意的是,有能力獨立解決問題,不代表就不需要和別人協作

全棧工程師屬於工程師的子集,同樣的,也適用這個五層級別的劃分。那麽,對於第五級的全棧工程師來說,就是有能力獨立解決跨棧的技術問題。第四級的全棧工程師,需要具備管理和領導能力,應該是一個全棧架構師。第三級則還需要掌握產品設計能力,有能力做出成功的產品。但這個產品會比以往復雜得多,如果不具備全棧技能,那就很難形成全局性思維,更難以做出成功的產品。再往上還要深入了解行業和產業痛點,需要更高遠的前瞻性能力。

如果這樣劃分的話,那能夠獨立完成產品的全棧工程師應該屬於第三級和第四級之間,而只懂前端開發 + 後端開發的全棧工程師還不一定能達到第五級,因為懂了前端開發和後端開發並不意味著就有能力獨立解決問題。我面試過幾個既懂前端開發,也懂點後端開發的程序猿,但每個端其實都還達不到我要求的及格線,更談不上有能力獨立解決工作中的跨棧問題。

在我看來,一個合格的全棧工程師應該具備硬技能和軟技能。硬技能主要就是熟練掌握工作領域中的各種技術棧了,比如做移動應用的,那可能就要熟悉Android/iOS開發、Java開發、數據庫、運維等。更重要其實是軟技能,我覺得至少應該具備有以下能力:

  • 解決問題能力 —— 如果不能解決問題,要全棧工程師何用
  • 超強學習能力 —— 全棧需要快速掌握很多技能,所以必須具有超強的學習能力
  • 良好溝通能力 —— 全棧雖然有能力獨立解決問題,但在實際工作中還是需要和各種人員合作溝通,在團隊不同成員之間起到橋梁作用
  • 技能遷移能力 —— 全棧不會被某一領域綁死,技能可以快速遷移到其他領域,比如可以從移動互聯網遷移到物聯網、人工智能或區塊鏈等新領域
  • 全局思維能力 —— 全棧最大的價值就是擁有全局思維能力

Why 為什麽要發展全

發展全棧,不管是對公司還是個人,都大有益處。

對公司的益處,就舉個栗子吧。假如在App端有時候會出現調用接口超時的問題。在沒有全棧工程師的團隊裏,一般的處理流程就是:Android或iOS開發人員在App端檢查確定不是前端的問題後,就把鍋丟給API網關,API網關開發人員檢查日誌後發現有部分服務的查詢接口沒能在超時時間內返回數據,各服務開發人員和前端、網關聯調後發現是數據庫查詢結果慢,就將鍋甩給了DBA,DBA經過一番排查之後發現數據庫存在很多慢查詢,最終定位到是因為很多SQL查詢語句沒有加索引。等這個問題解決,可能半天就過去了。而為了解決這個問題,至少投入了前端開發、API網關開發、後端服務開發、DBA等四個角色的人力。至少四個人加起來那就是兩人日的成本,期間還有不少溝通成本。這不是個杜撰的栗子,而是在我們團隊中真實發生過的事情。那麽,如果有全棧工程師的話呢,一個人從前端到網關、服務接口端、數據庫,一路自己調試跟蹤數據,估計一個小時左右就能定位到問題,這就非常高效地解決了問題,也極大地減低了溝通成本。

當然,最重要的還是對個人的發展如何。畢竟,公司並沒有要求你一定要成為全棧,而你也不會是為了公司的利益而努力成為全棧,除非這家公司是你自己開的。而我覺得,個人發展全棧,最重要的就是為了應對未來,主要有以下幾方面:

  • 避免被淘汰 —— 技術更新叠代太快,只熟悉單一技能棧在未來幾年有可能會面臨被淘汰的風險。比如,雖然現在Android和iOS開發依然是主流,但又有誰能保證五年十年後不會像塞班一樣。比如,雖然現在Java依然是後端開發的主流,但代表著未來趨勢的人工智能、區塊鏈等,大多卻不是用Java開發的。
  • 提升個人價值 —— 如今,系統級產品已經越來越復雜,那麽,對於具有全局思維的全棧工程師和全棧架構師的人才需求就會越來越大,所以,全棧工程師,尤其是全棧架構師的個人價值也就會越來越高。
  • 走向高管職位 —— 管理崗位對全局觀的要求必不可少,越高的管理崗要求越高。所以,就算是在特定領域做到了技術專家,如果缺乏全局思維,就會成為職業瓶頸。
  • 實現創業夢 —— 我想,不少人可能和我一樣,將自己慢慢發展成全棧,主要還是為了做出優秀的產品,為了實現創業夢。

How 如何發展全

要發展全棧,就需要全面發展硬技能和軟技能,硬技能相對比較容易掌握,但最重要的還是軟技能,這是全棧的根基,當然,軟技能就不是那麽容易提高的了。

需要發展哪些硬技能要看從事的行業和技術方向而定,做移動應用和做VR/AR/MR應用所需掌握的技能棧是不同的,做人工智能、區塊鏈應用又是另一套技能棧。就以目前做企業級應用的主流技術為例,主要會有以下技術棧:

  • 移動端 —— Android、iOS、React Native
  • 前端 —— H5、CSS3、SASS、LASS、React、Vue、AngularJS
  • 後端語言 —— Java、Go、Python、Node.js
  • 後端框架 —— SpringBoot、SpringCloud、MyBatis、FastJson、Dubbox
  • 數據庫 —— MySQL、Oracle、DB2、MongoDB、Redis
  • 運維 —— Nginx、ZooKeeper、Docker、Kubernetes

一個合格的全棧工程師並不需要掌握以上所有技術棧,但在工作中遇到問題時,如果卡在了某個你還不懂的技術棧,那你應該能快速學會該技術棧中能解決問題的那部分知識,然後解決問題。

如果想發展成全棧架構師,那還需要掌握架構方面的技能,包括前端架構、API設計、負載均衡、微服務架構、分布式事務、服務器集群設計、容災設計等等。優秀的架構師還需要深入理解業務,應該也是個業務專家。

然後,如何發展軟技能呢?就如我上面說的,軟技能主要包括: 解決問題能力超強學習能力良好溝通能力技能遷移能力全局思維能力。這些軟技能都需要通過長時間的實踐積累才能掌握,以下我只提供一些實踐方法的指引。

基本技能

解決問題能力

要提高解決問題的能力,首先要懂得如何分析問題。分析問題要盡量保持開拓性思維,多角度、多方面地思考可能導致的原因。多思考,多分析,而不是直接就開幹,才能不斷提高你的思維能力。如果該問題不是急著馬上就要解決的,可以盡量將所有想到的可能原因全部列出來,通過長時間的這種刻意練習,你會慢慢變成分析問題的高手,同時,你的思維能力會得到質的提升,經常能看到別人看不到的地方。

然後,對推測得出的原因,一定要進行檢查驗證。有些人,一旦遇到問題,總是武斷地下結論,認為是某某地方導致的,而不是先進行檢查驗證,這是一種錯誤的解決問題的思維方式。就算有90%的可能的確是某某地方導致的,也要先進行驗證之後才下結論。之前,我帶領的團隊裏就有這種固話思維習慣的人,出現了某個BUG,他立馬就下結論說一定是因為XXX導致的,我也知道,可能是XXX導致的幾率挺高,但我還是讓他先檢查驗證一下再作結論,結果檢查完發現是另外的原因導致的,啪啪啪,直接打臉。

還有,更重要的一點就是,要去解決當前值得解決的問題。註意兩個詞:當前值得。有些問題,可能也是值得解決的,但是否需要當前就去解決呢?比如說,項目初期階段,需要解決高性能問題嗎?

超強學習能力

劉潤在《5分鐘商學院》提到一個20小時快速學習的方法,怎麽做?

  1. 第一,花5小時,大量泛讀,主要就是為了了解一些基本概念;
  2. 第二,花3小時,建立模型,這是為了形成基本的全局觀;
  3. 第三,花2小時,請教專家,專家能幫你解答你無法理解的問題;
  4. 第四,花10小時,理解復述,可以使用著名的“費曼技巧”。

另外,古典在《超級個體》也提到了一些學習管理的東西,包括:功利學習法、找到知識源頭、學習金字塔。

還有一本書叫《關鍵20小時,快速學會任何技能!》,書中提到快速學習也是分為四步:

  1. 分解步驟 —— 把技能做最大程度的細分,分成若幹小步驟。
  2. 充分學習 —— 對每個小步驟進行充分學習,以便進行靈活的練習,並在練習中自我糾正。
  3. 克服困難 —— 克服在練習中出現的生理、心理或者情緒上的障礙。
  4. 集中練習 —— 至少用20小時集中學習最重要的小步驟。

學習方法很多,但我覺得最有效的還是 輸出倒逼輸入。我目前在團隊中也正在采用此方法幫助團隊成員提升自己的能力。

良好溝通能力

良好的溝通主要分為兩方面:一是理解對方的想法,二是讓對方理解我的想法。任何一方理解出現偏差,都是無效溝通。

首先,你要先理解對方的想法,這是有效溝通的第一步。當然,這裏面的學問也很大。有時候,對方表達出來的只是表面的需求,而不是真正的需求,這時候,你要懂得如何去挖掘出他的真實需求。一般情況下,多問幾個為什麽就能挖掘出來。另外,多站在對方的立場看問題。

其次,要讓對方理解我的想法,這就需要你能清晰明確地表達出你自己的想法了。當然,前提是你自己腦子裏已經有了清晰的邏輯。另外,作為技術人員,最容易犯的錯誤就是:與不懂技術的人員溝通時,依然使用技術語言。比如,你和不懂技術的產品經理談UML、談架構細節,這都不是合適的溝通方式。溝通時,一定要使用對方能聽得懂的語言或其他方式。

技能遷移能力

硬技能一般是比較難遷移的,軟技能則容易遷移。所以,應該多發展自己的軟技能。就算是硬技能,其底層大多也是軟技能的東西,比如,Android和iOS開發屬於硬技能,但底層的設計模式、架構模式、編程思想等則屬於軟技能,是可以遷移到後端開發的。所以,學習一門技術,除了要知其然,還要知其所以然,了解一門技術背後為什麽這麽設計,這才能將硬技能轉化為軟技能。

不過,有一點需要註意,技能遷移不等同於把所有東西都從舊領域照搬到新領域,因為兩個不同領域肯定存在一些差異性,在舊領域適用的東西,在新領域不一定也適用,甚至有可能適得其反。比如說,很多大公司的高管出來創業的人,會將他們在大公司的管理經驗遷移過來,對創業公司進行同樣的管理,但最終很多都失敗了。這樣的故事相信你也聽到過不少了。所以,進行技能遷移時,也要清楚不同領域的差異性在哪裏,要懂得判斷哪些可以遷移過來,哪些不能直接遷移。

全局思維能力

全局思維能力是最難提高的,需要不斷擴展自己的技能棧,要不斷擴大自己的視野,要站在更高的視角看問題。我自己在這方面的培養主要就是多學習和思考如何才能做出優秀的產品。這就涉及到需求分析、產品設計、UI設計、技術實現等,每一部分都會影響產品的質量。因此,我每做一個產品,雖然主要還是負責技術部分,但都會習慣站在更廣更高的視野去看待整個產品,也會經常性地給產品經理、UI設計師提建議。

最近,為了更系統化地幫助讀者們成為全棧工程師,對我的專欄提綱進行了全新的規劃,總共劃分為了如何學習、快速入門、信息安全、架構基礎、前端架構、後端架構、產品設計、技術管理、區塊鏈技術九大板塊,如今分享出來給有需要的人看看:

技術分享圖片

技術分享圖片

如何成為全棧工程師-Full Stack Developer