1. 程式人生 > >我是如何走上Java開發這條路的

我是如何走上Java開發這條路的

文章目錄

一 寫在前頭

  越來越多的人問我:Java該怎麼學?過來人回過頭來自然有很多話說,這裡先說說我自己。

  2014年畢業,目前就職北京領馭框架軟體,做過業務設計,做過混合開發,做過WEB開發,也做過服務框架設計。當下在參與在中信的凌雲專案,主要從事核心業務框架開發並提供技術支援。

  自己的水平一般般,應付現有的工作應該是夠了。一路走來,從懵懂無知到略有心得,支撐自己的是對所從事行業的一份熱愛,更多應該是耐心和堅持。我始終相信“厚積薄發”,如果你想從事程式設計行業,那麼請“慎重”!

二 什麼是Java

  不管從事什麼工作,首先你得知道你要做什麼。很多人跟我聊天的時候,表達過想學習Java的想法,但是如果沿著這個話題略微聊下去,我發現大多數人並不清楚什麼是Java,它能做些什麼。

  這是一個很致命的問題,如果你並不清楚自己所學習的東西,在你未來的生活工作中所能發揮的作用,那麼你很難堅持下去。

  無論如何,首先是你對Java有需求,然後才是討論如何學習的問題。反之,為了學習某種技能而工作,我相信你很難會有足夠的熱情。舉個很簡單的例子,因為我想做遊戲設計,所以我自學了Unity(當然Java也能做遊戲設計,飛機大戰什麼的我是寫過的)。

  Java是一門面向物件語言(Object-Oriented Language,OOL),如果你是學習過其他程式語言,或許上手會輕鬆很多。但如果從面向過程的設計經驗轉變到面向物件,反而會更加晦澀難懂。不論怎麼說,Java始終是一門程式語言,只要是程式語言,那麼就離不開語法,所有的程式語言其語法結構都大同小異,無非是資料型別、流程控制、字串陣列集合等等。

  面向物件則多了些新穎的東西,教材上的抽象、封裝、多型和繼承什麼的我不想多說它們的定義,並非是這些東西在任何書籍或者網路上都能搜尋到,而是實實在在的難懂,且高談闊論毫無意義,下面我說點簡單易懂的。

三 什麼是面向物件

  學習Java之前,首先知道要什麼是面向物件(Object Oriented,OO),說的高深點是一種軟體開發方法,什麼面向物件的分析(OOA,Object Oriented Analysis),面向物件的設計(OOD,Object Oriented Design),面向物件的程式設計(OOP,Object Oriented Programming)。說的直白點,就是對某一類事物的描述,還記得生物課上說過的“界門綱目科屬種”?

  物件(Object)就是現實生活中的一個物件,死的活的、有的沒的都算,這一類物件就是某種型別(Class)。所謂的面向物件就是把這些物件按某些特徵進行分類,帶翅膀會飛的叫鳥,長鰭帶鱗片水裡遊的叫魚。

  舉個簡單例子,男人女人都是人,老人小孩也是人。從不同的維度來說我有不同的型別,按年齡分我是個青年人,按性別分我是個男人,按品行來說我應該算一個好人(??存疑)。那麼人就是一個型別(Java裡對人的定義就是一個類Class),有鼻子有眼,有性別,有年齡,這些就是人的特性(Java裡叫屬性Field,也叫類成員),直立行走,會打架會罵人,這些就是人的行為(Java裡叫方法Method),把人的屬性和行為放到一起就是類了,所以說類就是一種型別。

  那麼物件是什麼?拿上面人的例子來說,你我他都是人,卻有了各自不同的屬性,你20歲女,我30歲男,但我們都能走路,都會打架罵人,都是哺乳胎生,都會思考人生,我們就是具體的人了,也就是傳說中的一個類例項化出來的物件。

四 什麼是抽象

  再說上面人的例子,什麼叫人?人有哪些特性,有哪些行為,從分析這些問題到最後得出結論的過程就叫抽象,就是把實實在在的一類物件按屬性和行為進行歸類,這就是抽象。

五 什麼是封裝

  人不是會走路嘛,那麼是怎麼走路的?雙腳站地,邁開步子,胳膊甩起來,這就是走路,把走路這件事情描述清楚,這就是封裝。

六 什麼是繼承

  繼續說人,人都有鼻子有眼,直立行走哺乳動物,那麼這就是人最原本的定義了(Java裡叫基類),好的我再把人分為男人、女人,男的有JJ,女的會生孩子,這是男人女人的區別,那麼男/女人就是從人這個型別派生(派生、衍生、繼承都一樣,叫法不同而已)出來的,那麼男/女人就是繼承自人的,男人光有JJ是不夠的,既然是從人繼承過來的,按字面意義理解,自然而然的就有了人的屬性(有鼻子有眼)和行為(走路撒尿啥的),這就是繼承。

  所以說派生和繼承是相對的,那麼對於男人這個型別來說,人就是它的父類,它是人的子類。你可以說男人是人,但人不一定是男人。

