作為你的第一門語言,初學(xué)Java時是什么感受?
2018年新年剛過,有好幾個人在微信和QQ上向我訴苦:迷茫了,Java學(xué)不下去了。
我問:“為什么學(xué)不下去啊?”
答曰:“那么多細(xì)節(jié)的東西,我根本記不住,看完就忘。”
“除此之外呢?”
“關(guān)鍵是不知道學(xué)這些東西有什么用處?慢慢地就不想學(xué)了。”
這一點我是深有感觸,雖然我的初戀語言是C。
剛開始學(xué)習(xí)的時候熱情萬丈,持續(xù)不了幾天就慢慢退去。
作為技術(shù)書籍或者視頻,講解一門語言的時候都是從***層開始講解(廢話,不從***層開始講我還聽不懂吶!), 底層的基礎(chǔ)有哪些呢?
首先是整個Hello World, 讓我們對這門語言先混個臉熟,知道程序的基本結(jié)構(gòu),順帶著還會說一下注釋是什么樣子。
然后就會進(jìn)入數(shù)據(jù)類型,什么int , float ,double ,char,他們都是幾個字節(jié)啊? 取值范圍是多少? Unicode是怎么回事? 哪些數(shù)值之間可以自動轉(zhuǎn)換?哪些需要強制轉(zhuǎn)型?細(xì)節(jié)很多很煩人。
接下來就是運算符,加減乘除,與或非,大于等于小于,自增自減,優(yōu)先級等等。
對Java來說,有可能還會單獨把String 列舉出來講解,這又會涉及到各種各樣、亂七八糟的輸出格式。
不管是看視頻還是看書,或者視頻+書, 我估計大部分人都能耐著性子學(xué)到這里,畢竟學(xué)習(xí)的熱情還在。
接著流程控制就會登場,if else, while, for , do while, switch ... 看完了這些,終于可以寫一點小程序了。比如說輸出乘法口訣表,猜數(shù)游戲,再比如說從控制臺輸入一個學(xué)生成績,然后判斷是優(yōu)/良/差......
對了,還有數(shù)組,一維數(shù)組,二維數(shù)組......
如果你是利用業(yè)余時間自學(xué),學(xué)到這里估計一周甚至兩周都過去了。
學(xué)得快的有可能進(jìn)入到面向?qū)ο缶幊蹋庋b、繼承、多態(tài),搞清楚怎么創(chuàng)建對象的, private,protected,public ,default的區(qū)別(很多書或視頻還會貼心地總結(jié)一個表格)。弄明白父類子類之間的關(guān)系,簡約而不簡單的多態(tài)--雖然還不能確切知道它有什么用處。
對于Java,還會提到接口和內(nèi)部類,equals, hashcode,toString等方法,自動拆箱和裝箱、枚舉。
初學(xué)編程的人學(xué)到這里,估計就會懷疑人生了:這到底是什么鬼?!我學(xué)了這么多,到底有什么用?我好像還是不能寫個網(wǎng)站/開發(fā)個App/寫個游戲.... 還有,我之前學(xué)的東西好像忘了很多啊?!
抬頭瞧瞧,前面還有什么集合框架、線程、反射、IO、泛型、網(wǎng)絡(luò)等一座座高山,這還只是基礎(chǔ)的Java SE,低頭看看,自己剛剛趟過幾條小河,頓時熱情盡失,放棄吧!
不知道在培訓(xùn)班學(xué)習(xí)的同學(xué)是什么感受,整天都在一個教室中面對這些“無聊”的細(xì)節(jié),滋味也不大好受吧。
只有那些自制力強的同學(xué)才能突破Java SE的層層封堵,繼續(xù)前行,進(jìn)入到下一戰(zhàn)場。
我經(jīng)常說軟件編程是個處理細(xì)節(jié)的行業(yè),學(xué)習(xí)的過程是個螺旋上升的過程,在學(xué)習(xí)過程中不可能迅速地把所有的東西都掌握,需要反復(fù)回頭看,查缺補漏。
話雖這么說,但是初次學(xué)習(xí)編程,會發(fā)現(xiàn)細(xì)節(jié)太多,不知道學(xué)了后有什么用,讓人深感挫敗。
相比而言,前端似乎好一點,學(xué)習(xí)的時候是所見即所得,立刻在瀏覽器中看到效果,很直觀,很有成就感。
所以我這里提個思路,供大家參考:
對初學(xué)Java的同學(xué), 學(xué)習(xí)的時候可以輕裝上陣,抓住主干,不糾纏細(xì)節(jié),快速推進(jìn)到可以開始真正的項目編程(例如Web系統(tǒng),Android App)的地步,這些項目不用特別復(fù)雜,簡單的小系統(tǒng)就可以。
通過做項目,能夠看到全局,明白自己所學(xué)知識的實際應(yīng)用,還可以看到實際運轉(zhuǎn)的系統(tǒng),會獲得成就感,這是個很重要的正反饋,能夠激勵你繼續(xù)學(xué)習(xí)下去,不至于從入門到放棄。
在做項目的過程中,由于掌握得不全面,會磕磕碰碰,需要頻繁地查資料,查漏補缺,進(jìn)展會比較緩慢,但是有個目標(biāo)在前邊招手,不至于讓你迷茫。
當(dāng)你的代碼寫得多了,常用的API自然記住了,根本不會忘。
那所謂的Java SE的主干是哪些呢? 我這里列舉下我個人認(rèn)為編程中最常用的一些功能點,實際項目需要的最小集合可能比這個大,但是應(yīng)該不會比這個更小了。
數(shù)據(jù)類型: int , boolean , String。
流程控制: if else, for , while。
集合框架: List ,ArrayList, HashMap。
面向?qū)ο螅侯惖亩x,理解封裝、繼承、多態(tài)。
泛型:理解為什么有泛型,基本的用法(插播廣告,可以看看老劉寫的《Java帝國之泛型》)
線程:能夠自己寫簡單的多線程并發(fā)程序,理解加鎖, 線程的狀態(tài)轉(zhuǎn)換。(再次插播廣告,參見《我是一個線程》)
IO : 能夠自己寫程序讀取XML文件和屬性文件。
反射: 能夠通過反射方式讀取類的字段、方法、執(zhí)行一個方法。
其實我啰嗦這么多,估計還沒有一句口號管用:學(xué)習(xí)Java苦不苦,想想月薪兩萬五。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號coderising獲取授權(quán)】