計算機專業的學生如何系統學習前端技術?

作為剛剛大二的計算機大學生,有C/C++的基礎,參加過市的ACM比賽(雖然沒獲獎),能熟練使用CSS+HTML,能完成基礎的IE6兼容。了解JQ,html5,css3,懂些用戶體驗。目前在學習JS,看的書是深入淺出Javascript,對JS的思路還是不太清晰,可能因為並沒有太多的實踐JS的緣故,現在大二課每天都很多,大三課不多,之後的路該怎麼走呢。


不帶著問題去看書是沒有意義的。市面上的前端書籍又不是教材,不會說你看完一章就讓你做幾道習題。

你要去解決實際問題,在你解決不了或者解決得不好時,再看別人是怎麼解決的。網上有中文論壇複製粘貼來的答案,也有頂級前端專家的英文博客,不同的解決方案都有什麼優勢,這是你要去思考的。


3 月 12 日根據評論所說的增加一些內容。原文中增加的會標出。

=============

一個寒假回來,好幾個同學都來問我或者自己開始學起了前端,前端入門雖然簡單,但是想要做好很難,是一個要通十行才能精一行的工作。再這幾年 MVVM 框架的大肆流行,前端已經不是以前用 jQuery 寫一寫就可以的時代了。於是我寫下這篇文章,來給大家一個參考。

首先,請大家牢記以下幾點:

  1. 前端不簡單!前端不簡單!前端不簡單!
  2. 前端和美工不一樣!不是只會 HTML、CSS、JavaScript 就行的。
  3. 程序和其他的行業不一樣,經驗是十分重要的,不管看多少書,都逃不過要經常的練習。
  4. 在學會使用 JavaScript 實現相同操作之前,不要使用 jQuery。
  5. JavaScript 和 Java 的關係如同雷鋒和雷峰塔的關係一樣,並沒有什麼關係!

前期準備工作

  1. 下載好 Sublime Text 3,並自行找教程安裝 Package Control。安裝完後使用 Package Control 安裝 Sublime Text 的漢化包,名字叫做 ChineseLocalizations。之後單獨寫 HTML 和 CSS 的時候,使用 Sublime Text 編輯。
  2. 下載 Chrome 瀏覽器,目前(2017 年 3 月 9 日)最新版本為 56,請盡量安裝最新版本,並設置為默認瀏覽器。
  3. 下載 Visual Studio Code,之後單獨寫 JavaScript 的時候,使用 VS Code 編輯。
  4. 下載並在本地安裝 Node.js,目前(2017 年 3 月 9 日)最新版本為 7.7.1,請盡量安裝最新版本。
  5. 使用 Google 搜索,不能使用 Google 的使用 Bing 搜索,不要使用百度
  6. 註冊一個 Github 賬號。

初學階段

學習時間:1 個月

初學階段主要是學習 HTML、CSS 和 JavaScript,掌握三種語言的基礎語法,並且掌握基本的布局方式、基本的 DOM 操作和演算法。

HTML 和 CSS

推薦跟著 iMooc 的《HTML + CSS 基礎課程》學習,裡面的每一小節都是指引式的教學,跟著指導學習 HTML 和 CSS 的基礎語法。

鏈接:http://www.imooc.com/learn/9

學習完上面《HTML + CSS 基礎課程》的所有內容之後,自行完成一個百度搜索的首頁,要求做到位置、顏色、間距等 99% 還原。不需要點擊可以搜索。

【3.12 更新】

課程中沒有提到的該學習的還有 flex 布局

JavaScript

學習 JavaScript 可以上廖雪峰的網站上學習:

http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000

跟著目錄從上往下學習,一直到 Promise。

學習的過程中可以結合練習題學習,這裡整理了一些:

https://github.com/iszu/web-learning/blob/master/JavaScript%E7%BB%83%E4%B9%A0%E9%A2%98.md

正確把代碼寫的簡單,短小。最好能一行實現。

當你學完 HTML、CSS 和 JavaScript 的基礎之後,完成這麼一個小練習:

