我是怎么學(xué)前端的

前言

從大三(三年前了吧)開始學(xué)的前端,市面上各類視頻,收費(fèi),免費(fèi),正版,盜版的都看過,平臺(tái)看極客學(xué)院,慕課網(wǎng),騰訊課堂。后來出國了,就看 YouTube,Udemy 啥的??戳诉@么多的學(xué)習(xí)視頻也有點(diǎn)心得,今天又是被困在美國的一天,就總結(jié)一下吧。

學(xué)習(xí)過程

很多人其實(shí)很想通過看視頻去學(xué)習(xí)某個(gè)技術(shù),但是看完就跟沒看一樣。好像自己學(xué)了一點(diǎn)東西,但是用起來又不會(huì)用,打擊感很大。那我們不妨說一說比較良性的學(xué)習(xí)過程,因?yàn)槟愕弥滥銥槭裁匆磳W(xué)習(xí)視頻,到底看了視頻要學(xué)哪些東西。

我總結(jié)自己的學(xué)習(xí)過程是這樣的

  1. 看視頻學(xué)最基本的概念,如 API 使用,語法(if-else, for, while, class),IDE 怎么用,(npm, node,React...)是什么。
  2. 熟悉語法,將上面學(xué)到的東西用一用。比如用 Pyhon/Java/Go/Ruby 寫寫 leetcode。
  3. 跟別人的視頻做第一個(gè)項(xiàng)目。比如寫個(gè)小商城,小記賬應(yīng)用。
  4. 模仿市面上的項(xiàng)目,見一個(gè)抄一個(gè)。前面覺得自己學(xué)得不錯(cuò)的可以抄網(wǎng)站,比如抄個(gè)知乎,抄個(gè)簡書,再不行抄個(gè)學(xué)校網(wǎng)頁總行吧。覺得還有很多不了解的,就抄組件,如登錄表單,表單驗(yàn)證,按鈕等。
  5. 深入技術(shù),思考,總結(jié)。比如為什么要有XX,XX怎么來的,為什么用 XX不用YY。
  6. 創(chuàng)新,解決生活問題,寫輪子。
  7. 縱向/橫向發(fā)展,比如軟件工程,每個(gè)步驟了解一下。
  8. 自我感覺我還沒到這個(gè)層次。。。

呼,7個(gè)學(xué)習(xí)層次總算寫完了,是不是感覺很多?很難呢?沒錯(cuò),學(xué)習(xí)就是這么的難。不要那么多浮躁,總想一步登天。

從上面的學(xué)習(xí)過程,也可以看出看視頻只是在前期占比較重要的位置,在后期個(gè)人發(fā)展占的地位并不多。所以看視頻僅僅是為了讓你去快速了解某個(gè)事物,并不能讓你提升很多,關(guān)鍵還是在于自己多練習(xí)和創(chuàng)新。

學(xué)習(xí)平臺(tái)

在分層去討論前想先說說學(xué)習(xí)平臺(tái)。對(duì)比一個(gè)國內(nèi)和國外的兩個(gè)平臺(tái)。

視頻

  1. 國外:一般都是很入門的,比較喜歡拉長每個(gè)知識(shí)點(diǎn),你看的時(shí)候總把你當(dāng)三歲小孩,但是體驗(yàn)很好,聲音,視頻質(zhì)量都是很好的。
  2. 國內(nèi):參差不齊,體驗(yàn)一般,看到還用 windows xp 系統(tǒng)講課的都吐了,命令行還是白底黑字的都是垃圾。但是畢竟說國語,至少讓你注意力比較集中,還有一個(gè)好處是,如果遇到比較操蛋,喜歡說騷話的老師,你的學(xué)習(xí)效率會(huì)直線上升,嘿嘿嘿。

博客

  1. StackOverflow: 一般查 problem
  2. Medium: 一般學(xué)一些基礎(chǔ)用法和概念
  3. 掘金: 小白東西比較多,但是闡述的概念會(huì)很全
  4. 簡書,知乎:解決問題為主,主要為了好看
  5. 博客園:垃圾

總結(jié)一下,兩邊的平臺(tái)都是有好資源的,不過國外的普遍好一點(diǎn),國內(nèi)要是好的話就特別好。所以為什么中國工程師一定比國外牛逼呢?就是因?yàn)槲覀冇袃蓚€(gè)學(xué)習(xí)平臺(tái)呀。

下面就分層去討論吧。

1. 基本概念

這里可以看一些很基礎(chǔ)入門的視頻,標(biāo)題如《三天學(xué)會(huì) XXX》,《零基礎(chǔ)學(xué)XXX》,《XXX Tutorial》,《XXXX Beginner》。

