花整個大學的時間研究前端好嗎?

現在大一(女生),對於後端開發感覺自己學不下去也沒興趣,正在自學前端基礎,想成為前端工程師,想花大學這幾年好好學前端,這值得嗎?現在確定方向會太早了嗎?


應用方向是可以隨興趣選擇的,沒有太早太晚的問題。

但應同時學好計算機科學的基礎,學習好數學、計算機系統結構、演算法、編程(不同範式)等。這些基礎無論在什麼方向都會有用,學得好可以事半功倍。


我覺得「花整個大學的時間研究前端」未嘗不可。

狹義來講,前端就是 Javascript、CSS 和 HTML,這些沒有太多的計算機基礎知識其實也是可以很快上手,如果以後一直持續學習,依然覺得自己對這一方面很有興趣,那這些功夫並不算白費。另外,學習的時候我個人是非常推薦去看書的,尤其是基礎書籍,這些書會讓你對知識有一個全局的視野,以後遇到問題解決問題的時候不是見招拆招,而是能夠舉一反三地從更高層次思考問題的解決方案,而且這些基礎書籍往往通俗易懂,看這些書絕對是磨刀不誤砍柴工。

再進一步,學習的過程中你一定會接觸更多領域的事物,有好奇心的你大概就會投入精力去研究它們有趣的地方,而有前端延伸出來的領域是很多的。

最開始你可能從一些入門教程上學會原生 Javascript 的一些 DOM 操作以及 CSS 的簡單用法,這時你可能已經算入門了,之後你學習了 jQuery,感覺如虎添翼,js 技術一日千里,你讀了 jQuery 的 API,各種鏈式操作瞭然於心。後來你開始仿製各大門戶以及各種酷炫網站的頁面,這個時候你或許會知道什麼是切圖,知道怎麼用 CSS 對頁面進行布局。左右邊欄、無限瀑布流、三欄式,你漸漸明白這些主流用法,對 position、float 多了許多想法,知道了什麼是清除浮動,每每聽說 flexbox 為布局而生,之後你回想起書上說的 BFC(Block Formatting Context),忽然對很多基礎概念多了不少領悟,於是覺得有必要再去翻一翻那些「入門書籍」中的某些章節。

後來,你發現這些網站用 jQuery 的沒有你想像的那麼多,於是你聽說了 Single Page App,你知道了 MVC、MVVM 這些由來已久的概念。你開始知道 Angular、React、Vue 以及更多的框架,你開始進入 js 框架的世界,你在各種框架中遊走,看各種人比較各種框架的優劣,驚嘆於各個框架的神奇之處,你甚至找到了一些行將就木的框架,後來才發現它只是頁面改版得比較新潮而已。後來,你終於選擇了一個框架進行深入,卻發現這次的糾結程度比選框架還要嚴重。

開始學習新的框架後,你一頭紮緊框架的生態環境中,你開始知道越來越多的概念,無論是 Angular 的雙向綁定,還是 React 的生命周期。你困惑於是否使用路由,如何管理數據,用哪個庫來實現某個功能,還是自己造個輪子?沒關係,你有可能根本就沒選,只是一咬牙用了個 starter-kit。整個開發體系被構建之後,你順風順水地完成了一系列頁面的開發,效率高到飛起。途中,你開始知道什麼是前端構建、webpack、gulp,開始使用 nodejs,你開始系統學習 ES6,開始了解 babel.js 這種 transpiler,你知道這一切都是為了提升前端的載入速度,你開始接觸前端優化:文件壓縮,文件合併、雪碧圖、CDN、gzip。你開始探究一直印象比較模糊的瀏覽器緩存機制,知道了 200 (from cache) 和 304 的區別,知道怎麼觸發緩存和防止緩存。

CSS 方面你開始接觸 SASS,有了更加趁手的 CSS 書寫工具,你開始糾結於 React 的 inline css 的用法是否合理,後來又聽說了 css modules、postcss,舊的疑惑被拋之腦後,新的困惑又接踵而至。

後來你接觸了 Isomorphic/Universal Javascript 的概念,知道了前後端分離,知道了首屏載入時間優化,開始研究 System.js,研究如何部署代碼,或許你會開始對後端感興趣,不經意間又掉到了後端的深坑之中,漸漸地接觸到 Nginx、load balance、https、域名提供商、DNS 解析服務提供商、雲服務提供商、容器化、異常捕獲、基本運維知識、伺服器監控,你會發現,你的專業課會讓你理解地更快更多。你有些興奮,有些畏懼,「我一個做前端的怎麼就去搞後端了呢?」