實現一個簡單的 TodoList

不懂啥是 TodoList 的自行 Google

限制

  1. 界面不能照抄網上已有頁面的風格,可以把網上的設計稿做成你的頁面,也可以自己設計
  2. 不能使用任何已有的庫(如 jQuery, Bootstrap, Vue 等)
  3. 增加、刪除、修改的操作執行後,頁面不能刷新

基本功能

  1. 增刪改查

    增刪改查是指可以實現「增加」、「刪除」、「修改」、「查詢」四個功能。 其中「查詢」不代表「搜索」,只要頁面刷新後,數據能夠正常顯示即可。
  2. 可以儲存 「內容」「是否已完成」 的狀態
  3. 使用 localStorage 儲存數據
  4. 界面儘可能做的好看

加分項

  1. 可以只顯示「未完成」或「已完成」的條目

    你可以把它們分開顯示,或者是通過按鈕切換顯示,或者你也可以自己想一種把它們分開顯示的方法
  2. 給每一條 todo 添加 「完成日期」
  3. 在第二點的基礎上,已過期的條目有不同的樣式
  4. 其它更牛逼的功能

進階階段

學習時間:1 個月

學習完上面的課程,你就已經是一個合格的美工了,能根據設計師的設計稿實現出頁面,但是還不是一個前端工程師,或者說還不是一個工程師。這一階段你要開始接觸一些作為程序員需要學習的東西。

Markdown

首先學會使用 Markdown 進行寫作,Markdown 是什麼,怎麼樣個語法,可以查看我之前的推送:

https://mp.weixin.qq.com/s?__biz=MzI1MDA2MTUyMQ==amp;amp;amp;amp;mid=210548061amp;amp;amp;amp;idx=1amp;amp;amp;amp;sn=df5b99d555867c279596dde9b1862de2#rd

git 版本控制

其次要學會使用 git 進行版本控制,還是剛剛的廖雪峰—— git 教程:

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

並且把上面做的兩個項目,通過 git push 到 Github 上開源,README.md 使用 Markdwon 編寫。

HTTP, Ajax 和非同步

學習 Ajax 的基本實現,在這個階段你會接觸到 JavaScript 的非同步編程,你得自行了解什麼是非同步,並且會開始基礎 HTTP 協議,請自行了解 HTTP 狀態碼,請求頭,響應頭等基礎知識,並了解 TCP/IP,HTTP,HTTPS 協議的概念和關係。接著了解 JavaScript 的同源策略,為什麼需要同源策略,以及如何跨域。

高級階段

學習時間:6 個月以上

【3.12 更新】

這個階段你會開始多終端前端的開發,了解響應式布局,接觸前端工程化和前端框架,並開始深入學習 JavaScript 的深入內容,包括 ES6、ES7 等。

響應式布局

了解響應式布局的應用範圍、基本原理。學習 em, px, rem, vh, vw 等單位的使用。

ECMAScript 6

學習 ECMAScript 6,了解 ECMAScript 和 JavaScript 的關係,具體文章可以看阮一峰的 《ECMAScript 6 入門》,另外可以參考我寫的《ECMAScript6 學習筆記》。

NPM

自行找教程學習 npm 的使用,接觸前端工程化,了解 Gulp, Webpack 等工具的用處,並在本地自己搭建一個工程化環境。

前端框架

自行找教程學習 Vue.js 或 React 或 Angular 等前端框架,並嘗試使用這些框架搭建一個單頁面應用。以下以 Vue.js 舉例:

  • 學習 Vue.js 基礎語法,一定要看官方的文檔來學習:https://cn.vuejs.org。
  • 學習使用 Vue-cli 在本地一鍵搭建 Vue.js 項目。
  • 本地開發一個 Todolist 的 Vue.js 版本,同樣使用 localstorage 進行存儲。
  • 學習使用 Github pages 部署開發好的 Todolist,可以讓別人一起使用。
  • 了解 Vue.js 2.0 的內部原理和外部思想:
    • Virtual DOM
    • 數據監聽
    • render 函數
    • 單向數據流
    • Vue.js 的 Lifecycle
    • 服務端渲染的原理
    • Vuex 和 Vue-Router
    • ……

