讀古今文學網 > 編寫高質量代碼:改善Java程序的151個建議 > 前言 >

前言

從決定撰寫本書到完稿歷時9個月,期間曾經遇到過種種困難和挫折,但這個過程讓我明白了堅持的意義,明白了「行百里者半九十」的寓意——堅持下去,終於到了寫前言的時刻。

為什麼寫這本書

從第一次敲出\"Hello World\"到現在已經有15年時間了,在這15年裡,我當過程序員和架構師,也擔任過項目經理和技術顧問——基本上與技術沾邊的事情都做過。從第一次接觸Java到現在,已經有11年4個月了,在這些年裡,我對Java可謂是情有獨鍾,對其編程思想、開源產品、商業產品、趣聞軼事、風流人物等都有所瞭解和研究。對於Java,我非常感激,從物質上來說,它給了我工作,幫助我養家餬口;從精神上來說,它帶給我無數的喜悅、困惑、痛苦和無奈——一如我們的生活。

我不是技術高手,只是技術領域的一個拓荒者,我希望能把自己的知識和經驗貢獻出來,以饗讀者。在寫作的過程中,我也反覆地思考:我為誰而寫這本書?為什麼要寫?

希望本書能幫您少走彎路

您是否曾經為了提供一個\"One Line\"的解決方案而徹夜地查看源代碼?現在您不用了。

您是否曾經為了理解某個算法而冥思苦想、閱覽群書?現在您不用了。

您是否曾經為了提升0.1秒的性能而對N種實現方案進行嚴格測試和對比?現在您不用了。

您是否曾經為了避免多線程死鎖問題而遍尋高手共同診治?現在您不用了。

……

在學習和使用Java的過程中您是否在原本可以很快掌握或解決的問題上耗費了大量的時間和精力?也許您現在不用了,本書的很多內容都是我用曾經付出的代價換來的,希望它能幫助您少走彎路!

希望本書能幫您打牢基礎

那些所謂的架構師、設計師、項目經理、分析師們,已經有多長時間沒有寫過代碼了?代碼是一切的基石,我不太信任連\"Hello World\"都沒有寫過的架構師。看看我們軟件界的先輩們吧,Dennis M.Ritchie決定創造一門「看上去很好」的語言時,如果只是站在高處吶喊,這門語言是劃時代的,它有多麼優秀,但不去實現,又有何用呢?沒有Dennis M.Ritchie的親自編碼實現,C語言不可能誕生,UNIX操作系統也不可能誕生。Linux在聚攏成千上萬的開源狂熱者對它進行開發和擴展之前,如果沒有Linus的編碼實現,僅憑他高聲吶喊「我要創造一個劃時代的操作系統」,有用嗎?一切的一切都是以編碼實現為前提的,代碼是我們前進的基石。

這是一個英雄輩出的年代,我們每個人都希望自己被頂禮膜拜,可是這需要資本和實力,而我們的實力體現了我們處理技術問題的能力:

你能寫出簡單、清晰、高效的代碼?——Show it!

你能架構一個穩定、健壯、快捷的系統?——Do it!

你能回答一個困擾N多人的問題?——Answer it!

你能修復一個系統Bug?——Fix it!

你非常熟悉某個開源產品?——Broadcast it!

你能提升系統性能?——Tune it!

……

但是,「工欲善其事,必先利其器」,在「善其事」之前,先看看我們的「器」是否已經磨得足夠鋒利了,是否能夠在我們前進的路上披荊斬棘。無論您將來的職業發展方向是架構師、設計師、分析師、管理者,還是其他職位,只要您還與軟件打交道,您就有必要打好技術基礎。本書對核心的Java編程技術進行了凝練,如果能全部理解並付諸實踐,您的基礎一定會更加牢固。

希望本書能幫您打造一支技術戰鬥力強的團隊

在您的團隊中是否出現過以下現象:

沒有人願意聽一場關於編碼奧秘的講座,他們覺得這是浪費時間;

沒有人願意去思考和探究一個算法,他們覺得這實在是多餘,Google完全可以解決;

沒有人願意主動重構一段代碼,他們覺得新任務已經堆積成山了,「沒有壞,就不要去修它」;

沒有人願意格式化一下代碼,即便只需要按一下【Ctrl+Shift+F】快捷鍵,他們覺得代碼寫完就完了,何必再去溫習;

沒有人願意花時間去深究一下開源框架,他們覺得夠用就好;

……

