自學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語言方面的基礎。
特別的,我覺得如果可能,應該嘗試著去閱讀一些代碼量不大的項目,在理清這些代碼的核心功能實現之余,適當做些筆記,將代碼中一些優秀的部分摘錄出來,反復的賞玩,其實是提高自己編程能力的最佳捷徑。
畢竟,別忘了:
計算機語言也是語言
因此,在文學作品賞讀中的相關方法,用在計算機語言學習上,也是合適的。這方面,網絡上的資源不少,但講解這些代碼的人不多,我倒是有心,今后在工作之余,對此進行一些相關的整理,希望可以對初學者有所幫助吧。