彈指一揮間,畢業已經三年了,昔日的小鮮肉變成上了年紀的小伙子,真是有些猝不及防。站在時間的分岔口,思緒萬千。從事了三年的前端工程師,這一路是如何走來的呢,在此做個總結,也給初入前端的新手一點參考。
在國企晃了一年
在大學期間,我的技術並不算突出,資質平平。以至於參加百度、360的校招都被刷了。所以畢業后就進入了北大方正這樣的大型國企。希望能從大企業中習得一套軟件開發之法。
這期間我完成了從學生到軟件工程師的轉變,知道了標准的軟件開發流程是怎么回事。簡單說就是“步入社會”了。
我的崗位是前端工程師。在2013年,seajs已經小有名氣了,但是我們並沒有用,整體開發模式還是原始的刀耕火種。一個jQuery作為基礎庫,整站的js都用<script>標簽來引入。當時的后端是PHP,也沒有前后端分離啥的,代碼的目錄結構就按照PHP框架的來組織,模板當然是后端模板。
至於代碼的壓縮合並,那時候也還沒有grunt/gulp,我記得是用了一個客戶端小工具來壓縮過代碼。
頁面也都是我切的,這個值得說一說,因為當時我們的項目要同時支持PC訪問和平板電腦訪問。所以就用了當時比較流行的響應式設計,即不同設備使用同一套頁面。那個時候就和Android/iOS的webview開始打交道了。踩的坑真是不少。
為了學習流式布局,我每晚都抱着張鑫旭的博客看,他css方面的文章很多,我基本都看了不止一遍。根據學到的東西,用百分比單位+inline-block流式布局+媒體查詢,我們的項目在我一個新手的嘗試下,成功的兼容了各種設備。那個時間是成長最快的,也是很充實的。
但是過了新鮮期,我很快就感受到了與國企的“水土不服”,國企的工作節奏是拖沓的,而我是血氣方剛的,真是水火不容。有段時間我一直為項目的事情着急上火,但是其他人卻不為所動,任憑項目一再延期。要知道在互聯網公司,延期是很嚴重的事情,而在國企,簡直是家常便飯。
另外一方面讓我不爽的就是,我沒有可交流的對象。部門只有我一個人做前端,作為前端新人的我此時是很渴望汲取知識的,經常跑去參加w3ctech組織的分享會。然而在公司內卻沒有一個可以交流技術的人。我甚至不知道別人家公司的前端都是如何工作的,我到底算不算一個真正的前端。
叫你一聲前端你敢答應嗎?我不敢。所以在不滿一年的時候,我就離職了。
在大型互聯網公司的一年
離職后我的目標很明確,就是互聯網公司,工作強度越高越好。於是就加入了當時正處於虎狼之年的360.
之后我的工作是很充實的,看到了更大的世界,知道了大型互聯網公司的前端都是怎么搞的。一開始有成銀大神帶着,后來又跟@墨塵頻繁接觸交流,成長很快。尤其是奇舞團的每周分享,我基本每期不落,吸收到了很多知識。這個時候,我才敢說自己是一名前端工程師了。
公司有很多大牛,也有很多現成的工具可以用。而我當時只是業務線上的一名小小前端,沒有機會能夠和大牛們一起造輪子。從技術框架上看,我當時開始接觸了angular,requirejs和seajs也有所研究,當時由於微信H5游戲開始火爆了一陣,還接觸了一下開發H5小游戲,學了學cocos2d-js,不過后來H5游戲的風似乎是刮過了,我也就沒再深入cocos2d。
當時也有些需求是要做手機上的頁面的,所以移動端的項目也做了一些,當時也沒有現在比較成熟的rem方案什么的,切圖需要有些額外的技巧,比如字號大小就是約摸着寫,看上去差不多就行。
mvvm開發模式以及模塊化開發,是前端發展歷程中比較重要的兩個里程碑,有幸自己沒有落下這兩個關鍵節點。
在我敢承認自己是一名真正的前端工程師之后,又開始有了別的想法,總在大公司做一個零件有點沒勁。此時我迫切想干的事情就是,靠自己的力量去架構起一個項目的前端。所以除了各個流行框架,我還研究了一些前端工程化方面的東西,grunt嘗試了一把。
感覺准備的差不多之后,我又開始蠢蠢欲動了。
在創業公司的一年
出於一些很現實的原因,我加入了現在的公司,一家比較成熟的創業公司。兩方面原因:1.開得起工資,2.前景不錯。畢竟,北漂了兩年了,我也該為自己在北京落腳做一些准備了。
加入現在的公司后,我的定位不再是大型機器的一個零件,我需要對公司的前端擔負更多的責任,因為我已經是一個老鳥了。於是我的思考方式也必須發生變化,以前不求甚解的知識現在也必須搞明白,並且更多的從項目整體上來考慮問題。
我開始承擔面試工作,開始帶新人。時刻思考着如何能利用多余的時間來做點事情,給公司的前端工作帶來實際收益。
在技術方面,自由度也比較大了,可以嘗試一些新的東西。首先是mvvm的大規模使用,如果以前使用angular只是蜻蜓點水的話,那么現在是在千萬級pv的大站點施工了。由於我們的網站還需支持IE6(主要用戶是老師學生,沒辦法~),所以采用了能夠支持IE6的knockout。外加requirejs以及knockout的amd-helper插件,也搭建起一套模塊化開發框架。
在移動端項目上,其他同事已經開始使用vuejs,使用webpack打包。尷尬的是,我對這兩者興趣極大,但是一直沒能參與到移動端項目中去。
去年開始在公司推廣sass,因為之前還一直是手敲css的。另外構建流也用上了gulp,來做一些項目上線的構建工作。
由於ES6也日漸成熟,而且我們有些項目也是不兼容低瀏覽器的。所以前段時間開始在項目中使用ES6,配置babel來編譯,雖然現在使着還不是很熟練,但也總得跟上潮流不是。另外,我們項目中jQuery代碼已經幾乎沒有了。
關於nodejs,自己業余也在學習,今年年初用express框架寫了一個團隊內部用的小項目。話說nodejs這個玩意吧,雖然我覺得前端都得會點,但是如果沒有項目驅動,要寫nodejs的機會還是很少的。
現在比較流行的東西,沒用上的一個就是react了,因為現在還沒有合適的場景,而且目前的框架也能滿足業務需要。可能得以后有功夫了再嘗試了。只是不要等我用的時候就發現過時了就行。
這就是創業公司的誘人之處,可以盡情嘗試各種新技術。總之現在的狀態我還是挺享受的,手中忙碌,心中平靜,腦中計划未來。
關於前端學習
發現這么多年自己折騰的還是挺多的,自己還在成長的道路上慢慢前行,學習的腳步一刻不能停。
如果要我給新手同學們寫點建議的話,我還是很樂意的。首先前端的知識體系多而雜,所以點滴積累是必要的。在我是新手的時候,有一個習慣幫了我很多,那就是寫博客。畢業三年,在博客園開博也三年了,寫博客對你的學習有很大的驅動力,而且要想准確得表達出你的理解,你必須對某個知識點了然於胸,這反過來能增加你的學習深度。
另外就是知識路線,得有一個規划,大體上來講,這條主路徑不要偏移:原生js、使用jQuery及編寫jQuery擴展、前端模板、前端mvc(backbone)、模塊化開發(amd/cmd)、mvvm開發模式、react為代表的redux模式。
另外css也是前端的一項基本功,有一些從后端轉到前端的同學不想寫css,我覺得這樣不行,理解css有助於你去理解前端整體。所以關於css的學習,大體有這些就夠:運用css完成頁面、css基本原理(看w3c標准文檔)、sass/less等預編譯、架構可維護易擴展的整站css。至於css界新出的一些東西,比如OOcss、css module,我也還未研究,這些感覺是錦上添花的,可以先放一放。
nodejs的話,倒也不是最迫切需要學的,我看一些新手同學,js/css還未熟練,就撲到nodejs上,這就有點舍本逐末了。如果有余力,在學好前端的基礎上再去碰nodejs。
PS.除了寫博客外,我還在寫自己的微信公眾號,內容是技術之外的一些思考,有興趣的同學可以關注哦: