1. 程式人生 > >談談我這三年在技術上的成長

談談我這三年在技術上的成長

前些時候把微信 id 開放了出去,有很多朋友加我微信,其中大部分都是前端學習者。一些同學在學習的時候遇到了困難,或者說瓶頸吧,詢問我處理辦法,有的希望我講述下學習經驗。考慮到有些話題偏大,我沒有詳細回覆,事實上我也不知道從何說起,今天思量了一番,記錄下來。

https://unsplash.com/photos/7oL1PR6AV8o by Amanda Perez

前些天寫了一篇文章 《談一談越來越難做的前端》,談了一下前端職能的變化,前端圈子越變越大,能做的事情也越來越多,於是可以選擇的方向也多了起來。新名詞、新技術接二連三跳串出來完全不給人喘息的機會,上一波沒有學明白下一波甚至第三波就來了,很多人開始迷失在技術名詞之中。而且每天對著同樣的人做著同樣的活兒,看不到自己的成長,也不知道如何成長。

我在 14 年 7 月 14 號正式入職淘寶,之前分別在百度和淘寶實習了三個月,兩次實習讓我成長了很多,而正式入職後在淘寶的兩年更讓我受益匪淺。一個人成長最快的時候,是他適應新環境的那段時間。

紮實的基礎

記得第一次面試之前,我很努力地把所知道的前端相關的技術點列了列,寫了好幾頁紙的關鍵詞,然後針對每個關鍵詞系統地鞏固學習,解決心中的疑問以及學習時遇到的新疑問,然後自信滿滿地參加了新浪和網易的面試。那時候,估計兩家公司的前端工程化已經有些苗頭了,但可能認為學校裡的同學沒啥實戰經驗,主要問的都是前端基礎題,閉包、正則、DOM 模型、Event 模型等等,沒什麼特別深入的話題。當然,那時候我的簡歷中也沒有太多體現工程化相關的內容,估計跟面試官也聊不起來。

對於入門不久的前端同學,面試官著重考慮的是他們的學習能力、發展潛力,也會適當看看程式設計能力過不過關,對 JavaScript/CSS/HTML 的基礎知識掌握的牢不牢固。如果你被面試官選中了,那就說明,你具有較強的綜合素養,是一個合格的前端入門者。一般重點高校學生的學習能力都還不錯,大學幾門計算機相關學科的薰陶加上適當的課外練習後,程式設計能力也是能夠接受的,所以公司喜歡招聘重點高校尤其是偏理工科的學生。我看到不少同學,在畢業前三五個月才開始瞭解和學習前端,單最後都順利地進入 BAT。

我就屬於上面這波人,只不過,不是畢業前抱佛腳,而是較早地接觸了前端,看了很多書籍,融入了前端社群,並且在學校的技術團隊中鍛鍊了基本功。我很慶幸自己會在大學時,投入那麼多時間在前端基礎知識的學習上,因為畢業後我發現,自己已經沒有那麼多時間和耐心來學習這些略感枯燥的知識了。已經工作的你還能夠堅持一口氣啃完犀牛書麼?估計絕大多數人都沒這個耐心吧,即便有些知識你已經淡忘了,只願意把犀牛書作為工具書。我在畢業前就把這本書啃了四五遍,現在基本不需要這本工具書了。

大學期間讀過的書很多,豆瓣上記錄過 大學讀的書,從每本書都吸收點知識,所以總的知識儲備其實是足夠應付面試和一般需求的。不謙虛地說,我對前端硬知識的瞭解比較全面,這對我後續的提升奠定了堅實的基礎。

知識體系和能力階梯

但是,畢業工作後,才發現,我學的那點東西遠遠不夠。事實上,畢業之前的實習就深有體會了。

為什麼公司期望學生能夠去實習?公司有自己的一套流程和技術體系,這一套東西是適配公司業務,方便各個工種之間協同作戰的,而且每個公司的那一套都不太一樣。剛畢業的同學最熟練的是對 API 的使用,而進入一個新環境後,會發現之前熟悉的那一套並不好使,有很多軟體環境需要搭建,很多框架類庫需要熟悉,還有一堆開發流程、上線流程、業務流程等等,這些東西會讓一個自信的新人變得沒有任何優越感。再加上分配的業務上還有幾個小 bug 要修理,你幾乎不會有自己的時間,學習變得變成了一種奢侈的事情。這也是給還在學校的同學一個警示,如果你要走技術這條路,基本功一定要打紮實,否則工作第一年你會相當吃力。

百度實習那幾個月對我的改變很大,象牙塔外拼搏三個月,個人閱歷見長且不說,技術上的認識有了很大幅度的提升。當然,這要感謝公司。在公司裡很容易知道哪些技術是公司需要的,哪些技能是業務中必須熟練掌握的。慢慢的,對技術就有了一定的甄別能力,曾經擺在心中的技術關鍵詞是單執行緒、相容性、冒泡捕獲、事件代理等等,而現在變成了元件化、除錯模式、自動化測試、前端整合環境等等,完全是兩個知識維度上的分類。

公司有不同層級的人,他們做的事情也有些差異,從這些差異中也能夠體會出,自己跟這群人相比亮點和缺點分別是什麼,如果需要提升還需要做些什麼。越大的公司,對人能力的分級越明顯,對個人來講,也越容易找準自己的位置。知道自己水平在什麼位置,也知道下一個水平在什麼位置之後,我們需要的就只有努力了。

業務和新技術

我從來不擔心社群又出來幾個什麼新的技術名詞,因為我已經給這些詞安排了座位,就在腦海中。比如 grunt、gulp、webpack 等名詞出來的時候,我沒有忙著去深入學習,腦子裡有一張大概的體系圖,先把它們打包扔到腦子裡命名為“工程化-打包類”,先存起來,等到需要的時候再去學習。實際上,我也是隔了三四個月才去學習和使用他們的。

但是存進大腦之前,我會先簡單瞭解這些工具:它能做什麼?哪些場景可以用?大概如何用?社群在哪裡?元件庫如何搜尋?三者之間的差異是什麼?然後看看基本的 API,這些工作花不了多少時間,但是對我後續深入瞭解它們提供了很大的幫助。我一直很認可這句話:「知道從哪裡可以學到知識,就就學會了這個知識的一半」。

所以我不擔心有新技術出來,我不忙著學它,因為即便是我學會了,我的團隊中也不會去用它,甚至業務中根本就用不上。對新知識做分類並且瞭解全貌,至於細節部分嘛,先放放。不要動不動就搞什麼原始碼分析,React 的 diff 演算法,Vue 的 MVVM,這種事情費事費力,其實稍微想象下就知道是個啥了麼,中間的細節實現和實現原理不是不重要,而是暫時不重要。可以等到你閒下來或者預知業務中有需要時,再下工夫深入也不遲。

大多數情況下,技術都是跟著需求的變化而變化的,需求從哪裡來?當然是從你的團隊和業務之中出來的。跟著業務走,你的方向不會錯!

小結

可以說沒有人系統地學過前端,大學沒這門課,公司也沒這門課。前端這個詞是 ajax 流行時出現,它朝氣蓬勃,發展卻異常迅猛。要在技術這條路上走的長久,首先要把基礎打紮實,然後才能能力和閒工夫循序漸進。

好吧,希望這篇文章對你有所啟發,下次我再分享我是怎麼建立自己的知識體系的。