我對知乎前端相關問題的十問十答
之前知乎上有不少同行邀請我回答一些前端相關問題,但是,大家都知道了,要認真回答一個問題是需要大量時間和精力的,對於還在不斷學習積累階段的我,時不時分散原本的精力,打亂自己原本的節奏,實際上是一件不劃算的事情。就好像郵件或者微信,來一條信息,你就去看一下,時間和精力都會大大分散,工作和學習效率必然會大打折扣。所以我的策略是一段時間後專門花時間統一處理,這樣時間利用率會更高,投入產出比會更大。
對於知乎上的這些前端的問題,我也打算采用同樣的套路,趁著端午節前還有兩個晚上的自由時間(當晚修正:兩個晚上絕對搞不定,怕要月底前才能全部寫好),決定抽十個比較具有代表性,自己能夠駕馭的前端問題統一作答。
問題一、前端現在怎麽這麽多人?
問題描述如下:
投出去的簡歷沒有人看了
我的回答:
想來想去,還是從一個非前端領域的切身故事說起吧。
我的老家江蘇泰興是中國銀杏之鄉,產量全國 1/3,而我外公家宣堡鎮除了小餛飩出門,還是就是中國銀杏第一鄉的美稱。在我小的時候,銀杏的藥用價值和使用價值被發掘,銀杏價格突然猛增,那個時候的銀杏樹是沒有人專門種植的,全部都是很早很早以前的那些老樹,百年以上的比比皆是,或者說全部都是又大又粗的銀杏樹(見下圖),那個時候銀杏 30~50 元每斤,20 年前的 30 元相當於現在 300 元,而一顆百年銀杏大樹一年可以產上千斤的銀杏,按照現在的購買力,相當於一棵樹可以給一個家庭帶來年收入 30 萬,所以那個年代相親,聽說市區有套房,恩,還行!聽說家裏有個百年銀杏樹,靠,直接就成了!當時一粒指頭大的白果就可以賣幾毛錢,可以換一斤西瓜。以至於銀杏成熟的時候,銀杏樹擁有者(我家田裏的就是我的)會在外面通宵守著。
一看這玩意兒值錢,政府又鼓勵,於是家家戶戶,真的是家家戶戶,包括我外公,屋子前面和屋後面地全部嫁接了的銀杏樹,好多好多顆,但是樹這東西啊,它不是一嫁接就能成熟的,沒個 3,5 年,花都看不到一個。然後前幾年國慶回去看望,銀杏成熟季節,結果發現家家戶戶銀杏樹上都掛著黃燦燦成熟的銀杏果,很是奇怪,怎麽還不收啊?
後來跟外公聊天才知道,現在銀杏才一塊多錢一斤,扣除打果子,蛻皮等一系列人力成本,完全就是虧本的買賣,所以大家全部都讓果子掛在樹上,自然掉落,然後爛在地裏,甚至很多人,直接把好不容易長大的銀杏樹直接砍了,又種起了紅薯花生。
我覺得前端人為什麽現在這麽多,和銀杏樹一下子這麽多是類似的。
本質上市場需求導致的。
一個是移動 web 的興起(本質上是多端的出現),二是 Node.js 發展帶來的諸如大前端的發展,三是我國的互聯網還在快速發展階段,包括很多傳統行業的轉型等。
就好像智能手機興起的那會兒,iOS 開發以及 Android 開發需求很旺盛,而導致後來相關開發人員過盛是一樣的。
歷史總是驚人的相似,但卻又無法避免。
畢竟互聯網行業的工資,確實比其他行業要高很多,一旦市場出現某個巨大的職位缺口,自然會有很多人湧向這一塊蛋糕,來的早還好,還能吃到一口蛋糕。就像股市一樣的,有些人敏銳,牛市起來的時候跟進,但大多數人都是在大家都已經知道事物很火的時候跟進的,承受的往往是低收益和高風險。
所以,當知乎上開始出現“前端現在怎麽這麽多人”這樣的問題的時候,已經預示著市場開始飽和,那些趁著春風,聽著前端很火,看著工資很高才進入這個行業的小夥伴就和牛市到頭進入股市,別人銀杏賺錢也跟著種銀杏樹的人一樣,必然要面對貶值和風險兩大問題。
在市場面前,我們其實都是商品。
當市場趨於穩定,最終能夠擺在貨架上的,還是那些真材實料的商品。所謂大浪淘沙,去粗取精,時間會證明一切,其實也是同樣的意思。
所以,提這個問題的小夥伴,你應該意識到問題不在於前端有這麽多人,而應該意識到自己在前端這一塊的造詣還不行,意圖趁著春風進入某個行業,並且有大成,這種概率非常小,因為職業生涯它是一個長期的過程,就算你趁著行業需求緊缺進入這個行業,你自身能力不過關,永遠都會停留在這個位置,會逐漸淪為邊緣角色,生活不一定開心的。
你想啊,如果你比大部分人都優秀,能力比大部分人都強,再多人進入這個行業也不需要擔心,所以其實最重要的是,安下心來好好的把自己的前端知識給打牢了,基礎學紮實了學系統了,千萬不要有什麽一夜暴富的想法,群體一定會發生小概率事件,但是是不會發生在你這個個體上的。
我當年大學畢業的時候,前端這一塊的積累其實已經比很多人都多了,但我還是辭去工作,無業閉關學習了 9 個月的基礎知識,你看我現在已經 30 出頭了,雖然還是在一線,但是根本就不會擔心小鮮肉頂替了自己的位置,因為內功足夠紮實,這些東西呢,才是真正經得起時間考驗的。
所以,如果當你們靜下心來更關註自身成長的時候,說不定哪天一擡頭,嘿,物聯網興起了,需要大量前端職位;人工智能興起了,又來了前端職位;JS 已經深入到生物基因工程領域了,又是高薪職位。
此時的你,站在了牛市的起點,自己就是一顆巨大健壯的銀杏樹,而銀杏的價格又很高很高……
而銀杏的故事其實還沒完,很多農戶把自己的銀杏樹砍掉重新種了普通莊稼,所以這幾年銀杏價格就開始節節攀升……所以簡歷無人問津,不要擔心,你再堅持個一兩年,一定會有新的機會的!
問題二、Web 前端的路該怎麽走?
問題描述如下:
剛剛畢業,在公司一直做的是前端開發,之前都是自己去學習一些基礎的前端知識(html+css+js)。到現在越來越迷茫,不知道自己該去學哪方面的。 在學校學的都是一些基礎知識,畢業之後自己自學了 JavaScript,在這個公司,要求不高能搭頁面就行,可是我想提升自己。.求各位前輩指點!
我的回答:
想要提升的想法是對的。企業對員工的要求就是搭頁面,只會是下面兩種情況:1. 頁面質量各方面都是 top 級別,交給你實現可以收益最大化;2. 你技術能力僅限搭個頁面,其他活交給你不放心。由於你剛畢業,我想你應該是第二種,所以,如果你滿足於現狀,必然對自己職業發展是非常不利的,任何可以被輕易替換的職位都是不具有競爭力的,搭頁面就是IT行業門檻最低的職位,沒有之一,雖然實際上要想搭的好需要很多積累,但是,對於大多數企業,大部分用戶,大部分場景,只需要頁面視覺過得去就可以,而這種程度的要求實在太好實現了,而太多入行的新人都是這種程度,導致“問題一”的出現。
從理論上講,只要你 HTML 和 CSS 足夠精通,頁面足夠好,也是可以進入很好的單位,有不錯的發展。但是,很難,對於大多數同學而言,往往是條不歸路,所謂一葉蔽目,不見泰山,簡單和舒適容易讓人忽略的對邊界和底層的不斷探索,以及即使是大公司,也不希望你化太多精力在收益不直接不明顯的事情上,所謂人在江湖,身不由己,因此很難堅持下來。
所以,我的建議是優先投入精力在 JS 的學習上,學習一定要系統,一定要是基礎知識。
學習有經驗式學習和系統學習兩種。經驗式可以收獲書本上沒有的一些知識,例如微信瀏覽器下的坑,以及知識具有極高概率的重復利用可能性,可以說是投入產出比非常高的一種學習方式;但是不足也很明顯,一是學到的知識比較狹隘,拿搭頁面舉例,常用的 CSS 顛來倒去就那些,以至於很多小夥伴都沒見過unicode-bidi
等 CSS 屬性;第二個是工作效率其實並不高,一旦遇到之前沒有接觸過的場景或者需求,就會不知從何下手,百之谷之問人之,大把時間都被耗掉了;第三個就是技術實現往往不是最優解,舉例來說,想要知道A元素是否包含 B 元素。以前工作經歷讓我們知道parentElement
可以獲得父元素,於是,說不定就會寫一個不斷遍歷父元素判斷元素是否包含的方法。寫的人自以為寫了個很厲害的方法,殊不知,瀏覽器,包括低版本 IE 都天然支持元素是否包含的 DOM 方法contains
。
而系統學習是成為一個技術能手所必須的,全部知識點在腦中(或者有印象),自然想要實現什麽手到擒來。然而系統學習卻是很枯燥,很花時間,有些知識可能一輩子都用不到幾次,平均下來,似乎是個投入很大產出效率並不高的買賣。人總是喜歡舒適討厭無用功的付出,因此,有非常多的開發人員的知識都是經驗式學習,然後 1 年經驗 3 年用,然後中年危機。
“基礎知識”是相對上層工具或者應用而言的,例如,最近 Vue 很火,對於剛畢業的你,且公司又不需要你寫 Vue, 因此,Vue 哪怕被說到天上去,也不要去學習,抓緊時間學習 JS 基礎知識,原生的那些東西。
雖然前面講過學習要系統,但是,JS 知識點那麽多,如果每個知識點都花大把功夫去學習,且不說能不能學懂,怕是壓根騰不出這麽多業余時間吧。因此,很有必要指出哪些內容是適合你當下學習的,否則學習無重點像無頭蒼蠅,很容易陷入迷茫的。
非計算機專業背景學習 JS 要點:
- 非常重要:先要對 JS 這門語言要有整體、感性的認識;
- 掌握 JS 中的字符串、函數、對象、數組、字面量等基本概念,熟記所有內置的方法(包括參數和返回值);
- 所有繼承和原型相關內容跳過,註意,是跳過,不要看!沒有這些 JS 一樣可以活得很好,你的日常工作一樣玩得飛起,當然,你沒忍住看了相關知識也沒關系,因為你會發現自己看不懂的;
- DOM 事件和所有 DOM 方法一定要掌握的牢不可破;
- 學好正則表達式;
然而,要記住 JS 所有字符串、函數、數組相關的方法,所有 DOM 相關方法是相當龐大的一項工作,因為,很容易忘記,方法也很簡單,所謂好記性不如爛筆頭。把編輯器的 JS 自帶補全提示幹掉,從小交互開始,嘗試使用原生的 JS 書寫,寫著寫著,一定就會記住了,這是最快學習成長的方法。
學習的過程一定是帶有痛苦的,並且漫長的,千萬不要出現類似“《JavaScript 高級程序設計》和《JavaScript 語言精粹》我都看完了,接下來我要學什麽的言論”?你以為你是黃蓉啊,看一眼就記住啦!反復看,看完肯定會忘記,忘記了再看,我也是看這兩本書學習 JS 的,《JavaScript 高級程序設計》這本書已經被我翻到掉頁了,《JavaScript 語言精粹》上面滿滿的筆記,哪個知識點不記得了,基本上一翻就可以準確到對應的頁數,因為也是翻了太多遍了。
最終學習是否成功的關鍵在於“堅持”。
在一個相對公平的環境下,想要超越他人,只要能夠完成他人完成不了的事情就可以了。大多數非計算機背景前端從業人員對於 JS 的系統學習是很難堅持下來的,時間長,收益緩慢,但是,如果你堅持下來了,你就超越了這些人,你就不是一抓一大把的頁面仔,而真正能獨當一面搶手的前端開發了,完成了前端開發領域的階級跨越。如果你學習的時候像放棄,想想前面這句話,或許就又有了額外的動力。
問題三、前端開發基礎紮實的標準是什麽?
問題描述如下:
- 題主妹子,現在在培訓學習前端,看到有人說不要培訓出來的程序員,因為基礎不紮實,自學能力差等,讓我不得不重視這個問題;
- 題主上一份工作是做招聘的,也了解過,有的企業是不要自學的,因為沒有經過系統學習,基礎也不紮實,但是有人又說會喜歡自學的人多過培訓的。
- 感慨就是這個世界好復雜,每個人想要的都不一樣啊,那其實唯一的標準就是基礎好不好嘛?
那問題來了:
對於前端,或者其他的IT崗位而言,怎樣才算基礎紮實呢?
我的回答:
這個問題我們其實可以通過咬文嚼字來理解,首先要明白什麽是“基礎”,然後理解什麽是“紮實”。
“基礎”漢字表形上有“土”“石”“山”,原本用在建築構造上,由於地球重力的存在,現代建築都是從下往上建的,而最下面這個用來穩固建築的這個底層就是“基礎”。眾所周知,建築越高,基礎一定要越牢固,否則就會出現“眼看他起朱樓,眼看他樓塌了”的情況。在這世界上有非常非常多的東西都是從無到有建立起來的,就跟一棟建築的拔地而起是一樣的,先有個底子,然後再慢慢的往上添加東西,最終形成一個完整事物,而這個“底子”,我們也稱之為“基礎”,可以看成是事物發展的立命之本。
其中個人技能成長,就是非常典型的一個從無到有建立的過程,比如說打籃球,籃球規則,運球,定點投籃等就屬於非常基本的東西,我們就可以稱之為“基礎”,就算籃球之神邁克爾喬丹也是踩著這些基礎成長起來的;又比方說前端開發,在接觸這玩意之前,大家顯然都是一無所知的,到後來祝那個玩出點花樣來,這個從無到有的過程也必然伴隨著一些稱之為“基礎”的東西在裏面,那到底是什麽東西呢?
回到這個問題本身,目前行業中前端開發其實分兩類,一類是偏邏輯系的,一支也是偏視覺系的,無論是哪個系的,基礎都離不開 HTML,CSS 和 JavaScript 的,但不同系別最基礎東西有差異,如果是偏邏輯系的,基礎中的基礎是 JavaScript,至於邏輯思維能力和抽象能力,並不是基礎,而是天賦,基礎是通過努力可以夯實的,如果無論怎麽努力也夯實不了,那就不能稱之為基礎;如果是視覺系的,基礎中的基礎就是 HTML,沒錯,是 HTML,不是 CSS,雖然 CSS 出鏡頻率甩了 HTML 好幾條街,但是,最基礎的是 HTML,自帶行為和樣式,前端中的前端。同樣的審美能力和具象能力也不是基礎,這東西天生的,很難練出來。
提問的妹子上一份工作是做招聘的,根據我其實不太靠譜的經驗式猜測,妹子應該是走視覺系的,那前端基礎排序應該是 HTML > CSS > JavaScript。大家千萬不要有這樣一個誤區,認為基礎的重要程度是和學習時間成正比的,其實不是這樣子的。很多人學 HTML 估計就幾周時間,覺得學得很不錯了,簡歷上可以寫“精通”二字,因為最終的效果好像確實和預期的一樣,我說這個並不是想吐槽這些人“槑”,而是想表達的是 HTML 這門語言相當的厲害,這絕對是一個會非常長盛的語言,因為其重要同時上手非常的簡單,並且隨著發展,說不定以後會一統萬端。
這個問題的重點其實是“紮實”。先說說“實”吧,拿大米舉例,我們盛了滿滿的一碗飯,用勺子再壓一壓,我們會覺得米飯很“紮實”,很管飽,但是我想從來不會有人覺得一碗粥很“紮實”吧,為什麽呢?粥裏面雖然也有米飯,但其實百分之八九十都是水,水大家都知道的,進到肚子裏一會兒一泡尿一撒就沒了……
基礎知識的學習其實也是類似的,所以“實”,就是要滿,就是要沒有間隙,就是沒有水分在裏面。假設請問那些基礎知識,無論 HTML,CSS 還是 JavaScript,我們都看成是一碗米,那我們花兩周速成那些知識,或者說平時項目開發所用的那些知識所代表的米粒頂多就一碗粥裏面米飯的量,雖然吃的時候管飽,你以為好像知道了全世界,但實際上你知道的永遠是碗裏面那一小撮米而已,這就是不夠“實”。
因此,所謂“實”,就是從中心到邊界全部一個不落的進行細致的了解,比如說舉個很簡單的例子,是我問過我廠實習生的問題:“CSS vertical-align
支持幾個關鍵的屬性值?CSSvertical-align
支不支持負值?CSS vertical-align
百分比值是相對哪個屬性計算的?”CSS vertical-align
屬性大家肯定都用過,一定是middle
用的最多,有時候也會用用top
或者bottom
,然後有太多的人就會認為vertical-align:top/middle/bottom
就是vertical-align
屬性的全世界,這就是典型的CSS前端知識不紮實,想要紮實非常簡單,MDN 文檔看起來。HTML 中有非常多的標簽和屬性,有新標簽字的行為,有些屬性自帶行為,還有些屬性自帶樣式,且影響無障礙訪問,想要“實”,文檔一個一個看過來,一定要一個不落,要記住;CSS 那麽多屬性,默認值是什麽,支持的屬性值是什麽,定義是什麽,都是非常簡單的不需要邏輯思維的東西,全部一個不拉記住。於是你會發現這些其實非常表面的一些東西,你花兩周時間是根本來不及看的,我想很多人兩年都看不完,或者說根本就看不下來,靜不下心來,眼睛速度一掃,恩,我知道了,這些東西,好簡單,其實屁什麽都看不出來,就好像自己寫的文章中的錯別字,有時候復查個十幾遍都看不出來。要想從簡單的自以為了解的東西中看出一些不一樣的東西出來,這個其實是需要天賦的,心態,專註度等都有關系。
所以,雖然我這裏對這個問題進行了用心的回答,但是最終能帶來多少好的結果我其實是保持極大的懷疑的。
最後,回答一下“紮”,“實”為“滿”,可以理解為廣度,“紮”則可以理解為深度,我們可以看兩張圖片,形象的感受一下這個“紮”這個動作:
也就是說基礎紮實的另外一層意思就是要“進入水下”,“深入肌膚”,也就是說,我們除了要熟記表面的那些定義啊,語法啊,參數啊,還需要多思考,為什麽這樣設計?為什麽會有這樣的表現?
舉個簡單例子,我們或多或少都聽說話,寫頁面要符合 W3C 標準,HTML 一定要要語義化,但不知道大家有沒有想過為什麽要註意語義化?這其中背後的原因就是“紮”。
如果我們把前端基礎知識點比多人的話,所以前端基礎紮實,包括:在座所有的人我都知道你們的名字是什麽,你們的父母叫什麽,在什麽地方上班,星座是什麽,特長是什麽;甚至我還知道你為什麽你會叫這個名字,你為什麽會有這樣的性格。
發現沒,“前端基礎知識”這幾個字看上去好像很簡單,但實際上真的要做好其實是非常難的。HTML,CSS 和 JavaScript 分屬三門不同的語言,每門語言都有非常多的基礎知識,要想全部記住並能自如在項目中選項應用,那一定是需要大量的時間學習和積累的。
但是如果你積累到一定程度,猶如萬丈高樓一樣,有非常好的基礎,日後在前端領域,尤其技術這一塊,日後的高度一定非常可觀,而且持續上升。並且無形中會從一個前端使用者變成一個前端創造者,成為一個真正的高級前端開發人員,成為行業的香餑餑。
問題四、前端新人的迷茫?
問題描述如下:
大二,學前端大半年了,html,css,js,jq,less,bootstrap 這些不敢說精通,但也熟練掌握,項目也做了不少。最近學 react 的時候開始感覺力不從心了,之後再去了解 webpack,npm,node 等簡直一臉懵逼,各種配置命令行根本看不懂,仿佛到了另一個世界。
到了這個階段應該怎麽繼續學下去呢,是我基礎知識不足的問題嗎?
我的回答:
現在的年輕人啊,就是急躁。有句古話說的好,不識廬山真面目,只緣身在此山中。
如果單看問題表面,進行不下去,肯定是因為基礎知識不足,主要是計算機基礎理論知識,這個時候就可以看出計算機專業背景的優勢以及其實JS掌握得很弱啦。
但我看的是,你可能在走一條錯誤的方向,或者說有種給人盲目學習的感覺。
我覺得我大學最大的收獲是“自我認知”。我當時買了一本厚厚的心理學書,叫做《人格心理學》,讀得非常認真,一頁不落全部讀完,幾乎每一頁都有筆記和心得。這本書是我人生中的一個轉折點,它讓我明白了,為什麽我會如此特立獨行,為什麽性格會很罕見地分布在兩個對立端,為什麽內在更像女孩子,敏感細膩,喜歡和女孩子相處,喜歡聽女生的歌(取向還是正常的哈),這種性格特質比例多少,這種性格的優勢在哪裏,不足在哪裏等等。
“自我認知”帶來的好處是更自信,內心更強大了,比方說一些說話刻薄的人說你是“變態”,你就可以大可不必放在心上,因為你自己知道你是什麽一個人;你知道自己的不足在哪裏,以後就可以知道從朝方面努力不斷改正讓自己變得更好;你知道你自己的特長在哪裏,從哪方面發力更容易讓你走得更高更遠,學習的時候不會盲目,即使是一條別人沒走過的路,也會堅持走下去。註意,最後這一點就是我想說的重點,所謂“人貴自知”,人的精力總是有限的,盲目地學習,甚至直接去硬啃自己當下啃不動的骨頭,實際上是種無謂的消耗和浪費。
在我看來,你學 react 除了讓自我感覺良好以外,沒有任何作用,如果你的目標是進入非常棒的前端團隊的話。因為校招,甚至社招,基礎絕對是更重要的。所以,我覺得你有必要好好想一想,我的專業是什麽,我的興趣是什麽,我最強的特質是什麽,既然你說你 react 力不從心,很顯然,react 這種東西在當下並不適合你,如果進一步本質分析,可能這輩子都不適合你。大學數年過得很快的,要想校招時候 offer 拿到手軟,一定要進行基礎攻堅,jq,less,bootstrap 要學就不要學怎麽使用,而是學人家的源碼,為什麽這麽實現,如果看不懂,搞不明白,說明你 html,css,js 基礎還很弱,離熟練掌握還差了好幾條街,需要不斷積累,再不斷積累,會做幾個項目鳥用都沒有,和你競爭的那些前端哪個大學沒做過幾個項目,而校招名額就那幾個。等什麽時候,jq,bootstrap 甚至 react 源碼都看得懂了,恭喜你,你已經到了另一個世界,眼界和認知都脫胎換骨,即使是一些你自己都沒註意的談吐表達,都會很容易感受出不俗的技術造詣在裏面!
所以呢,那些讓你懵逼的東西就不要學了,了解下大概即可,好好紮實基礎,參見問題三,這才是你的方向。
然後,對於在校學生,從概率上講,深入 JavaScript 要比深入 CSS 入職概率高,但也有團隊招 CSS 很厲害,JS 毛毛雨的人,例如我們閱文集團,但這樣的企業並不多。當然,如果要我說心裏話,我是鼓勵大家追尋自己的內心世界,不要被外部這些東西左右,做好自己,等待時機。但對於大部分人其實只想混口飯,給父母長長臉,功利些也無可厚非,面向職位面向熱門前端開發也沒什麽不好的,喬布斯的名言“follow your heart”其實只適合有資本有能力的那些人。
問題五、① 前端工程師的價值體現在哪裏?② 前端的意義是什麽?
問題描述如下:
上一門必修課的時候,老師介紹了許多她的科研成果,感覺好高端。最後,老師讓我們思考一下自己學計算機的意義是什麽?難道就是為了寫寫網頁?
我個人深知將網頁寫好多麽的不容易。但是感覺所解決的問題貌似是可有可無的,即沒有前端,我們好像也能使用好多的互聯網功能。前端的意義是什麽呢?僅僅是可以優化視覺效果,讓用戶用得開心(我承認這是很重要的一部分,想知道還有沒有其他的)
由於兩個問題答案本質上類似,因此,我統一作答。
我的回答
如果作為一個打工者角度來講,前端的意義就是可以養家糊口。
而作為職業本身,前端的意義其實就如你說的,讓人機交互這一塊讓用戶更加愉悅。至於其他什麽高大上的意義,其實並沒有。前端工程師的價值其實也就是讓用戶在於機器交互的時候更加愉悅,讓用戶越來越喜歡,甚至在上面花錢,給企業創造價值。
你說如果你想要通過前端代碼來改變世界,很難,除非你造個像 jQuery 這樣的東西,也就讓世界變化了那麽一點點而已。
所以千萬不要高估前端這個職位的價值和意義。有種效應叫做“稟賦效應”,指的是“當個人一旦擁有某項物品,那麽他對該物品價值的評價要比未擁有之前大大增加”。我們身為前端工程師,對前端這個職位的評價自然就要比真實的要高那麽幾分。
我剛開始工作的時候,有非常強烈的,我是前端我自豪的感覺,追求完美的代碼,和開發 PK JS 要放底部還是上面,慫第三方推廣負責人產生的 http 請求太多等等。當然現在看問題的角度已經完全不一樣了,比方我們看新浪微博,前端體驗其實是做的很不好的,性能也很差,微博網頁掛著同時看騰訊視頻,視頻就會有卡頓,把微博網頁關掉立馬就好了,但是你看人家的財報,看看人家的股價,你就會發現前端在整個產品中使用的價值其實並沒有我們想的那麽高。
我突然想起了很早年的時候參加 D2 前端技術會議,因為支付寶的前輩分享了一個很有意思的案例,就是很重要的支付頁面的加載時間,具體時間我記不得啦,我大致說兩個數值示意下,就是 1 秒變成 500 毫秒,然後去看用戶的跳出率存留量之類的數據,結果發現並沒有什麽明顯的變化。也就是說我們拼命優化提高的那點加載時間,其實對用戶來講並沒有什麽價值。
因此,從企業的角度講,前端僅僅是整個產品流程上比較重要的一環,想要真正改變世界,需要上下遊一起齊心齊力,當然,最重要的還是上層領導者的方向,決策一定要正確。
這裏可以順便說點其他的東西,前端工程師的的薪資水平其實是與他給企業帶來的價值決定的,一個前端工作者,就算他技術再牛,如果他只是單打獨鬥,給企業帶來價值其實是有限的,哪怕做的產品在前端這一塊是世界一級棒,可能會遇到晉升阻礙;但是如果他可以讓其他前端同事一起變得更好,現在上遊的設計師或者下遊的開發也變得更好,產生了更多的價值,自然薪資也會上去。因此,通常前端管理人員會工資比較高(即使不參與一線開發),因為他需要讓很多的前端人員一起變得井井有條,高效運轉,這也是需要很多精力成本和承擔巨大壓力的,還有一類就是前端架構人員,負責優質的類庫,業務配套工具等基礎建設,保證整個產品線都高質量,同時節約人力等成本,也會有比較高的收入。
作為職業人,在談論前端工程師的價值的時候,眼中不應該只有技術,或者心心念念,實際上根本就不了解的用戶,其實可以多想想給團隊,給公司帶來了哪些價值,並且能夠佐證之。跳出職業本身思考問題,或許會有不一樣的感悟和成長。
對了,你的代碼最終能否改變世界其實是你的老板決定的,就算你寫的代碼一般般,但是你的老板很厲害,產品全球使用,你其實也已經改變了世界了。最後你會發現,改變世界似乎和你技術牛不牛一點關系都沒有,還是那句話,站在老板的角度,前端的意義其實就那麽回事。
問題六、學 Web 前端開發,培訓還是自學靠譜?
問題描述如下:
先說明問題:想轉行做 web 前端開發工作,但是無從下手。詢問別人有的說是培訓比較靠譜,也有說自學也沒什麽問題。所以想在這請教一下師兄們,集思廣益,但求少走彎路。
情況:本姑娘普通二本院校 14 級畢業生,電子信息工程專業學嵌入式開發。畢業後由於一些什麽“鐵飯碗”、“工作穩定”、“國企有發展”之類的原因,家裏在這邊給找了一份銀行的工作,現在工作一年。一年的工作終於發現這跟本不是我想要的生活,於是果斷辭職。在校期間學習過 C 語言。曾經也對網頁設計比較感興趣,自學了一點,不過那個時候學的都是Dreamweaver,Fireworks , Flash 什麽的,也沒去研究 HTML,CSS,JavaScript 這些。
所以在這裏還是想詢問一下,如果我想做這些究竟是找一份工作一邊工作一邊自學,還是找一個培訓機構學習更靠譜一些。第一次在知乎提問,求大神指點迷津。多謝了。
我的回答:
站在我個人的角度,肯定是自學靠譜,因為我自己就是完全自學成長起來的。
但是,我的成長不具有代表性,因此,不一定具有參考價值。
雖然是上的是理工科大學,但是,對於設計,繪畫,人文之類的東西很很興趣,但是人比較迷茫和憂郁,既然如此,早就做些自己喜歡的事情,例如……翻閱斷子絕孫的柵欄FQ去後面的東湖釣魚,或者去圖書館把所有繪畫相關書籍(老圖書館這方面書不多)就借了個遍,去臨摹與學習,彩鉛,油畫棒,水彩都自娛自樂過。
大二有了電腦,就自學 Photoshop,暑假都在刻苦練習 PS 技術,技術練得很好,做做平面設計,PPT 設計什麽的;下學期開始自學 flash,制作一些動畫片什麽的,當然,也是興趣使然,自娛自樂,例如下面這個殺馬特風格濃烈的 flash 動畫(點擊加載)。
點擊加載Flash動畫
後來大三開始玩社團,去了學校網研團隊,小胡子哥閻王也是這裏出來的,當時在網頁上弄酷酷的 flash,寫寫簡單的 AS2.0 腳本,當年流行這個。再後來,沒什麽需求,就開始寫寫幫其他小夥伴應付應付 CSS 和 HTML 的工作,看了一晚上別人實現的代碼,然後就自己可以把頁面鼓搗出來了,可見寫頁面這件事入門門檻太 TM 低了。
然而,上面這些事情其實都是業余愛好,自娛自樂,和很多牛人同學不一樣,他們一開始眼界就不一樣,就奔著 top 級別的好公司去的,所以,成長都比較專業和正軌。像我這種隨性吊子的人暑假就在學校幫老師幹點活算實習,現在想想真想甩當時的自己幾個嘴巴子。
等到大四了,玩耍了 3 年,看著周圍同學出國的出國,直博的直博,或者 offer 拿到手軟,自己又找不到讀研的理由,BAT 都不鳥我,我心裏急啊,這才意識到,業余玩耍自我感覺不錯的東西,在專業人眼中,就是坨“巧克力冰淇淋”。所以,我就出賣自己勞動力去創業小作坊拼命學習和成長(吃睡都在公司),老板很喜歡改版,正好,活夠多,於是天天起早貪黑寫頁面,年寫頁面1千張,所以,CSS 和 HTML 的學習有個很簡單的方法,就是寫,很多人寫了個淘寶首頁,京東首頁好像就覺得我行了,毛線,請整站完整寫一遍,寫他個上百個頁面,然後對比自己的實現和對方的實現有什麽不一樣,前端這個東西有個好處,就是都是明文的,尤其 CSS 和 HTML,壓縮都沒法壓縮,就去去空格換行之類。遇到疑問之處,全部搞懂它,那成長速度,蹭蹭蹭的,比去培訓班快,聽來的看來的,不如自己實踐來的快。
後來畢業了,大家都快快樂樂地去上班了,我就把小作坊的工作辭掉了,裸辭,然後遠走他鄉閉關學習去了。可以看出我還是很有想法,很有個性的一個人,甚至很多溫室中一帆風順長大的自我感覺很好的人不理解,你一邊工作一邊學習就好了。正如問題五提到的,人貴自知,你希望你以後成為什麽樣的一個人,當時我是希望自己 3 年內可以成為前端技術牛人,但是,一看自己,就會寫點頁面,JS 是個渣,後端語言是個 P,弱項非常明顯,要想以後高度足夠高,這些基礎一定要打牢實。但是,如果一邊工作一邊學習,考慮到之前小作坊每天都是早 9 點到淩晨 1 點,每周只有半天休息的狀態,屁的時間給你學工作以外的知識,你就會發現,你的技術一定會早早遇到瓶頸,然後就成為一個普通的技術人員,和自己未來的期望背道而馳。於是倒退下來,我需要學一門後端語言,需要把 JS 進行系統學習,把基礎夯實。
這次閉關共耗費我 9 個月時間,獨自離家,直接去了一個從未去過的省份去閉關,9 個月的時間把之前小作坊賺的小錢全部耗費光光,收獲的是可以自己用 php+sql 做一個動態網站,基本上算是和全棧,把 JS 基礎夯了一遍。學習的方法是看書,《 php 和 mysql 程序設計》《 PHP 6 與 MySQL 5 基礎教程》,《JavaScript 高級程序設計》和《JavaScript 語言精粹》,反復看,反復理解與記憶,一頁都不訪問,其中實例全部都親自跑一遍,看完後,給自己安排了個項目,從 0 到 1 把自己個人網站建起來,純自己手寫代碼,算是自己閉關學習的一次考試,結果個站從設計到開發上線,共花了我 3 個月時間,因為包含完整的賬戶體系,以及諸多內部頻道和外部頻道。
雖然我的自學故事才說了一半,但已經足夠回答這個問題了。
其實姑娘和我當初的經歷有些許類似,由於業余興趣玩過一些網頁相關的東西,然後現在希望重拾並進入這個行業。我是從興趣向職業轉移,這其中是 9 個月小作坊 + 9 個月閉關,共計 18 個月也就是 1 年半的高強度前端知識積累,外加我還有計算機專業背景。所以,你這個問題,尤其看到“無從下手”,“少走彎路”這些詞,我覺得你無論是一邊工作一邊學,以及還是培訓班,最後的結果都會是“問題一”,想變成職業沒這麽簡單的,我覺得你需要破釜沈舟,自斷後路的勇氣,前路一定挫折不斷,如果沒有足夠的心理預期,最後可能就變成嘴上說說而已。什麽“少走彎路”,有這種想法恰恰容易走彎路,認準目標,直接義無反顧往前沖,哪怕路上是荊棘是深溝,也不要退卻,這此時絕對的直線之路,才是真正的捷徑。所以,自學也好,培訓也好,形式根本不重要,重要的是你的心到底有多勇敢。
問題七、前端工程師和 UI 設計師該如何選擇?
問題描述如下:
本人大四了,正準備校招呢~可是本人是學計算機的,本人特別喜歡設計,ui 設計 視覺設計平面設計啦等等,熟練 ps,給朋友做過設計 ,也設計這網頁。由於大部分時間都 學前端了,所以設計的軟件就熟練 ps。我當然也不討厭編程,前端開發需要的基礎我都會,也做過不少的網站項目,但是一想到以後想做好前端開發還要學的語言多了去了我就頭疼,但是想到設計不管以後要學什麽還是怎麽樣我都不煩,我不知道該選網頁設計和前端開發這兩個職業的哪一個。
我想選設計但我不是設計專業的,我不是學設計的是不是一般公司都不會鳥我。。?但是前端要做好學的東西太多。。而且前端是不是就是程序員?。。
我的回答
參見“問題六”我的經歷,你具備了傳統意義上真正優秀前端的基本潛質。網頁設計勸你就不要做的,千萬不要把興趣沖動當才華,非設計專業要想在設計領域有所造詣,除非個別天才,基本上是不可能的,設計理論和設計素養這些東西很難補的,而這些決定了以後的高度。我當年就是看到了專業第一同學的作品,意識到我20年都追不上,放棄了做設計的打算。但是,業余從事設計的這段經歷對你從事前端大有裨益,尤其是偏體驗方向的前端。我工作之前並未意識到自己這方面的優勢,後來去了騰訊,我才發現,我本身細膩的性格以及以前的那些設計和動畫方面的積累,是我和其他前端相比而言最大的優勢,這也是我後來更多的學習中心向交互體驗這塊發力的原因,可以充分發揮自己的優勢,讓自己更具有不可替代性。
所以,你可以選擇前端設計這個職位,臥槽,我給你講,超級稀缺的,要代碼寫得溜,要設計敏感,基本上就是計算機背景但對設計感興趣的那些人,居然你就是這樣的。哎呀,居然問題是 2 年前的,不知道你現在再做哪一塊工作。要是真的做了設計師,我覺得可惜了。真正的前端,應該是負責人機交互的,和交互與體驗走的更近,而這類職位就需要兼顧代碼和設計,是個是個交叉職位,和傳統意義上的程序員其實並不是一路的,通常玩不到一塊的,反而和設計師走的比較近,哈哈。
問題八、如何面試前端工程師?
問題描述如下:
需要考察的重點有哪些?有什麽方法能夠有效地判斷其水平?
我的回答:通常我並不參與面試,但如果有面試,通常會花半小時對候選人各方面信息有盡可能的了解。
我很不喜歡自己準備一些沒什麽養料的問題去問面試者,而總是盡可能讓面試人員自己表達自己認為最厲害的地方,可以是 JS 的也可以是 CSS 的或者 HTML 的,SVG 以及 Canvas 也是可以。面試的最終目的並不是一場應試考試,而是在對候選人能力等不確定的情況下進行準確評估。如果你搞幾個固定的題目,那些面試黨說不定正好研究了這個題目,也有能力不錯的人技術棧並不在你這個點上,這招聘質量就會大大折扣。
所以,我的策略是,把你最厲害的一面展示出來,然後,讓我來看看你這個最厲害的一面到底有多厲害,然後根據其表述話語中一些有意思的信息進行深入提問,為什麽會這樣?有沒有其他策略?當時你是怎麽想的?最後效果怎麽樣?之類的問題,可以看看對待問題的思路,技術的深度是怎樣的。
千萬不要拿自己的長處去面別人,而是發覺對方的長處,然後看看能否給團隊帶來足夠的幫助。
除了技術,也會考察候選人的溝通表達能力,以及特質方面的一些東西。例如,這個人回答問題比較的油,技巧性很強,抱歉,你大概率會被斃掉,上頭更喜歡簡單純粹的小夥伴,因為對整個團隊而言是有好處的,因為油的人太多,團隊就不好帶了。
總之,就是從多個維度勾勒出候選人的輪廓,然後看看是否是團隊目前需要的拼圖。
對於面試者,我這裏有個建議,盡量展示最真實的自己,因為你根本不知道應聘團隊需要的是怎樣的人,例如,本希望招一個神經刀,你反而刻意一本正經,只能有緣無分了,豈不可惜了彼此。
問題九、前端工程師們,你們對前端的興趣是什麽?
問題描述如下:
難道沒有真正喜歡前端的嗎 QAQ 大一妹子,信息安全專業,剛剛確定了自己以後的方向,擁抱大前端,並希望著幾年後可以以前端工程師的身份來介紹自己,但我確定自己前端方向的時候可能有些坎坷。希望可以從知乎中得到前輩們的經驗和指點。我確定前端方向的時候很坎坷,想了好多,放棄了好多,但是很好奇前端界的前輩們為什麽會選擇前端工程師呢,你們的興趣在哪裏?
我的回答:
老實講,我之所以選擇前端這個職位,是因為我其他東西做不來,我其實國標跳得蠻很不錯的,身高身材力量柔韌性都有成功國標高手的潛力,但是當時的性格比較內向,具有輕微的社交恐懼,對於一個需要親密舞伴的舞蹈,自己覺得路不太好走。我其實對設計也很感興趣,但是總是有力使不出來的感覺,空有技術,但設計出來的東西,咳咳,當作廁紙我都覺得有辱屁股,以後就算硬著頭皮做下去,估計也就是一個普通的設計打雜人員。我的專業是生物信息技術,生物這玩意兒不念個博士,基本上也是苦逼的打工命,可憐,我要想念博士,必須考研,但找不到考研的理由,所以,生物這條路只能以後想辦法曲線救國了。信息就是計算機,大學時候我計算機編程起步相對比較晚,我上大學之前網吧都沒去過,大學用電腦鍵盤都是要一個字母,一個字母盯著然後再敲的,如何和初中就 VB 拿獎的同學比,雖然也學了些理論知識,但當時連程序是什麽都是一臉懵逼,更別談實際操作了。
後來發現就前端好像玩得來,要會懂點 ps,要會寫點代碼。寫代碼面向過程即可,並且效果所見即所得,興趣很容易被燃起來。然後我就開始選擇做前端了。
當你做其他東西都不順心的時候,突然發現某項東西做的非常得心應手,這個東西很自然就會變成你的興趣所在,而這個興趣反過來又會讓你堅持不斷做這件事情,形成一個良性循環,最終成為你的終身職業。
問題十、Web 前端開發前景如何?
我的回答:
我其實並不關心 Web 前端開發前景如何,正如我當年選的這個職業一樣,根本就沒有想過以後會如何如何。所以三十年河東三十年河西,如果有一個工作機會擺在你面前,分別是十年前的聯想和騰訊以及現在的聯想和騰訊,請問你會如何選擇?
同樣的,十年前的 .net 開發和網頁美工以及現在的 .net 開發和前端開發,請問你會如何選擇?
未來其實是不可預期的,金融危機出現之前,大家根本就吃意識不到會出現金融危機。
人的職業生涯長達 40 年,而科技行業的發展這麽快,在你的職業生涯有生幾年,Web 前端開發一定會衰落下去,說不定 10 年後就直接嗶嗶了。難道就因為這個你就不從事這一行了?萬一前端由於其簡單以及廣泛適用性,可以再興盛個 30 年呢?
我說這麽多是什麽意思呢?如果我們能把職業生涯像賭博一樣交在所謂的前景上,其實非常危險的一件事情,就像隨波的樹葉,很難掌控自己的前進的方向,隨時都有傾覆的危險。我真正關心的應該是,你的內心是怎麽想的?你的興趣在哪裏?你想成為怎樣的人?你的理想是什麽?你的價值觀是怎樣的?
正如喬布斯說的那樣:“follow your heart!”——追隨你的內心!
除了職業本身,我們還應該隨時註意提高自己在軟實力方面的競爭力,溝通表達、為人處事、團隊協作、項目推動等等,日後即使行業不景氣了,也不要擔心隨風而去。
當然,如果只回答問題字面上的提問內容,我認為前端開發還是可以繼續持續,如果非要加 Web 這個前提,那就不好說了,瀏覽器這個二級殼子在下一代大規模端設備出現的時候說不定就沒了,自然也就沒有 Web 這種說法。
為什麽我的我對前端開發前景這麽肯定呢,因為越是簡單的東西,越是容易普及的東西,越是能夠興盛昌盛,經久不衰。前端開發除了在 Web 上,還可以出現在桌面軟件上,各種物聯網端,甚至操作系統都前端開發來搞,因為足夠簡單。簡單事物生命力更旺盛,這是億萬年生物演化驗證的哲理。
HTML 和 CSS 是偉大的發明,簡單實用;JavaScript 其實也很偉大,別聽那些程序員瞎嗶嗶 JavaScript 的一些不足,對於那些被 C,C++ 奶大的程序員,自然會覺得 JavaScript 的套路很奇怪,也會詬病性能方面的東西。
但是如果站在設計師和普通開發人員的角度而言,如果沒有被 C,C++ 這些東西汙染,就會覺得 JavaScript 就像是一個靈動的精靈,親切自由灑脫奔放隨性,套路比較符合現實認知,非常適合人機交互這種場景。當然,如果你要使用 JavaScript 實現傳統後端或者桌面軟件的功能,則自然現在的套路是有不足的,這就是 ES6 開始出現的原因,是用來讓傳統的那些程序員舒服開心的。
當我們判斷一件事情的大方向趨勢的時候,套用古代哲學思想其實是非常好的一件事情,這些思想之所以可以流傳千年,肯定是有其道理的。如果我們只專註當下表面的那些信息去做判斷,很容易會導致大方向錯誤。就好像你進入一個迷霧森林,如果你只是根據當前的樹木和路進行方向判斷,你很容易迷路,走錯方向,但是如果你以天空中的北鬥星作為方向去指引的話,你永遠不會走錯路。
如果這個問題的本意是問“ Web 前端開發錢景如何?”,我只是說三十六行,行行狀元,任何行業,哪怕你是清潔工,需要做到頂尖,“錢景”根本就不要擔心的。
這個問題好像是 2014 年提出來的,現在來看,前景感人,感人沒有引號,是真的感人,2016 年培訓最火的職位,同時也是競爭最激烈的職位。
結束語
學習過程中遇到什麽問題或者想獲取學習資源的話,歡迎加入學習交流群
343599877,我們一起學前端!
人生路漫漫,找準目標,認準方向,堅持不懈,終有所成
我對知乎前端相關問題的十問十答