各種入門

更多入門

關(guān)于這類視頻不要太要求質(zhì)量,因?yàn)橹v得都是很基礎(chǔ)的,學(xué)完不會(huì)的可以回家種田了??赐昴阒恍枰?/strong>

1. 知道 XXXX 是什么
2. XXX 有哪些語法
3. 如果他有小實(shí)例那更好,你就是打字員,跟著敲就行了,別問那么多為什么,因?yàn)槟氵€是個(gè)菜鳥,問了你也不懂。不信可以從“如何學(xué)習(xí)前端”這個(gè)問題DFS下去,看看你能搜出多少名詞?
4. 視頻最好要短,短到一天我就了解了所有東西,因?yàn)槟愕臅r(shí)間應(yīng)該放在后面的項(xiàng)目上,而不是這些概念

這里可以稍微記一下筆記,但是不要寫得特別全,以截圖,代碼和一兩句話為主。我附一些我在這個(gè)階段學(xué)一些東西的筆記。

學(xué)習(xí) TypeScript
學(xué)習(xí) Sketch

別總想記成高考那樣的筆記,密密麻麻的,沒啥用,筆記的目的是為了讓自己一看就知道那時(shí)發(fā)生了什么,不了會(huì)了供起來的。后面有的是時(shí)間讓你寫密密麻麻的博客。

2. 使用基本概念

這個(gè)階段可以和上面結(jié)合,一般視頻介紹基本概念也會(huì)讓你寫點(diǎn)簡單的 hello world 代碼。一般是夠用的。

如果你覺得不夠的話可以用新學(xué)的編程語言 去寫寫 leetcode,就寫最最最簡單的,比如這種

當(dāng)時(shí)轉(zhuǎn) Python 寫的

多寫幾次,基本語法啥的就會(huì)了,別去記,因?yàn)槟阌洸蛔 ?/strong>

3. 項(xiàng)目視頻

可能這個(gè)階段是最多人比較困惑的點(diǎn),當(dāng)然我也曾經(jīng)這里的一員。處在這個(gè)階段,感覺自己懂了一點(diǎn),就想秒天秒地秒宇宙了,覺得只要我看個(gè)項(xiàng)目視頻我就可以搞個(gè)類似的。要不是就是想看完這個(gè)視頻我就有東西寫在簡歷上了。所以在這個(gè)階段的人會(huì)去找一些大而全的視頻,比如《XXX商城》,《寫個(gè)Facebook》,《XXX+YYY+ZZZ+AA+BB 完成新浪》。

不要去選這種做大而全,復(fù)雜的項(xiàng)目視頻,下面是我的觀點(diǎn):

  1. 那些你看起來的復(fù)雜項(xiàng)目,并不復(fù)雜,而是很無聊的項(xiàng)目。為什么?你想想復(fù)雜的定義是什么。那不就一個(gè)頁面寫成一千個(gè)頁面,一個(gè)組件寫一千個(gè)組件唄。那還不如寫好一個(gè)頁面,一個(gè)組件,慢慢 follow up。
  2. 上面已經(jīng)說了寫一個(gè)千個(gè)頁面其實(shí)很無聊,所以我敢保證你看完寫第二個(gè)頁面的時(shí)候,你就沒有看下去的欲望了。你會(huì)覺得不就是增,刪,改,查么。
  3. 就算你真的寫完整個(gè)項(xiàng)目,你會(huì)更迷茫:寫了個(gè)復(fù)雜的商城,別人讓你再寫一個(gè)感覺很虛。這里最大的問題就是你并不清楚學(xué)習(xí)重點(diǎn)是什么。JS的 class,async/await,原型鏈,React 的受控和非受控,redux 原理,你會(huì)了多少呢?

