我的Java血淚史
自己學習 Java 將近兩年了,自己水平還很淺,妄不敢說這篇文章是學習 Java 的金言。也是藉著老師讓我給學弟學妹們分享自己學習 Java 的經驗的機會,同時也是對自己學習 Java 的總結和反思,大佬們不喜勿噴。
下面我就從五個方面來談。
1、學習經歷
我是從大二下學期開始學習 Java 的,那時我們還沒有上 Java 這門課,所以就自學嘍。也正好趕上找到了指導老師,老師就給我一個練手的專案,仿學校的醫院管理系統。原程式是 C++ 寫的,用的 MFC,Win10 上面跑不了,無法看到實際效果,我就看著文件中系統截圖思考功能。在此之前只有一點 PHP Web 方面的經驗,搞清做這個系統所需的技術後,我就開始學習相關的知識,Java 基礎、Java Swing 介面程式設計,SQL/">MySQL 資料庫。一個學期邊學習邊寫這個系統,那時候連 MVC 結構都不知道,也不會用任何的框架,就用了一個連線 MySQL 的 jar 包。雖然整個系統很 “精心” 的設計,但系統結構劃分和程式碼還是一團糟。憑藉著百度和琢磨,我還是寫出來系統的大部分功能,當然 BUG 也是有的,這個系統就到此為止了,後來電腦重灌系統,資料庫檔案沒備份,系統就只剩個介面了,有時間還想重寫一下這個系統,畢竟這是我 Java 夢開始的系統。
大二暑假,指導老師讓我模仿一個學長畢業設計做的實驗室管理系統,C# 寫的,.NET 平臺。有一星半點 Web 基礎的我,學習了一個星期的 Java Web(準確的說是 JSP),就開始寫這個系統了,當初還找了幾個人組了個團隊,但後來還是我一個人來寫。前端到後端,介面到資料庫設計,都是不小的考驗,不用說了,介面做的醜,程式碼也是又臭又長。那時不懂介面重用,大量重複的程式碼,沒有用任何框架,總共擼了有一萬多行吧:sob:。Java Web 的基礎都沒打好,後來我看書又重新學習了一遍 Java Web。這個系統好像還躺在我的電腦裡,但是再也沒開啟過了。這個專案真的感覺很失敗,都想放棄學習 Java Web了,後來老師開導我,我開始學習框架。
大三上學期,我開始學習 SSH 框架,一邊看視訊,一邊自己實際操作,還寫了十幾篇SSH框架的學習筆記,自認為學的還不錯,寫個簡單的管理系統是沒什麼問題了,這時搭建框架還是手動匯入相關的 jar 包,還不會用 Maven。在老師的建議下,我申請了學校的創業創新專案,名字起的還很高大上,《跨平臺的開放式實驗室管理系統》,專案時間為兩年,自己作為專案的負責人,還是之前的那些隊員。這學期後段忙著專案申請書和專案開題的事,專案沒真正開始寫,還是調查研究階段,我們查閱了大量的資料文獻,我也有了一個大致的思路,但同時也發現了這個系統的難點所在。我們要做的這個系統當時寫的是面向全校的,人員的許可權就是一個大問題,並不是簡單的增刪改查這麼簡單,系統要能夠靈活的分配許可權,許可權對應的才是功能。還有一個實驗預約功能,不知道是我們想的太複雜的,還是怎麼滴,沒有一點頭緒,在 GitHub 上也找了一些相關的專案,執行測試後,都沒有實際用途,達不到要求。這個專案就這樣停滯了,直到大三下學期。
作為負責人的我,大三下學期剛開學就不敢有絲毫鬆懈,全力研究系統中的許可權控制,我先是在網上找資料,發現可以框架做(spring security、shiro),但覺得學框架太費時間,況且自己用的是 SSH 框架,框架也只是入門,框架太多,自己也駕馭不住。自己當時也瞭解到利用 RBAC 模型可以做許可權控制,資料庫是能設計出來,但是介面許可權樹搞不定呀,留下了 JS 和 Jquery 薄弱的淚水。終於功夫不負有心人,我找到了一個 OA 系統的視訊,視訊中用的框架也是 SSH,系統中的許可權控制也和我們系統中的類似,心中一陣竊喜,但是視訊真的有些老了,09 年的,用的技術就更老了。我們系統前端頁面用的 Bootstrap 框架,為了體現出系統的跨平臺性,沒用 EasyUI 這類簡單易用的框架,專案的技術選型都是我來做的,我當時是覺得 EasyUI 寫的介面不靈活不好看:pensive:,當然也有懶得再用框架增加負擔。當時 JSP 和 Bootstrap 的結合,我都想了好久,唉~,研究了一個月的視訊,跟著視訊做出了系統許可權控制功能,還寫了篇部落格,發給老師看,老師說這個放到專案中就可以發篇論文了,我開始把許可權控制移植到我們的系統中,這時才覺得框架真香,在 GitHub 上找了一個後臺管理系統的框架,也是基於 Bootstrap的,裡面使用的大量的外掛,我研究了一天,修修改改用到我們的專案中。在許可權控制移植到我們的系統中,我又發現了新的問題,系統中還有分院系管理的限制,不同的院系肯定只能管理自己本院系的事情,還需要在原來 RBAC 模型資料表的基礎上新增院系表和相關的欄位,這一改,傷筋動骨啊,半個月我都在設計和寫程式碼,終於算是完成了系統的許可權控制功能。又忙了一個月,不斷的修改論文,之前還以為程式碼寫出來就懂了,論文的邏輯寫的很殘缺,在老師的指導下,邏輯才逐漸清晰,這時中文版的論文才算是落地,後面就把論文改成英文的,程式介面也需要改,最終才把論文發表。你可能會問,團隊的其他的人?漸漸這個專案做成了我的專案,而不是我們的專案,系統的設計到具體的編碼,前端到後端,從設計師到苦逼碼農,這其中的滋味只有我一人知道。這期間我也在想系統的架構,我們用的還是 JSP,這就需要寫前端不僅要會 HTML 和 CSS,還要會 JSP 的標籤,展示資料用的是 JSP 的邏輯標籤呀。這學期我也學習了微信小程式開發,和一個老師辦公室的小夥伴合作了一個微信小程式,兩個人一個前端一個後端(我),前端就不多說了,看微信小程式的官方文件,WXML,WXSS,JS,後端我考慮後用的是 PHP,沒用框架,因為不會也沒學,兩個人折騰了一個月還是搞出來上線了。後來我一想,我們做微信小程式採用的不就是前後端分離,前後端之間用 JSON 傳輸資料,合作開發時,我作為後端感覺很爽,因為程式功能不復雜,資料庫也不難,我想如果我們這個系統中也做成前後端分離,精力就可以更集中開發自己的那部分,自己精力真的有限,前後端都寫,結果都玩不轉。自己思考了很多,把 Java Web 又重新看了一篇,進行了一些知識總結,就這樣這個系統開發了一半,問題就只剩下實驗預約了。
現在是大四上學期,我沒有接著開發這個系統,而是轉向了看書,因為也要準備校招和麵試了。之前總是疲於做開發,書讀得很少,都是為了完成程式中的功能,書是看不進去的。在看書中,我才看到自己的知識是那麼脆弱,很多都是隻動個皮毛,根本沒有深入進去,於是我開始惡啃書籍,《深入理解 Java 虛擬機器》,並做了一些筆記。之前老師給的李剛老師的《瘋狂 Java 講義》又拿出來看了看,之前看覺得寫的很好,因為 Java 相關的東西基本都講到了,包括一些高階特性。現在看已經滿足不了自己的求知慾了,很多東西講的還是太淺了,也正是這時我才感覺到 Java 真是太深了。於是對於一些類,我開始看原始碼,看不懂的就看網上的解讀,對於概念性的知識有了全新的認識,並寫了相應的筆記。
我的個人經歷,看起來是邊學邊做,但是對於這種被動的做,被動的學。我的基礎打的並不牢固,現在也是惡補,看很多的書。往者不可諫,來者猶可追,現在能做的就是把之前碎片化的知識歸納成系統,也是不斷的寫筆記整理總結。
2、學習方法
我學習了不止一門語言,現在是把 Java 作為我的主語言,結合個人的經歷,我覺得學習 Java 還是要分階段學習的。我覺得最好的入門方式,就是買一本相對基礎但有比較系統的書(不要求深入,每個知識點都有例子就可以)結合著視訊(推薦培訓結構的視訊)來看,在學習的過程中,把書中的每個例子最好都敲一遍,不要拿著原始碼執行一遍就完事了,一定要手敲,既可以熟悉語言又可以提高編碼速度,熟能生巧。入門後想要提高,就要多思考,對問題進行總結,比如 Java中的抽象類和介面有什麼區別,這個階段可以編一些簡單的管理系統,寫一個就可以,功能不要求複雜,經常看看 java 的 API 手冊,英文好的直接看英文,英文不好的可以中英文對照著看,因為有些地方翻譯的真的不好,英文閱讀能力絕對值得提高,不是吹,外國人的文件水平真是比我們好太多。推薦書的話,我推薦《Effect Java》,《Java 程式設計思想》也是經典書籍,但是真的是有些舊了,書中的思想也不是一年半載可以消化的,日後可以再讀,所以這個階段不太推薦。進階階段,可以深入瞭解一下的 Java 的高階特性,總有一天你會發現框架都是來源於這些高階特性,也可以閱讀一些常見類的原始碼,如 Object、Math、String、ArrayList、HashMap 等等,這其中或許還要配合著設計模式和演算法來看。更深入的階段,設計模式、Java 虛擬機器、演算法與資料結構、Java 多執行緒程式設計。框架就不多說了,真的太多了,SSH、SSM、Spring等。現在的大資料時代,也對 Java 程式設計師提出了更高的要求,Hadoop、HSFD、Spark、HBASE、Zookeeper,分散式架構,Spring Cloud 全家桶、阿里巴巴的 Dubbo 框架。當然疲於學框架,效果肯定不好,每個框架都是有應用場景的,這也是框架為什麼出現的原因。學習任何東西,都要先搞清楚哲學上的三個問題,這個是什麼?為什麼要學習它?怎麼學習?第三個問題或許是學完後你才能回答,當然可以看看別的答案。學習框架,不僅僅是框架的用法,再深入的話就是框架中的思想,框架中是怎麼實現思想的,這就要看框架的原始碼了,再甚至自己寫一個框架。
3、個人經驗
個人經驗,我總結為下面四條:
- 1、說:當你把別人教會了,就說明你真會了。
- 2、寫:寫出來、就知道邏輯請不清晰了,經常寫部落格絕對會使你收益。
- 3、看:多看書、看好書、書不一定是最全面的,但一定是最系統的。
- 4、聊:與人交流,可知自身不足,也可碰撞出思想的火花,可以多逛逛別人的部落格,不一定是大牛的。
上面四點經驗,有刻意總結的味道,但有些確實是自己在堅持的,如寫作。和老師的交流中,我經常可以發現自己認識不足的地方,也有靈感閃現的時候,有時候也發現自己認為的懂了竟然說不出來。看書真的是種享受,現在才體會到,心太急是讀不好的書的,看書可以帶著目的性或者是問題,但不要帶著浮躁。
4、常用工具
因為面對的是沒有基礎的學弟學妹,大神大佬們可以跳過:smile:。
Java IDE:
1、Eclipse:大多數人的第一款 Java IDE,優點是開源免費,適合新手,程式碼提示少,可以多敲程式碼,對電腦的效能要求也不是很高。缺點是,又少量的 Bug,對使用框架支援也不是很好,需要另外裝一些外掛,當然不想裝,也可以用 MyEclipse,但是不推薦,因為和下面的 IDE 相比,真的被秒爆。並且在檢視原始碼時,還需要手動匯入原始碼,這點很不爽。
2、Intellj IDEA:神一樣的 IDE 吧,優點是商業收費,有教育優惠,學生老師都可以用學校的 edu 郵箱免費申請正版的專屬啟用碼,程式碼提示很全,對框架的支援也很好,自帶的反編譯功能使檢視原始碼很方便,用起來真的很爽。缺點就是太吃電腦效能了,對 CPU 和記憶體的要求比較高。
資料庫管理工具:
Navicat:支援多種資料庫,在大學你所能用到的資料庫這個軟體都是支援的,如 MySQL、Oracle、SQL Server、SQLite 等資料庫。
多個版本的 JDK:
我的電腦上是裝了 JDK6、JDK7、JDK8、JDK9、JDK10,不同的 JDK 當然還是有區別的,這點你在看原始碼時就會發現不同版本JDK的差異和改進了。Java9 引入的類似 Python 的互動式程式設計環境 JShell,可以用於簡單的 Java 程式碼測試,而不用再建立一個 Java 檔案。所以你也可以根據自己需要,安裝多個版本的 JDK,使用 Java 語言的新特性。
其他工具:
Typora:Markdown 寫作工具,和市面上大多數分左右兩欄,一欄編寫一欄預覽不同,Typora 是單欄實時預覽,我比較喜歡這種方式。
Maven:當你用到框架時,你就會發現 Java 中的 jar 包很多,而 Maven 是專案搭建利器,以配置檔案的方式自動下載和引入 jar 包,切換不同版本的框架很方便。
Git:版本管理工具,結合 GitHub 使用效果很棒!
5、資源分享
見學弟學妹,空著手,我這個做學長肯定也不好呀,所以我給學弟學妹們準備了 Java 學習大禮包,有書籍也有視訊,直接看圖吧。


這些資料我都放在了我的微信公眾號:”程式設計心路“ 裡,大家可以先關注領取完資料,再取消關注都可以,當然我會在這裡分享自己的 Java 總結筆記,感興趣的也可以來看看。

後臺回覆 ”Java書籍“、”Java視訊“ 即可獲取上面全部的學習資料。
後臺回覆 ”PPT“,也可以得到今天 Java 學習經驗分享 PPT 文稿。
也歡迎你和我交流 Java,除了微信公眾號 你可以在這些地方找到我:
GitHub:weizhiwen
部落格: ofollow,noindex" target="_blank">https://wenshixin.gitee.io/blog/
簡書:Wizey
掘金:Wizey
嗶哩嗶哩:Wizey
學習交流群:558719561
感謝你能耐心的看完,也歡迎你在下面留言。