非計算機專業,半路出家,以前做 UI ,現在想改前端,學習 JS 過程中遇到瓶頸了,如何突破?

我現在對HTML、CSS的了解,是精通程度;對JS的掌握:可以使用jquery完成頁面交互效果;用原生js也可以,只是嫌麻煩,不喜歡用;涉及ajax等需要操作數據的就不行了,不會用。也不了解什麼是「面向對象」,買過幾本書,《js dom 編程藝術》看好幾遍;大家都說《javascript高級程序設計》不錯,但我看了,感覺「水」太深了,很有挫敗感。打心眼裡想寫出便於維護的,優雅的js代碼,希望各位老師指點一下,基於我現在的情況,適合怎樣學習?需要學SQL嗎?

------------------- 2011 06 28 -------------------------

非常感謝各位的幫助,大家說得都很有道理,因為聊的時候往主參考個人成長經驗,有些觀點上的不同也是正常的。我的經歷在這裡不方便講(私下聊聊沒問題),只能說我基礎是很差很差的,是大家想像不到的差,從一個跟本不搭邊的行業投身到IT行業,卻有一種相見恨晚的感覺,對前端的興趣我毫不懷疑,如果改行肯定是被逼到絕路上了。我有渴望學習的心,苦於找不到方法進步很慢,所以開這個話題跟前輩們討教,看了大家回復總結兩點即:多看,多寫。現在每天有空都在看書,寫小例子。

老婆懷孕,最近都在忙著帶她挂號、檢查、辦手續什麼的,沒能及時回復請各位諒解。我想說,外地的在北京生個孩子那是真麻煩...


本來想要簡單回答的,結果一寫就寫多了,所以tl;dr

看了許多回答,都把jQuery和JS對立起來,我覺得jQuery很無辜。jQuery就是一個JS Library,可以加快開發的速度,讓代碼更少更優雅。

學習任何一門語言,都不能一上來就立即學Library (比如PHP不能一上來就學Zend Framework一樣),都要從基礎開始學起。和jQuery沒有任何的關係。

一開始就不要把JS當成一個縫縫補補的工具,不要認為只要能弄出網頁中常用的效果就夠了,不要覺得Copy Paste然後改改就湊合。要把JS當作一門正式的的「大語言」來看待。

HTML和CSS本質上不是編程語言(Markup langague Stylesheet),如果第一門語言是JS的話,入門肯定是有門檻的。因為我是先學的C / Java / PHP,所以覺得基礎部分很快就上手,所以這方面我幫不到你了。

JS有許多蠻獨特的特性的,在寫代碼過程中會發現,特別是function,一開始寫代碼肯定是有一肚子問題,也會走許多彎路。比如最我一開始經常喜歡定義global variable,把namespace全給污染了,後來才知道用closure。有許多類似Best Practice的書是很有用的。

學習JS,一定要多寫,Get your hands dirty很重要。關於DOM操作和Ajax等等,我的建議是一定要理解原理,知道底層是如何實現的。之後到不一定真正要寫vanilla的JS,既然有jQuery幫助我們實現,改善生活,為什麼要折磨自己呢?話這麼說,但是背後的原理一定要明白(比如DOM Tree,比如Ajax的4個State)

關於後端語言,我個人因為自己做Project,從前端HTML, CSS, JS,到後端PHP, Ruby, SQL, Redis都得自己寫,甚至自己還得負責伺服器(Nginx)的配置和優化,Linux防火牆,DNS等等,只能硬著頭皮學。感覺上後端和前端還是有一定不同的,但是後端的知識一定能幫到前端。現在大公司要求專業化分工,所以我覺得到時不必為了JS專門學一門後端語言。

***以下是關於前端和後端的一些思考,可能有些離題***

不過我覺得能都懂一些是很有幫助的,自己寫Project的時候,可以精心設計前端的Ajax Pattern + 後端的承接,用很少的代碼就可以實現許多功能,比如:

HTML

&< a href="http://example.com/entry/11/remove" rel="ajax" &> Ajax &< /a &>

