TechTalk 專訪 Episode 26 逐字稿 - Java 8(下)
TechTalk 專訪 Episode 26 逐字稿 – Java 8(上) << 前情 HC:ok,良葛格,所以像另外一個比較大的改變就是Data Time API 嗎?那其實你剛剛已經也提到蠻多了。 C:是。 HC:那你還有沒有什麼要補充,你覺得這個 DateTime API 對 Java 開發人員,會有哪些其他影響? C:一開始其實有稍微談到一些 DateTime,我有講過,你要使用 DateTime API,就跟一開始要使用 Joda-Time API 一樣,你得認清楚 Joda-Time 或 DateTime 把時間抽象化成哪一些類別、哪一些介面,然後才知道要怎麼去使用、去操作它,也就是說,API 強迫你要去認識時間的觀念,一開始我是舉一年的毫秒數為例,其實就是在強調,有些些基本的時間觀念要去瞭解。 MY:老實說,那個日光節約是真的是蠻久以前的,我也不知道。台灣有實施過這件事情。 C:是。 HC:這小時候有提有一次。 C:對。 HC:好像時間要提早一個小時。 C:是。 MY:我都沒印象。 C:對,那比如說,我們先不要講日光節約時間,我們就講潤年好了。如果那一年不是潤年,結果有個使用者要輸入 2 月 29 號,那你要怎麼處理? HC:應該是要提出警告。 MY:應該是要擋掉。 C:對!要擋掉對不對?ok,因為怎麼樣?你知道那一年不該有2月29日對不對? MY:對。 C:因為你知道對不對?你知道這件事,ok,好,那我再問各位一個問題,台灣時間 1975 年 3 月 31 日,那一晚 11 點 59 分 59 秒,下一秒是不是應該 4 月 1 號 0 分 0 秒? MY:對! C:大部份人可能會這麼覺得。 MY:理論上,對。 C:理論上對不對? MY:沒錯。 C:但是沒有,如果你用 Date、Calendar 計算,下一個時間就是 4 月 1 號 1 點 0 分 0 秒。 MY:日光節約時間? C:是,因為當年台灣有實施過日光節約時間,好!你不知道對不對? MY:不知道。 C:假設你不是用 Date、Calendar去計算,而是有一個使用者進行輸入,也許是保險業務員,總是有那個時間出生的被保險人對不對?那你要輸入時間,可能他就是要把時間設成 4 月 1 日 0 點 0 分 0 秒,也許是他輸入 1975 年 4 月 1 日,那後面的時間由你設計的 API,直接補齊 0 點 0 分 0 秒!那請問你,這是對的還是錯的? MY:如果一定要輸入那個時間是不是?可是並沒有那個時間是不是? C:不是一定要或不一定要,而是說如果有業務員進行輸入,或者是你當初在設計 API 時允許設定 4 月 1 日 0 點 0 分 0 秒這類動作,那你覺得這個動作,算是對的還是錯的? MY:也是有問題嗎?應該是要寫日光節約時間? C:我曾經在 iThome 寫了一篇文章,就是〈機器時間觀與人的時間觀〉談到這點,其實剛的問題不算對也不算錯,因為這個就是你的時間觀跟我的時間觀的問題,ok,因為其實大部份人不知道日光節約時間,那這一個一小時差你有沒有 care,你的客戶不知道、你也不知道,那也許就沒有問題,就是說你可以真的儲存 4 月 1 日 0 點 0 分 0 秒,因為大部份人也不會特別去計算那 1 個小時的差別對不對? MY:要統一就對了? C:對,機器的時間觀就是一個時間軸連續毫秒數對不對?機器時間觀比較沒有問題,會複雜的是人的時間觀。為什麼我們要認識 Joda-Time、DateTime 的時候,要去先瞭解時間的基本觀念?你得瞭解時區、瞭解偏移量、瞭解政治、甚至瞭解歷史,因為有改曆的問題,因為這個是什麼?這是人的時間觀!假設談到歷史上的時間跟你知道的歷史上的時間不一樣,那也許是我知道歷史上有個改曆時間而造成偏差,這叫做人的時間觀。 HC:ok,好,良葛格剛才你介紹那麼多 Java 8 新功能,那你覺得現在是升級到 Java 8 的好時機嗎? C:升級問題的話,其實我覺要分幾個討論,當然政治性問題的話,真的還蠻多可以考慮的,政治性的問題舉個例子來說,如果在一間保守的公司,多是 JDK6、JDK7,你敢冒然就要升級 Java 8 嗎?這當然是很多問題要考量。 MY:是這樣,所以他來上 Python 的課,然後問 Java 的問題? C:對!因為他在看我的《Java Tutorial》文件,那天問到 Gradle 的操作,因為我那個《Java Tutorial》文件是用 Gradle 去 Build。 MY:ok、ok。 C:他 RUN 不出來,而且只是一個基本的 WEB 應用程式,我就看它的 Exception 是 ClassFormatException,很簡單,因為我的 Gradle 下的 DEPENDENCY,Tomcat 是 7.x 的。他 build 不出來,我就問說你的 JDK 是哪一版的?是不是 8 的版本?他就說對,我確認一下真的是 JDK 8,他在 JDK 8 上運行 Gradle,但是它沒有修改 build.gradle 中的 Dependency。 HC:就是慢了一點點。 C:當然我會覺得,一般東西都是這樣,等個半年一年後,你總是要等他 update X 出來,穩定一點會比較好,如果真的是要一個上線的版本,還有平台的問題、程式庫的問題、工具的問題。所以講句難聽一點的話,現在功能上不是升級的一個時間點,一般接受的時間國外比較快一點,但是台灣的話,總是會慢個一兩年、甚至兩三年。除非你的案子真的沒有那些相依性的問題,那當然就升級。 HC:JDK 7 的問題是,它沒有什麼很吸引人的升級的。 C:因為他是就是政治性的版本,Oracle 吃下 Sun,總是要先安撫一下人心,在我的書裡面也有很直接寫出來,那就是政治性目的高於功能性目的的一個版本。那時我在改版,我就想說我要改版什麼?因為我不知道要改什麼,你知道嗎? HC:其實我真的覺得,對啊,他就是那幾個小功能。 C:對。 C:後來我只好整本書重寫,我想說,我沒有辦法在功能上改版,那我整本書在敘述上改版。 HC:是 7 那一版還是 8 這一版?7 那本是重寫? C:6 到 7 那一本是重寫,7 到 8 的話,是以加入一些 Lambda 跟 DateTime API 為主角,其他大概 6 成是重寫或更新範例程式碼;6 到 7 是整本重寫,因為我想說,功能性它們沒什麼著墨點,那我就是說,好吧!我把我過去一些經驗整個再寫進書裡面,我功能性上沒辦法重寫我的書,那經驗上可以重寫吧!不這樣子會對不起讀者! HC:ok 了啦。 C:回過頭來就是說,其實 7 真的是一個政治性版本,不過也不能說 7 沒有作用,因為其實 7 當初就是被切成一半。 HC:對。規格被切割了。 C:對,其實 Stream API 在 parallel 的份,其實底層就是 Fork-Join。 HC:Fork-Join 是 7。 C:對,我們很少直接寫 Fork-Join,因為 Fork-Join 也不好寫,要會切除相依性不容易,那 8 出來,寫 parallel 那個部份的話會比較好寫,至少你不用自己去 Fork-Join,社群的接受度還蠻高的,討論的點還蠻多的,至少就這半年多來,Java 感覺有點起死回生這樣子。 C:有點討論熱度。 HC:對對對對對對,已經有點不太一樣了。 C:確實有點不太一樣了,其實 7 出來沒有什麼人要升級,但是 8 的話,其實還看到一些人會說,他會想嘗試、他會想升級、他正在評估,對,你說要不要升級那是一回事,但是其實可以先想想,要不要評估,現在倒是值得開始評估。 HC:沒錯。 C:我是這樣子覺得,值得開始評估了,評估完之後,當它穩定到一個點,程式庫、平台、工具都已經上來了,你就隨時可以做升級這樣的動作。 HC:瞭解。 MY:瞭解。 C:是。 HC:我們剛剛在講說,其實前幾年的 Java 基本上完全沒有什麼人要注意的那種感覺,就是他也沒有什麼新東西,然後也沒有什麼太令人感到興奮,當然 Lambda 大家覺得不錯,但是因為實在是拖很久,所以我覺得前幾年比較常聽到的一個說法就是說,大家覺得說 Java 已經死了,我們應該要比較關注的是 JVM 這個平台,就是在這平台上面寫可以 Run 的東西,你覺得你贊同這樣的說法嗎?你有什麼樣的想法? C:你要我老實說,Sun 真的是那幾年正在走下坡,再來又被 Oracle 吃下來,再來又跟 Google 打官司。 MY:Google 官司,對。 C:那幾年在政治上很熱鬧,那在技術上 Java 有沒有什麼點?沒有!當然,Java 現在號稱九百萬多開發者,這塊餅大家要不要吃?大家當然要吃,所以就找個見縫插針的說法,就是 JVM 平台比 Java 語言來得重要,如果真的被這說法插針成功了,那天下就是它的,所以這樣的說法,對於 Java.next,也就是所謂的下一代 Java 語言,或說下一個取代 Java 的語言,其實是蠻重要的,不過實際上,不知道你們有沒有寫過 Jython、JRuby 或是在 JVM 上寫 JavaScript這類的東西? HC:我們有比較用一點 Groovy。 C: Groovy 算是還比較跟 JVM 緊密結合的。 HC:對。 C:Groovy 就是真的為了 JVM 而生,那那沒話講,但是就其他語言來講的話,你總是還要做一件事情,你要懂Java對不對?你為什麼會想要在 JVM 上 Run?跨平台嗎?不可能,現在很多語言是直譯的程式,就算是編譯式的,其實有很多平台版本,只要與 Follow 一些 Standard 的作法,就功能上你還是跨越了平台,不會純綷為了跨平台在 JVM 上 Run JavaScript。 MY:是。 HC:不過像 JRuby 是為了效能,我知道有些人在 JRuby 是為了效能。 C:對,是為了效能沒有錯。 HC:對對,所以其實有些不太一樣。 C:有些人是為了效能,對,那效能的話,你還是有一些部份需要認識 Java 的東西。 HC:對。 C:你的東西終究還是 Run 在 JVM 上面,你用的記憶體元素,一些計算什麼的還是 Run 在 Java 上面,如果要再進一步去複製 Java 生態系的一些東西那就更複雜了,你還是要去認識原來 Java 裡面有什麼,簡單地來講,你在 JVM 上 Run 其他的語言,要真正用深一點的時候,你還是回頭要去認識 Java。 MY:ok,那 Google 與 Oracle 為了 Java 的專利鬧得不可開交,你認為說 GAE 與 Android 等平台,未來會實現 Java 8 的新功能嗎?如果最大的 SAAS 平台與 Java 8 對立,對 Java 社群會不會是又是另一種分裂? C:其實這個東西是商業競爭的問題,那商業的東西就是由政治與利益來決定,天下沒有永遠的敵人,也沒有永遠的合作夥伴,這是大家都知道,那 IBM 都可以跟 Apple 合作了對不對? HC:對,最近的新聞還蠻神奇的。 C:N年前根本就是不是你死我亡的兩公司,N 年後竟然合作了,那你覺得呢?你說真要去預測,商業競爭的東西很難講,如果你真的要問我,因為畢竟問題提出來,那我的想法是這樣,就像剛剛講的, IBM 跟 Apple 都能合作了,還有就是例如說 Microsoft 的 Azure 都可以支援 Java 了,那 GAE、Android 未來有什麼理由不支援?或者是支不支援到 Java 8?Android、GAE 為什麼要一開始就使用或支援 Java?雖然 GAE 一開始是 Python 為主,後來馬上就有 Java 的語言,因為 Java 的開發者多,多就有利益,有利益為什麼不賺?有錢為什麼不賺? C: Google 完全就不能用任何有關 Java 的語言,Java的東西應該是不可能,我覺得記得 Java 一開始沒有這種法律規定,他們的爭議主要是在 API 的版權。 HC:對。 C:對,所以你說他會不會不支援?我覺得不太可能,之後會不會整個換掉,用另外一門語言?如果是 Apple 的 Objective-C 我覺得有可能,因為 Apple 比較封閉。 MY:不一樣在哪? C:Apple 只要強迫 APP 開發者換就好了,APP 這種東西偏前端,前端的東西就是這樣,界面一換,大家就全部跟著換,那個 SDK 一換大家也就跟著換,因為 APP 生命週期比較短,所以 Apple 可以做這個動作,他可以在某個時間點把 Objective-C 換成 Swift,他們真要耍手段是做的到,不過我不覺得 Apple 會一次性、破壞性地做這件事,畢竟開發者還是不能隨意冒犯。 HC:ok,良葛格你剛其實提到的就是說,你一直都在網路上發表很多這種技術相關的的文件。 C:是。 HC:其實也是很多人會自學,不管是 Java 或是 Python,那可以稍微分享一下學習這些、這麼多新技術的訣竅嗎? C:其實我算是有點轉轉換跑道,算算時間這一個禮拜應該會有篇 iThome 的文章會刊出來,講到我轉換跑道的一個過程。那我轉換跑道的一個過程中,我強迫自己寫東西,因為我發現我看完資料後記不起來,所以就變成我就是寫下來,才會比較踏實,大概從 2003 年開始寫,當年沒有什麼,連「部落格」這個名詞都沒有出來,後來部落格興起,開發者也蠻多去寫部落格的,然後後來慢慢的有一些聲音,叫做優秀開發者的特質之一是技術寫作,我就覺得有一種很驚喜的感覺,好像在講我…XD MY:剛好這樣子。 C:對,然後其實這個聲音還蠻多的,優秀開發者的特質之一是技術寫作,這個部份著墨很多,什麼牽涉到表達、組織能力、邏輯能力、溝通能力的,那個大家都看很多了,對,所以我覺得我算是矇到,一開始矇到一個點,就技術寫作這個部份,確實在學東西上非常有幫助,至於其他附加的部份,怎麼樣跟人家交流,當然也有,就學習上,技術寫作真的蠻有用的。 MY:好,良葛格我們準備的問題差不多了,你還有什麼就是想要補充的嗎? C:Java 8 高階排序 API 的部份,我覺得大家也可以重視一下,因為其實大家還蠻去常處理排序的,以前大部份就是開發者自己寫那些東西。guava-libraries 裡面有高階排序API,這部份在 JDK8 裡也有些現成的東西,你可以用那個比較流暢的方式去組合排序規則,組合出你想要的排序方式,這部份大家可以去研究一下,我覺得蠻有價值的。 HC:ok,好,那不好意思因為時間關係,沒有辦法聊完所有準備的內容,那希望下次有機會的話,可以再邀請良葛格來分享其他的議題。 C:是是。 HC:也很高興能夠百忙之中抽空接受我們的訪問。 C:不會,大家比較辛苦。 MY:謝謝良葛格。 HC:那我預告一下,難得我在這一次訪問可以敲定下一次的主題,就是下一次我們預定要訪問的主題是 Linux Container。那今天訪問到這邊告一個段落,那謝謝良葛格,也謝謝大家的收聽,感謝。 C:謝謝,拜拜。 MY:拜拜。 |