l

2011年8月3日 星期三

老狗學新把戲之 Groovy

August 03 21:59~23:11

已經想不起來最近一次學新的程式語言是什麼時候了...第一次學 Java 已經是 10 幾年前的事情,Fortran 與 C/C++ 更不用說了都快要 20 年了。至於 Teddy 從學會第一個程式語言 Pascal 至今也有 22 年的光陰了,還真有點懷念 Pascal 啊。五專畢業當兵之前用  VB 3.0 + SQL 接了幾個 cases,當兵的時候算是幸運也是不幸,有一年的時間有機會在部隊中用 VB 3.0 + SQL 寫了『教點召報到程式』。退伍之後工作,學了 ASP(這算程式語言嗎?),Javascript 與 VBScript。

後來回學校唸書,在修課中學了 ML 還有另外一兩個已經忘了什麼名子的程式語言。另外因為研究需要也學了一點 Eiffel,C# 和 Java bytecode,不過這幾個語言應該不能算是真正有學會,因為並沒有拿來開發什麼偉大的程式,只是寫寫作業和練習一些小範例而已。

這幾年很多程式語言如雨後春筍般的冒出,可惜 Teddy 已經不是當年的年輕小伙子,可以毫無顧忌的狂學新的程式語言。想當年要學一個程式語言也不是那麼簡單,連 compiler 或是 IDE 都是要錢滴,不像現在幾乎都可以從網路上找到免費的開發工具與環境。記得好幾年前 Teddy 在讀 The Pragmatic Programmer 這一本書的時候,作者在書中建議開發人員每年應該要學一個新的程式語言。因為不同的程式語言對於解決相同的問題有不同的作法,例如 OO languages 和 functional languages 的風格就大不相同。如果能夠學習各種不同的程式語言並了解其背後解決問題的思維模式,那麼對於開發人員而言,等於多了很多『武器』可以使用。這就好像切菜,剁肉要用菜刀,切水果要用水果刀,削鉛筆要用超級小刀是一樣的道理。

在看完 The Pragmatic Programmer 的當下,Teddy 立志每年要學一個新的程式語言,N 年過去了,好像半個新的語言都沒學,還是在靠 Java 打通關...好薄弱的意志力...XD。

最近因為看了一點 DSL (Domain Specific Language)的書,書中用 Ruby 當作 internal DSL 的例子,於是 Teddy 就想說那去稍微看一下 Ruby 長什麼樣子。結果在找資料的時候發現有用 Java 實做的 JRuby 可以用,那就想說改看 JRuby 好了。但是,繼續 google 一陣子之後,發現 Groovy 這個 script language 和 Java 相容性最好,結果最後變成跑去看 Groovy...XD。

DSL ---> Internal DSL ---> Ruby  ---> JRuby ---> Groovy
 |                                                                                  ^
|                                                                                 |
  ------------------------------- ? ---------------------------

今天稍微玩了一下 Groovy 發現還真有趣耶,處理 list 很方便,又支援 closure,覺的很多 ML 可以做的事 Groovy 也都可以做,還有很多對於 Java programmers 來講非常貼心的小功能,例如:

println "ls -l" .execute().text


可以直接印出類似這樣的結果:

drwxr-xr-x    7 root   root        4096 2010-01-01 19:21 Capivara
drwxr-xr-x    7 root   root        4096 2007-11-26 14:28 ies4linux-2.99.0.1
drwxr-xr-x    4 root   root        4096 2010-11-05 23:58 java
-rw-r--r--       1 root   root        105990528 2009-12-30 21:36 jdk1.6.0_17.tar.gz
drwxr-xr-x    4 root   root        4096 2010-09-26 12:57 Mobile Atlas Creator 1.8

想起當初跟 Java 的 Process, ProcessBuilder 物件奮鬥的過程,和 Groovy 的便利性相比,眼淚簡直快掉下來。

不過只試了幾個小時而已,現在除了覺的『很有趣』以外,還沒有想到什麼實際的用途。幾個可能的方向是:
  • 用 Groovy 來做 test automation。
  • 用 Groovy 當作 internal DSL 使用,不過不確定是否合適。
  • 用 Groovy 來寫 plug-ins。
如果有鄉民們知道什麼好康的用法也請留言告訴 Teddy。學語言(無論是程式語言還是人類語言)就是要用,如果沒用很快就忘光光啦。對了,Groovy 有 Eclipse plug-ins 可以用,作為學習環境還算滿方便的,有興趣的鄉民們可以嘗試看看。

***

友藏內心獨白:DOS 批次檔應該也算是程式語言喔!

5 則留言:

  1. 這幾年冒出來的語言真的很多,
    但每次看完該語言所提的例子,
    不知道是腦袋老了已經僵化還是例子本身不夠好,
    總是無法感受到新語言所帶來的優勢,
    也就沒有繼續深探下去,
    最近有深探的新語言也只有Objective C...

    回覆刪除
  2. 我最近新學的程式語言是 Python ... XD

    回覆刪除
  3. Python我有稍微看一下
    不過Python堅持四個空白的縮排
    真是一個超詭異的風格

    回覆刪除
  4. To Hsieh Yu-Han:

    謝謝建議,Scala 看起來也很不錯,Teddy 會找時間玩一下。

    回覆刪除