化繭期
去年的春節(jié)之際,我還在為自己的未來(lái)苦惱著。
我原本以為我可以成為一名優(yōu)秀的產(chǎn)品經(jīng)理。
還記得最早接觸產(chǎn)品是高中時(shí)期,那時(shí)候給某在線(xiàn)教育機(jī)構(gòu)提了一些粗略的建議,他們獎(jiǎng)了我一個(gè)實(shí)習(xí)生的身份,可以邊上學(xué)邊上班。寒暑假可以上北京坐班。
在此期間,我一直將自己當(dāng)做一個(gè)準(zhǔn)PM看待,除了課堂上教的計(jì)算機(jī)基礎(chǔ)知識(shí)外和常規(guī)的產(chǎn)品助理工作內(nèi)容外,還讀了一些產(chǎn)品書(shū)籍比如《人人》、《失控》、《浪潮之巔》、《用戶(hù)體驗(yàn)要素》等。
但很不幸,這家公司內(nèi)部組織架構(gòu)產(chǎn)生了巨大的變動(dòng),我轉(zhuǎn)不了正了。
偶然得到的去騰訊課堂實(shí)習(xí)的機(jī)會(huì)也失之交臂。
可學(xué)校的課還是要上的,實(shí)習(xí)是不可能實(shí)習(xí)的,學(xué)校里的老師個(gè)個(gè)都是人才,說(shuō)話(huà)又好聽(tīng),不如在學(xué)校做點(diǎn)東西。
后來(lái)我就打造了一款這樣的產(chǎn)品:成績(jī)有毒,用來(lái)提供選課前的參考數(shù)據(jù),比如哪個(gè)老師掛科最狠之類(lèi)的。

這款產(chǎn)品巔峰時(shí)期發(fā)展了4000+用戶(hù),當(dāng)然,全部是我們學(xué)校的學(xué)生。但最后還是死于管服務(wù)器的老師手下:他們覺(jué)得這是個(gè)黑客軟件,直接把教務(wù)系統(tǒng)換了一個(gè)...
產(chǎn)品雖然死掉了,卻讓我喜歡上前端這門(mén)最接近用戶(hù)和產(chǎn)品的技術(shù)了。從此我的職業(yè)生涯從產(chǎn)品修正為前端。
破繭期
這就要從3月時(shí)我抱著試一試的心態(tài)參加了網(wǎng)易春招說(shuō)起了。
春招
冥冥之中注定,網(wǎng)易會(huì)成功地奪走了我的第一次,我也體驗(yàn)到了面試這種痛并快樂(lè)著的活動(dòng)。

