《Java SE 9 技術手冊》序



你拿起了這本書,翻開這篇序,我有了機會問你一個問題:「為什麼想翻開這本書?」

「這個梗上一版的〈序〉用過了啦!笨蛋(作者)!」

好吧!那學 Java 目的是什麼呢?從事程式設計?那麼我就有個新梗了:「什麼是『設計』呢?」

唔!好難回答的問題,來拜一下 Google 大神吧!搜尋「什麼是設計」之後就更不懂了,在沒有一個具體目標之前,得到的都會是近乎空靈的答案吧!

試著在身邊找個東西,就拿鍵盤來說好了,你覺得設計的好嗎?不好?哪裏覺得不好?觸感!什麼樣的觸感?反饋的力道!反餽是來自哪?鍵軸!鍵軸是由哪些 成分組成?底座、彈簧、軸心、軸帽!造成反餽差異性的主要來源是?彈簧和軸心!喔?彈簧啊?它是圈數是多少呢?…

當你逐一挖掘出其中的元素之後,面對一個覺得設計不錯的鍵盤,或許你就能知道其中有哪些「設計」了。

很多時候,當談到一件東西設計的好或不好時,並不會明確地知道自己在講什麼,只是綜合了各種感覺而得到的模糊結論,當然,在平日生活之中,並不用每件 事物都得探究到底,只是當某個事物是喜愛的、想賴以維生的,或者是兩者綜合,因為以為喜歡某個事物,因而想要進一步賴以維生,這個時候就不能只靠個模 糊結論來搪塞下去了。

你拿起這本書,表示選擇了 Java 這門程式設計語言,為什麼呢?因為 Java 可以寫程式,可以寫程式的語言很多啊!因為可以寫手機 App?那為什麼不選 Objective-C 或 Swift 呢?因為聽說業界很缺?喔!缺的是哪個工作性質的職位?手機…好吧!再問下去,可能有人只是被說服參加了三個月的 App 補習課程,只好硬著頭皮繼續洗下去了…

Java 本身是門程式設計語言,本身就有設計的成份在裏頭,基於物件導向典範,後來有了一些函數式典範的影子,Java 不是門簡潔的語言,然而為了解決這方面問題,近來在語言設計上有了不少簡化語法,由於整個世界把 Java 用在許多層面,Java 面對了為模組化制訂標準的需求…

然而解決問題並不會只靠程式語言,面對不同的問題,會需要設計各種流程、會有不同的資料結構設計,對於更複雜的問題,得靠更有效率的演算法,當專案有 一定規模,有彈性的架構設計是必要的,為了掌握程式的行為,就得設計可測試的程式,想要避免被入侵,必須將安全上的設計納入考量,當龐大的數據迎面而 來,平行化方案的設計可能就得出現了…

設計是用來解決問題的!你喜歡或討厭一種設計,代表它在解決問題上是否順你的心、得你的意,從而認定一個設計是否優雅。

既然已經選擇了 Java,那表示你得接受它的設計了,那麼接下來的問題,就在於怎麼使用 Java 來表達你的設計了,不過,這也得真的有能夠表達的設計,你有能表達的演算法設計嗎?資料結構設計?測試上的設計?架構上的設計?安全上的設計?平行處理的設計?…

過去、現在或未來,你寫的程式中,真的有「設計」的成份在嗎?

2017.11