無法取代的原生 - Javascript

最近幾年javascript 實在是一門進步神速的語言,從基本瀏覽器腳本語言,到HTML5 使用canvas、video、websocket、worker等,甚至是後端編譯腳本nodeJS ringoJS,當然還有許多從javascript 編寫出來的套件庫,整體來說javascript 發展的速度比我想像的還要快得多。

回顧javascript 歷史

從Netscape 發展此種語言開始,壓根不會想到javascript 會演變成現在的局面,因此在當初訂定javascript 來說,就是毫無標準可言。Javascript 對於沒有接觸過程式開發的人來說,是一種好的開始,畢竟它的容錯性高,出錯率低,簡單來說就是,開心宣告就宣告,不用宣告也可以寫出能動的程式碼!這也造就了javascript 初期開始,可以直接複製、貼上、接專案的映像。

因此由[Douglas Crockford](http://www.crockford.com/) 也開始提倡起[javascript: Good parts(javascript :優良部份)](http://shop.oreilly.com/product/9780596517748.do?sortby=publicationDate),也發展出[jslint ](http://www.jslint.com/),提供大家作為javascript 程式碼驗證工具,會這樣子做不是沒有原因,畢竟javascript 實在是『太方便寫』,自己寫自己的,當然獨自開發這不是太大的問題,但是如果遇到大型專案時,這種充滿『重構味道』的程式碼,自然是一場不可抹滅的惡夢。
**套件庫掘起**
在AJAX 崛起之後,javascript 的發展就變得相當吃重,也漸漸的讓開發人員體會到[前端開發的重要性](http://clonn.blogspot.com/2011/05/what-is-front-end-engineer.html)。當然javascript 開發,對於前端來說還是有很多問題,光是跨瀏覽器就是個很令人頭大的問題。
因此各家開發出自己的套件、工具庫,例如[YUI](http://developer.yahoo.com/yui/),[dojo](http://dojotoolkit.org/),[jQuery](http://jquery.com/)等。當然這是個很不錯得方向,專家們開發出套件,而開發者可以利用套件組裝出自己所需要的效果,瑣碎的問題交由套件處理掉,讓開發者減少開發時間與降低開發門檻。
**Javascript 還是沒這麼簡單**
前面的套件其實只解決了『前端開發的問題』,但是此時的javascript 已經不再是原本的javascript ,從前端到後端,甚至是指令等都可以利用javascript 來處理,例如nodeJS ,要怎麼利用javascript 寫出易讀,讓開發者容易瞭解、再利用的程式這是個難題。
[coffeescript](http://jashkenas.github.com/coffee-script/)、[Dart](https://code.google.com/p/dart/)兩者都屬於基於javascript 之上的產物,其目的就是為了解決**『javascript 物件化』**的問題,對於我來說,這兩種語言都不算是新的產物,頂多算是開發javascript 簡化工具,開發的程式結構越來越有**『物件導向』**的感覺,閱讀程式碼也更加簡單、優雅。
**潛在的問題**
萬變不離其宗,以上這幾種**『工具』**都是基於javascript 的變化型,根據使用套件及簡化作業的經驗來說,最終的最終還是會遇到許多不可解的問題,想要解決這些問題,或者是瞭解問題的所在,還是要去瞭解javascript ,只有根本的瞭解底層基礎運作,才是根本。
當然也許有開發者都不會碰到**『地雷』**,或者是『將地雷視而不見』,選擇繞路而行,雖然問題看似被解決了,事實上就變成了某種**『經驗談』**,或者是**『它就是這樣子處理』**,根本的問題還是存在著。
**結語**
javascript 演變至今,已經有一種越來越強大的局面,不可否認它是一種『非常糟糕的語言』,任何一種寫法都可以執行。當然隨著規範的更動,以及開發者的努力,這些問題都會漸漸被限制,規範也會越來越清楚。
當然利用套件開始自己的javascript 之路其實是不錯的事情,不管是從前端的jQuery 開始,或者是直接撰寫coffeescript 、Dart開始,都是一個不錯的方向,從門檻最低的平路開始,在一路上中後段還是會發現 – **『越不想碰的,最終還是要面對』**
但至少你已經開始了這條,**『不歸路』**

CaesarChi

Web developer, focus on website fullstack, special JavaScript, and love sharing developing experience and communicate with developers. http://about.me/clonn