說了那么多,哪種項(xiàng)目比較適合你的第一個(gè)項(xiàng)目呢?我比較推薦 Todo App/記賬App。你可能會(huì)覺得驚訝,就這????下面是我的觀點(diǎn):

  1. 頁面不多,想都想得到:查看 todo 頁面,登錄,個(gè)人頁
  2. 資源不多,只有 todo,就是對(duì)基增,刪,改,查
  3. 有著大項(xiàng)目的特點(diǎn):登錄,資源管理。你覺得簡單,那你下個(gè) split-wise,自己實(shí)現(xiàn)一下
  4. 可拓展:
    4.1 登錄:JWT?refresh token?權(quán)限管理?郵箱注冊(cè)?密碼加密?OAuth?reCaptcha?驗(yàn)證碼?你都想到了多少?
    4.2 資源:可參考 App Store 上的 App,添加分組, 圖片,圖表,notification, tag。資源的關(guān)系,單單統(tǒng)計(jì)這塊的 sql 就夠你想的了,想好了再做個(gè)可視化唄。
    4.3 樣式:再參考 App Store 上的 App,做個(gè)一模一樣的。做完再做個(gè)響應(yīng)式的,mobile 和 PC 都適用的樣式,PWA 了解一下?
    4.3 縱向:Sketch 設(shè)計(jì)?Figma?Webpack打包?Jest 單元測試?Cypress 集成測試?Travis CI?Coverallas?HTTPS?AWS部署?MySQL?Mock Server?Logger?SSR?你又想到了多少呢?
    4.4 橫向:如果上面你都挑戰(zhàn)成功,那么試試 TODO MVC 吧:http://todomvc.com/,Vue,React,Angular 都實(shí)現(xiàn)一下?
  5. 省時(shí)間:有更多的時(shí)候去思考,比如,為什么要 Redux,Redux 到底怎么來的,為什么要前端去實(shí)現(xiàn) Router,后端實(shí)現(xiàn) Router 不行么?LocalStorage 和 cookie 存用戶信息?MySQL 要怎么設(shè)計(jì)?思考好了,寫篇博客吧。如果你寫商城,我相信你是只會(huì)疲于追趕課程的進(jìn)度,真的只是做個(gè)打字員,沒時(shí)間去思考,總結(jié),寫博客。

當(dāng)然這個(gè)階段的目的是為了讓你起步第一個(gè)項(xiàng)目,而不是去完成我上面說的。這里只想說一個(gè)簡單項(xiàng)目已經(jīng)夠用了,盡量去減法。所以一個(gè) Todo App/記賬 App 絕對(duì)是夠你用已有的基礎(chǔ)去起步你的第一個(gè)項(xiàng)目的。

另一個(gè)目的是起步你的第一篇博客,當(dāng)你寫完一個(gè) todo list 相信是有很多體會(huì)的,此時(shí)可以寫一些很爛的博客,比如 JS class 怎么用,JS 閉包是什么。你別覺得自己不行,或者看不起這些很爛的博客,博客只有寫多了才會(huì)深入淺出,這個(gè)階段你還沒深入,所以只能淺入淺出。

這算是我第一個(gè)比較“成功”的項(xiàng)目了https://yanhaixiang.com/yan-xuan/#/home/recommend,樣式還可以,但是可以看出有特別多的問題,代碼寫的也很亂,沒有后端,只有前端的 Mock Data。

這是我很久之前寫的一篇博客http://m.itdecent.cn/p/e0941d5cc7ac,就是那么的小白,圖片,思路也不那么好。

4. 抄

這個(gè)階段就一個(gè)字——抄。抄知乎,抄簡書,抄 github。反正你看到什么就抄什么。抄到吐為止。我以前抄過簡書,有譜么,和嚴(yán)選。

有譜么:
https://haixiang6123.github.io/guitar-editor/#/

嚴(yán)選:
https://yanhaixiang.com/yan-xuan/#/home/recommend

簡書項(xiàng)目好像被我刪了。。。

如果抄不了網(wǎng)站就抄小組件,像這些

Google 按鈕
Windows 磁貼

如果想練 Node.js,那么用 JS 去實(shí)現(xiàn) cp, ls, mv 這些命令吧。當(dāng)然我也寫了一個(gè)這樣的 repo,只是后面又被我刪了。。。不過我特別喜歡命令行工具,所以也有這個(gè)項(xiàng)目https://github.com/Haixiang6123/awesome-cli

如果覺得自己很彳亍,那么打開 https://dribbble.com/,上面的設(shè)計(jì)都挺好看,也很炫,抄吧。

5. 總結(jié)你的知識(shí)

抄了那么多網(wǎng)站,也會(huì)學(xué)到很多小 tricks,如7種居中方法,如何拖拽組件,css 的定位等等。這個(gè)時(shí)候我覺得最好可以看一些比較宏觀,或者專精某個(gè)技術(shù)的視頻,如《XXX新特性》,《XXX最佳實(shí)踐》,《XXX發(fā)展史》。

此時(shí)你還會(huì)接觸到很多相似的工具或解決方案,如 Glup vs Grunt vs Webpack vs Parcel,Vue vs React vs Angular,this.$refs vs document.getElementById vs document.querySelector,text-align vs flex等等,所以,你還應(yīng)該要去對(duì)比這些東西,從根本去理解這些所謂的“技術(shù)”,“術(shù)語”。

