阿西摩的分享誌

Value comes from sharing.

JavaScript ≠ Java

常常在網路上看到大家把 JavaScript 當成 Java 語言來看~

身為 Java軟體工程師的阿西摩,必須肩負起教育大家的責任,所以,今天要來宣導[JavaScript ≠ Java ],這兩個根本沒有相干的程式語言,只不過因為名稱上類似,就被人通通一概論之! 這是天大的錯誤啊!
先讓我們來看看 Wikipediea 上面怎麼說的

JavaScript並非Java
JavaScript是由網景通訊公司(Netscape)最初在它的Navigator 2.0產品上設計並實現的,原名LiveScript,除了句法上有一些相似之處以及都能夠提供網頁中的可執行內容以外,JavaScript和Java是完全不相干的。

JavaScript並不簡單
實際上儘管JavaScript是作為一種給非程式設計師提供的腳本語言而不是給程式設計師提供的程式語言來推廣和宣傳的,但是JavaScript是一門具有非常豐富特性的程式語言,和其他所有的語言一樣複雜或者更複雜,你需要對JavaScript有紮實的理解才能用JavaScript執行比較複雜的任務。

原文出處: Wikipedia – JavaScript

只所以阿西摩要大喊 JavaScript ≠ Java ,更重要的原因是 JavaScript 充其量不過是一種 Script language,中文翻譯為[腳本語言]

再來看看 Wikipedia 上怎麼說的

腳本語言(Script languages,scripting programming languages,scripting languages)是為了縮短傳統的編寫-編譯-連結-運行(edit-compile-link-run)過程而創建的電腦程式語言。此命名起源於一 個腳本「screenplay」,每次運行都會使對話框逐字重複。早期的腳本語言經常被稱為批處理語言或工作控制語言。一個腳本通常是解釋運行而非編譯。

雖然許多腳本語言都超越了電腦簡單任務自動化的領域,成熟到可以編寫精巧的程序,但仍然還是被稱為腳本。幾乎所有電腦系統的各個層次都有一種腳本語 言。包括作業系統層,如電腦遊戲,網路應用程序,字處理文檔,網路軟體等。在許多方面,高級程式語言和腳本語言之間互相交叉,二者之間沒有明確的界限。

一個腳本可以使得本來要用鍵盤進行的相互式操作自動化。一個Shell腳本主要由原本需要在命令行輸入的命令組成,或在一個文本編輯器中,用戶可以 使用腳本來把一些常用的操作組合成一組序列。主要用來書寫這種腳本的語言叫做腳本語言。很多腳本語言實際上已經超過簡單的用戶命令序列的指令,還可以編寫 更複雜的程序。

原文出處 – Wikipedia – Script Language

而 Java 呢?

Java,是一種可以編寫跨平臺應用軟體物件導向程式設計語言,由升陽(太陽微電子,Sun Microsystems)公司的詹姆斯·高斯林(James Gosling)等人於1990年代初開發。它最初被命名為Oak,作為一種小家用電器程式設計語言,用於解決諸如電視機電話鬧鐘烤麵包機等家用電器的控制和通訊問題。由於這些智慧型家電的市場需求沒有預期的高,Sun放棄了該項計劃。就在Oak幾近失敗之時,隨著Internet的發展,Sun看到了Oak在電腦網路上的廣闊應用前景,於是改造了Oak,在1995年5月以“Java”的名稱正式發佈了。Java伴隨著Internet的迅猛發展而發展,逐漸成為重要的Internet程式設計語言。

Java 屬於工業編程語言

程式設計語言,通常簡稱為編程語言,是一組用來定義電腦程式的語法規則。它是一種被標準化的交流技巧,用來向電腦發出指令。一種電腦語言讓程式設計師能夠準確地定義電腦所需要使用的數據,並精確地定義在不同情況下所應當採取的行動。

程式設計語言原本是被設計成專門使用在電腦上的,但它們也可以用來定義演算法或者資料結構。正是因為如此,程式設計師才會試圖使程式代碼更容易閱讀。

原文出處 – Wikipedia – Programming Language