不知道什麼時候,你按捺不住買了一台 Macbook 或者給自己的 PC 裝上了一個奇怪的 Linux 發行版,開始研究怎麼更好地進行工作,學習一些基礎的 *nix 命令,學習寫一寫小腳本,讓自己更有效率。開始稍微接觸操作系統、計算機組成原理、計算機網路,驚覺這不是我們專業課嗎。你開始學著科學上網,從互聯網上獲取真正的第一手知識,瀏覽 GitHub 上瑰麗的代碼,如同遊覽天堂,看這些風靡全球的 repository 是由怎麼的高手編寫的。後來你開始技癢難耐,在 GitHub 上提交 issue,提交 pr,開始自己的項目,你開始激動於連成一片綠色的 Contributions 面板,還聽說有人要完成 365 longest streak。

哦,我忘了說,你可能要在各種編輯器之間來回折騰很久,Vim 還是 Emacs,Sublime Text 還是 Atom?VS Code 還是 IntelliJ 系列?高興就好……

後來你知道了 leetcode,你開始接觸演算法,動態規劃、圖論、貪心,你可能開始覺得有些專業課也不是那麼沒有道理。

你開始做一些小項目,或許是自己的個人網站,你想要自己設計界面,你開始進入設計領域,學習 Sketch、Photoshop,模仿一些大網站完成幾個作品,你陷入 icon 設計的泥潭,又進入字體設計的深淵,開始瀏覽 dribbble、behance,看 Lowpoly 和扁平化的演進,漸漸地心中有些想法。你發覺這是或不是自己要走的路,你淺嘗輒止或是就此轉行(誤

你的個人網站想要部署到公網,前面講的那些後端知識開始派上用場。你買 VPS,買 IP,買域名,使用 DNS 解析商的服務,開始使用 CDN,使用 HTTPS。你甚至想要自己寫後端代碼,你開始用前後端分離的理念開發個人網站,你接觸了 Micro Service 的概念,不知道自己的這個小項目是不是要搞這麼複雜,你用 koa.js 進行 RESTful 實踐,學習 SQL,規劃後端 MVC。

這幾年之間,或許你會去找個實習,你之前的成果會成為你很好的助力。或許,你會從老師同學朋友那裡收到做某個項目的邀請,這都得益於你之前的努力。然後你開始關注編碼規範、協作和項目管理。

你開始混跡社區,在 v2ex、reddit 上談笑風生,開始使用 Twitter,關注各種框架、組織、業界大神的動態,訂閱博客、周刊,關注各種大會,緊隨時代前沿。

我常聽一個同事說,「你的基礎決定你的下限,而它也決定了你能達到的上限」。這句話我是很認同的,如果你有紮實的計算機基礎知識,那麼,你一是可以知道如何去系統地學習另一個系統的知識,二是可以從更加宏觀的角度去思考問題、擁有更寬廣的視野,而不是陷在思維誤區中不可自拔。所以,你花整個大學的時間研究前端未嘗不可,但這並不是你逃避專業課的理由,想要在前端的路上一往無前,紮實豐富的計算機基礎知識往往是你絕佳的助力。

舉個例子,不知道你有沒有關注前一段時間的 left-pad 風波,如果你不去學習演算法,你可能沒法明白左耳朵耗子這個優化(Improve runtime efficiency by sagivo · Pull Request #13 · stevemao/left-pad · GitHub) ,而討論串中的 O(n) 和 O(log(n)) 又是什麼意思,如何得來的 。

當然,雖然我說了這麼多,其實剛入門的新人也不需要有太多壓力,因為這些並不是一時半會就能掌握的東西,有些東西更是實踐中才可以能搞懂的。所以還是要保持對前端的不斷關注,打好基礎,持續進步,努力提高知識水平。

總結來說,現在我們所說的前端並不只是 Javascript CSS HTML,由它延伸而來的知識往往瑣碎而複雜,有許多更是超出了以往人們對前端的認知,如果你想走得更遠,專業課會助你遠行。而我們自己,也無需給自己設限,你可以去研究前端,也可以去研究設計、後端、運維,甚至去玩票 iOS、Android,開發 PC 客戶端。

最後,推薦這個 前端技能匯總 Frontend Knowledge Structure 的項目,我在上文中說的只是前端中的冰山一角,每個人成長的路徑也都不盡相同,這個項目或許對個人成長的大方向有不錯的指導作用。


補充一點:我並沒有說計算機專業要一心讀書不需要進行大量實踐。「幾個月搞定」,指前端開發中特有的需要學習的知識。

評論區有知友提到,學會與寫得好是兩碼事。

那麼什麼叫做「寫得好」呢?

1、代碼層次結構、語義清晰、模塊化良好。

2、API 熟悉,節省翻參考的時間。

3、熟悉各種設計模式、開發範式,大大提高開發維護效率。

4、在拿到一個新技術/新框架之後能夠快速領悟它的思想、範式,快速熟悉快速出活。

(歡迎補充)

這些特質如何得到?

1是對工程化、模塊化的理解,並要求有較高的實踐經驗。計算機專業、軟體工程專業一般有一門叫《軟體工程》的課會對此有介紹;並且,這是一種在軟體開發中通用的特質,並不是局限於「WEB 前端開發」。不需要專門研究前端才能擁有這種特質。

2是唯手熟而。這個確實需要專門的 WEB 前端領域的實踐。

3同樣是軟體工程中通用的、不局限於前端開發的東西。同時計算機專業課中一般會有「面相對象程序設計」或者類似的課程介紹面向對象的設計模式;更別說函數式編程對於計算理論和編譯原理基礎有要求。

4同樣是通用於軟體工程的東西。

專門局限於「 WEB 前端開發」的知識真的不多。更重要的是那些在軟體工程中廣泛通用的知識和實踐經驗。

===== UPDATE ABOVE =====

單論「WEB 前端」這個東西有什麼要學的?

不過就是:

瀏覽器的渲染

W3C 的 DOM 、 BOM 規範

ECMAScript 的語言特性和坑

Gulp Grunt Webpack 之類的構建工具

MVVM 或者 React 式 Functional 或者 FRP 或者以後可能出現/炒冷飯的各種範式

最多再加上遠古瀏覽器的各種兼容 hack

(背 API 不算知識性內容)

(HTTP 之類的東西屬於計算機基礎)

(Node.js 的那些 API 以及配套的資料庫、os 知識非要有人說是前端我也沒辦法)

這些東西你確定要用整個大學來學?

很多前端界大神們說的「進階高階前端」的內容其實都寫在計算機專業的培養計劃里

數據結構、演算法

編譯原理

計算理論

計算機網路知識

OS

資料庫

數學

前面那個 list 對於大學生來說熬幾個月夜就夠了,四年夠你用來學點更有意義的東西。


吼啊!一開始你學習H5,CSS,然後可以做出一些靜態網頁,然後你覺得可以給它們加一些動畫效果啊,於是你開始研究js。同時你想讓它們跟後台做一些交流,於是你也開始學習java+jsp/php/c#啊,還有資料庫。

掌握了這些語言的基礎後,你又聽說用框架很方便,於是又開始學Spring啊,Hibernate啊,前後端的各種MVC框架啊……

然後你又聽大牛說,用框架跟拖控制項沒什麼區別,關鍵是框架背後的思想,於是你知道了設計模式,面向對象啊什麼的。

…咦js的設計模式怎麼好像跟java之類的很不一樣?函數式編程?動態語言?LISP又是什麼鬼?問問大神吧,大神叫我去看什麼龍書…樹?葉子?遍歷?等等這玩意好像是叫什麼數據結構吧?我再去翻翻書……哎喲我怎麼拿起了學校的教材……


當然要,不然等待畢業再開始學?


不懂機理 不懂原理, 到頭來只是搬磚...基礎才是最重要的...應用層在大三大四可以開始接觸...


http://www.zhihu.com/question/48502263/answer/111184139


應該是:花整個大學的課餘時間研究前端。


沒問題,我就是那個花了一個大學時間學前端的人,大學只上了一個學期的課,其它時間都用來寫代碼了。所以如果你質疑這條路是不是可行,那麼我說可行,至少搞定BAT沒太大的問題。要注意以下幾點:

1、不論你是撒嬌賣萌送錢還是托關係,要在學院行政體系中有自己的保護傘,不然你妥妥的要被開除,所謂不逃課然後把大學四年的全部時間放在前端上,那叫自欺欺人。

2、不能光學前端,資料庫相關知識(主要是設計),後端知識(資料庫處理、API、分層思想等等),編譯原理(詞法分析,語法分析),計算機網路(只少掌握到傳輸層、應用層)、操作系統(進程、內存、線程相關原理要清晰),數據結構(常用數據結構的應用場景以及使用方式,不用掌握實現)是必須要會的,不然你和培訓班裡面出來的人沒有什麼區別了。

3、趕快找一個學校附近的小公司或者學校裡面的工作室,從掃地打雜做起,讓自己慢慢成為項目的主導者,這對於程序員是萬年不變的金磚,記住不給錢的不能去,給錢少的不能去,996上班的可以去。同時這些工作室的大老闆通常在學院的地位不低,可以幫助你解決逃課的問題。

4、如果你是妹子,找一個計算機大牛當男朋友是最大的捷徑。


可以,越早越好。

但同時,也要把計算機基本功打牢,不然會很吃虧的。


我覺得大學真正教會我們的,倒不是書本那些知識,而且那些知識也確實太落後了。

大學給我們帶來的應該是一個良好的學習環境和與人交流學習的平台。

我從大一下學期開始,到大四畢業,幾乎就沒上過課了,我在幹什麼,我在學前端,是的,我大學一直在默默的從0到1研究前端。

我上的並不是什麼名牌大學,學的專業也跟互聯網不沾邊,但我就是熱愛前端,所以我不顧一切的在做自己認為正確的事情,這也導致我大學重新了3門,掛了5科,但順利的是最後還是成功的拿到了畢業證和學位證(能畢業還是要畢業的好,畢竟我們不是喬布斯和馬克扎克伯格)。

其實這樣的選擇有時是挺痛苦的,因為那時候確實感覺很難,尤其是JS方面。那時候主要是看書,很多次都是半途而廢,後來JS實在學不下去了,然後知道了有個東西叫jQuery,感覺學了之後整個人都好起來了,於是終於可以自己做出來些效果了。

再後來就做了越來越多的獨立產品,直到做了一個校園webapp,2個星期就擁有2000用戶後,感覺真是整個大學最開心的時候了。那時真是感覺自己吊爆了。

然後緊接著就去騰訊實習了倆月,回來後拉著好哥們開始做了一個hybrid app,具體可以看這個問題今天我開發的校園社交APP上線,但是我不懂運營怎麼辦? - 產品經理 做完這個,大學也就結束了,然後找工作卻成了頭疼的事,那時候應屆嘛,第一想法當然是想進百度騰訊這樣的互聯網公司,但筆試面試了很多,尤其是百度,最後一面給我的感覺就是肯定沒有問題了,但僅僅是感覺而已,就這樣,所有的校招都沒有了聯繫。

這樣玩下來,總體的感覺是:大學雖然一直在學前端,也一直沒有放棄,但最終學到的還不如自己在工作半年學到的多,但這不能證明在大學不學習前端,在工作中學習就可以了,這是不可能的,沒有前面的鋪墊,是不可能一步到位的。做開發,天賦很重要,但過程更重要。

先寫到這吧,後面有機會再續後面的故事吧。

順路打個小廣告,歡迎大家入駐高逼格程序員社區TalkingCoder


不好。很有可能4年後的前端跟你現在學的前端完全不一樣,扎紮實實地去學英語、數學和計算機基礎課程。


用web寫個英雄聯盟,你就贏了


計算機語言只是計算機理論的實現,先學好理論基礎,在看看有沒有很感興趣的事要做,如果還是走碼農路線,前端對於大一的你來說不是唯一選擇

其實語言就是變個法子玩語法而已,在校學習4年還不如在外實習1年,而且前端的理論沒有多少人關注,感覺挺簡單,上來jquery搞一搞蠻不錯,但這只是最低層次的需求,沒有計算機理論的支持和後端語言的幫助越往後走前端越吃力


大一的時候混acm 同時學了點css 那個時候寫頁面特別開心 有時候會通宵寫效果 大一結束的時候想著去搞網站 退了acm 那個時候前端沒有現在這麼成熟 大二的時候學設計和產品 下學期的時候backbone火起來了 看了一下感覺好屌 就準備學前端了 然後大三才正式看js

所以大學的時候儘可能學的寬泛一些 反正時間來得及


可以將這個作為實驗田。

平時理論學了的種子,可以在這塊田地種個豆點個瓜。


個人觀點!!!我是個先打好基礎的受害者,基礎理論知識你學習的時候沒有運用場景根本就是各種無味,耍流氓,甚至影響你整個的學習動力。我覺得還是要和實踐結合起來,純基礎的東西搞2年,反正我是受不了的。我更喜歡先造一個房子,再去完善裡面的磚。學校的東西也要學,但是自己做的東西先提前老師講的東西。等到他講的時候,你再學,你會發現此時的學習會有新的感觸。


不好。後端你說學不下去,你就把時間都用來研究前端。你能確保以後不會對左端右端上端下端更感興趣么


大學四年需要學習的東西很多。

我同學大學沒怎麼聽課,自學三個月前端拿到9k的offer。

遂得出結論,大學四年不如自學,要是早點自學分分鐘進BAT。

其實我覺得科班要明白這些專業課程的意義,就像高中學習的知識,也許除了高考不會幫助你很多,但是讓你可以理解更多的東西。


不要只學工具,還要學原理。

不要只學用榔頭敲釘子,要學為什麼榔頭能用來敲釘子。

希望題主銘記於心。


推薦閱讀:

如何評價阮一峰關於前端工具變化快的言論?
如何評價WebKit B3 JIT Compiler?
font-family設置多個值以後,在瀏覽器中怎麼確定到底是哪個字體生效了呢?
什麼才是你心目中的前端圈?
如何看待異鄉好居老闆娘控告程序員刪代碼?

TAG:Web開發 | 前端開發 | 大學 | 前端工程師 | 前端入門 |