Canvas 相關

了解 Canvas API 的使用,懂得使用 Canvas 製作動畫,以此來製作一些更炫酷的前端效果,如圖片背景的高斯模糊等。

深入階段

學習時間:無限

這個階段是作為一個前端繼續精進自己的一個階段,你已經可以勝任小型項目了,但是還有一些細節需要你一直不斷的學習。

前端儲存

前端儲存知識點:

  • 儲存技術有哪些?
  • Cookie, SessionStorage, LocalStorage 有什麼區別?
  • ……

History API

什麼是 History API,為什麼要增加這個功能?

性能優化

學習有關前端性能優化的相關知識等:

  • 如何縮短白屏時間
  • 如何提升 CSS3 動畫的性能
  • ……

安全

學習有關前端的安全相關知識等:

  • 通信安全
    • 如何保障 Ajax 通信安全
  • XSS 攻擊
    • 什麼是 XSS 攻擊
    • 如何防範 XSS 攻擊
  • CSRF 攻擊
    • 什麼是 CSRF 攻擊
    • 如何防範 CSRF 攻擊
    • CSRF 攻擊和 XSS 攻擊的區別是什麼
  • ……

兼容性

有關 IE 瀏覽器以及老版本瀏覽器的兼容性問題的學習和解決,包括:

  • HTML 標籤的兼容性
  • CSS 樣式的兼容性
  • JavaScript 的 API 的兼容性
  • 優雅降級與漸進增強

學習後端

等到前端學習的差不多了,可以通過 Node.js 來接觸後端的開發,這裡不再詳述。

這文章原來我發在我的博客上,原文:Jasonamp;amp;#x27;s Blog


最近把所學的總結了一下。

以上

與君共勉。


for javascript part: ECMA-262 from dmitry soshnikov


拋個磚引塊玉。

====

個人覺得任何一門語言想要學好,最重要的還是打好基礎。夯實了基礎才能跳的更高,走的更遠。前端語言學習也是這樣,不能僅僅是工程導向的的學習,用到什麼了才去找什麼(搜索式學習),那樣不能形成一個系統的知識框架。

## Javascript:

有些常見概念要搞清楚:繼承,閉包,原型鏈,作用域鏈,事件流等。

進階:可以了解一些函數或操作的內部機制:eg,