Why react hooks

這方面博客是比較多的,這里比較推薦 掘金 上面的博客比較小白,但是講某個(gè)技術(shù)是比較全的。英文的可以看 Medium。

YouTube 可以搜 《why XXX》,《XXX vs YYY》等。其實(shí)此時(shí)視頻對(duì)你來說幫助并不大,因?yàn)楹苌僖曨l會(huì)講很深入的。。。一般視頻還是偏向給小白看的。

當(dāng)然看視頻,博客只是學(xué)習(xí)手段,只有寫博客才能讓自己真正去掌握一門知識(shí),所以,這時(shí)候就是你寫密密麻麻“筆記”的時(shí)候了,請(qǐng)開始你的表演。

6. 創(chuàng)新

曾經(jīng)很多人問我要去哪里找好項(xiàng)目做,我說去解決生活的問題呀,這就是創(chuàng)新。這里創(chuàng)新并不讓你搞一些“新”東西來,而是用代碼去解決生活上的問題,當(dāng)然新東西是錦上添花。

做創(chuàng)新項(xiàng)目的目的應(yīng)該是這樣,如果你的實(shí)力有 60 分就去做 70 分的創(chuàng)新項(xiàng)目,而做完這個(gè)創(chuàng)新的項(xiàng)目,你的學(xué)習(xí)能力應(yīng)該是達(dá)到 80 分的。。比如你學(xué)了爬蟲,那就爬一下學(xué)校的課表;學(xué)了 CSS 就用 CSS 畫個(gè)皮卡丘。不要總想著我學(xué)了 JS,直接寫刷票軟件,這是個(gè)好的創(chuàng)新,但是與你實(shí)力不符。

但是看到這里的你也知道創(chuàng)新這一步是多么的靠后,創(chuàng)新不僅僅需要技術(shù)的積累,也需要你對(duì)技術(shù)的熟練,熟練到一想到需求就有個(gè)大概框架的程度。實(shí)現(xiàn)項(xiàng)目不過是找資源和花時(shí)間去寫代碼。

當(dāng)然,在生活中也要多用編程的思維去想問題,不要覺得很 nerd,我覺得這是一件很 cool 的事。如果別人覺得很 nerd,那就問他只會(huì)寫 leetcode 除了面試有什么用。只要你用這種思路去想的話,遍地都是可以寫的項(xiàng)目。比如知乎這么多廣告,怎么一鍵去廣告?一畝三分地每次都登錄,怎么自己起服務(wù)器去自動(dòng)簽到?學(xué)校的課程這么亂,能不能自己實(shí)現(xiàn)一個(gè)國外版的超級(jí)課程表?

你看,這些都是你每天遇到的問題,但是你選擇了吐槽,而不是去解決它。

7. 縱向/橫向發(fā)展

縱向發(fā)展的話就是將你的小項(xiàng)目做大,比如個(gè)人網(wǎng)站,你的第一個(gè)項(xiàng)目,完完全全去跟著軟件工程(需求 -> 設(shè)計(jì) -> 代碼 -> 測試 -> 部署/發(fā)布)這一套搞下來。會(huì)再次發(fā)現(xiàn)自己的渺小,東西多得學(xué)不完。

當(dāng)然這里并不是先學(xué)再用,而是先用再學(xué)。要做的就是實(shí)現(xiàn),不要管最佳實(shí)踐。如果非要去學(xué)的話,上面每個(gè)步驟可以再次參照我的 7 步學(xué)習(xí)思路,從第一步入門即可。

橫向發(fā)展暫時(shí)我還沒有時(shí)間開始,所以這里就不說了。

8. 未知

等你們?cè)谠u(píng)論里說吧。。。

最后總結(jié)

可以看到真正去學(xué)習(xí)一門技術(shù)是多么的費(fèi)時(shí)間和費(fèi)精力,絕對(duì)不是網(wǎng)上的3天入門,或者看個(gè)視頻就可以速成的。一定是經(jīng)過:入門 -> (重復(fù) -> 總結(jié) )X3 -> 創(chuàng)新 -> 擴(kuò)展。

所以,當(dāng)你覺得學(xué)不下去都是很正常的,我也經(jīng)常會(huì)放棄。放棄了 Go,放棄了 ruby on rails,放棄了 Flutter,放棄了 angular,放棄了 Django,放棄了 Spring。。。但是,我對(duì)于前端還是一如既往的熱愛,會(huì)在這方面去深耕,和分享。

Anyway,如果你喜歡前端并堅(jiān)持下去的話,我會(huì)在路上等你??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容