看了這麼一堆專業的東西,相信大家一定都頭暈了。好吧,阿西摩現在就用自己的解釋來說 JavaScript ≠ Java

  1. JavaScript 只要有一個網頁跟有支援 JavaScript 的瀏覽器才可以執行。而 Java 語言呢,只要程式內沒有使用什麼特殊平台的 library,經過轉譯後的 class 檔,幾乎可以放到任何已經安裝有 Java Runtime 環境的系統上。比方說,我在我的 Windows 上開發轉譯後的 Java 程式,可以放到 UNIX, Linux, OSX 上執行,都不會有太大的問題。
  2. 最原始的 JavaScript 能操作跟執行的範圍相當有限,比方說,你如果要讀取本機端的檔案,比就必須搭配 JavaScript extension 還有 ActiveX 之類的附註程式才有可能達稱。而 Java 可以輕鬆的使用 Java 原本的 package 去讀取檔案,更改檔案。
  3. JavaScript 當年是 Netscpae 開發出來用在 Netscape 上,讓原本死板板的 HTML 網頁可以又動態的變化,互動,還有驗證輸入等等的功能。而 Microsoft 呢,運用他們最厲害的 Reverse Engineering 把 JavaScript 學了起來,然後自創了 JScript. 而比起 JavaScript,Java語言,有自己的標準,架構,平台,而且複雜度高上太多太多了,所能應用的範圍更是會把 JavaScript 巴到連渣都不剩!
  4. JavaScript 是一種非常不嚴謹的腳本語言。在 JavaScript 裡面,變數全部都用 var 宣告,如果你這樣在 Java 裡面寫程式,我跟你保證,Java compiler 會不斷的,一直的給你[舉紅牌]!
  5. 我可以用 Java 語言,在 Java Server Page (JSP)上動態產生 JavaScript 語言,並且執行,而你想要用 JavaScript 去寫 Java語言!? 嗯,還是不要沒事找自己麻煩的好!
  6. 總之,JavaScript ≠ Java 你是要我說多少次才會聽懂啦!

說了這麼多,現在來讓你看看兩者不一樣的地方。

JavaScript 的程式

把這一段 code 貼到 text editor 上,然後 save 成一個 jsDemo.html 檔案,就可以直接用瀏覽器開啟,並且看到跳出來的訊息。這就是最簡單的 JavaScript 程式。

Java 程式

public class HelloWorld {
public static void main (String[] args) {

        System.out.println("Hello, world!\n");
    }
}

而 Java 這程式就必須先貼到 text editor 然後存檔成 HelloWorld.java 然後在用 Java compiler 轉譯成 HelloWorld.class 才能執行。

說了這一大堆,無非就是想要說明 JavaScript ≠ Java 所以,大家別再犯這種錯誤了,以後要看明白,分清楚

JavaScript ≠ Java

懂了嗎!? 不要再把 JavaScript 當成 Java 來看了。說真的,每次看到人家犯這種誤解,真的讓阿西摩感覺到我的專業被人家當成垃圾看待。因為 Java 背後的專業性,應用範圍,絕對不是 JavaScript 那種 SCRIPT 語言可以比較的!

