說明:這是今年三月份發在原Blog上的文章。來淘寶後,原Blog所在服務器出了故障,數據丟了不少。現在這個Blog是全新搭建的,數據也就懶懶地一直沒轉移過來。今天為了程序員雜志的稿子頭疼,於是在Google上瞎逛,無意搜索到這篇老文章,欣然釋然,小豆腐塊用這種話題最適合不過了^o^
圖1. 可憐的JavaScript(摘自《Practical JavaScript DOM Scripting and Ajax Projects》)
無論是公司的同事還是外界的程序員朋友們,大部分人對JavaScript的高級應用不甚了解,已有的知識架構裡會認為JavaScript僅僅是一門腳本語言,其作用是給頁面做一些錦上添花的效果,比如表單驗證等等。潛意識裡也就不會用面向對象的思想去編寫JavaScript代碼,也很少會去深入了解prototype, context, scope chains, closures等概念。這導致一個傳統的腳本編寫習慣:
上面的做法是面向過程的,看似很自然很不錯,但實際上存在很多弊端。在團隊協作中,會增加代碼沖突,可復用性和可維護性都很低,是一種應該被淘汰的舊式編碼習慣。
對於JavaScript的學習,可能最重要的還是要從思想上認識到JavaScript不是玩具語言。JavaScript的作用遠不止增加點表單驗證,我們可以看看GMail、看看Google Maps,如果開發者們沒有對JavaScript足夠尊敬,是不大可能寫出如此優秀的Web應用的。
JavaScript門檻很低,但門檻低並不意味著容易掌握。一定程度上,JavaScript的入門容易以及其極大的靈活性,使得要掌握JavaScript變得很難(這和Ruby類似,Ruby也是一門入手容易得道難的語言)。從純語言上講(不考慮框架類庫),我個人的經驗是,學習JavaScript比學習Java更具挑戰性。我們大多習慣了傳統的面向對象表述方式,一定程度上甚至會認為類、封裝、繼承等概念都得像Java、C++那樣,可能都從來沒想過沒有class, extend, override等概念也能面向對象。JavaScript的面向對象打破了這種思想上的禁锢:世界是多樣性的,條條大路通羅馬。誇張一點說,深入學習 JavaScript,更多的是一種思想上的挑戰,能活躍思路,擴大視野,甚至改變對世界的看法。
上面所說的這些,無意於誇大JavaScript的作用和難度。每個人都或多或少的會強調自己所學的知識,但在這裡,我希望自己能很客觀的傳遞一個觀點:無論什麼語言,想要精通,都很不容易;如果想學習某門語言,就得從思想上尊敬這門語言,在尊敬的基礎上去學習,才有可能掌握這門語言的精髓。除了JavaScript,再舉兩個例子:
一是CMD腳本。dir, cd, for, tree多容易,接觸過不少非常想精通CMD腳本的人,這些人會花一段時間去努力學習,但絕大部分最後還是連一個簡單的備份腳本也不會寫。拋去術業有專攻等各種理由不談,這些人最後無法精通CMD腳本很大程度源於他們自身的心魔:潛意識裡認為CMD很容易,不“尊敬”它,因此實際行動上也就不會真的把心思放在學習CMD上。
二是HTML語言。經常能聽到這樣的話:HTML多容易,花個一兩天也就會了,我自己也曾這麼認為。但隨著使用HTML經驗的增長,我慢慢感覺到,對於Web前端開發來說,HTML可以說是最難的。HTML4.01規范中的91個元素就如漢字裡的2500個常用字一樣,我們讀完小學後對常用字應該就都認識了,但要用漢字寫篇優秀的文章,卻並不容易。HTML也是這樣,大部分宣稱HTML很容易的開發者,往往只停留在認識body, p, form, table, div, ul等標簽上,對於dl, legend, sub, caption等並非生僻的標簽甚至都不認識。在常用字還認不全的情況下,宣稱HTML很容易,真的很狂妄。(HTML的難度在於如何利用標簽構建出結構良好且富含語義的代碼,就如寫作文一樣,不能認為認識幾個字就自信能妙筆生花。)
總之,語言無貴賤難易,要從思想上尊敬重視一門語言,才有可能駕馭它,否則,將永遠游離在專業程序員的寶殿之外。
圖2. JavaScript獲得了應有的尊敬(摘自《Practical JavaScript DOM Scripting and Ajax Projects》)
:
對JavaScript而言,首先我們要意識到它的強大。目前各個浏覽器爭先恐後地優化提高JS引擎的性能,已經昭示出JavaScript強大的生命力和非常美好的前景。從心魔中去除對腳本語言的鄙視,尊重JavaScript, 對我們這些已經專職從事前端開發的程序員來說,早已不是問題。但我們還需宣傳布道,要讓後台開發程序員們也能意識到這一點,這還有漫長的路要走。
上面是一方面,還有一方面是:“我們需要關注JavaScript如何使用,或許更需要關注JavaScript能做什麼。” 這是Aaron Gustafson在JavaScript漸進增強一文中非常強調的一點。精通某門語言,還意味著要清楚這門語言在哪些地方不適合使用。任何一門語言都不能濫用,庖丁解牛,殺豬砍肉,不同的場合需要用不同的刀。每個優秀的屠夫都有自己的一套刀具,並不是像關羽一樣抗一把青龍偃月刀就能闖遍天下。
先說這麼多,歡迎討論。