1. 程式人生 > >Java的核心目的是“為程式設計師減少複雜性”

Java的核心目的是“為程式設計師減少複雜性”

最近在讀胡適先生(毛主席的評價是——說實在話,新文化運動他是有功的,不能一筆抹殺,應當實事求是。到了二十一世紀,那時候,替他恢復名譽吧)的《胡適文選》;其中一篇《問題和主義》中有這樣一句,“多研究些問題,少談些主義”。對我而言,就是“多學習學習應該掌握的IT技術,別整天琢磨怎麼‘知識變現’”。

最近一段時間,我一直在思考怎麼“知識變現”,我也希望自己像那些成功打造了自己品牌的前輩們(比如安曉輝、鴻祥、純潔的微笑)一樣,通過在Chat上開設課程,或者在知乎上開設Live來掙些錢。但我忽略了一點,這些成功的前輩們,早已通過部落格積攢了大量的粉絲群,他們被我們這些崇拜者尊稱為“大神”,而我顯然不夠格。

於是,我想,不如靜下心來,重新讀一些經典的IT技術書。從哪一本開始呢?想了一想,還是《Java程式設計思想》吧!畢竟本書贏得了全球程式設計師的廣泛讚譽,從Java的基礎語法到最高階特性,本書都能指導我們輕鬆掌握。

記得上大學(2008年)那會,就花大價錢買了一本影印版的《Java程式設計思想》,但由於初學Java,自己又對程式設計缺乏耐心,那時候看這本書,多多少少有一種看天書的感覺。後來,去蘇州參加工作時也帶了過去,但仍然沒有心思去細緻讀這本書。2014年回洛陽的時候將這本書送給了一位同事——物盡其用吧,跟著我是浪費青春啊。2016年,我又重新買了這本書,我以為我會深入的瞭解它。但事與願違,看了幾章後,它還是落寞的躺在書架上積灰了。現在,我重新捧起這本書來讀,好像有一種如釋重負的感覺。

好了,這一篇部落格,就從《Java程式設計思想》的“前言”篇開始吧。為什麼要從“前言”開始呢?《略讀指導舉隅》一書中曾說過,“讀一本書,最好能從前言、序言開始。如果是作者自己寫的,那麼,這裡面濃縮了作者對於本書最精華的總結。”恰好,這篇“前言”就是作者Bruce Eckel(MindView公司總裁,總裁能寫出這麼細緻的書,實在是厲害啊)自己寫的。

前言裡面,哪些是值得我們記住的呢?

第一,Java的核心目的是“為程式設計師減少複雜性”。用Sun(1995年開發了Java)的原話是:“我們關心的是,減少開發健壯程式碼所需的時間和困難”。儘管這個目標導致Java的執行效率偏慢,但與用C++開發相同的程式相比,Java只需要一半甚至更少的時間。作為程式設計師來說,這是我們最喜聞樂見的,不是嗎?省下來的那一部分時間,還可以約女朋友去看場電影,對吧?況且,Java的版本一直在更新,效能也不斷地被優化。

記得上大學那會,我們計算機網路專業只有兩個班級,一個班級學Java,另外一個班級學C++(當時C++更受歡迎)。大學上完後,當初學C++的同學幾乎都轉了行(據他們說是C++的指標太飄忽不定了,難學難懂難掌握),而我們學Java的,至少還有十幾個留在IT行業奮鬥,現在的狀況都還不錯。這在一定程度上,也能夠佐證“Java的確是在為程式設計師減少複雜性”。

第二,併發(現在稱多執行緒)確實很難。因為就連作者都深陷“併發”的泥潭,但經過“數月的努力,還是走了出來”。所以,我們學習Java的人也沒必要對併發喪失信心。

併發是什麼呢?通常情況下,併發是指“系統能夠同時並行處理很多請求”。大家都走過紅綠燈路口,是吧?假如是單車道,那麼一次就只能通過一輛車,後面的車依次通過,這個紅綠燈路口就不支援併發;假如是兩車道,那麼一次就能通過兩輛車,這個紅綠燈路口就支援併發。

併發常用的一些指標有:

  • 響應時間(Response Time):系統對請求做出的響應時間。例如,一輛車通過紅綠燈路口需要的時間為3秒,那麼3秒就是響應時間。

  • 吞吐量(Throughput):單位時間內處理的請求數量。最明顯的例子就是高速通道上的ETC和普通車道,顯然ETC的吞吐量更大,因為不需要在進站的時候從視窗取卡,在出站的時候還卡繳費。

  • 併發使用者數:同時承載正常使用系統功能的使用者數量。例如,三車道一次可以通過三輛車,兩車道一次可以通過一輛車。

那麼,如何提升系統的併發能力呢?

1)提升單機硬體配置。比如說增加CPU核數(從2個到4個,從4個到8個),升級網絡卡到萬兆,升級硬碟為SSD(固態硬碟,比普通硬碟讀寫更快、質量更輕、能耗更低、體積更小,但只有一個缺點就是更貴),擴充系統記憶體(從64G到128G);

2)改善單機架構配置。比如使用記憶體讀寫而不是每次都讀寫資料庫;

3)增加伺服器數量。單機效能總是有極限的,但伺服器數量可以很龐大。

第三,章節沒必要包含一個“足夠大”的主題。就我個人而言,一天讀十頁書恰到好處,假如超出十頁書,後面的讀起來就會非常痛苦;就好像一篇文章,字數超過2000個,我讀起來就很吃力;或者說,超出2000字的部分我會選擇性忽略。

以上,就是我對《Java程式設計思想》前言篇的總結,希望這些文字對你在學習Java的道路上有所幫助。