這個(gè)時(shí)期的我,還是只會(huì)切圖,js完全是靠著突擊紅寶書(shū)惡補(bǔ)的弱雞。既緊張又嬌羞的我,在經(jīng)驗(yàn)豐富的小哥哥小姐姐面試官面前,完全就是一只待宰的小肥羊...
這場(chǎng)網(wǎng)易春招筆面試的結(jié)果自然是慘敗的,后來(lái)好不容易又抓住一個(gè)騰訊的面試機(jī)會(huì),然而一面掛...
我的春招就以2戰(zhàn)2敗的戰(zhàn)績(jī)收?qǐng)隽恕?/p>
也許是失敗更能激起人的斗志,在接下來(lái)的兩個(gè)月里,我做了成績(jī)有毒,并準(zhǔn)備以它作為簡(jiǎn)歷上的項(xiàng)目經(jīng)歷去面試。順便再讀了《YDJS》、《CSS 揭秘》、《Pro Angular》、《HTTP權(quán)威指南》等書(shū)籍,以及freecodecamp、leetcode、js 30 days的刷題,就為秋招一雪前辱。
秋招
17年的秋招,似乎比以往來(lái)的更早些。還未進(jìn)入狀態(tài),阿里就拿了我的一血:2017.07.16 阿里
我天真地以為答得不錯(cuò),殊不知這種感覺(jué)是面試掛前的先兆。之后的一個(gè)月時(shí)間,阿里的面試狀態(tài)一直是面試中,可是我知道,已經(jīng)涼了。即便我還做了筆試題。
8月16號(hào),我迎來(lái)了面試轟炸:
最后貌似還是抓住了秋招的尾巴,在8月31號(hào)成功上車(chē),拿到了現(xiàn)在的offer。
不過(guò)人生就像一顆巧克力,你永遠(yuǎn)不知道下一顆是什么味道。9月6號(hào),騰訊突然給了我面試機(jī)會(huì):2017.09.06 騰訊??墒?,鵝廠(chǎng)的內(nèi)推批是9月7號(hào)結(jié)束...這次面試自然沒(méi)了下文。
上完學(xué)校的最后一堂課后,我踏上了歸家的旅途,準(zhǔn)備好好放松一下秋招一直以來(lái)緊繃的神經(jīng)。
可是命運(yùn)之神就是那么愛(ài)開(kāi)玩笑,鵝廠(chǎng)再次給了我面試機(jī)會(huì):2017.10.16 騰訊。持續(xù)放松了一個(gè)月的我,自然不堪一擊。
成長(zhǎng)期
回到家后,拿到offer的喜悅被騰訊的一面掛沖散的一干二凈。這種結(jié)果仍舊提醒著我:你個(gè)菜雞。
的確,這個(gè)時(shí)間節(jié)點(diǎn)相比于我上半年對(duì)前端的知識(shí)儲(chǔ)備,已經(jīng)豐富了很多,算是踏入了前端的圈子。但還不夠,我還是太嫩了。
綜合各個(gè)面試官的反饋,在前端領(lǐng)域內(nèi)我目前至少有四處軟肋:
- 缺乏前端工程化經(jīng)驗(yàn)
- 沒(méi)有深入理解庫(kù)、框架設(shè)計(jì)原理和源碼
- 缺乏服務(wù)端常識(shí)和經(jīng)驗(yàn):包括后端語(yǔ)言、操作系統(tǒng)等
- 缺乏性能優(yōu)化經(jīng)驗(yàn)
如果說(shuō)我要成為一名優(yōu)秀的前端工程師或者Web工程師的話(huà),這就是我的痛點(diǎn),痛點(diǎn)找到后,接下來(lái)就該做需求分析并考慮如何解決問(wèn)題了:這當(dāng)然沒(méi)有什么比實(shí)習(xí)更適合去引導(dǎo)我去做這兩件事了。
11月1號(hào),我抵達(dá)北京,開(kāi)始了我的實(shí)習(xí)之旅,用了將近一個(gè)月的時(shí)間熟悉環(huán)境與適應(yīng)工作:2017.11.06-2017.12.01實(shí)習(xí)小記
這三月有余,又讓我對(duì)不少事物產(chǎn)生了新的體驗(yàn)和感悟:
工程化
我先拜讀了工程化的兩本經(jīng)典著作:
- 《Unix編程藝術(shù)》
- 《代碼大全》
讀完之后我得出一個(gè)結(jié)論:工程化其實(shí)就是將項(xiàng)目控制在自己可控范圍內(nèi)的各種辦法。這些理論需要我在實(shí)際的開(kāi)發(fā)中,不斷思考、驗(yàn)證、調(diào)整。
我想以這幾個(gè)角度來(lái)談?wù)勎椰F(xiàn)在所理解的前端工程化:
-
模塊化和組件化
1.1 CSS模塊化
現(xiàn)在的前端項(xiàng)目越做越大,但很多人卻忽略了對(duì)CSS的工程化,一個(gè)或者幾個(gè)項(xiàng)目里CSS代碼千奇百怪。好在Less、Sass、PostCss等給我們提供了嵌套、變量、混入、函數(shù)等強(qiáng)大的功能。比如說(shuō),業(yè)務(wù)各產(chǎn)品線(xiàn)的UI和通用頁(yè)面設(shè)計(jì)需要統(tǒng)一風(fēng)格,但只有個(gè)別樣式如顏色、背景等不一樣,不同產(chǎn)品線(xiàn)就可以通過(guò)$example-bg-color和@mixin example-header()等變量、mixin輕松實(shí)現(xiàn)出自己的頁(yè)面。
1.2 JS模塊化
大部分前端項(xiàng)目都考慮了這一點(diǎn)。比如一個(gè)vue項(xiàng)目:- 路由模塊可以交給vue-router做
- 狀態(tài)管理可以交給vuex做
- 工具函數(shù)和時(shí)間函數(shù)可以交給lodash和moment做
- 一些項(xiàng)目里用到的公用代碼可以放進(jìn)一個(gè)commons文件夾下
但是!這只是以功能來(lái)劃分模塊,并沒(méi)有以設(shè)計(jì)層次來(lái)劃分模塊。比如說(shuō)有一個(gè)頁(yè)面,它里面有一個(gè)非常大的表單(有15-20個(gè)表單項(xiàng)),這些表單項(xiàng)有表格、樹(shù)、單選、多選、單行輸入框、多行輸入框、開(kāi)關(guān)等多種類(lèi)型,它們之間的業(yè)務(wù)邏輯也被設(shè)計(jì)的很復(fù)雜(產(chǎn)品本身就很復(fù)雜),而后端給的數(shù)據(jù)結(jié)構(gòu)也非常惡心,是一個(gè)對(duì)象套數(shù)組套對(duì)象的數(shù)據(jù)結(jié)構(gòu),你需要從里面拿出一個(gè)個(gè)表單項(xiàng)(有些樹(shù)的子樹(shù)還分散到各個(gè)對(duì)象里)。這時(shí)如果只把代碼寫(xiě)在一個(gè)vue文件中,估計(jì)過(guò)一個(gè)星期就只有上帝才能看得懂了。
不過(guò),如果此時(shí)我們假設(shè)后端給的數(shù)據(jù)結(jié)構(gòu)就是標(biāo)準(zhǔn)、純凈的呢?那是不是直接用就行了?如果后端不能提供的話(huà),我們就需要對(duì)數(shù)據(jù)進(jìn)行一定的處理,這就是一個(gè)數(shù)據(jù)處理中間層。同理,我們發(fā)送數(shù)據(jù)給后端之前也可以先給這一層處理。當(dāng)這樣的情況多起來(lái)之后,我們還可以再抽象一層-->BFF
1.3 組件化
組件化其實(shí)就是CSS模塊化+JS模塊化的封裝,使用組件的人壓根不關(guān)心里面的細(xì)節(jié)。而世上本沒(méi)有通用組件,業(yè)務(wù)組件用的地方多了,也就有了通用組件。后端習(xí)慣把前端組件叫做控件,因?yàn)镃#、Java的安卓甚至MFC就是這樣稱(chēng)呼封裝起來(lái)的一個(gè)組件的。而Angular、React、Vue的組件和Jquery的插件也沒(méi)有本質(zhì)上的區(qū)別,只是一坨代碼的封裝產(chǎn)物罷了。
不過(guò)區(qū)別還是有的,沒(méi)有使用MVVM框架的組件注定難以維護(hù),因?yàn)槟切┐a只有上帝看得懂。
-
TDD(測(cè)試驅(qū)動(dòng)開(kāi)發(fā))還是BDD(行為驅(qū)動(dòng)開(kāi)發(fā))?
B端的產(chǎn)品,業(yè)務(wù)邏輯復(fù)雜的讓開(kāi)發(fā)者都不知道如何使用它的功能。每次提測(cè),測(cè)試們都用盡幾千個(gè)測(cè)試用例換來(lái)的幾百個(gè)bug。即使是我們組的大牛之一,我的二面面試官,都不敢輕易重構(gòu)他的代碼:“我可不想憑空多出幾百個(gè)回歸性bug。”
這種情況對(duì)前端、后端、測(cè)試都是一種摧殘。
“TDD還是BDD(先寫(xiě)測(cè)試用例還是先設(shè)計(jì)預(yù)期行為)?”這個(gè)問(wèn)題擺在了我們眼前。
而前端的自動(dòng)化測(cè)試又主要分為兩部分:e2e測(cè)試(關(guān)注界面)和單元測(cè)試(關(guān)注數(shù)據(jù))。如果先寫(xiě)測(cè)試用例的話(huà),會(huì)占據(jù)一部分開(kāi)發(fā)者的時(shí)間,并且前端功能變更的頻率非常高,說(shuō)不定會(huì)得不償失。
倘若采用BDD的話(huà),我們的設(shè)想是這樣的:產(chǎn)品經(jīng)理的PRD用自然語(yǔ)言把功能描述出來(lái)(設(shè)計(jì)好預(yù)期行為),然后工程師開(kāi)始開(kāi)發(fā),之后將這些自然語(yǔ)言(比如第一步:打開(kāi)xx頁(yè)面,第二步:點(diǎn)擊xx按鈕...第n步:得到xx結(jié)果)轉(zhuǎn)化成測(cè)試用例保存起來(lái),最后進(jìn)行批量測(cè)試,得到測(cè)試結(jié)果和報(bào)告。
關(guān)于具體的技術(shù),我也做了一個(gè)簡(jiǎn)單的調(diào)研,目前開(kāi)源界我能找到的最好的這類(lèi)工具是阿里的uirecorder,但它也只能錄制生成測(cè)試用例,并不支持自然語(yǔ)言生成測(cè)試用例。無(wú)圖瀏覽器是一個(gè)很好的突破口,比如google的puppeteer。
前端主要的開(kāi)源測(cè)試工具
-
溝通
前端工程師在一個(gè)工作流中處的位置很特別,它需要與設(shè)計(jì)、產(chǎn)品、測(cè)試、后端進(jìn)行溝通交流。程序間溝通況且需要一個(gè)協(xié)議,人與人之間更需要建立一套協(xié)議了(我認(rèn)為B端產(chǎn)品尤其需要),這需要熟悉各自崗位背景才能雙贏。根據(jù)開(kāi)發(fā)流程來(lái)說(shuō),我們需要有至少五個(gè)規(guī)范:
3.1 前端規(guī)范(腳手架、npm包管理、CI、靜態(tài)資源管理等)
3.2 產(chǎn)品規(guī)范(原型、PRD、需求變更規(guī)范)
3.3 設(shè)計(jì)規(guī)范(比如Ant、Material)、可從此衍生出適合自己業(yè)務(wù)場(chǎng)景的UI庫(kù)、圖表庫(kù)等
3.4 前后端規(guī)范(接口)
3.5 測(cè)試規(guī)范(測(cè)試用例、自動(dòng)化測(cè)試)不過(guò)此等大計(jì)不是我們這種碼農(nóng)能影響的,只能希望各方老大們能達(dá)成一致,減少我們搬磚碼農(nóng)在非編碼問(wèn)題上的時(shí)間浪費(fèi)。
自動(dòng)化
“聰明的程序員擁有高明的偷懶技巧?!泵鎸?duì)一個(gè)需要兩小時(shí)解決的任務(wù),不如花一小時(shí)五十五分鐘寫(xiě)一個(gè)自動(dòng)化工具然后五分鐘解決它。下面是我對(duì)前端可自動(dòng)化部分的認(rèn)識(shí),雖然部分功能我們自己還沒(méi)實(shí)現(xiàn)......
mock接口和接口管理
在后端沒(méi)開(kāi)發(fā)完接口或者接口GG的時(shí)候,擁有一個(gè)可mock的接口管理平臺(tái)是多么的幸福。我們使用的是大搜車(chē)團(tuán)隊(duì)開(kāi)發(fā)的easy-mock。-
腳手架
在項(xiàng)目數(shù)量和種類(lèi)都很多的時(shí)候,有一個(gè)好的腳手架會(huì)讓一線(xiàn)開(kāi)發(fā)人員專(zhuān)注開(kāi)發(fā)業(yè)務(wù)。在我的幻想中,當(dāng)開(kāi)始一個(gè)新項(xiàng)目時(shí):
- 有多種項(xiàng)目模板供我選擇。比如庫(kù)項(xiàng)目、業(yè)務(wù)類(lèi)項(xiàng)目、CMS類(lèi)項(xiàng)目。
- 能一鍵生成組件、頁(yè)面、靜態(tài)頁(yè)面等。
- 切換proxy地址的時(shí)候可以不重新構(gòu)建。
- 除了配置文件,還支持環(huán)境變量、CLI來(lái)配置項(xiàng)目,簡(jiǎn)單項(xiàng)目也可零配置。
- ......
CI
每天寫(xiě)完代碼后,生產(chǎn)環(huán)境自動(dòng)構(gòu)建+打包+測(cè)試+線(xiàn)上監(jiān)控是件多美好的事情~
源碼
無(wú)論是出于準(zhǔn)備面試的源碼問(wèn)題還是學(xué)習(xí)優(yōu)秀代碼的動(dòng)機(jī),今年我還是陸陸續(xù)續(xù)地讀了Vue和Moon、Lodash、zepto和jquery、element的部分源碼。
- 首先明確框架/庫(kù)解決了什么問(wèn)題?比如說(shuō):
1.1 Vue解決的主要問(wèn)題就是將Dom->數(shù)據(jù)和數(shù)據(jù)->Dom的轉(zhuǎn)換過(guò)程屏蔽了,不需要工程師手動(dòng)操作dom,而只需要關(guān)注數(shù)據(jù)就ok了。
1.2 lodash解決的是js原生工具api不夠用的情況,比如求數(shù)組的并集交集,對(duì)函數(shù)進(jìn)行節(jié)流防抖動(dòng)等。
1.3 zepto和jquery解決的也是js原生api不夠用的情況,只不過(guò)比lodash涉及到范圍更廣,比如DOM、BOM等。為什么今天我們說(shuō)jquery不值得用了,因?yàn)殡S著js本身的發(fā)展,很多原生api也逐漸完善,根本不需要借助第三方庫(kù)也能實(shí)現(xiàn)一樣的效果了。
1.4 element解決的是通用UI組件不夠用的情況,比如表格、單選框、多選框、樹(shù)形多選框、警告框等。 - 它是怎么解決問(wèn)題的?
弄清框架/庫(kù)解決的問(wèn)題域之后,我們就可以探索它們解決這個(gè)問(wèn)題的具體過(guò)程了,這個(gè)過(guò)程通常是打斷點(diǎn)調(diào)試一步步跟蹤源碼走向,比如說(shuō):
Vue的屏蔽手動(dòng)更新DOM的過(guò)程,會(huì)有:
- 創(chuàng)建Vue實(shí)例的過(guò)程(為什么我們要new Vue()?為什么組件的data需要返回一個(gè)函數(shù)?)
- 從HTML中收集所謂的依賴(lài)過(guò)程(為什么v-if="flag"這個(gè)指令能夠起到和js代碼一樣的效果?{{}}里面為什么可以放三元表達(dá)式而不能放流控制語(yǔ)句?)
- 對(duì)數(shù)據(jù)創(chuàng)建觀察者的過(guò)程(為什么數(shù)據(jù)一變,頁(yè)面也更新了?雙向綁定又是怎么回事?)
- vdom的創(chuàng)建、diff、patch過(guò)程(為什么可以通過(guò)render函數(shù)直接渲染模板?vdom到底是怎么節(jié)約性能損失的?)
- 生成ast和可執(zhí)行代碼的過(guò)程(同一個(gè)vue文件有多個(gè)v-for和v-if,它們的作用域是怎么決定的?)
- ......
- 框架/庫(kù)/API的設(shè)計(jì)思路是怎么樣的?
跟完細(xì)節(jié)后,我們又回到宏觀層面上,去思考這個(gè)框架/庫(kù)到底是基于什么設(shè)計(jì)理念的。比如說(shuō):
3.1 Vue為什么有人說(shuō)它是數(shù)據(jù)驅(qū)動(dòng)(MVVM)和組件化的?這個(gè)思想來(lái)自于軟件領(lǐng)域的哪里?這樣做對(duì)前端工程師來(lái)說(shuō)有什么好處?
3.2 lodash為什么有人說(shuō)它是函數(shù)式的?這個(gè)思想來(lái)自于軟件領(lǐng)域的哪里?這樣做對(duì)前端工程師來(lái)說(shuō)有什么好處?
3.3 jquery為什么有人說(shuō)它是鋒利的?它堅(jiān)挺這么多年的原因何在?為什么還有那么多的前端工程師離不開(kāi)jquery?
3.4 element為什么需要有一套設(shè)計(jì)原則?為什么組件要分通用組件和業(yè)務(wù)組件,它們的界線(xiàn)在哪?寫(xiě)好一個(gè)組件對(duì)一個(gè)前端工程師有多重要?
安全
年輕時(shí),我非常羨慕黑客。現(xiàn)在,我很佩服從事安全行業(yè)的人。
我現(xiàn)在所在的這個(gè)部門(mén),正嘗試著將以往巫師般的、個(gè)人英雄主義的安全行業(yè)改造成工業(yè)化的、團(tuán)隊(duì)協(xié)作的。
我司提出了一個(gè)理念:數(shù)據(jù)驅(qū)動(dòng)安全。以前純憑經(jīng)驗(yàn)和運(yùn)氣攻擊和防御,腳本小子都能造成巨大的損失。而現(xiàn)在,一切都需要有據(jù)可循,攻擊行為可以通過(guò)大數(shù)據(jù)分析辨別出來(lái),攻擊場(chǎng)景也可以還原,甚至化防為攻,主動(dòng)出擊,干他一炮。
整個(gè)公司好幾千號(hào)人就為實(shí)現(xiàn)這個(gè)目標(biāo)而努力,而我,為了理解其中的奧義,也做了一個(gè)demo,順便當(dāng)作本科的畢業(yè)設(shè)計(jì):

