Java已經不僅僅是一種語言,更多時候是一種“環境”和“生態鏈”,這也導致了很多初學者,會發現Java類的書籍浩如煙海,從而變得無所適從。
顯然的,學習透過Java如何來開發一個Android應用,和學習如何來完成一個基於Java的伺服器端的業務處理,是根本不同的兩件事情。
所以,學習Java,第一要做的事情,就是想清楚:
當然,如果你問我的意見,那麼,我建議如果你沒有其他的特別的目標,那麼從控制檯應用的開發入手,還是最合適的,原因無他,相對更為複雜的伺服器端和Android應用端等方面的程式設計而言,控制檯應用所需要的其他背景知識,基本等於0,相關的部署和測試環境也極易搭建,非常有利於初學者的學習。
至於在開發IDE方面,我則推薦使用VS Code,只需要簡單的在其下安裝微軟VS Code針對Java程式設計所開發的核心外掛Java Extension Pack,就可以開始愉快的進行相關的程式設計學習和實踐了。
在確定了相應的生態鏈後,下面要規劃的,就是所學習的內容了。一口吃不成一個胖子,這個道理,到哪裡都適用,在軟體程式設計領域尤是,今天入門,明天大師的奇蹟,不會發生在你身上。
回到Java的程式設計,對於初學者而言,首當其衝的,自然就是Java的語法,在這裡,我個人建議的兩個基本學習原則是:
甚至是如果你有在其他語言方面的充足的程式設計經驗的話,很多方面略過都行。如果沒有,則應該去儘可能的找一個寫的最簡單的教程,或者寫的最簡單的書來讀。
這方面,其實好的書/教程不多,基本上,大部分書,也許是真心為了讀者好,也或者是有他們自己的想法,或多或少的夾帶了一些私貨,這裡循例的介紹兩本,應該說寫的都還算簡潔。
《像計算機科學家一樣思考Java》
原書本身為開源模式,圖靈上有一個基於2008版本所翻譯的中文版,如果你英文基礎較好,直接看最新的英文版也行,否則,看這個中文版也可以,其實差別不大,英文版的名字叫:《Think Java: How to Think Like a Computer Scientist》
全書適合沒有任何程式設計經驗的人來閱讀,當然,整個語法體系比較老舊,但還是很適合初學者入門Java語法的。
《寫給大忙人看的Java SE8》
如果你有在其他語言下開發的經驗,那麼,這本書我覺得最適合你了,沒有多餘的廢話,直接從lambda程式設計入手,讓你快速的可以跟上當前Java在語言層面的一些最新進展。
當然,結合你自己的“生態鏈”,有些章節你也可以選擇性無視,比如:講JavaFx的一章。
另外,實際上,作者Cay S. Horstmann寫了一系列的以《寫給大忙人...》為特色的Java書籍,很多都值得看,但這本的確是其中最“精簡”的一本。
在整個語法學習期,我的第二個建議,就是這4個字:不求甚解!Java支援很多的程式設計正規化,即便就算是OOP,對於初學者而言,可能其中的一些部分,像多介面繼承等,並不是那麼容易一下子就理解的,這時候,怎麼辦?
略過去就好!
這些東西,在你後期的程式設計開發過程中,有的是時間去打磨和理解,對於初學者,很多語言上的現象,你有那麼一個基本的印象就行了。
隨便的舉一個例子,比如說,對於像控制檯(console)那樣的應用,Java總是暴露了一個public static模式的main函式作為入口函式,那麼,為什麼一定要是static的?能不能不用main?當不用main時,在不同版本的JDK下表現是否相同?以及在Java的其他應用,比如Android軟體開發中,為什麼又找不到這樣的一個main了?
等等等等,如果你深究下去,那麼,我相信,這些細節,是最終會讓如初學者你奔潰的。
相反,如果你不問為什麼,僅僅將這些,就當作一種特別的“在某種應用場合下的規範”來吸收,其實會更加有利於你去更為快速準確的建立起整個語言系統來。
程式設計學習需要大量的練習,這是一個毋庸置疑的事情,但寫什麼,卻是很多初學者非常疑惑的地方。還是如我開始所寫的,因為Java早已不是一種純粹的語言,因此,大部分實際的應用,對於初學Java的人來說,構建相關的生態鏈的過程,甚至其難度並不比語言來的小。
比如,光光是一個專案構建工具,Ant/Maven/Gradle,就各擅其長,足夠讓初學者感到頭大和無所適從,這些是Java學習中必須要學的麼?
如果你問我,那我的回答是:是,因為這一切都是在整個工程量變得巨大,構建本身成為了一個問題後,整個業界所給出來的答案,並且也成為了業界的標準。
但是,這裡要說但是,初學者其實根本感受不到這些,因此,即便他們費心勞力的學習了這些,也不見得能夠記住和用上多少。
因此,對於初學者而言,當你完成了基本的語法訓練後,我的建議是:
不要急於跳入到這些具體工程工具和類庫的泥淖之中,而是應該繼續進行一些小型的“程式碼”級別的閱讀和練習,來鞏固自己在純Java語言方面的基礎。
特別的,我覺得如果可能,應該嘗試著去閱讀一些程式碼量不大的專案,在理清這些程式碼的核心功能實現之餘,適當做些筆記,將程式碼中一些優秀的部分摘錄出來,反覆的賞玩,其實是提高自己程式設計能力的最佳捷徑。
畢竟,別忘了:
計算機語言也是語言
Java已經不僅僅是一種語言,更多時候是一種“環境”和“生態鏈”,這也導致了很多初學者,會發現Java類的書籍浩如煙海,從而變得無所適從。
顯然的,學習透過Java如何來開發一個Android應用,和學習如何來完成一個基於Java的伺服器端的業務處理,是根本不同的兩件事情。
所以,學習Java,第一要做的事情,就是想清楚:
從哪個生態鏈入手當然,如果你問我的意見,那麼,我建議如果你沒有其他的特別的目標,那麼從控制檯應用的開發入手,還是最合適的,原因無他,相對更為複雜的伺服器端和Android應用端等方面的程式設計而言,控制檯應用所需要的其他背景知識,基本等於0,相關的部署和測試環境也極易搭建,非常有利於初學者的學習。
至於在開發IDE方面,我則推薦使用VS Code,只需要簡單的在其下安裝微軟VS Code針對Java程式設計所開發的核心外掛Java Extension Pack,就可以開始愉快的進行相關的程式設計學習和實踐了。
語法怎麼學在確定了相應的生態鏈後,下面要規劃的,就是所學習的內容了。一口吃不成一個胖子,這個道理,到哪裡都適用,在軟體程式設計領域尤是,今天入門,明天大師的奇蹟,不會發生在你身上。
回到Java的程式設計,對於初學者而言,首當其衝的,自然就是Java的語法,在這裡,我個人建議的兩個基本學習原則是:
(1)越粗線條越好甚至是如果你有在其他語言方面的充足的程式設計經驗的話,很多方面略過都行。如果沒有,則應該去儘可能的找一個寫的最簡單的教程,或者寫的最簡單的書來讀。
這方面,其實好的書/教程不多,基本上,大部分書,也許是真心為了讀者好,也或者是有他們自己的想法,或多或少的夾帶了一些私貨,這裡循例的介紹兩本,應該說寫的都還算簡潔。
《像計算機科學家一樣思考Java》
原書本身為開源模式,圖靈上有一個基於2008版本所翻譯的中文版,如果你英文基礎較好,直接看最新的英文版也行,否則,看這個中文版也可以,其實差別不大,英文版的名字叫:《Think Java: How to Think Like a Computer Scientist》
全書適合沒有任何程式設計經驗的人來閱讀,當然,整個語法體系比較老舊,但還是很適合初學者入門Java語法的。
《寫給大忙人看的Java SE8》
如果你有在其他語言下開發的經驗,那麼,這本書我覺得最適合你了,沒有多餘的廢話,直接從lambda程式設計入手,讓你快速的可以跟上當前Java在語言層面的一些最新進展。
當然,結合你自己的“生態鏈”,有些章節你也可以選擇性無視,比如:講JavaFx的一章。
另外,實際上,作者Cay S. Horstmann寫了一系列的以《寫給大忙人...》為特色的Java書籍,很多都值得看,但這本的確是其中最“精簡”的一本。
(2)不求甚解:少問為什麼,多想怎麼用在整個語法學習期,我的第二個建議,就是這4個字:不求甚解!Java支援很多的程式設計正規化,即便就算是OOP,對於初學者而言,可能其中的一些部分,像多介面繼承等,並不是那麼容易一下子就理解的,這時候,怎麼辦?
略過去就好!
這些東西,在你後期的程式設計開發過程中,有的是時間去打磨和理解,對於初學者,很多語言上的現象,你有那麼一個基本的印象就行了。
隨便的舉一個例子,比如說,對於像控制檯(console)那樣的應用,Java總是暴露了一個public static模式的main函式作為入口函式,那麼,為什麼一定要是static的?能不能不用main?當不用main時,在不同版本的JDK下表現是否相同?以及在Java的其他應用,比如Android軟體開發中,為什麼又找不到這樣的一個main了?
等等等等,如果你深究下去,那麼,我相信,這些細節,是最終會讓如初學者你奔潰的。
相反,如果你不問為什麼,僅僅將這些,就當作一種特別的“在某種應用場合下的規範”來吸收,其實會更加有利於你去更為快速準確的建立起整個語言系統來。
不要急著寫“大型”系統程式設計學習需要大量的練習,這是一個毋庸置疑的事情,但寫什麼,卻是很多初學者非常疑惑的地方。還是如我開始所寫的,因為Java早已不是一種純粹的語言,因此,大部分實際的應用,對於初學Java的人來說,構建相關的生態鏈的過程,甚至其難度並不比語言來的小。
比如,光光是一個專案構建工具,Ant/Maven/Gradle,就各擅其長,足夠讓初學者感到頭大和無所適從,這些是Java學習中必須要學的麼?
如果你問我,那我的回答是:是,因為這一切都是在整個工程量變得巨大,構建本身成為了一個問題後,整個業界所給出來的答案,並且也成為了業界的標準。
但是,這裡要說但是,初學者其實根本感受不到這些,因此,即便他們費心勞力的學習了這些,也不見得能夠記住和用上多少。
因此,對於初學者而言,當你完成了基本的語法訓練後,我的建議是:
不要急於跳入到這些具體工程工具和類庫的泥淖之中,而是應該繼續進行一些小型的“程式碼”級別的閱讀和練習,來鞏固自己在純Java語言方面的基礎。
特別的,我覺得如果可能,應該嘗試著去閱讀一些程式碼量不大的專案,在理清這些程式碼的核心功能實現之餘,適當做些筆記,將程式碼中一些優秀的部分摘錄出來,反覆的賞玩,其實是提高自己程式設計能力的最佳捷徑。
畢竟,別忘了:
計算機語言也是語言