2014年4月10日 星期四

從對 Java 的回顧來看這些年來的相關技術發展

今天邀請的演講者因為有事沒法前來,加上他有空的時間可能就學期末了。其實放空一場也沒有關係,但是我有些東西想要跟現在的學生們說,所以我準備了演講自己上。

基本上,今天上午我都在開會,然後下午演講整整的兩小時,然後晚上再上 EMBA 的課三堂,其實真的有點累,但是終於解脫了。

我不知道學生的反應如何,但是我希望它們會有收穫。

----

今天的演講主題是:給 Java 十八歲的成人禮 -- 從 Java 的發展看網路技術的演進

嚴格來說,這題目取的不是很好,畢竟 Java官方的生日是 1996/1/23,如果從早期有 release 來看,大概可以追朔到 1994 年六月 ....,所以取十八歲沒啥意義,而且也不見得是成人禮,畢竟沒啥送給 Java 的,反而我就技術的演進講了一些趨勢,這是我希望學生從這裏面獲得的。

為什麼我那麼累會還是要準備這個演講,其實這內容我花了非常久的時間準備,最主要的,就是我 1996 年大學畢業,當然順著 Java 的技術發展,那時候同時間發展的技術還有 Javascript、PHP、Python、Ruby 等等。

我一直以來發現的學用落差問題,就是在於 1990 年代初期,網路和 OO 的技術興起,因為業界的人大部分沒有接觸到這塊,因此大學畢業生可能就可以立刻進業界派上用場。畢竟當初許多企業紛紛要趕搭 e 化列車,所以有些能懂的人就用了。

但是學生畢業進入業界以後,再怎麼笨的,其實一天工作八小時,一週工作五天,累積個幾年下來,其實基本上是會比學校裡面學個四年又要學很多科目比起來,當然累積了一段時間以後,一定可以學到比較多的東西。這是第一個部分,第二個是說,過去許多企業他可能想要自己做自己的 Framework,但是過了一段時間以後,他們想說要自己做和維護一個 Framework,不如用一些 Best Practice 或是大家都在用的東西,當大家都用一些約定成俗的 Framework 時,就會有人 Assume 畢業生應該要知道這些 Framework,但是這偏偏又是學校比較少教的。我覺得某種程度上,Framework 比較難被歸類,到底是要被歸在軟工還是歸在程式語言?或許這是這兩個領域的老師在不小心漏掉的原因吧。

因此,我的這個演講,某種程度是希望把我這些年來的經驗整理成一個速成的秘笈,讓學生在短時間內,去知道有那些主要的 Framework,並且未來在遇到的時候,就能夠發揮。

當然,我先介紹了 Java 的背景,也介紹了我討厭 Eclipse 的原因。畢竟我還是很討厭 IBM 明明要搞 Java 的開發工具結果竟然要叫日蝕,果然後來 Sun 就被蝕掉了。不過某種程度上,沒有用 Eclipse 也給我了一些好處,畢竟有些時候沒有那麼多人開發智慧化的工具,所以自己要比較人工的去寫一些 Code,也因此我從這過程中自己覺得我學到了不少。

我主要從五個角度來介紹相關技術的發展:

1. 客戶端處理技術
2. 網頁應用程式
3. 網路服務
4. 智慧型手機應用
5. 巨量資料

就客戶端處理技術來說,我從 Java 為何跨平台開始講,講到了 Applet 的技術,然後提到 Applet 在應用上的缺點,然後提到有幾個相關技術都是在 Client Side,大概介紹了 Javascript、Flash、ActiveX、VBScript,並且介紹了 Adobe 在策略上的失誤,以及現在的趨勢。

在這段,我用 O'Reilly 講 Web 2.0 的那篇文章去談 AJAX 在使用者體驗上的改變,然後點出要看創新的技術,要看是否能夠帶來新的使用者體驗。

網頁應用程式是重頭戲,我先介紹了 CGI,然後介紹 CGI 的缺點,以及大家如何改善,其實網頁應用程式有兩個非常重要的議題:

1. 增加效能與 Scalability
2. 分工與降低網頁設計的複雜度

因此,我先講了 Servlet,然後介紹 JSP 如何被設計來簡化 Servlet 的開發,以及 Tag Library 其實意義上就是要讓人看不到 Code,但是就我的看法來說,其實這也簡化不了多少,因此,要說讓美工人員不用看到 Code 只用 Tag 就能開發,我也不那麼覺得。

