(圖片版權屬O'Reilly所有)
《Agile Software Development with Scrum》被我丟在家裡很一陣子了,雖然看英文技術類的書籍對我來說沒什麼大問題,但偶而還是得查一下單字,特別是某個字會影響好幾段段或好幾句話的理解時(我都先用猜的,如果看過好幾段後我猜的意思沒有出現矛盾,我就假裝是那個意思了),這種查單字的打斷我不喜歡,因此最直覺的還是看中文書吧!這本《超越Java -- 探討程式語言的未來》是2006年時,跟著其他用來準備資格考的書一起放到購物車裡,好幾年過去,終於是把他看完了,所以這本書很厚?完全相反,他薄到有點無法反映出它的身價(原價450打折後是360),只是這本書一直被壓在我抽屜裡,沒去翻它。
這本書先提到作者認為Java會成功有四個原因,首先1971年發明的OO語言Smalltalk雖然沒成功,但OO的優點慢慢被接受並且OO開始興起;OO興起但C++卻很難寫,而且還要處理很麻煩的記憶體管理;接著網際網路起飛,處理太低階的網路協定沒有太大的意義;最後是微軟太讓人討厭(原來這也是理由之一)。
Java是OO語言,具有Garbage Collection機制,有高階的函式庫可以寫網際網路應用,而且Java不是微軟的產品,就這樣很多企業應用幾乎是Java的天下。幾年前,只要是Java的書非常好賣,而且到電腦書店,會看到一大票Java書籍,其中爛書比好書多好幾倍,即便爛書這麼多,還是讓很多人學會怎麼寫Java程式,可見Java相當容易學,但這裡有個盲點,我剛剛沒說寫出好的Java程式,事實上很多寫Java程式的人根本沒搞懂OO是什麼?所以寫出來的程式根本就是procedure時代的怪物,別誤會,procedure也可以寫得很優雅,但最近我聽到某學長抱怨別人寫出有41個參數的建構子,和一個單一檔案有26.6K (學長留言說這是另一個C程式) 10K行(依舊恐怖)的JSP後,我相信怪物會比優雅的公主多很多。
但最近如果再走進書店,會發現熱門的書籍不再是Java了,Python或Ruby (Ruby on Rails)變得很熱門(這本書幾乎都是在討論這二個語言),好吧!事實上因為智慧型手機,最近更熱門的書籍是Android和iPhone應用程式開發相關的書籍(Java應該感謝Android,讓Java換個方式重新回到熱門之中),為什麼Java不再熱門了呢?主要是Java越來越複雜,我也承認Java不再是我五、六年前學的Java了,雖然精神沒什麼變,但就像作者書中一直不斷強調的事情,Java的生產力太差了,相較之下,Python和Ruby的生產力非常高,主要有幾個原因(簡列幾點):
1. Dynamic typing:有個例子很有趣,如果你走路像鴨子,叫聲也像鴨子,Ruby就將你歸為鴨子型態。話雖如此,如果沒有穩固的單元測試在後面撐腰,很多compiler可以找到的錯誤,都會被藏在dynamic typing中,換句話說,這是強迫程式員TDD的好語言XD
2. No primitive type: 很多從C/C++到C#的人都會覺得很奇怪,int a = 4; a.toString()是什麼東西?在很多新的語言中,基礎型別已經不再重要,即便是一個整數也是一個物件,重點是這樣不用再區別什麼是基礎型別什麼是物件,所有的東西都有一樣的處理方式:呼叫method。
3. Code block:老實說,我個人覺得這不見得是個優點,程式區塊有點像Java的nameless inner class,inner class確實提高某些生產力,但用的不好,會出現很多重複的程式碼,特別是早期用JBuilder寫的視窗程式,很多人喜歡用滑鼠對一個button按二下,IDE自動產生一段髒的程式碼後,programmer再加入一段更髒的程式碼,但會這樣用的programmer並不會覺得髒,但事實上邏輯跟UI是綁死的不說,光是很多邏輯是重複的就夠讓人討厭了。但無法否認,有時候會覺得code block很方便,只是要用的漂亮才能得到code block的優點。
4. 其他像是metaprogramming、Maxin和continuation (這比較是點針對Web應用程式)等等
這本書提到很多語言,很慶幸地我國中時玩過C,高中玩過Quick Basic,大學學C++ / Visual Basic / Java (C#算是複製品,所以書只翻了5個chapter後,就開始當助教了) / PHP (自學) / Pascal (Delphi) / VHDL (好啦!VHDL是來亂的),研究所在謝老師的課堂中也學到其他在台灣不常見的語言,像是Scheme (Lisp的其中一種方言)和ML (不純的functional language),也看過Smalltalk和Ada寫的程式,所以當看到這本書時,我也在Python和Ruby身上看到Smalltalk的影子,或許可以說現在很多OO的語言都有Smalltalk的影子,但如同作者說的,Smalltalk缺少市場的影響力,70年代無法變成流行,未來應該也不會,作者也認為PHP不會(我個人也不喜歡PHP),Python和Ruby會嗎?我個人認為,也許會像Smalltalk那樣,帶來衝擊然後優點被新的語言融入,最後是新語言開始流行。
前陣子自學Objective-C,那時候覺得很特別,但和Python及Ruby相比,它的語法對C/C++/Java族群來說,比較具有親和力,而且Objective C其實具有上述的大多數優點,不過,我也不認為Objective C會變成大熱門,因為Objective C的族群大多都在OS X的平台上,一個不夠大的平台(也許iPad和iPhone可以多擴展一點市場)。對底層的programmer來說,language通常是無法自己選的,了解一個語言的優勢和劣勢,盡可能提升自己的生產力才是最重要的,一個新語言出現的時候,多看多學,也許哪天就會用的到。
ps. 跟上述這麼多語言相較,自然語言(英文、法文、德文、日文...)還是比較難的。
留言列表