* `new`操作符的工作機制(The new Operator http://d.pr/UfZH[[Construct]]http://d.pr/8C4V)

* 創建一個函數的內部機制

* instanceof的工作機制,衍生問題如何判斷一個變數是否是數組 http://d.pr/PUVX

* this的取值

* __proto__ 和 prototype [[Prototype]] and prototype

## CSS:

1、盒模型,標準模式和非標準模式下盒模型渲染會有什麼不同

2、常見的定位方式有哪些,relative absolute fixed定位有哪些不同

3、常見的瀏覽器兼容問題有哪些,如IE的hasLayout是怎麼個東西,常用哪些方式來出觸發hasLayout;z-index在IE和其它瀏覽器中有啥不同。還有著名的雙邊距bug,li中浮動元素bug等,進階的可以了解BFC及其衍生的一系列問題。

4、常用的CSS Hack

下面這些書可以看一下:

========

Javascript高級程序設計

Javascript語言精粹

高性能Javascript

Javascript權威指南

CSS Mastery

CSS權威指南

========


Javascript這種東西,上手十分簡單,一邊做一邊學是最好的。不推薦直接看書。書裡面細節太多,看了也記不住,純粹浪費時間,反而容易不得要領。不要想一步到位,也不用去想什麼先打好基礎,這都是上學時候教條的學習方法,效率也很低,也容易有挫敗感。先讓自己能做點東西了,再慢慢改進對語言本身和框架的的理解也不遲,反而會很有成就感,學的很快,有融會貫通的感覺。

最自然的學習過程就是自己實踐,遇到什麼問題就解決什麼問題。先想想你想用前端的技術實現什麼東西,然後再拆解成小的步驟,一步一步的死磕。不要上課了,花時間做項目吧。如果想不出來做什麼,可以幫我做一個:D

可以看一下這個哥們的代碼自學之路:

I』m learning to code by building 180 websites in 180 days. Today is day 115.


找個項目做,比如你做個知乎web客戶端,一步步來,缺哪補哪。在不斷地try and error的循環中,也進步了。做的時候多想為什麼。單純前端沒什麼系統的。真要系統學,還是語言,演算法,架構和模式這些基礎。


鑒於你目前的情況,建議按如下路線學習:

JavaScript:還是要多看些書才行。建議按如下順序讀:

1. 《javascript語言精粹》。了解JavaScript中哪些是精華,哪些是糟粕。

2. 《object oriented javascript》。讀完後可以很清楚JavaScript的面向對象機制了。

3. 《High performance JavaScript》。讀完後就知道如何寫出高性能的代碼了。

html+css這部分還是要多實踐,根據自己哪裡不會,在網上搜一些文章來讀。但這幾本書還是值得一看:

1. 《css權威指南》

2. 《css藝門之匠》

最後,你可以參考這篇文章

http://kingzs70.sinaapp.com/2011/09/09/front-end-web-develop-study


我覺得既然你有c++基礎,學習JS的話,基本上就可以看js手冊自己動手做一些項目或者練習。比如自己編寫一些複雜點的控制項之類。有不清楚的google,再做了一些項目後再回頭看看樓上推薦的書理解會不一樣的。總之我的經驗是學習語言要先實踐再總結和提高。


1. 現在網路如此發達,幾下搜索就找到自己想要的答案了。大學課程不應該限制你的視野,網上和樹上的知識有時候比老師講的好的多。

2. 東西不需要學的太雜,it頂級公司的牛人也不是所有東西都會,但是必須要精一門相對基礎的(比如你說的c++)。萬事皆有通性,之後學習別的也很簡單。

3. 前端其實可以換個思路,為什麼不去做手機app呢。


你既然有c的基礎,可以試試在熟悉js的語法用js做演算法寫寫小代碼。跟著網上很多比如慕課啊udemy啊coursera啊udacity之類的跟著demo幾個網站做做小的doodle遊戲。等這些你都搞定了,可以試試脫離html跟css用純js做一個landing page出來。等這些你都熟悉了,就可以入坑jQuery了。說起來簡單,等你有能力熟練用js做網頁出來的時候,已經是兩三個月後的事情了。


我是認真地告訴你,把JS搞精通,不要理會什麼框架。


前端開發是一項複雜的工作,一方面需要不斷更新自己的技術知識,另一方面需要從人性的角度去思考產品,因為技術歸根結底是給人用的,如何好用,這是一門哲學!技術就像吃飯是人體成長必須的,但是人的成長還需要另外的東西!技術方面就不闡述了,思考方面的,推薦讀道德經,易經,儘可能的了解人性,了解宇宙蒼生,了解大道至簡!


我認為你還是需要多看看書,不會犯低級錯誤。有時間可以出來實習,會有更深的認識


一入前端深似海。

當你面對達成一個目標可以有無數種可能性的時候,你就知道什麼是苦逼了。

都說 c/c++ 很多坑,但那都是固定的,知道了繞開就好了;

css/javascript 的坑,都是隨機的,很多東西基本靠猜。


基礎課程要學好,比較重要的是 Tcp./IP 尤其是http協議,面向對象原理,再看看浪潮之巔


推薦閱讀:

豆瓣張克軍是怎麼出名的?
FAQ-單元測試相比手動調試有什麼優勢?
前端面試?
前端開發的模塊化和組件化的定義,以及兩者的關係?
為什麼node出現之後,各種前端構建工具和手段才如雨後春筍般層出不窮?

TAG:前端開發 | JavaScript | 大學生 | 計算機科學 | 計算機專業 |