最近感覺追不動前端的發展了,寫篇文章感嘆一下。
HTML
我知道有一些學校會教一些簡單的網頁製作,就是用 Dreamweaver 點一點的那種。大多也會留作業,最後交作業的時候看起來也像模像樣。
只要不看代碼。
看了代碼感覺寧願選擇死亡。
table 佈局,無意義的 dom 節點。大小寫混用,縮進混亂。
作為一個前端工程師,至少要寫明白自己寫的聲明是什麼意思對吧?
然後還得減少不必要的 dom 節點,畢竟很多文章說節點多會影響渲染速度(ps: 我是不在乎的,我覺得有點兒矯枉過正的味道了)
然後比較重要的一點兒是對於語義化標籤的見解。比如什麼時候該用 ul
, 什麼時候該用 section, aside至於 head 裡面的那些無聊的聲明只要會複製粘貼就好了,我覺得沒什麼意思,自信做到這些的應該算差不多了
文章說的是前端有多難,很多人都覺得這些標籤簡單。然而想象一下,要寫多少的標籤才能理解語義化的意義?要寫多少頁面才能真正的明白這個節點應該寫什麼標籤?如何組合才算合理?
CSS
然後是關於 CSS,我覺得這方面是很複雜的。並不像很多人覺得只是一些單詞的組合。
一開始我會改 background-color 覺得開心得不行,以為掌握了
後來無限突破視野。
在第一次寫超過50個class之後就感覺想死,重複性勞動,樣式修改調試,寫法醜。。。
接觸到 Sass 之後像是發現了新大陸,有一段時間甚至不會寫原生 css 語法了。
然後折騰: Sass -> Stylus
到這裡結束了麼? naive
後面還有postcss, cssnext 這些東西。
在 react 生態中還有 css-modules, css-in-js 這些鬼東西。
雖然語法都不是很難。但是這麼長時間的折騰下來,雖說提升是有的,但並沒有感覺到生產力有多少巨大的提升。
css 到這裡還沒完。
還有BEM的命名方式要去理解。
到這裡依舊沒有完。
css3 的新特性,還有各種 hack。比如如何實現footer始終在底部,內容始終撐滿全局?如何實現條紋?
到這裡結束了麼?
依舊沒完。
css stage 4 等著去學習。
還有精力?
可以試著多做些兼容性相關的東西。會崩潰,相信我
到這裡?
在我的視野中差不多算結束了,然而有誰能確定明天有沒有一個什麼new-css
之類的東西解決什麼問題。
JS
來了來了,前端的一個核心。
說JS輕鬆麼?咱們來扯扯。
首先是各種 dom 的增刪改,然後是ajax相關。學會了差不多能做簡單的頁面了。
然後對異步的理解。只有理解了異步才能正常地寫js。
然後是對js語言特性的理解。比如ES5如何實現繼承什麼的,閉包。
總之這些就是面試題總是會問的東西。
之後還應該理解設計模式對吧?
到這裡是正常的語言應該學習的內容了。然而js到這裡只是起步。
之後一個前端工程師還得會 ES2015/2016 之類的吧。現在不寫個async
誰好意思說自己是寫前端的?
之後應該是配合工具了,後文說。
繼續順著語言往下說。會了 ECMAScript 就能做個合格的前端了麼?
還早呢。
之前火的 coffee script
現在不行了,然而 TypeScript
火了啊。不學一下怎麼好意思追前端?
ts 對於之前寫 Java, C# 的非常友好,基本語法沒什麼變化。然而可苦了那些不寫這些語言的同學。語法改變倒是其次,思維方式的轉變才是難以接受的。
現在還有 Elm
了。。。
我覺得我老了,追不上了
Tools
都說二流程序員愛玩工具,那我應該算是三流程序員了。對於vim
如果我不算狂熱,那可能沒有幾個人算是教徒了。
我一直覺得編輯器應該夠快,能夠跟上我思考的速度。在折騰了兩年總算契合了我的習慣。
對於其他編輯器,我只有一個不去選擇的理由:太慢
好了,說完了我自己的選擇,得來看看我用過的編輯器了。
最初我也沒用過幾天的 Dreamweaver。直接上了 sublime。之後跟著快樂的sublime編輯器這套課程用了起來,應該是我用過除了vim外時間第二長的編輯器。
最初只覺得好看就用起來了。
然後學了一段時間PHPStorm,大概會用了JetBrains家的東西。說實話,他們家的東西是不怎麼好學的,細節太多。
然後我用起了vim。
作為一個0基礎起步的人,我在編輯器上折騰了兩年多才算找到了還算合適的方式。
其實我覺得很多人並沒有找到自己合適的編輯器,導致寫代碼的熱情都降低了。
對於編輯器的總結是隻能自己踩坑才能找到合適的編輯器和配置。然而需要時間踩坑啊!
另外的工具大概是前端的工具集了,就像是gulp
這類的東西。
我在初學的時候流行的是grunt,然而我看到那個配置文件寫的就完全不想用。
然後gulp就流行了起來,配置文件看起來簡單好多,學!
然後gulp剛剛入門就發現世界已經被webpack統治了,怎麼辦,學啊。
這麼長時間的折騰結束了麼?沒有啊!
還有rollup打包這些東西了。
像是php或者java就沒這麼多破事,代碼不用打包,直接跑起來,哪裡會半年換一套方案。
到現在,HTTP/2大行其道,可是前端卻沒有一款適合HTTP/2的打包工具。所以我覺得半年到一年左右還會有新的工具出現,大家準備好重新學習吧 :)
剛剛突然想起了還有版本控制工具也算是工具。
一開始不用版本控制,然後學Git, 然後有些公司使用svn,又得學。會用是一回事,深入理解又是另一回事了。咱們得稍微深入地理解一些吧。比如版本控制如何看待移動文件這件事的?
然後會了Git, 怎麼說也得上Github混混臉熟吧。然後跟Gayhub上的一堆基佬交流一下,怒了提交個issue。過幾天發現這麼簡單的bug還沒fix掉,忍不了,我自己寫patch,發個pr上去。
上面一行話說得輕鬆,然而沒個一年半載哪裡做得到。
版本控制會了,企業級私有倉庫還得折騰一下吧,踩踩坑。
Functional
又一個重點來了。
就是js什麼範式都能寫。
OOP麼?約起!class Foo {}
走起來。
因為大多數人都是從C/C++學起的,所以總能先接觸到OOP思想。而且OOP掙錢容易,所以這其中大部分人是不願意接觸不怎麼掙錢而且還得重新學的的其他部分的,用我爹的話說就是別搞那些沒用的。
然而現在不學FP真的能行麼?
並不能啊,兄弟。
現在不寫個 react 好意思跟人說自己是寫前端麼!寫了react怎麼說也得接觸一下 redux 吧。然後就完了。。。和之前完全不同的新思維就來了。
之前jQuery綁定一個數據直接改就好了。現在出個單項數據流,什麼操作都得發個 action ,視圖得訂閱 store 。好吧,這還不算FP的範疇。
高階函數總是了吧。我之前從來沒想過高階函數怎麼在 react 裡面用,直到看了 connect 源碼吃了一驚,臥槽,還能這麼寫!
還有說爛了的柯里化。
現在還出現了很多js的函數式語言變種,就像 Elm , clojurescript什麼的。
我真的覺得不學門函數式現在很難做前端了。
所以從入門的OOP到函數式,得費多大功夫才能學會。人家都是學好一種就可以了,做前端的都得會
Back-End
Node.js帶來了前端的春天。然而也加重了前端的負擔。
之前寫點兒jQuery就成了,現在還得會Node, 自己寫後端。
寫過後端的人多少都知道,代碼寫起來並不算很難,難的是負擔。如何設計才能承載高併發大流量。如何應對這些情況,宕機了怎麼辦。
原來前端不用關心的東西現在都得考慮。畢竟 Node 和前端靠的近,人家問起來自己不會多尷尬。
在我個人看來,很多寫Node的只知道堆package, 對於Buffer, Event, Stream, Http並不是很瞭解。
所以寫 Node 的前端同學們啊,咱們的學習之路任重而道遠。
學通了之後呢?那就已經脫離前端的範疇了。
Database
這都說到後端了。得扯一下數據庫吧。
數據庫絕不是簡單的拼一下SQL語句就可以了。
在設計表結構的時候要充分考慮之後的應用場景,可維護性,承載量級。
就算不考慮上面的幾條,那至少得遵守到三範式吧?
數據庫應用的時候還有很多要了解,比如一個表關聯是什麼意思,事務是什麼東西,應用場景在哪裡,如何處理慢查詢。
而我發現有些人都被ORM慣壞了,寫SQL都生疏了。
好了,一個前端工程師做到這份上也算是仁至義盡了。後面的交給DBA吧。
Server
做一個獨立前端自然少不了和server打交道。關於 Nginx 至少得會安裝。然後會寫簡單的配置文件。這樣,就可以自己上一個網站了。用了 Node 還得學學反向代理的東西。
然而到這裡哪裡能滿足愛折騰的前端?
HTTPS 走起!從幾家服務商中選擇自己喜歡的,口碑好的,然後搞定證書。
跑了HTTPS依舊不滿意,追新的我們怎麼還用幾十年前的 HTTP/1.1 ? HTTP/2 走起,自己下載編譯安裝 Nginx ,然後調參數,改配置。
這個階段得學會 Linux系 編譯, SSL/TLS 的知識,加密算法,HTTP。。。
一個寫前端的還得學這些 T_T
還沒完啊,HTTP懂了還有TCP/IP等著啃,Socket協議還得了解。
算法數據結構與數學
一萬個人告訴我算法和數據結構才是計算機科學的核心。
List, Graph, Tree 什麼的還得學學。反轉二叉樹這種知名題目還得寫寫。快排,水仙花什麼的還得寫一些
這個時候可能有些前端會問,跟我有關係?
關係太大了。
我在實習的第一個月在做module load的一些方案,因為對算法瞭解不深,寫了很多操蛋的代碼。好在後來各種重構沒讓我太過羞恥。
前端多多少少會接觸 canvas 和 WebGL 這些關於圖形學的東西。可是如果線性代數學的不到家怎麼可能寫得好圖形學的代碼?
至於那些數據結構對於前端應用可能並不是很明顯,然而一旦碰到將是致命的。比如對於Immutable.js的理解
所以一個合格的前端算法還得過關。
工程化
工程化是我一直覺得前端的最最困難的地方。和其他的後端所不同的是,前端工程化的重要性遠超算法數據結構。
前端雖然也有幾十年了,可是一直處於邊緣地帶。沒有非常穩定和合適的工程化實現。
千禧之前大多用C直接寫(前端渲染用什麼我真不知道,求老司機教)。然後用PHP做後端,直接在HTML裡面拼接。
然後出jQuery一統江湖。改dom解決所有問題。
可是到這個時候是無法解決大量頁面所帶來的問題的。比如性能,比如緩存,比如代碼重複,比如代碼可讀性差。
之後的Angular1的出世應該算是一道驚雷。在我看來前端工程化大概從這裡起步了。
源自於後端常用的依賴注入控制反轉之類的思想開始在前端嶄露頭角。
到現在,雖然群星閃耀,卻仍舊沒有一個穩定的最好的解決方案。
從MVC -> MVVM -> Flux 的變化,現在似乎 Reactive 有著火起來的趨勢。
如何組織構建頁面,如何在大量頁面中仍然能優秀地組織好文件結構,如何在面對需求變更的時候通過儘量少的修改代碼來實現需求。如何減少錯誤的發生,和排錯的代價。
在我看來,在前端領域,優秀的工程化方案要比優秀地算法更重要一些。
硬件
再來扯扯硬件吧。
最重要的自然是電腦,畢竟我們這樣的“網癮少年/女”每天八九個小時都要對著電腦,甚至可能比和對象呆一起的時間都長。
所以,顏值怎麼能差!長得醜還有心情擼代碼?
所以,性能怎麼能差!女朋友老生氣誰受得了。
我個人最想要的應該是頂配版 MacBook Pro 了。等發新品了,就算賣屁股也得買一臺
所以看看做個前端成本多高!不僅要寫代碼熬成白髮還得兼職賣屁股 T_T
然後是鍵盤,這個我保證比碰男女朋友時間長。
自從我買了 HHKB 我只覺得沒有網上盛傳的那麼神奇。我該怎麼用還是怎麼用,代碼速度依舊,開心程度依舊。
所以我覺得可能一把500塊的cherry就夠了。
關鍵是一定要把大寫鎖定 map 到 ctrl!!!
關於 remap 的問題。。。我覺得有些同學還是不願意乾的,畢竟麻煩。
然後繼續談談做前端的成本問題。
我大二就買了個獨立顯示器,應該算是比較早的了。
不買個獨立顯示器對這個小屏幕,鬼才願意寫代碼。
然而屏幕燒起來可是貴了不少。好在我窮得燒不起(此處插入微信smile表情)
然後是椅子。我前一段時間想買一把好點兒的椅子。
然後我刷了一遍各種評價不錯的椅子。覺得好像拖到40歲得個腰間盤突出比較值
結論
到這裡,你發現了麼
前端一點兒都不簡單啊。
要學各種註定被淘汰的所謂“新”東西。還得學貫前後端,熟悉算法,瞭解工程化方案。
別人攢錢買房,咱攢錢買鍵盤。
所以這輩子做前端的上輩子都是折翼的天使,請善待你身邊的前端同學