JS(jQuery)

$("[rel="ajax"]").live("click", function(e){

e.preventDefault();

var target = $(this).prop("href");

$.post(target, function(data){

// Tell user the result

}, json);

});

然後後端用Sinatra或者類似的DSL來承接,並且返回Json結果,這樣可以把做出一個類型的Ajax,堅持DRY(don"t repeat yourself)的原則。

Javascript的OO和傳統基於class的OO不一樣,Javascript OO基於prototype,一開始有些蹩腳,寫多了就習以為常了。JS基本上繼承了GoF的23種Design Pattern,看看幾個常用的就好。其中jQuery的代碼是Design Pattern的經典實現,有興趣可以讀一讀。

寫SPA(single page app)對於加深JS理解更有幫助。從整個Web App來看,MVC的架構的話,JS是V(iew),但是其實JS都有自己的MVC:把Ajax的數據交換當作M,利用一些template plugin實現V。我自己寫Project的時候,因為伺服器承受力有限(沒錢),所以我只能把大部分的logic flow都扔給前端JS來做,後端只是負責數據的讀寫。寫Fat client的App,對於JS的能力是一個很大的提升,特別是架構方面。

我個人覺得JS前景很好,HTML5出來,JS作為the only one,地位肯定會有提升。而且瀏覽器的JS引擎越來越快,更多的任務會給JS去做。另外,Node.js出來,讓JS終於「入侵」後端(當然Node.js只是借鑒了JS的語法和思想,用V8引擎,和前端的JS還是有差別的)

Update #1:

我個人對於JS,說實話只能算是熟練使用(畢竟所有活的自己干,很難去專註一個方面),離精通差很遠。我個人的主修也不是計算機(Accounting / Finance, 相關領域的問題歡迎交流 :-),許多東西只能自己硬著頭皮學,平常除了吃飯睡覺(5h~6h / day),就是寫代碼,看書。我比較開心的事情是可以借到非常大量的,很新的英文書。見到牛人多請教,多騷擾他們,多做一些Project,積攢經驗。既然我們都是先天的基礎薄弱,那就只能笨鳥先飛,別人努力一點,我們努力十倍。我自己都能「熟練使用」JS,相信以LZ的聰明才智,達到我的水平肯定沒問題,而且LZ可以專註JS,超過我輕而易舉。廢話一點我的經歷,與LZ共勉。


如果真有興趣,堅持就好。堅持個至少2年以上,再回頭來看。如果還是沒感覺,可以考慮:

1. 你究竟擅長什麼

2. 你真正喜歡什麼

3. 如何讓自己喜歡的變成自己擅長的

不斷思索,調整,諸神會給努力並堅持的人以啟迪的。


先看一些基礎書籍如《html權威指南》《CSS權威指南》《javascript權威指南》,然後再自己動手做一些作品,這樣反覆……


看了好幾遍,照著實現過上面的代碼嗎?——我覺得在「抄代碼」的時候,能夠引發更多思考,發現更多細節。以學好JS的為目標的話SQL可以不看。


前端也是程序員,沒有基礎真的很難,至少要學一門後端語言再說,比如 Java / C# / PHP / Python。


@玉伯 說堅持,但堅持談何容易,對於非天才如果要做出成績,我覺得需要的是對技術強烈的興趣,而非簡單的興趣

有一點我覺得需要明確,UI和前端開發需要的是兩種幾乎完全不同的思維方式,你是想清楚自己是否適合?有一種簡單的方式,嘗試看一下前端方面的技術書籍,看自己是否適合

部分童鞋說我對xxx感興趣其實很多是受環境的影響,因為大家都在討論這門xxx技術(不特指js),如果是因為受此因素影響了你的判斷,我覺得還是冷靜下,多聽聽其他聲音。

最後當然我還是非常希望有志於從事前端的童鞋趕快加入前端高速發展的浪潮中!


哈哈,我目前就是這個狀態,不過css方面比樓主差點,最多算個熟練吧。。。

現在正在看js高級程序設計和js高性能開發,,都是尼古拉斯的書,呵呵,挺有意思的


推薦看John Resig原著的《精通JavaScript》,此外,水深是必須的,因為編程語言扯到後面是很麻煩,設計模式、面向對象/函數編程、封裝與解耦、代碼重構這些東西總都會關聯到。有時這些東西真的別太較真了,會很痛苦的。


個人觀點是,書要專心的看,看完了丟一邊,然後融入自己的思考去結合書里提供的知識解決問題。這樣就可以提高了。

私以為,作為一個前端的難點不在於技術的實現,而是如何為業務功能的實現選擇合適的解決方式,以符合業務需求和性能及用戶體驗的最優化


個人努力加上社區朋友的幫助,良師益友的作用不可替代。


多寫,多看書,多思考吧。推薦看犀牛書,這個書可以幫助打好基礎。非計算機專業的半路出家照樣可以寫好 js。 同時,要想做好前端,要對後端也有所理解,最起碼HTTP層的東西要了解。我也是非計算機專業的,大學的時候由於興趣,學習了PHP,然後學習了css,js這些東西,走上了前端開發的路。


國內有幾本不錯的JavaScript書,比如月影的《JavaScript王者歸來》。

與國內其他開發教程相比,會發現JavaScript程序員們是多麼的靠譜!


很多企業將前端分為HTML和Javascript兩個方向,從字面上看需要掌握HTML CSS和Javascript,這些算是基礎吧。隨著HTML5的推廣和各大瀏覽器廠商的支持,HTML5本身和Javascript的關係更是很難完全單獨劃分。從技術層面上,排除上面說的HTML CSS Javascript,從伺服器與性能來看還要掌握一些Linux知識,HTTP協議和伺服器配置;而基於計算機本身最好了解些數據結構和演算法;同時掌握一門後台開發語言還是很重要的。單純從學Javascript上來講,如果是從學習Jquery庫開始的話,不妨先把Jquery給用熟了,也可以對照著API,然後設計一些應用來練習;針對Jquery本身開放的API介面,思考一下它是怎麼實現的,嘗試自己寫一下實現代碼,在這個時候就需要要看一些JS的基礎知識(基礎知識是需要系統學習的),慢慢的水到渠成。在這中間你可能需要經歷:掌握基礎知識,了解一些設計模式,了解JS底層的一些知識(如內存分配對象模型什麼的),然後可以分析Jquery的代碼。再此之後再去了解JS以外與前端開發相關的知識。《Javascript高級程序設計》是一本不錯的書,遇到不清楚的就在網上查,諮詢別人也可以暫時先跳過,一點一點積累千萬不要浮躁,慢慢就會好了。


推薦犀牛書,JavaScript中重要的概念說得很詳細。理解原型鏈,作用域鏈,閉包,對象模型。對JavaScript使用也就遊刃有餘。如果專註Web前端,再看看一些流行的JS框架學習別人的思想。


兄台我和你一樣。JavaScript DOM編程藝術 那只是本很簡單的入門書籍,也在學習js,你說的水深,是因為我們不熟習,並且產生了畏懼感,我曾經買了高程二 看的我頭皮發麻,關鍵是概念不清楚,函數陌生,感覺跟他們沒見過面,你反覆的報裡面很多基本的概念弄清楚了,再去看高程二~或者實踐js一段時間了再去看就會好很多,看只能說你混了面熟,但要寫,你必須和js交流,交流的唯一方式就是實踐,實踐,大量實踐,實踐中引發的問題進行思考,思考,思考。然後再實踐。

我舉個例子

如果你喜歡一個女人,你怎麼辦?

我想我就直接上了, 想法設法的去了解她的習慣,個性,等等。先找資料關於她的。

時機成熟,哥就上去搭話,進一步相互了解。所以興趣~把你對js的興趣拿出來~


我個人建議不要用任何庫,不理解的去用,最終就會害了自己。


分頁阅读: 1 2