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