七 什麼是多型

  上面提到了人,人都會撒尿,那麼男人站著尿,女人蹲著尿,尿尿的行為就變得不一樣了,這就是多型(對同一行為的不同實現,Java裡管這個叫方法的重寫,過載不算多型)。

七 Java能做什麼

  其實這個問題應該緊接著要學習Java的初衷說起,你之所以要學習Java,必然是因為Java能解決你的某些需求,而非我學習了Java所以只能解決這些問題,這個因果關係一定不要弄反了。

  Java可以編寫桌面應用程式、Web應用程式、分散式系統和嵌入式系統應用程式,甚至是遊戲。但是一定不要忘了一件事,世界上那麼多程式開發語言,有很多語言都能做到這些事情,那我們為什麼要學習Java來解決這些問題呢?

  這又涉及到了Java與其他語言的區別了,Java的執行是基於虛擬機器的,所以實現了跨平臺特性,這就是傳說中的一次編譯,到處執行。其實現的原理在於虛擬機器(JVM),比如說在Windows系統中,Java有一個針對Windows設計的虛擬機器來執行Java程式碼,在Linux下,又有一個針對Linux設計的虛擬機器來執行Java,所以Java具備了跨平臺的特性(既然能跨平臺,自然就具備了高度的可移植性,對這些概念的理解不需要死記硬背,瞭解其原理自然通透),這個特性優於其他語言,但也正是因為Java執行依賴虛擬機器,所以執行效率又不如C、C++這些語言。

  Java語法簡單,自帶記憶體管理機制(垃圾回收,GC),無需程式設計師自行管理,這就使得程式碼編寫變得簡單,但是對記憶體的消耗也因此變得不可控,執行效率低及記憶體的不可控性,導致Java在遊戲開發領域肯定敵不過C/C++等。

  Java對UI窗體設計的支援比較弱,所以天生敵不過C#。而服務端設計又不需要窗體設計,所以C#又敵不過Java了。

  Java開源(並非全部,自己百度),對Socket、Http的支援API豐富,學習成本低,面向物件的語言特性使得開發和維護變得更加輕鬆,有效的降低了設計成本,這就讓企業更加的青睞。

  谷歌自從選擇了Java作為安卓開發的首選,對其的推廣更是不留餘力,這也使得Java的學習風潮更甚。

  跨平臺、開源及以上諸多特性,註定了Java更適合做服務端開發。說的更狹窄點,如果你選擇Java,那麼可以做Android開發設計APP,可以做WEB服務端開發網站搭建,可以做嵌入式開發冰箱燃氣熱水器的智慧化,可以做分散式核心系統開發等等。

八 Java延申的方向

  選擇不同的Java應用領域,那麼其發展的方向也是不一樣的,如果你選擇用Java開發安卓應用,那麼你需要更多的瞭解Android SDK,瞭解UI設計,瞭解網路協議、報文傳輸等,反而對服務端設計的認知深度沒那麼大的要求。

  如果你選擇做WEB服務端,那麼則需要對Http協議、資料庫操作、Servlet/JSP等技術需要更深入的瞭解。

  如果你選擇做分散式系統設計,那麼你不僅要知道高可用高併發,系統間通訊及還有效能優化等知識,對Java本身的瞭解也需要到達一定的深度,多執行緒併發,記憶體管理,Socket通訊,IO/NIO傳輸等等。

  針對不同的使用場景,你可能需要學習不同的技能來配合Java,單單一門語言是應對不了所有需求的,尤其當下IT行業對程式設計師的全棧(就是啥都會)特質要求越來越高。

九 Java學習路線

  核心中的核心自然是Java本身,但無需過多瞭解,會用即可是最初的目標。

  針對所從事的業務方向,學習其他相關技能,把知識網構建起來,比如說我目前的工作,分散式系統核心框架設計,那麼我需要充分的瞭解資料庫知識,併發設計,效能調優等,所以更加針對性的需要我去了解Java對資料庫的支援,對通訊的支援,越深越好。

  綜上,就是一個橫向和縱向的發展過程,橫著來就是要學習其他技能搭配Java來解決問題,豎著來就是把這些技能用的越熟越深越好,最後一個合理的技能體系應該是一個“^”形狀,頂尖的是Java,尖尖越高表明你的Java水平越深,兩邊越寬說明你涉獵的相關技能越廣。

  最後,謹記——貪多嚼不爛,瞭解你真實的需求,通過上面的介紹,你是否真的需要學習Java,如果要,那麼請堅持

十 附一張Java技能擴充套件圖

在這裡插入圖片描述