62 Comments

  1. 回神過來自看。。。

    我又爆走了~

  2. 你說了這麼多,
    我還是不懂啊! :~(

  3. No JVM, No Java.
    No Browser, No life
    No JavaScript, No life
    No Java? 有差嗎?
    或許真的Java跟JavaScript的能力懸殊
    可是Java這麼強,為什麼Ajax中的J是JavaScript而非Java?
    有點疑問
    Scripting Language很弱嗎?
    那為什麼我感覺到某程式語言的眾多愛好者紛紛轉向某Scripting Language呢?
    為什麼呢?

  4. 看來原po應該不曉得JavaScript的重要性跟能耐?

  5. 我想作者只是想要區分javascript長期跟java因為名稱上的類似
    容易被搞混的狀況
    其實java在web上的應用,比較強的地方應該還是在server端的使用
    在client端,javascript還是比較有利
    雖然作者努力要區分二者的不同,甚至結果造成出現爭議的狀況
    但是以後可能要更辛苦並且想出更能區分二者的解釋
    尤其java 1.6發佈之後,又直接嵌入可以運行script語言的轉譯層
    http://www.goodman-lai.idv.tw/2006/12/java-se-6_20.html
    我想以後會搞混的人應該只會更多

  6. 這位作者似乎對 JavaScript 特別有偏見….

    >>絕對不是 JavaScript 那種 SCRIPT 語言可以比較的!
    _____________________^^^^^^^^^^^^^^^_________
    請不要用這麼不嚴謹的說法好嗎?

  7. 我個人是對這種頗專業的東西沒有什麼感覺啦,反正離我很遠很遠。。。不過對於大家的留言我實在是有點小意見想藉這裡發聲一下。

    這篇本來就是阿西摩以他搞笑、白目、機車、死白爛的風格寫了個充滿著”偏見”的文章,有人爽有人不爽也不是一天兩天的事了,就是這裡丟了個叮噹,那裡響了個乒乓,也算是種”交流”吧。可是啊,就樓上留言的人裡面,我只覺得”thegiive”和”yungyuc”兩位朋友是有品的,不管您是持反對意見,或是贊成的意見,又或者只是灌灌水沒任何意見也行,至少留下了大名(網誌),算是行不改姓坐不改名,肚子裡真的有點”專業”墨水,上得了台面見得了世面的人吧。

    至於其他的幾位,什麼叫做「看來原po應該不曉得JavaScript的重要性跟能耐?」您是視網膜病變嗎?還是有什麼生理機能或是精神上面的問題?如果有,請務必保重趕緊就醫治療。因為這裡就是”原PO”的網站啊!還要原到哪裡去啊?

    另外,嚴謹不嚴謹不是這位朋友您隨便說說就是了。朋友覺得不嚴謹,您也可以引經據典,來個機會教育,告訴大家怎麼個不嚴謹來著,還可以讓這個白目阿西摩知道他到底犯了啥錯,好回家跪主機板反省反省。您一句話丟了就跑,可好比那路上的野狗黃金拉了就閃一樣的令人蹙眉,這,可更是”不嚴謹”啊!

    網路的匿名性,不表示毫無禮貌的發言就可以被接受。
    飯可以亂吃話不能亂說,留點口德對大家都好。

  8. script language 整體上沒有什麼不好,只是,當你被 JavaScript 荼毒過之後,又常常碰到一堆被人濫用的 JavaScript,也沒有規範跟標準,你會開始對 JavaScript有莫名的痛恨!

    看到一堆人跳出來留話,卻又沒有提出任何證據能夠說明為什麼 JavaScript 很好用?只因為大家都用,這樣的東西叫做好!?

    我不反對大家提出不同的看法,但是請提出說明或證明來說服別人,而不是一句話或一個態度「你不懂所以你這樣說。」我可以提出很多理由跟原因來說明為什麼我認為 JavaScript 對於一個 programmer或是初學 programming 的人來說,非常不理想。

    Ajax 全名是 Asynchronous JavaScript and XML,用來做互動式網頁應用的開發。主要使用 JavaScript,XML,XSLT,CSS,DOM,XMLHttpRequest等技術,當然跟 Java 沒有很大的關係!竟然還有人要問說為什麼 AJAX 的 J 不是 JAVA!況且,AJAX 可以套用在很多不同的語言上,當然不是針對 JAVA 而出現的架構,所以,跟 Java 的關係,當然不是直接,而是間接。

    但是,不可否認的,AJAX 有安全性的問題。或許,安全性對很多人來說,並不重要,但是對於企業級 Web AP 來說,安全性就是非常 critical 的問題了。雖然 可以使用其他方法來解決 AJAX 的安全性問題,但是,不可否認,AJAX 上所使用的東西,雖然方便,卻還有很多淺在問題的存在。

    舉例來說,AJAX 現行的比較好用的套件都是人家開發好的東西,雖然方便,但是,對於專案客製化的環境下來說,卻會是綁手綁腳的東西。加上 debug 上會造成困擾,而且,如果需要修改當中的程式,還必須要先了解當中的流程,這些都是開發上的時間消耗。更別說,還會有挑 browser 的問題。

    若要論安全性跟互動的能力,OpenLaszlo 或者是 FLEX 都會比較理想,可惜,OpenLaszlo 跟 Flex 最大的缺點就是需要 FLASH,而且體積龐大,限制也比較多一些。

    還有 PHP 在 WIKIPEDIA 上被歸類為工業程式語言,並不屬於 script language。

    我不反對一些 script language 非常方便,也非常實用,因為,我也每天在用。但是,script language 使用上必須非常小心,尤其像是 JavaScript 這樣的 script language,非常容易被人濫用,更直接的說,我看過的 JavaScript 爛 code 比 好 code 多太多了。最令人害怕的是,如果一出問題,你根本很難 debug。雖然現在有很多輔助軟體可以協助,幫忙 JavaScript debug 但是,還是非常有限。

    在專案開發過程當中,時間非常非常有限,一個雖然能幫我解決到很多 UI 問題的語言,固然能夠讓我輕鬆達成目標,但是,如果也因為這個語言,反而會造成我 debug 上的困擾,甚至,讓我無法預期完工時程,那就必須要非常小心的去 handle。

    在我觀點當中,script language 作為系統之間的橋樑是在好不過了。用來將主要的架構系統連結在一起,或是把幾個系統串在一起是非常棒的,但是,如果拿 script language 來當主軸語言,那就真的要好好思考一下了。

    或許是我的用字措辭不夠理想,但是,我還是要強調,Java 這類工業程式語言,並不是 script language 可以比較的。因為,拿香蕉跟芭樂比!?你要怎麼比!我不會比,有誰來教我?

    非常謝謝大家的指教,或許,我真的不夠專業,雖然每天都必須跟 Java, JavaScript 為伍,因為工作需要,我也得不斷進修,看更多的架構,程式語言等等,不過,人畢竟一天都只有 24hr,時間就這麼多,要學的那麼多。所以,歡迎大家提出來自己的看法來討論,而不是一句話「你不懂 JavaScript 的重要性」而已。

  9. to free:
    恩,我也注意到新的 Java 6 上有這樣的規格。
    可是,我連 Java5 都還沒時間去好好玩玩。

    不過,程式語言的演變,也應該是慢慢的把其他語言的相容性整合進來,使用上跟開發上才會更便利,更快速。

    看樣子,得找些時間 update 一下了~

  10. 我也來回應該篇 文章在我的blog回應 Scripting Lanuage 就比較不專業?

  11. jameschih:
    謝謝你的回應,還有分享。

    firebug 這個工具,我會找個時間來玩看看的。

    我過去的開發經驗中,JavaScript 的部份,共用的部份原本都應該由一個人來控管,但是,卻常常因為開發時程的壓縮,造成開發團隊的成員各自撰寫。而也因為 JavaScript 沒有正規化的情況下,常常會出現語法跟 style 上的一些問題。

    還有一個比較讓我們困擾的是,因為我所碰到的專案,通常都是需要架在 UNIX server 上的,而為了平台的正確性,我們通常也都會另外起一台 server 來做測試 server。而這也增加了我們在開發過程中 debug 的一些困難度。如果是 Java 上,我還可以用 log4j 把所有的 log 顯示在 log 檔案或是 console 中,但是,JavaScript 卻沒有這類的機制,而最笨,也大概是最好用的就是 line-by-line alert message 了。

    或許,其他人還有更好的 debug 方式!?

    另外,JavaScript 是物件導向的 script 語法,這個我完全認同。只是,JavaScript 當中,我們常常會看到一些參雜著 DHTML,等的其他語法,如果沒有一定程度的話,常常會看到這些程式法就傻了。這也是我在開發過程當中,常常看到 junior 會面臨的問題。

    我個人的習慣,如果我能用單一語言完成的事情,我會盡量用單一語言搞定,因為,多一種語言的穿插,就是多一種複雜度,也多一種出錯的危險。這對於專案的開發,是有直接影響的。所以,我個人都會盡量必面使用 JavaScript,除非有完整的套件使用。

    說真的,我會很希望每個專案都有一個「JavaScript工程師」我可以省去煩惱 JavaScript 的問題。只是,這樣的人才實在太少了。

  12. http://www.mozilla.org/projects/venkman/venkman-walkthrough.html

    >而也因為 JavaScript 沒有正規化的情況下,常常會出現語法跟 style 上的一些問題。

    我不覺得 Java 就會沒有這些問題 :p
    這應該跟架構設計跟開發習慣有關,歸咎給語言不太適合吧 …

    >我還可以用 log4j 把所有的 log 顯示在 log 檔案或是 console 中,但是,JavaScript 卻沒有這類的機制,而最笨,也大概是最好用的就是 line-by-line alert message 了。

    http://www.google.com/search?q=javascript log4j

    A List Apart 的那篇值得一看, 如果您有空的話 :p

  13. tiberius:
    或許這跟系統架構還有開發者習慣有很大個關係,但是,我的經驗中至少 Java 變成了一堂課程,有專家老師,來指導該怎麼寫作 Java,然而,JavaScript 在這方面我比較少看到。

    而且,雖然在 style 還有用法上的問題,在 java 上也會有類似的狀況,不過,絕大多數的情況,還是能看的懂,也可以比較清楚看到這個 variable 是什麼型態等等的。但是,在 JavaScript 上,這些會變得比較模糊,或多或少會造成困擾。

    至於您推薦的這篇 A List Apart – JavaScript loggin 挺有意思的。找個時間來試用看看。

    謝謝您的分享。

  14. FUREBUG 有LOG,CONSOLE機制

    http://www.getfirebug.com/console.html

  15. 既然你知道這個容易造成誤解,那你不撤掉類似的文字,那不就是希望我繼續罵你嗎

  16. thegiive,

    阿西摩不應該撤掉寫過的文字,不然才是不負責任的作法。如果他覺得原先的說法有問題,適當的作法是在文尾補上更新的看法,或是把更新的看法寫在 comment 裡面;否則,以後看的人怎麼會知道他更改前的意見呢?

    阿西摩,

    老實說,我很少看過「工業語言」這個名詞;這種寫法讓人覺得是 programming language for manufacturing,是寫 CNC 車床用的語言嗎? 😀 產業語言或直接寫 language in industry 或 industrial language 應該會比較表意吧。

    script language 這個名詞也怪。要寫就寫 scripting language 吧,這不但才合英文文法,意思也比較對。

    把立場和名詞確定一下,討論才會比較有品質吧。

  17. 這篇文,主要想說的是 JavaScript 不等於 Java。

    我看得到jameschih, tiberius 兩位朋友的熱心分享,也感謝兩位給我的一些指教。

    但是,我看不到其他能夠說服我 JavaScript 所擁有的優點。我前面有提到一些我在實作上遇到的 JavaScript 問題,但是,卻沒有人可以告訴我是否有其他的解決方法。

    然而,我看到的只是針對文字上的爭論。如果只是要搶口舌之快,請便。罵了我,你會覺得自己很專業,很好;罵了我,你會覺得自己的 coding 能力大增,那也很好。

    只因為有人罵,我就必須要去改變我的文字,甚至我的經驗以及認知!?這和目前台灣社會上藍綠對決,互相強迫對方去認同自己想法有啥兩樣!?

    我無興趣對用字措辭上去琢磨,我寧願多花時間去了解一下 jameschih 跟 tiberius 兩位朋友給我的新知訊。在業界一段時間之後,真的會發現常常被專案的時程壓得喘不過氣來,連好好進修的時間都沒有。看來,最近我又有一堆技術文件要好好翻一翻了。

    to yungyuc:
    謝謝指教。

    其實,我會覺得用 programming language for enterpice use 比較合乎我的本意。不過,programming language for industry 也不錯。而 scripting language, well, 這樣的說法也可以。

  18. 這是尊不尊重 Scripting Language 使用者的問題,不是嗎?
    你已經打了那麼多人一巴掌,你還祈禱別人會尊重你?
    還有,你已經不尊重我們了,我幹嘛要提供一些 Javascript 訊息給你?

  19. 阿西摩,
    不是已經過三十歲了嗎?幹嘛跟小朋友吵架咧?有些人井裡只有Web Application,就由他們去吧,我相信世界毀滅了,大家還是會需要吃飯的,JavaScript能吃嗎?井有大小之分,我們住大井或是已經爬出來的,就別跟住在小井裡的人計較太多。我在寫JavaScript的時候,Java都還沒出生,更別提那些井裡的小毛頭們學會九九乘法了沒。年輕一代的”工程師”的白目自大你又不是沒見識過,所以就別氣到胡言亂語了。井外面的世界是很大的,我們的程度不需要對著井口大呼小叫的,等他們爬上來再來跟我們討論。

    BTW, JavaScript是有在努力改變中,但就像你說的只是用更高階的技術來包裝原本的錯誤,它雖然很不完美,不過它還是個在Web介面下滿有用的語言,可是它再怎麼有用,也只是在Web介面下,沒有後端其它語言的支持,它也幹不了什麼大事。

    jameschih,
    FireBugs我也很愛用,不過它是user端的工具,跟那種系統等級的log system是不同的。

  20. 我相信Script Language可以在Web Application下做出不少事,不過就我最近找工作的經驗,Web工程師滿街都是,跟本不值錢。因為門檻低又不需什麼高深的理論、架構背景,只要自學一下,很快就可以上手了。不過上手跟成為大師還是有很長的路要走,要把JavaScript學到很精,才有辦法寫出像YUI這樣漂亮的Library.

  21. 天啊~
    jackychu 你這樣寫。。。
    我好怕你的真實身份被知道之後,掀起大戰啊~
    算了,懶得去管了。

    不過,也對啦,有多的時間再吵這些,我應該先去翻翻 Java 6 的規格了。真是的,業界很多連 Java 1.4 還沒摸熟,就要跳 Java 5, Java 6。。。真是頭痛~

    倒是你剛剛給我那個 Weebly, safari 上好像不能用耶!

  22. to jackychu ,阿西摩 謝謝你們的指教

  23. 我不敢說我對JavaScript和Java有多熟,各有各的所長,thegiive你對Script Language的狂熱,就像阿西摩對於Java。在你說阿西摩很偏激之時,我看了你在你的blog裡的回應文章,發現更好笑耶~~

    套句你說的:「程式語言本身並沒有高下之分,程式設計師才有高下之分。」,我完全同意,那你敢比嗎?

    話說回來,blog本來就是寫自己主觀性的文章,是非常主觀的!幹嘛沒事到人家家裡搗亂呢?

  24. For jackychu

    我不認為把人扣上「小孩子」的帽子可以顯得你很厲害:)

  25. FireBugs真的很好用,阿西摩,如果你遇到很難debug的javascript,你可以試試看。但前提是不能用在ie only的網頁 😛

  26. For jackychu

    我不認為叫我「小朋友」,會顯得你很厲害。

  27. Oops … 一不小心連續回了兩篇文章,在此澄清

  28. 我覺得 dynamic language (scripting language) 派人士如我,在意的是「垃圾」一詞。

    或許其它人更關心內涵,但膚淺如我只能玩玩文字遊戲;不小心注意到了「Java」「垃圾」~「JavaScript」~「scripting language」這樣的類比,便很想在打混的時候看看後續發展。

    to jackychu,

    dynamic/scripting language 本來就該是很好學很好寫的東西,如果還要花很多力氣和時間才學得會,那哪裡還會有賣點呀,根本就不會有人去用啦 (笑)。所以用 dynamic/scripting language 寫網頁這種「因為門檻低又不需什麼高深的理論、架構背景,只要自學一下,很快就可以上手了」的應用應該是再適合也不過了。

    不過,看到這麼多人都 script language 來 script language 去的,是不是都對 dyanmic/scripting language 沒興趣呢?倒不是我一定要挑錯字毛病,但即使是 wikipedia 也是把 script language 重導向到 scripting language。感覺上,認真評估過動態語言,又有點興趣的人,不會一直把 scripting 寫成 script。

    如果不是筆誤的話,不才很想知道把 scripting 寫成 script 的理由會是什麼呢?

  29. thegiive:
    jackychu 沒有指名道姓說誰是「小朋友」,不用自己對號入座。

    況且,論年紀,論體重,論資歷,叫小朋友也沒有錯吧!?(說到體重,jacky 我們兩個都該好好減肥了)

    在父母眼中,我們本來就都是小朋友了,這也沒錯啊。

    不用這麼緊張。

  30. yungyuc,
    是, 我會修正改叫Scripting Language。
    Scripting Language雖然門檻低,但要成為真正的高手也不是那麼容易的事。最近迷上YUI library,寫得真的很漂亮,我都沒把握能寫出這麼好的Library,大家可以去仔細研究研究~~

  31. For 阿西摩

    沒辦法,我實在無法不對號入座。還有,叫任何一個人小朋友實在都不是一個正面的說法,畢竟我實在不喜歡一些人倚老賣老。

    PS. 其實我沒有那麼緊張,一不小心多回了一篇相同的 comment ,可以幫我刪掉嗎?

  32. 如果是說效能跟開發難易度的取捨 …
    我自己是比較喜歡用 Python 跟 C/C 叫來叫去
    不想浪費腦漿的時候寫 Python, 需要速度的時候包個 C 模組出來就好了

    如果工作上需要用到 Java 的話也只好配合用一用 Java 了
    能用 Jython 偷吃步一下, 或是用 JNI 拉一下其他東西

    唉, 我也不想學一大堆語言啊, 所有的東西都能用 Python 搞定的話就好了!
    偏偏最近又碰到一個要用 Ruby 的東西 囧


    在打混的時候幫某個朋友寫的東方 BGM player 包個 fadeout.dll 也只需要五分鐘啊 (爆)


    這篇好像變成我在吐苦水了, 抱歉啦 …

  33. yungyuc,
    謝謝指教,我會修正我的用詞-Scripting Language.
    話說回來,雖然Scripting Language門檻低,到要成為高手也不是件容易的事。最近迷上了YUI Library,發現真是的好物啊~~寫得真是漂亮,我都沒把握能寫出那樣的Library.

  34. tiberius:
    不用擔心吐苦水啦,在這個業界,待上一陣子之後,沒有苦水的人太少了。

    說到 JNI 我曾經也受過 JNI 的苦,為了讓 JNI 可以跟某個 C 語言寫的 通訊 protocal 做溝通,吃了不少苦頭。

    python 挺好用的,以前學校的老師都還蠻喜歡用 python的。只是,我現在久沒用,也忘得差不多了。

    jython 之前也因為想要加快開發速度,跑去看了一下,不過現在也忘得差不多了。

    說真的,現在市面上的程式語言太多了,真正會常常用到的又會跟你的工作或是專案有直接的關係。真正能夠沒事什麼都摸透透的人,除非真的很愛寫程式,不然真的很難變成通材。

    最近,剛好在重新思考自己的方向,想要回去進修,順便看看一些以前想要看的技術了。

  35. jackychu,

    不敢。我就只是注重用詞而已。

    如您所言,即使是容易入手的 dynamic/scripting language,要用得精熟還是得花功夫。世間諸事多半如此。只是對 dynamic/scripting language 而言,要站在高手的肩膀上作事,比起其它語言難上一點,因為軟體工具的品質與數量不成比例。目前流行的 dynamic/scripting language 都還沒有夠好用的開發工具可以配合,以致於多數用戶都是用「很有效率」的方法在寫程式。但要達到能使用像 vim 或甚至更低階的工具進行開發,真需要不少經驗的累積,也不大可能靠課程訓練來教會。

    當然,以上的原因和後果,反過來也是一樣成立的;在熟練了低階的開發工具之後,更能夠有效率地使用 dynamic/scripting language 這種生產力工具。Paul Graham 不也有差不多的看法嗎?

    YUI 真的是很美呀 … (茶)

    我會把這一串的討論歸類在 dynamic typed language 與 static typed language 的思維之爭;雖然我們好像沒怎麼談到 typing (笑)。看看不同立場的使用者/程式員的看法,是蠻有意思的。

  36. “因為 xxx 背後的 xxx,xxxx,絕對不是 OOO 那種 LLL 可以比較的!”
    這種一以概之的釣魚言論, 會讓許多看到的人覺得被踩到底線了, 得跳出來.

    我可以想像到你所遇到的場景, 被業務或人客嗆說 “‘java’ 我也會寫, 在網頁上改改不就可以了嗎? 怎麼時間要這麼久”之類的 XD,

    java / javascript 兩者無法互相取代, 甚至作用的地方也完全不同.
    只是巧合的是 java / javascript 已經是現在企業級/網頁開發兩個熱門區塊的主流語言.
    看熱鬧的外人誤把”馮京”當”馬涼”的事所在多有. 這是你想表達的吧?

    工業, 腳本是適用型態的分類; 靜態, 動態視語言型態的分類.
    一般的”腳本語言”指的是 shell, perl, python, awk 等可以處理系統指令的動態語言.
    不過其中如 python 語言早已經廣泛用在視窗程式, 科學計算, 網頁程式設計等方面, 跨足企業級語言的範圍了.

    javascript 在 wikipedia 在下方的分類中是被分類為”客戶端腳本語言”. 這比較合理. 大家無法想像用 javascript 下系統指令的情況吧?

    所以同樣我也要說:

    不要把 javascript 跟我們的xx語言相提並論, 腳本語言背後的xxxx,xxxx,絕對不是 OOO 那種 LLL 可以比較的!”

    BTW, 用 JS 寫 code 一定要裝 firebug, 好物呀

  37. gasolin:
    謝謝您的留言。
    恩,的確,完全能體會到我所說的情景,也謝謝您用更簡單的文字把我想要說的想法寫出來了。

    至於 firebug,根據 Jackychu 的說法,firebug 是 user端的工具,這可能對於我的專案需求上會有一些出入,改天來玩看看。

  38. Dynamic Language 不一定是 Script Language 喔 @_@
    可以參考一下 Common Lisp(算 dynamic language 吧),
    但是很少人會覺得它是 script language.

    註: script language 一詞的產生, 是早期因為這些語言主要用來寫腳本,
    而非撰寫核心, 不過現在由於這些語言發展較快, 其實也可以算是商用語言了.

  39. 我要浧清一下,我說Firebug是user端的工具是一般的開發工具IDE來比較的,不是指user才用的工具喔!

  40. jackychu:
    了解,之前有找到一個用 eclipse 為 base 的 JavaScript debug tool, 可是用不習慣,就沒在用了。

    這類工具軟體,雖然好用,但是變成每台要做 debug 的 client 都要裝。
    有時候,在客戶端做 demo 的時候,碰到問題是必須馬上處理的,沒有辦法在人家電腦上裝一堆有的沒有的東西。這是比較苦惱的。

    我想,log4j javascript version 我會找時間好好看一下的,至少這個會比較像我覺得開發中比較理想的東西。

  41. javascript IDE我推Aptana!! 它的debug mode跟我們寫Java一樣,可以設break point等…它也有eclipse plug-in,也是好物一個。

  42. jackychu:
    我就是要說 aptana啦!

    找到之後拿起來玩,還不錯玩耶。可是,還是有點不習慣,所以也沒在用了。

    倒是,能夠設定 break point 真的超讚耶!

  43. 嗯~ 這篇文章的確可以讓非程式設計者了解到 java 跟 javascript 的差別, 是否阿西摩寫這篇文章的原意, 就是要讓非程式設計的網友們了解這兩者的區別?

    而且~ 阿西摩你自己的解釋的那六點舉的很爛 XD
    有興趣看看這篇吧~

  44. 道格老師 - Perl Lover

    January 17, 2007 at 12:38 pm

    Perl 也是 Scripting Languages

    請問版主這是在侮辱 Perl 社群嘛?

  45. 其實 Firebug 也是可以設 breakpoint 的說…

  46. 留言當中,已經有一位 gasolin 朋友寫了這一段

    “因為 xxx 背後的 xxx,xxxx,絕對不是 OOO 那種 LLL 可以比較的!”
    這種一以概之的釣魚言論, 會讓許多看到的人覺得被踩到底線了, 得跳出來.

    我可以想像到你所遇到的場景, 被業務或人客嗆說 “‘java’ 我也會寫, 在網頁上改改不就可以了嗎? 怎麼時間要這麼久”之類的 XD,

    java / javascript 兩者無法互相取代, 甚至作用的地方也完全不同.
    只是巧合的是 java / javascript 已經是現在企業級/網頁開發兩個熱門區塊的主流語言.
    看熱鬧的外人誤把”馮京”當”馬涼”的事所在多有. 這是你想表達的吧?

    完全道出我想要說的事情。

    我覺得很有意思的是,有些人會針對別人的文章本意去做曲解,然後開始批評人家寫的不好,或者是針對別人的文章做出批評,然後針對人家的論點開始自我解釋。更何況,這是一篇寫在自己部落格上的文章。如果,今天我這篇文章是發佈在程式設計師的論壇中,或者是專欄稿,被大家這樣質疑,我會考慮寫一篇解釋甚至完全修改。基本上,如果是要放在公共網站,或者是論壇上的文章,我不會把這種東西丟出來。但是,今天是在自己的部落格上,我怎麼寫,認同的人認同,不認同的人不認同。我也說過,歡迎大家提出來討論。只是,很多人抱持著,「膽敢這樣說!?你算老幾啊的心態」。專不專業,或者是我能不能這樣寫,好像,不是別人說了算的事情吧!?

    或許,我的思維不同吧,看到別人寫得不好,我會嘗試著用同樣的題材,然後自己寫一篇新的文章,完全用自己的方式去詮釋同樣的題材。只是,我好像還沒看到有人寫出這樣的文章。

    當然,在這個留言討論中,也是有不少新的資訊,改變了我的一些想法,我也很感謝這些分享的朋友。而整個留言討論當中,也已經有不只一位朋友點出了我真正的意思。如果,還是看不懂,那或許要去找一些高人來把我這篇文章改成「程式語言」這樣大家或許就看得懂了。

    原來,在自己的部落格上寫一篇「具有爭議性的話題」可以完全的讓流量爆走!而且,還會從「原本的文章中繁衍出其他的爭議性話題」。挺有意思的。或許,這就是 Web 2.0 中所謂的「互動」吧!

  47. 道格老師 – Perl Lover:
    1. 我本文當中本來就沒有批評的 scripting language的用意。

    2. 我只是單純的對 JavaScript 做出一些我的看法。文中,也根本沒有把 Perl 拿來做比較。我比較好奇「老師」的您,那裡看到我說 Perl 了?況且,我還挺喜歡 python, perl 之類的語言,都可以拿來作為系統間的 glue,都是很不錯的語言。

  48. 黑米上「觀魚」留了個朋友跟他說的至理名言:
    你不寫(報導),別人不知道你不知道。
    你一寫(報導),全天下都知道你不知道。

    我想再加一句:
    跟著無知的人繼續寫下去,那還真的不知道是不是有「無知」以外的形容詞了。

    獻給全天下跟阿西摩一樣無知的人。
    共勉之。

  49. 剛剛把 firebug 裝起來玩玩看…

    跑出了這樣的東西…

    警告: 使用了非標準的 document.all 語法。請改用 W3C 標準的 document.getElementById()。
    原始檔: http://xxx.xxx.xxx.xxx:8080/xxx/js/CommonJS.js
    行: 212

    結果,一進去看,是之前找來的 component 上的function.

    而且,firebug 是 firefox 的 plug-in 必須使用在 firefox上。我手邊現在這個專案,板型當初是套用在 IE 上的,排版上會有一些些異狀。

    真是令人苦惱。。。

    而且,它會沒一直掃描共用的 js 檔案。就算頁面上沒有 call 到這個 function  它還是會檢查,而且訊息一直跳出來。
    大概我不會用吧~ 我再繼續看看好了。

  50. to hoamon:
    感謝大師指點,我會虛心學習。

  51. JavaScript ≠ Java我終於懂了,版上各文章精彩極了,可惜我是程式門外漢,只會欣賞別人的程式而自己不會寫
    請教先進,在 http://sga.myweb.hinet.net/sgajava.htm 爪哇教室/雜七雜八/網頁記事–範例中,如何把記事的順序調過來–即後來的記事顯示在網頁上方,而先填入的記事顯示在網頁下面,謝謝

  52. JavaScript 是一種非常不嚴謹的腳本語言。在 JavaScript 裡面,變數全部都用 var 宣告

    var宣告 不是代表語言不嚴謹
    只是代表語言支不支援type inference.

  53. 其實只要你能寫出 一個語言在某個平台的compiler或interpreter 你就能在用那個平台上就某個語言寫程式
    像rhino 就是讓你在JVM上跑Javascript的東西

  54. @BEN
    JavaScript 裡面也有分不同的 type ,只是用 var 的時候會自動轉變。
    如 “100” === 100 會返回 false 。

  55. 是咁的……JavaScript ≠ Java 這個ISSUE 以前見工有人問到, 剛好細佬 DANNY 也知道! 所以嘗試上網 FIND THE SOLUTION, 來到這WEBSITES! THX~

  56. 您好,搜索java和javascript不同时找到了这篇文档,文中关于“JavaScript 的程式”的演示没有被正常显示,应该是这段script语句被浏览器执行了。

Comments are closed.