後來我就從效能的角度,講到除了 Web端的 Load Balance 到 Ap 的 Load Balance,之後就提到了 Java EE,因為 Servlet 和 JSP 後來收到了 Java EE。然後就慢慢提到了 DAO 和 ORM 的概念,接下來就講了 MVC。

我大概介紹了 Struts 1.x 和 2.x 以及 Spring。我其實有介紹一個心法,就是你學習 MVC 框架時的心法:

1. 了解該框架如何設定,以便處理使用者的要求
2. 知道該框架的 Controller,如何去依使用者的要求去找到相關的 View
3. 知道該框架對於資料存取的支援
4. 知道該框架 Controller 如何將資料送給 View
5. 知道 View 可以如何運用套進來的資料,或是有哪些簡化開發的方法

之後,我用我以前做可更新元件的系統的經驗,來介紹 Spring IoC 的概念,並且說明 Spring 在 AOP 上面的貢獻,以及如何抓住設定 Spring 的重點。

不過,我回歸到 Java,我對學生提出建議,認為如果是 ASP.NET,基本上現在一定要學 ASP.NET MVC,但是 Java,重點是要學 DAO和 ORM。

其實 DAO 要自己寫也可以,但是有些框架可以協助你做這些事情,因此,我介紹了 Hibernate,說明這類框架如何可以簡化自己做 DAO 的 Cost。

網頁應用程式這段,重點是我要讓學生知道為什麼會有框架,並且縮短它們開發框架的時間。

之後,我進入了 Web Service 的主題,我從 RPC 開始,告訴大家為什麼要有 Web Service,然後接下來介紹 RMI,然後用 RMI 的缺點介紹了為何會有 Web Service 的出現,然後說明 UDDI、WSDL,以及 SOAP 的概念。然後比對 RMI 與 SOAP 底層內容的不同來讓大家知道 Web Service 在做 Interoperability 的意義。

之後,我介紹了 SOA 的概念,然後說明 SOA 的精神以及發展,然後介紹了 ESB 和 BPEL 的工具,並且說明基本上很多時候當一個現實的系統,如果要去硬用 ESB 的東西,而沒有一個頭腦很清楚的人去把所有的元件切好,最後的結果可能會是災難,然後提到了現在 RESTful Web Service 在輕量化的考量。

而以一個企業來說,現在的趨勢是把這些服務變成 API,這也就是最近出現的 API Economy 的概念,我透過這樣的方式,希望讓學生去思考 API 的設計以及企業的 API 策略。

Java 最早是針對嵌入式系統,一直到最近 Android 出現,這一條主線成為了一個主流。而 Java 本身,也有 Java ME,現在有針對 Rasphri Pi 等 ARM based 嵌入式晶片的應用。而未來物聯網技術如果發展起來,基本上應該 C 和 Java 會是主流,不過在這邊,我比較了 Java 在 Android 上 dex 檔案格式與傳統 jar 的不同,同時也說明了混淆器和反組譯的概念。

最後,我介紹了 Big Data 與 Java,其實 Hadoop 就是 Java 開發的,只是因為他的 Logo,以至於我常常不太喜歡推她。但是我介紹了 HDFS 的概念以及 MapReduce 的精神。然後介紹如何使用 MongoDB。

而透過這些介紹,我要學生未來在學習巨量資料技術時,要考慮兩個重點:

1. 那個技術如何 Scale up
2. 那個技術的資料表現模型

其實時間不太夠,不然我很想繼續介紹 HDFS 那種把資料看成檔案的形式,為何會成為雲端平台運用資料的一個基本技術 (Ex. AWS)。

---

這個演講我算是用盡了我的力量,把我這些年觀察到的在兩個小時內告訴學生。不過缺點應該是,這似乎不太是兩小時內可以講完的東西。 Orz

但是我希望,它們未來在遇到類似技術的時候,能夠因為今天我介紹的心法,能夠很快的入門。

晚上是 EMBA 的課,今天我介紹的東西也是非常新而且有趣的東西,我講的是行動裝置的管理,我從技術上的問題講到了企業如何訂定行動裝置管理政策 ....

---

我把我想講的,在這一個星期準備了,也講了,希望大家能夠有收穫吧 ...




沒有留言:

張貼留言