如何成為公司獨當一面的工程師

黃軼發表於2019-11-20

前言

如今的網際網路市場對高階技術崗位的需求越來越多,成為獨當一面的工程師已經成為很多一二線網際網路公司招聘的標準門檻了。那麼如何成長為獨當一面的工程師呢,我會從技術能力和業務能力 2 個方面去闡述。

技術能力

技術能力無疑是衡量一個工程師水平最重要的依據,那麼對於獨當一面的工程師技術能力的要求是怎樣的呢。

職業技能

職業技能就是工作中依賴的技術棧,下面我們以前端工程師為例,看一下有需要掌握哪些職業技能。

  • 熟練掌握 HTML、CSS、JavaScript 用語義化的 HTML 標籤配合 CSS 百分百還原設計稿,並使用 JavaScript 完成各種互動邏輯。這是前端的基本功,除了通過書籍、視訊等渠道學習之外,你可以通過做大量業務,不斷寫程式碼去應用所學知識,不斷積累。

  • 熟練掌握一門 MVVM 框架 Vue、React、Angular 其一,隨著前端的日益複雜,大部分場景都離不開它們。你需要清楚的瞭解框架出現的意義,框架的職責邊界,你能輕鬆應用框架提供的各種能力輔助開發工作。除了不斷在工作中應用,你還可以主動去學習框架原始碼,瞭解框架的實現原理。

  • 至少要學會一種打包工具 以 webpack 為例,你需要熟練掌握 webpack 的配置,學會利用 webpack 輔助我們的開發、部署和優化。你可以嘗試去編寫 webpack 的 loader 和 plugin。例如我們平時開發工作中需要 mock 資料,那麼我們可以編寫一個 webpack 外掛,在不改原始碼的情況下,實現在開發環境請求 mock 介面,測試環境請求線上介面。

  • 熟練掌握前端的一些廣度知識 例如HTTP、Web 安全、效能優化、資料結構和演算法等。除了通過書籍、視訊等渠道學習之外,你可以在平時工作中不斷去應用和驗證。例如效能優化,你可以去分析頁面的效能瓶頸,在前端還是後端?如果是在前端,你還可以進一步分析白屏時間、首屏渲染時間、JS 載入時間、JS 執行時間等等,最後通過統計的手段做效能監控和報警。 ,

開發效率

開發效率的高低,直接決定你的工作產出比,那麼如何提升開發效率呢。

  • 給自己設一個免打擾時間 例如下午的 2點-4點,這個時間專心 coding,不看微信不刷微博不開會,這樣的編碼會很高效。

  • 工作中善於提煉可複用的程式碼和邏輯 例如當你在開發過程中發現某元件在其它專案中實現過,這個時候千萬不要想著去 CV 程式碼,而是把它抽象成可複用的業務元件,對外設計好輸入和輸出介面,並抽取到專門的倉庫中管理,業務通過 npm 私服的方式去引入。

  • 善於通過技術的手段去提升效率 例如當你去開發和維護多個專案的時候,每個專案都包含一些類似的程式碼和配置,你就可以想著去開發一個腳手架,自動幫助你去初始化專案程式碼和一些配置檔案。

解決問題

每個工程師都會在工作中遇到各種問題,解決問題的能力側面反映了一個人的技術能力。

  • 線上問題 case study 當遇到線上問題,你可以配合一些報錯日誌快速定位問題出,找到快速修復的方案,並且在每次出線上問題後都認真的做 case study,找出引發問題的多方面原因,並給出對應的解決方案,避免日後再出現類似問題。

  • 探究問題的本質 在開發過程中遇到報錯,你可以通過程式碼執行堆疊和報錯資訊找到引起錯誤的根本原因,從而找到最合理的修復方案,如果報錯的源頭是第三方外掛,你應該趁機去了解第三方實現的原理。

  • 學會提問 並不是所有問題都要自己獨立解決,有些時候也可以求助於他人,好的提問方式非常重要。例如你在提問之前,自己應該經過充分的思考,並學會把問題拆解,在拆解的過程中就會把問題的複雜度降低。要善用搜尋引擎,把關鍵字提取出來去搜尋引擎上去搜尋,先嚐試自己去解決問題。如果仍然不能解決,可以將問題的相關上下文、截圖及必要標識及自己的思考過程、查詢到的相關資料,以及自己的分析傳送給想要幫助你的人,並能提供最小化復現的問題。

程式碼重構

曾經有個大佬跟我說過,如果每半年去回顧你之前寫的程式碼,都會覺得像坨屎的話,那說明你在進步。

  • 不要過度設計 有些人喜歡一次性把程式碼寫好,預留各種擴充套件介面,過度設計,但由於需求的的變化往往不可預測,非常容易導致花了大量的時間卻寫了大量無用的程式碼,產出低下。在高速發展的網際網路公司是絕對不能容忍這種情況的,而應該是敏捷開發,快速迭代。

  • 及時重構 通常我們為了一個專案快速上線,第一版的程式碼可能會有很多問題,當我們在基於之前版本的程式碼開發新功能的時候,如果遇到之前程式碼實現不合理的地方要及時重構,而不要敷衍了事,如果等到程式碼量已經很大的時候去重構,會非常困難和痛苦,並且還可能有 regression 風險。

  • codereview 找比自己厲害的同事幫助自己的程式碼做 codereview,吸取他們的一些好的建議,也可以去 review 其他同事的程式碼,覺得寫的好的程式碼要學習,覺得寫的不好的地方可以 ”挑刺“,引起討論,追尋最佳實踐。並且一個團隊要制定統一的程式碼規範和風格。

  • 學習優秀原始碼 如何去寫出優秀的程式碼,首先要學會模仿,你應該經常去 GitHub 去閱讀一些優秀的原始碼,把好的程式設計思想和程式碼實現借鑑到自己的工作專案中。