拿我們學(xué)校某服務(wù)器的Web日志做了一個(gè)簡(jiǎn)單的測(cè)試:


順便給g2-vue提了個(gè)pr,用來(lái)支持更復(fù)雜的G2圖表組件化。
算法
以前我也認(rèn)為,前端面試考那么多算法干什么?工作中又用不到,來(lái)到我司后,我承認(rèn)我錯(cuò)了。無(wú)論是平常中業(yè)務(wù)涉及到的UI組件、還是解決一些純JS問(wèn)題時(shí)、抑或是要實(shí)現(xiàn)交互性強(qiáng)的組件和可視化應(yīng)用時(shí),沒(méi)有算法的支撐,根本寸步難行。
下面是一些比較典型的例子:
- 數(shù)據(jù)結(jié)構(gòu)和算法在UI組件中的應(yīng)用---樹(shù)形菜單的實(shí)現(xiàn)
- 遞歸與非遞歸在JS對(duì)象中的應(yīng)用---多層次對(duì)象屬性查找
- 力學(xué)理論在前端流程圖中的應(yīng)用---流程圖連線(xiàn)優(yōu)化
- 遺傳算法在前端可視化中的應(yīng)用---地圖Tip響應(yīng)式適配優(yōu)化
可視化
我對(duì)可視化這門(mén)讓數(shù)據(jù)空間映射到圖形空間的學(xué)科的認(rèn)識(shí)應(yīng)該還是個(gè)門(mén)外漢:
- Echarts和highCharts基于配置驅(qū)動(dòng)
- G2基于數(shù)據(jù)驅(qū)動(dòng)
- svg和canvas是二維可視化的基礎(chǔ)
- webgl和threejs是三維可視化的基礎(chǔ)
- 地圖由瓦片+Geo數(shù)據(jù)構(gòu)成
附上兩個(gè)入門(mén)資料:
文檔翻譯
這是一個(gè)意料之外的收獲,就是前端文檔翻譯組織印記中文,有個(gè)同事是創(chuàng)始人之一。webpack、node中文文檔都出于這個(gè)組織。他說(shuō):“我就想給前端開(kāi)源社區(qū)做點(diǎn)貢獻(xiàn),讓國(guó)內(nèi)的開(kāi)發(fā)者學(xué)習(xí)時(shí)更輕松一點(diǎn)。”
他這對(duì)開(kāi)源社區(qū)的態(tài)度,讓我欽佩不已。于是,我加入了Ionic文檔的翻譯工作中。