一支有實力的軟件研發團隊是建立在技術的基礎之上的,團隊成員之間需要經常地互相交流和切磋,尤其是基於可辨別、可理解的編碼問題。不可否認,概念和思想也很重要,但我更看重基於代碼的交流,因為代碼不會說謊,比如SOA,10個人至少會有5個答案,但代碼就不同了,同樣的代碼,結果只有一個,要麼是錯的,要麼是對的,這才是一個技術團隊應該有的氛圍。本書中提出的這些問題絕大部分可能都是您的團隊成員在日常的開發中會遇到的,我針對這些問題給出的建議不是唯一的解決方案,也許您的團隊在討論這一個個問題的時候能有更好的解決辦法。希望通過對本書中的這些問題的爭辯、討論和實踐能全面提升每一位團隊成員的技術實力,從而增強整個團隊的戰鬥力!

本書特色

深。本書不是一本語法書,它不會教您怎麼編寫Java代碼,但是它會告訴您,為什麼StringBuilder會比String類效率高,HashMap的自增是如何實現的,為什麼並行計算一般都是從Executors開始的……不僅僅告訴您How(怎麼做),而且還告訴您Why(為什麼要這樣做)。

廣。涉及面廣,從編碼規則到編程思想,從基本語法到系統框架,從JDK API到開源產品,全部都有涉獵,而且所有的建議都不是紙上談兵,都與真實的場景相結合。

點。講解一個知識點,而不是一個知識面,比如多線程,這裡不提供多線程的解決方案,而是告訴您如何安全地停止一個線程,如何設置多線程關卡,什麼時候該用lock,什麼時候該用synchronize,等等。

精。簡明扼要,直搗黃龍,一個建議就是對一個問題的解釋和說明,以及提出相關的解決方案,不拖泥帶水,只針對一個知識點進行講解。

暢。本書延續了我一貫的寫作風格,行雲流水,娓娓道來,每次想好了一個主題後,都會先打一個腹稿,思考如何講才能更流暢。本書不是一本很無趣的書,我一直想把它寫得生動和優雅,但Code就是Code,很多時候容不得深加工,最直接也就是最簡潔的。

這是一本建議書,想想看,在您寫代碼的時候,有這樣一本書籍在您的手邊,告訴您如何才能編寫出優雅而高效的代碼,那將是一件多麼愜意的事情啊!

本書面向的讀者

尋找\"One Line\"(一行)解決方案的編碼人員。

希望提升自己編碼能力的程序員。

期望能夠在開源世界仗劍而行的有志之士。

對編碼癡情的人。

總之,只要還在Java圈子裡混就有必要閱讀本書,不管是程序員、測試人員、分析師、架構師,還是項目經理,都有必要。

如何閱讀本書

首先聲明,本書不是面向初級Java程序員的,在閱讀本書之前至少要對基本的Java語法有初步瞭解,最好是參與過幾個項目,寫過一些代碼,具備了這些條件,閱讀本書才會有更大的收穫,才會覺得是一種享受。

本書的各個章節和各個建議都是相對獨立的,所以,您可以從任何章節的任何建議開始閱讀。強烈建議您將它放在辦公桌旁,遇到問題時隨手翻閱。

本書附帶有大量的源碼(下載地址見華章網站www.hzbook.com),建議大家在閱讀本書時拷貝書中的示例代碼,放到自己的收藏夾中,以備需要時使用。

勘誤與支持

首先,我要為書中可能出現的錯別字、多意句、歧義句、代碼缺陷等錯誤向您真誠地道歉。雖然楊福川、楊繡國兩位編輯和我都為此書付出了非常大的努力,但可能還是會有一些瑕疵,如果你在閱讀本書時發現錯誤或有問題想一起討論,請發郵件([email protected])給我,我會盡快給您回復。

本書的所有勘誤,我都會發表在我的個人博客(http://cbf4life.iteye.com/)上。

致謝

首先,感謝楊福川和楊繡國兩位編輯,在他們的編審下,本書才有了一個質的飛躍,沒有他們的計劃和安排,本書不可能出版。

其次,感謝家人的支持,為了寫這本書,用盡了全部的休息時間,很少有時間陪伴父母和妻兒,甚至連吃一頓團圓飯都成了奢望,他們的大力支持讓我信心滿懷、幹勁十足。兒子已經6歲了,明白騎在爸爸身上是對爸爸的折磨,也知道玩具是可以從網上買到的,「爸爸,給我買一個變形金剛……你在網上查呀……今天一定要買……」兒子在不知不覺中長大了。

再次,感謝交通銀行「531」工程的所有領導和同事,是他們讓我在這樣超大規模的工程中學習和成長,使自己的技術和技能有了長足的進步;感謝我的領導李海寧總經理和周雲康高級經理,他們時時迸發出的閃光智慧讓我受益匪淺;感謝軟件開發中心所有同仁對我的幫助和鼓勵!

最後,感謝我的朋友王驄,他無償地把鑰匙給我,讓我有一個安靜的地方思考和寫作,有這樣的朋友,人生無憾!

當然,還要感謝您,感謝您對本書的關注。

再次對本書中可能出現的錯誤表示歉意,真誠地接受大家的「轟炸」!

秦小波

2011年8月於上海