技術沉澱

技術是一個長期學習並積累的過程,需要經常做一些技術沉澱。

  • 技術分享 把工作中遇到的一些問題的解決方案、學習的一些新技術,產出的一些技術專案總結下來,作為對內或者對外(公司允許的話)技術分享和輸出。對內分享的話可以讓大家能知道你做的東西,並活躍內部技術氛圍,鍛鍊表述能力,這個能力在大公司的晉升述職中非常重要;對外分享可以鍛鍊寫作能力,提升個人或者是團隊的技術影響力。

  • 開源 如果在工作中做的不錯的專案,有開源價值並且公司允許的前提下,可以考慮開源,因為開源會讓你對專案質量有更高的追求。例如之前我在滴滴做的 cube-ui,開源會讓我們對程式碼的質量要求更高,並補充了完整的文件、示例和測試。而且隨著越來越多人使用,使用者幫我們反饋了很多 bug,也補充了很多功能,直接幫助我們省了 QA 的人力。好的開源專案也可以幫助我們提升個人和團隊的技術影響力。

快速學習

技術變化日新月異,快速學習的能力尤其重要。

  • 閱讀官方文件 當你去學習一門新技術的時候首先應該去閱讀官方文件,而不要去看社群總結的文章,因為官方文件是最權威的,並且是實時更新的,而他人總結的二手資料很可能是過時甚至是有誤的。

  • 在工作中實踐 學習如果脫離工作的實踐,其實是非常低效的。你應該把自己所學的知識並在工作中反覆實踐和驗證,及時反饋,加深學習的印象。不要花時間去學習與工作無太多直接關係的領域。

  • 先精通一門技術 不同的技術之間其實是融會貫通的,當你對一個技術精通並總結出方法論以後,很容易上手別的技術。比如一個對 Vue 精通的同學,上手 React 必定毫無難度,對 Web 前端開發精通的同學開發小程式也是毫無壓力。

技術選型

技術選型是大部分工程師都會面臨的問題,好的工程師一定要有好的技術選型的能力。

  • 技術選型的標準 當你去選擇某個開源專案的時候,應該參考以下幾個方面:feature 完整度(能否很好滿足我們的需求),使用量(npm 下載量、是否有大公司使用),維護力度(最近更新時間、更新頻率、issue 和 pr 的處理情況),測試(是否有測試,測試覆蓋率),文件(文件和示例是否完善),維護者(團隊、個人的技術能力以及他們的技術影響力),流行度(star、fork 量)。

造輪子

當現有輪子不能滿足我們的需求的時候,我們要有自己造輪子的能力。

  • 學會造輪子 你需要經常去學習和研究其它的輪子是如何造的,學的多了,自然就掌握了造輪子的一些規律和方法論,瞭解輪子實現的本質原理,也就可以根據自己的需求和場景去定製化輪子了,並且你的輪子也可以是其它小輪子組裝而成。例如我在滴滴的時候為了實現一個媲美原生 iOS 體驗的 Picker 元件,先是研究了 isroll 的實現,在它基礎上擴充套件實現了 better-scroll,然後在 better-scroll 的基礎上擴充套件出 Picker 元件。

業務能力

作為獨當一面的工程師,除了過硬的技術能力,也需要有良好的業務能力。

owner 意識

如果你不甘心只當一顆螺絲釘,你需要有 owner 意識,對產品和專案負責。例如我現在在 zoom,從需求、設計、開發、測試到最終的上線都是由工程師在主導,並協調各個角色成員。這對工程師提出了更高的要求,也鍛鍊了工程師的綜合素質能力。即使你所在的公司專案並不由工程師主導,你也可以以這個標準來要求自己。

產品思維

當你接到一個需求的時候,也要思考這個需求解決了什麼問題,有什麼價值和意義。作為一個工程師,最好能參與到需求早期的討論中,充分理解業務,這樣你對需求的把握和理解會更準確,而不是產品說什麼你就做什麼,有些時候你會找到一條既能滿足需求又能節約開發成本的路。

溝通能力

很多人希望做一個只寫程式碼的美男(女)子,但實際情況你需要和不同的工作崗位的人溝通。溝通能力是非常重要的,很多時候你需要去了解你的需求方的想法,並輸出你的想法。如果你兩耳不聞窗外事,很可能做出來的東西並不是他人想要的,充分的溝通可以避免走一些彎路,提升工作效率。

敬畏上線

很多沒有在大公司待過的人對於上線的視程度不夠,一旦上線出問題,第一反應並不是回滾程式碼,而是去定位問題,通過下一次上線修復。這個行為在大公司是絕對不允許的,因為當你使用者量大了,每一次上線事故的影響面都會很大,如果不及時回滾,對公司也會造成非常大的損失。因此要對上線有敬畏心,保證整個上線過程是自動化而非人工參與(因為人是不靠譜的),上線過程中需要觀察監控,一旦有任何資料異常要及時回滾,然後再定位問題重新上線,最好避免高峰期上線。

總結

我們通篇講了很多方法,但實際上在你進階成為獨當一面工程師的路上,這些方法也只是僅供參考,真正能成為大牛的人,能夠直面困難和挫折,敢於跳出自己的舒適區追求進步,能熬得住突破瓶頸長時間的寂寞,是肯下笨功夫的聰明人。沒有什麼人可以靠著看一兩篇文章就能成為大牛,而真正重要的,是多年如一日的堅持。

與大家共勉。

相關文章