2015年8月17日

Scala Days

看著 2015 年第三年的 Scala Days Slides,想起已經舉辦很久風光的 JavaOne,以及 JavaTwo Taiwan,記得當初還在 1.2 版,就被 JVM 的 garbage collection 以及 Write Once Run Everywhere 吸引,也才由 C 語言轉進到 Java 領域。

經過了十幾年的 Java,記憶體自動回收的技術與概念已經非常成熟,而 JVM 也因為包容了其他的 script language 而有了不同的生命,scala 有著自己的 ecosystem,也有希望能一舉完全取代 Java,成為下一代重要的 JVM 語言。

Memories of Java

還記得自己也是大約在 2001~2002 開始接觸 Java,大約跟第一屆的 JavaTwo Conference 同一個階段,曾經參加過幾次 JavaTwo,還有 Java Tech Days,後期對 Java Conference 的印象,是廠商的場次比技術的場次還多。

唸書的時候並沒有寫過 Java 的程式,後來到了職場,才慢慢地自己將物件導向、Pattern、J2EE Pattern這些知識累積起來,直到現在,Java 在商用運算的環境,還算是非常熱門的語言,另一個成功讓 Java 延長壽命的,就是 Android,使用那個軟體開發技術沒有永遠的對或錯。

參加這些活動之後 ,最後還留到現在的是 T-Shirt 跟 Java Duke 娃娃,還記得有一隻娃娃是參加 Conference 就送的,有一隻是文章投稿的獎品,已經忘記第三隻是怎麼得到的。

另一個印象最深的是洪志鵬先生,他是前昇陽的總經理,就是在他任內成功地以 JavaTwo 讓 Java 在台灣生根,後來更毅然辭職當了幾年作家,然後去了昇陽的對手微軟工作。

洪先生有一篇有趣的文章,可參閱:技術人員如何轉型成功 - 洪志鵬。另外搜尋到一篇蘋果日報在 2014 年的訪問:[動新聞]我是總監 但沒有一天不想當「作家」

Scala is getting stronger with TypeSafe

三年的 Scala Days 都是三天的活動,從 2013 年同時的三個 session,到了 2014 年是同時四個 session,到了今年,已經是在Amsterdam 與 San Francisco 兩個地方舉辦活動,規模有慢慢擴大的感覺。

scala 語言在 scala 的爸爸 Martin Odersky 設立的公司 TypeSafe 協助下,有逐年成長的趨勢,這種感覺,就像是 Java 在 Sun 的羽翼之下成長的狀況。

講得現實一些,Typesafe 如果要賺錢,首要任務就是要將 scala 的社群使用比例提高,搭配公司推廣的官方 framework,再加上更多的 scala libray/framework,越多人使用 scala,Typesafe 才能越成功。

要推廣一個語言,除了技術本身之外,也許該學學 Java Duke,找個公仔來代言,這可以讓整個開發社群更有話題性,也更能提昇自己的地位,在眾多 JVM 語言之中脫穎而出。

scala 的未來

觀察 scala 有幾個重點,一個是 JVM 語言的未來,scala 能不能成為 Java 語言之後,可以完整取代 Java 運作在 JVM 的語言,這部份是以 scala 「精簡」的語法作為推廣的策略。

第二是 Concurrency Model,既有的 Java 是採用 Multi-Thread、shared data 加上 data lock 機制來進行,scala 採用的是 actor concurrency model,這是簡化後的並行機制,程式不需要考慮什麼時候要鎖定或釋放資料。

第三是 Big Data,Spark 已經逐漸取代了 hadoop 的吸睛程度,而 spark 是以 scala 的,這等於也影響到,要使用 Big Data 的 programmer 必須要去學習 scala 的動力。

第四是 Object-Oriented Functional Programming,原本在 Java 我們學習的是 Object-Oriented 的思考方式,近幾年因為大量 concurrent user 的需求,functional programming 開發的意識抬頭,而 scala 融合了 Object Oriented 以及 Functional Programming 的精神。

OO or FP or OO+FP ?

選擇 FP 或是 OO 並沒有絕對的對或錯,或許應該說使用純粹的 FP 語言,或是純粹的 OO 語言,會讓開發變得單純,而 OO+FP 語言,或許會讓每個 programmer 寫出來的程式碼大相逕庭,互相都看不懂對方的程式碼。

物件導向重視軟體工程,搭配物件導向本身的概念,programmer還需要學習OO Pattern。FP 比較接近一邊想一邊寫 code 的 coding style,也就是說,程式碼會比較沒有組織一些,比較 free-style。

既然 OO 與 FP 各有各的優點,那麼 scala 就是希望融合兩者 OO+FP,Java 本身雖然是 Object Oriented,但也持續朝向 Functional 的功能靠攏,然而在跟傳統的 Java 相容的包袱下,再怎麼改進,總會擺脫不了沈重的語法包袱,或許 scala 是一種延續 JVM 生命的靈藥?

Language pitfalls

Java 人人會寫,但並不是每一個人都能準確地掌握這個語言,Scala 也是一樣。想像一下,Java EE 專案如果沒有 Java EE Patterns 的包裝,每一個 programmer 寫出來的 project 也都是不一樣的,而每一個開發團隊,都需要有製作專案的規範,這不是單純選擇某個語言就可以解決的問題。

以 Singleton 這個最簡單的 OO Pattern 為例,也是經過了一段時間的討論跟測試,大家才知道應該要這樣寫,才能在 JVM multithread 的環境中正常運作。

public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

以 scala 來說,也有一些人注意到了語言的誤區問題,例如: scala pitfalls ,還有 Scala Puzzler 這本書。

程式語言都可能會因為支援的語法越多,而產生一些正確跟可能會造成錯誤的寫法,也就是 Pattern 與 Anti-Pattern,這些資訊,會隨著更多人注意跟使用 scala 越來越多。

books

書籍量的多寡,也是程式語言熱門程度的一個指標,越多人使用的語言,書籍就會越多。目前沒看到任何一本 scala 繁體中文的書,只有幾本翻譯成了簡體中文。

scala books
amazone scala books

Reference

走入臺灣程式開發社群