在這期間,收獲了不少在公司得不到的git經(jīng)驗(yàn)。因?yàn)檫@是一個(gè)真正的開(kāi)源項(xiàng)目,在眾多分支中,如何保證合并、pr、同步等操作的順利進(jìn)行,是有很大的挑戰(zhàn)性的。
當(dāng)然,英語(yǔ)閱讀能力也得到了很大的提升,但離翻譯境界的信達(dá)雅境界還差得很遠(yuǎn),希望大家多提issue和pr。
其他
其實(shí),在實(shí)習(xí)的過(guò)程中,還遇到了很多問(wèn)題,但它們?cè)谒阉饕妗⑽臋n、issue、論壇和社區(qū)、Stack Overflow上是可以找到準(zhǔn)確答案的,所以我就不贅述了。
最后要說(shuō)的話(huà)
還有一個(gè)意料之外的收獲,就是在年會(huì)上中了一個(gè)森海塞爾HD650,雖然我并不是耳機(jī)發(fā)燒友,不過(guò)還是挺開(kāi)心的。如果哪位讀者對(duì)這個(gè)耳機(jī)感興趣可以私聊我~
雖然實(shí)習(xí)工作內(nèi)容只和我的痛點(diǎn)重合了第一點(diǎn)和第二點(diǎn),但也接觸到了更多可以學(xué)習(xí)的點(diǎn),比如算法、可視化、安全等。但人的精力是有限的,我需要對(duì)它們進(jìn)行最大可能的試錯(cuò)才能決定自己是否適合往那邊發(fā)展。拿前端這個(gè)工種作為立足崗位,發(fā)展的方向還是有很多的呢~
最后祝大家狗年旺旺旺~
