答好友困惑:Java零基礎如何入門,不知道怎麼學,迷茫ING
幾個星期之前,我在知乎上看到一個提問,說是:對于完全沒有經驗零基礎自身的數學底子也很弱學習Java應該怎麼學習呢?想着類似的問題我也有過回答,并且回報還是蠻好的,就參考之前的思路回答了一遍,可惜沒在公衆号裡和大家分享,後續再整理一份好好分享下。(該問答位址見原文)
提出問題的是一位高中生,就順藤摸瓜加了我好友,讓我給指點指點。躍哥最近飄了,各種給人指點,也不知道是對是錯,但是我還是從自身的角度來分析問題,畢竟我也工作多年,給初學者一些信心是我該做的;給初學者一些指導,是我力所能及的;給初學者一些勸退,也是我要做的,畢竟很多人可能最後發現自己并不适合寫程式。
期間這位老弟和我聊了很多,我都零零散散給了解答。直到前幾天,他抛給我很多困惑,都是在初學的時候會面臨到的,是以我就抽時間做了一次詳細的解答,主要涉及到Java從入門到進階需要經曆哪些、如何學習Java入門、還沒開始實踐就有一堆煩惱,該怎麼辦?
本文将以問答的方式,給出一些簡單的見解,因為Java内容挺多的,可能會有遺漏,我已經讓群裡的小夥伴們做過一次篩選,讀者朋友們看到了,也可以給我更多的補充噢。
知友:哥,我前兩天也想了一些程式設計的問題向您請教請教吧,希望能得到你的幫助
第一個呢就是Java學習路線是什麼,Java各個階段需要學的知識點有什麼,課程大綱,就是和課本上似的都有目錄包含了所有的哪些知識點Java,從基礎到入門再到精通應該如何學?先學什麼知識點在學什麼?包含了什麼知識體系Java裡,辛苦你能不能和我仔細說說呢
答:
Java現在主要的領域是作為後端在應用,尤其是他的微服務領域,很多國内外知名的大廠都是使用Java作為後端,甚至有大V認為,在微服務領域Java無人能及。
是以,我們學習Java的目标就是把自己培養成微服務的人才。雖然,Android開發,部分前端也是用Java,但是結合你的實際情況,我還是建議往微服務領域走了,也就是Java後端。
Java 是一門純粹的面向對象的程式設計語言,是以除了基礎文法之外,必須得弄懂它的 oop 特性:封裝、繼承、多态。
關于基礎知識學習
學習基礎知識,就是讓你對Java語言有一個初步的了解,其實,任何語言的基礎知識都是大同小異,包含基本的資料類型以及基本的面向對象知識,面向對象是重中之重,隻有有了面向對象的知識,在後續的開發中才會有更好的成長。
基礎知識包括(主要參考《Java核心技術卷》即可):
基本程式結構:基本變量類型、運算符、字元串、流程控制、數組
類與對象:類的定義和使用、靜态屬性和方法、繼承、包管理、枚舉、反射
接口和抽象類:接口的定義及實作、抽象類的定義及實作
泛型:泛型類、泛型方法
集合:集合接口、清單、Map、樹、排序和查找
異常與調試:内置異常、聲明異常、自定義異常、捕獲異常、日志
多線程:多線程概念、使用線程、同步
關于Spring等學習
有了一定的基礎知識,接下來就直奔主題,在這領域裡,Spring就是需要學習的利器,下面是編寫Spring相關,需要掌握的知識,可能不止,也可能有遺漏,後續可以再補充
Maven:Maven與包管理、POM檔案、生命周期等
Spring Core:依賴注入與控制反轉、Spring概述、Spring容器與生命周期、自動裝配、注解裝配、切面程式設計(AOP)
HTTP協定
JSON知識
Servlet概念
Spring MVC概念:配置Spring MVC、參數傳遞、實作REST、權限控制等
RPC架構
RESTFul
關于Spring的學習資料,推薦《Spring實戰》,之前群裡有人中獎,我贈送過一本
關于應用中間件的學習
這一部分,就是Java開發中常見的“中間件”,這些中間件涵蓋了各個領域,包括持久化、緩存、隊列、反向代理等,這些是完善一個程式的重中之重,前面屬于基礎架構,這個就是給架構裡填充必要的東西,讓程式健壯穩定。
主要包括但不限于
MySQL:關系型資料庫概念,資料庫的CRUD操作
MyBatis:OR映射概念,配置,映射,基本Java庫,和Spring內建
Redis緩存:緩存概念、Redis的使用
NoSQL:NoSQL概念,Mongodb的使用
隊列:隊列概念,RabbitMQ、Kafka
反向代理:反向代理概念,Nginx的配置和使用
Linux:遠端連接配接Linux,Linux的常用指令
其他補充
其他的一些補充,主要是在于非技術相關,但是在往後的項目使用中,是肯定需要用到的。
開發工具:IDEA、Eclipse
版本控制工具:Git、SVN
Docker容器:環境部署
大體上就分為上面的三個部分,但是每個部分都有很多小的部分,基礎知識最容易,也是重中之重,因為後面所有的代碼編寫,沒有基礎知識,一些都執行不了。
問了這麼多,寫了這麼多,還是不能停留在理論,最好的方式就是實踐。
知友:第二個就是學習方法沒有找到,不知怎麼學,什麼方法學起來很容易還不會忘記也不會不想學,我現在真的很迷茫,想學但是不知道該怎麼學,特别是在你說的多實踐敲代碼問題上也就是第三點敲代碼
我現在的顧慮就是不知道該怎麼去靈活的敲代碼,還有怎麼才能做到編寫代碼很準确速度提上來呢現在吧腦子裡還沒有學究一想編寫代碼就無所适從,不知該怎麼敲,心裡就是覺得敲代碼很困難,無法下手去敲,更别說多去實踐了
還有就是在敲代碼問題上如何才能按照給出的題意或者産品開發旨意編寫出代碼來呢?問這個就是我現在感覺這個很困難,之前在學校剛學c的時候根據課本源代碼敲都敲錯了,更别說布置的根據意思敲我直接不會,一想到這個我真的怕了是以才問自己适不适合,辛苦你了哥希望能給我仔細跟我說說
答:這幾個連在一起回答。
Java開發也好,C語言也罷,還是其他的語言學習,都是需要實踐的;這個你就把自己當成一名技術勞工,泥瓦工也是經過千錘百煉才能造房子,包裝工也是經曆過千萬次的包裝才能做到得心應手。語言組織也是如此,作文就是一字一句積累起來的。
畢竟程式設計是一門技術活,不是靠單純的體力活動能勝任的,是以,這個無他,唯有熟能生巧,才能達到寫代碼的地步。但是寫代碼這個要求太低了,還遠遠不夠。
我經常和群友說,程式設計到最後并不是寫代碼,寫代碼是最最容易的事情。在寫代碼之前,還有需求分析,技術選型(選資料庫,選中間件等),架構設計,流程設計,算法選擇,這些都完成了,那你把這些轉換成代碼就是水到渠成的事情。
這裡隻是給出一個最終的目标,針對初學者,一開始不能好高骛遠,也不能被困難所吓倒。我上面給了學習路線,你看明白了嗎?是以,你現在心裡有數,有沒有被吓到,如果沒有,那麼請你仔細閱讀《Java核心技術卷1》,把上面的基礎知識都先掌握,出現的代碼都在編譯器上實踐,一行一行編寫,了解他。如果已經被打到了,那後面就沒有什麼事了,好好選擇一個更好的出路即可。
等基礎知識都慢慢地學會,然後再去找一些小Demo,比如說實作一個電腦,就能檢驗你的學習成果。寫代碼是一個循序漸進的過程,基礎先學會,逐漸就有成就感,那後面的困難就迎刃而解,否則等到後面學習算法,項目時間,困難重重。
知友:再說個開發以外的吧,根據之前我也找到了自己的缺點應該在程式設計上會有障礙吧,我做事呢不考慮後果嚴重性,缺乏獨立思考能力,反應速度慢了思考就慢,是以就不知該怎麼做了,自己不會去獨立思考,隻有等着别人叫着做什麼就做什麼自己不敢眼事,也不會儲存記憶,注意力不集中,認為小問題就不去想去揣摩,想要改變應該怎麼改變呢?哥
我确實沒怎麼寫過代碼,之前沒接觸過也就跟着課本上照着寫,我也憂慮不會編寫,即使學了我就怕還不會敲代碼不清楚怎麼敲,就是從心裡感覺到敲代碼很困難
寫程式除了有技術能力之外,心境也是一大重點。下面,選擇我之前學習《左耳聽風專欄》的文章一些片段來給你解答。
這裡先聊一下學習的方式,人的學習分為「被動學習」和「主動學習」兩個層次。
被動學習:如聽講、閱讀、視聽、示範,學習内容的平均留存率為 5%、10%、20% 和 30%。
主動學習:如通過讨論、實踐、教授給他人,會将原來被動學習的内容留存率從 5% 提升到 50%、75% 和 90%。
我們可以看到,你聽别人講,或是自己看書,或是讓别人示範給你,這些都不能讓你真正獲得學習能力,因為你是在被别人灌輸,在聽别人說。
隻有你開始自己思考,開始自己總結和歸納,開始找人交流讨論,開始踐行,并開始對外輸出,你才會掌握到真正的學習能力。
學習不僅僅是為了知道,而更是為了思考和了解。在學習的過程中,我們不是為了知道某個事的表面是什麼,而是要通過表象去探索其内在的本質和原理。真正的學習,從來都不是很輕松的,而是那種你知道得越多,你的問題就會越多,你的問題越多,你就會思考得越多,你思考得越多,你就會越覺得自己知道得少,于是你就會想要了解更多。如此循環,是這麼一種螺旋上升上下求索的狀态。
在學習的過程中,我們要不斷地問自己,這個技術出現的初衷是什麼?是要解決什麼樣的問題?為什麼那個問題要用這種方法解?為什麼不能用别的方法解?為什麼不能簡單一些?……
這些問題都會驅使你像一個偵探一樣去探索背後的事實和真相,并在不斷的思考中一點一點地了解整個事情的内在本質、邏輯和原理。一旦了解和掌握了這些本質的東西,你就會發現,整個複雜多變的世界在變得越來越簡單。你就好像找到了所有問題的最終答案似的,一通百通了。
學習是為了改變自己的思考方式,改變自己的思維方式,改變自己與生俱來的那些垃圾和低效的算法。總之,學習讓我們改變自己,行動和踐行,反思和改善,進而獲得成長。
總結
大家讀完了這幾個問答是什麼感受呢?這裡我簡單的總結一下。
首先,就是都關心的問題,我選擇了Java,那麼我以後能做什麼。其實Java能做的很多,隻是在現階段,我們通過程式設計語言排行榜也能看到,Java是穩居前三,說明他有龐大的使用者群體,那麼就代表着網絡上有海量的 Java 學習資料,良好的社群環境,優秀的解決方案,以及超級多的架構學習,你絲毫不用擔心自己找不到問題的解決方案,找不到學習的路徑。
我列舉了 Java 後端的學習路線,是因為現在 Java 主要在後端發揮着作用。後端 Java 一家獨大,幾乎大型的網際網路和大廠,銀行,金融體系後端都是 Java。
其次就是如何學習,我列舉的 Java 學習路線也是根據後端的學習路線來,其實還有挺多沒涉及到,但是給入門,是足夠了。
第三,就是學習方法,怎麼學。說實話,編碼一直都是取決于個人的學習情況以及自律能力。很多人在學校裡努力,在校招的時候就能有一個好的offer,有些在學校裡沒能堅持下來,可能畢業之後就放棄這條路了;還有些是一開始覺得很感興趣,後來發現自己不适合,要麼學校裡選擇轉專業,要麼出來之後轉産品,轉實施等也算是改行。那麼,就是兩個結果,用籃球季後賽的術語就是 Win or Go Home。
判斷自己是否有毅力學習下來,可以參考下我在上面的建議,當然,如果小夥伴們有更好的建議,可以在留言區給我留言,讓大家一起交流交流。
還有這位老弟的問題就是,什麼都沒去實踐,但是一直在擔心擔心,擔心自己不能寫代碼。但是,如果你不開始實踐,怎麼知道自己是不是适合,是不是喜歡,是不是會走這條路呢,對吧。其實我剛讀大一,接觸 C 語言的時候,尤其是到了指針,連結清單,想過放棄,但是最後我斷了這個念頭,我要是不寫代碼,我大學不是白考了,轉專業?現實點,能轉專業的,都是班裡的女生,死磕學成成績,名額都沒了。那麼你還能怎麼辦,硬着頭皮繼續吧。
就這樣,一直到畢業,我在實驗室裡看着書,敲着代碼,大家的暑假有兩個月,我的暑假就隻給自己一個月,另外一個月都在學校裡渡過,就是為了讓自己能不辜負父母的付出。
躍哥今天有點話痨了,但是句句肺腑。接下來,躍哥學習那些優秀的号主,一個系列一個系列的輸出,拿出當初程式設計學習樣子,和大家一起奔跑。
作者:程式員小躍
原文位址
https://www.cnblogs.com/dimple91/p/12713204.html