自學java需要規避哪些坑?
哈哈,關于學習Java是多年前的事了,不過事情我現在想起還是記憶猶新,我以前也有過這樣的困惑,因為當時是一家公司的IT負責人,司業務需要進行一些大數據類的開發,但之前整個團隊都有沒有這方面的開發經驗,團隊成員人也只會寫一些shell和Python之類的腳本,并且他們都比我忙,所以決定自己來,我學這個的時候35歲,如果你年紀比我小的話,那恭喜你你一定會學的比我好,我也經歷蠻多曲折,分享出來給你參考,不見得一定適合每個人,但可以作為一家之言參考參考。
用一句話說,我認為比較有效的學習方法是盡快找一個業務相關的(沒有就想一個)簡單的小項目馬上著手去做,不要等基礎全學完了再開始。
我的過程是這樣,一開始也是非常迷茫,沒有頭緒,找了很多這方面的朋友(很有經驗的高手)請教,他們的答案如出一轍,就是讓我看《Javahttps://www.52fb.cn思想》,并且有三個兄弟都從他的書柜了拿出那本《Javahttps://www.52fb.cn思想》第四版然后嘴巴吹一吹上面的灰,讓我拿回家看,我確實也看了,但痛苦就從此開始了,這本書足足用完了我兩個月的業余時間,終于有一天看完了,合上書,閉上眼睛想一下,我記住什么了嗎?結果發現除了 String str = "Hello World"和System.out.println(str) 之外,好像其他的什么都沒記住。不說大數據開發了,到那一刻為止我連如何讀取一個文件都記不住,也許是我年紀大了記性差的緣故,也許是我天賦不夠異稟,但是無論如何我發現這個方法不適合我,我不適合強記一些沒有邏輯的符號,所以我決定換一種方式。
第二天上班,我把那本朋友送我的《Javahttps://www.52fb.cn思想》帶在身上,到辦公室就開始找一個小項目開始做,第一個小項目是改寫我原來用shell寫的一個服務器系統記錄文件(log) error信息檢查過濾的小小應用,邏輯非常簡單,就是把公司的服務器每天產生的logs文件一行行讀出來,過濾出里面有沒有包含error這個關鍵字,有的話就把這行過濾出來然后把附帶的一些信息比如服務器的IP地址和主機名也一起讀出來,我就能知道那臺服務器產生了錯誤信息,讓維護的小伙伴去看看發生了什么事情,是否嚴重,是否需要馬上處理,就是這樣簡單的業務邏輯。
這個小應用雖然簡單,但是他讓我真正開始學會了一些基本有用的東西,比如:
第一,開發工具是什么,因為記性不好,我需要有代碼提示的開發工具,比如IntelliJ IDEA 就很適合我,打代碼的時候輸入首字母就會出提示,完美。
第二,如何用Java打開一個文件流按行讀取信息,這個時候你就要學到IO流的API,這個時候你就要關注Java的IO流有哪些?什么是字符流什么是字節流,他們適合怎樣的用途,如何創建一個IO流的對象等,其實這些在《Javahttps://www.52fb.cn思想》里面都有,但看書就是記不住,可一旦你通過查資料把它用到項目中馬上就記住了,比如怎么區分字節流和字符流的呢?你使用的過程中查看API的時候你一定會發現FileInputStream,FileReader,FileOutputStream,FileWriter他們都是用來創建輸入輸出流的,用哪個好呢?查一下書你就發現,帶有Reader和Writer的就是字符流,其它的就是字節流,字節流可以讀寫一切格式的文件,但字符流只能讀取文本文件(簡單說就是記事本能打開不亂碼的文件),這些如果你只是從書上看了,看十遍也會在兩個小時內忘掉。
第三,你要查找不同的目錄,所以你可能要用到遞歸,第一次寫遞歸,你多半會寫一個死遞歸出來,然后摸摸鼻子繼續查資料,哦原來沒有設定出口條件,好這問題解決了,我的遞歸終于可以把目錄和子目錄下的文件全部都讀出來了,好嗨喲~ 感覺人生到達了高潮,你會試著讓你的遞歸去查找一個很深的目錄,里面有很多層文件夾,然后你發現內存溢出了,瞬間又回到了現實,抓抓頭發又查資料,哦原來遞歸次數不能太多,它不能上天跟太陽肩并肩的,好,到這我學了遞歸的用法。
第四,在這個小應用里面你還會用到異常處理 try ... catch,應為你要打開文件流,可能會出現異常,所以就要異常處理,查書,查資料,上網搜..... 但無論如何你不會覺得無聊,你會快速的得到答案并且解決你的問題,會覺得興奮并且有成就感,感覺你能開掛似的。
當然,還有很多別的事可以碰到.....
然后你終于寫完了,在開發工具上運行也沒問題了,你才突然意識到,怎么讓它在服務器上運行啊?然后你又學會怎么打jar包,怎么讓它在服務器上運行,然后提交到服務器上,你又發現服務器上根本沒裝java運行環境,接著你就學會怎樣配置Java運行環境 ......,然后你的小應用終于跑起來了,也運行正常了,也得到了你想要的結果,繼續嗨,把兄弟都叫過來,跟他們show一下你的作品,大家都看得眼睛閃閃的時候突然有個兄弟說:“老大,我剛剛偷偷的往你那個logs目錄下方了一堆含有error關鍵字的中文文件,我咋沒看到你的console上面有打印出來呢?”,我!......這孩子真會聊天 .......哎!
但他說錯了嗎?沒錯啊,這確實是個大問題啊,這很明顯這個應用沒有對目錄下的文件進行實時監控,這程序到現在為止根本不能用,當然你可以做個腳本定時執行,但每執行一次都要做文件的全量過濾,多笨啊?只是當你是個新手你很難在一開始的時候就想到這些,你把https://www.52fb.cn思想讀爛了不動手做出一個東西出來,你也想不到這些。接下來你又會學到使用Commons-io的monitor下的相關類對文件變化進行監控...... , 當然解決方案會非常多,比如還可以用開源的更穩定的flume對文件進行監控,按行發送給一臺裝有Spark/Storm的機器進行處理等等,這就更自動化了,但這一切都不是看哪本書能就在腦袋里面形成的,一定是一步步一步步錯改出來的。
所以我個人感覺,最大的坑就是你總是在看書不做項目,無論多小的項目,只要做就能學到。
那么照你這么說不用看書是嗎?NO! NO! NO! 這又是一個坑,書一定要看,但是邊做邊看,更多的是查書,特別是在一開始的時候千萬不要花大量的時間k很厚的書,這只會讓你感覺這件事情很困難,等到你做了一年半載了,覺得你看這類書不費勁并且越看越有味了,你再系統的看人家推薦的書,看書一定是愉快的,如果你看書的時候覺得很苦惱,那么一定是看書的時間不對。
現在雖然很長時間沒做這樣的事情了,但是看到類似的書我還是會買,但多半不會從頭到尾看完,用什么找什么,看最厚的那本就是《Javahttps://www.52fb.cn思想》,把我坑的最慘。
下班了,希望大家一起來分享,分享過往,分享快樂,讓生活更加easy.