首頁 > 軟體

2021華為工程師的java自學建議

2021-05-31 17:00:47

JAVA自學之路 一: 學會選擇

為了就業,不少同學參加各種各樣的培訓。

決心做軟體的,大多數人選的是java,或是.net,也有一些選擇了手機、嵌入式、遊戲、3G、測試等。

那麼究竟應該選擇什麼方向呢?

我的意見是,不要太過相信各種培訓機構或是搶手文章的說法(包括我),當你要走向社會的時候,就不要再把自己當成學生,不要把自己的將來交給別人,學會運用自己的眼睛去觀察,去了解這個世界吧。

每個培訓機構都會宣傳自己的好處,並不能說明大的趨勢。 一些新聞文章很有可能是槍手寫的,不必太過相信。國外背景的教師和課程,未必適合你。那麼怎麼才能確定自己將來的方向?如何才能從紛繁複雜、或真或假的資料世界中挖出一條路?

我個人覺得java/J2EE、.net、嵌入式開發是不錯的三個方向。

如果非要在java和.net中選擇的話,我個人是推薦java的,原因:

1:Java能夠開發linux、unix伺服器上的程式

2:JavaEE和.NET在企業應用方面的關注點是差不多的,但是學習了java如果將來想轉到.net上會比較簡單,幾天的學習然後上手開發應該是問題不大的,但是反之就不行了。

當然如果有了些經驗之後,你就會發現語言或者平臺不再是技術上的阻礙,一些原理性的東西學到手,然後再加上項目經驗,使用什麼平臺,反而不是最重要的。不過如果非要用一種平臺進入企業開發的領域,至少在目前,2007年9月,我推薦java。

完全可以不同意我的觀點,但是無庸置疑,如果是為了就業,多到招聘網站閱讀閱讀職位的資訊,對你將來的方向和學習是大有益處的。選擇是最痛苦的,看看《天生購物狂》中的劉青雲就知道了,不過既然無法逃避,就作出自己的選擇吧。每個人都會受到別人的影響,在作出決定之前,要想盡各種辦法讓自己理性一些吧。這樣,你的選擇會離正確的方向更近一些。

JAVA自學之路 二: JAVA自學路線圖

有不少的同學發信給我,和我探討java的自學過程應該是什麼樣的,畢竟有很多人因為各種各樣的原因不能參加培訓。我試著給出自己的見解,拋磚引玉吧。這個路線圖是給那些為了就業的人準備的,如果只是興趣,不一定照這個走。這裡只是講了路線圖,關於路線中的各個階段,學到什麼程度,如何學習等,可以參考後面的JAVA自學之路 七:《路線圖明細》。

首先要學JavaSE,這是無庸置疑的。與此同時,是的,與此同時,和JavaSE的學習同步,建議大家研究一下資料結構與演算法。在這兒之後,你可以選擇向J2ME、或者Java GUI、Socket程式設計等方向努力,但是通過第一篇的辦法,你可以很容易就將這方向過濾掉(永遠不要忘了我們是為了就業),好吧,暫時和它們訣別,還是向著J2EE的方向前進吧。在JavaSE完成之後,可以試著完成一些小項目,同時關注一下設計模式的內容,不必強求自己能夠完全掌握各種細節,往前走吧。

掌握一種程式設計工具,比如說Eclipse。

資料庫,可以選擇使用Oracle或者MySQL開始。JDBC,用Java連線資料庫。可以選擇在這個地方切入Hibernate,也可以選擇在Struts之後。

HTML CSS JavaScript,這些東西是做web項目必需的內容。

Servlet JSP,伺服器端必需。

XML 、AJAX,新的流行趨勢不能不瞭解。

作一些小項目吧。比如BBS、留言系統、學籍管理、商城等等,隨便找一些業務邏輯比較簡單的來做一做:

Struts,MVC的典型應用,Hibernate,OR Mapping的典範之作。Spring IOC + AOP,面向物件+面向切面,完善的旅程。把以前自己的小項目加入Struts、Spring、Hibernate的元素吧。去研究各種商業項目的業務邏輯吧,才能在你的簡歷中加入濃重的一筆。EJB3.0,java在走了很多彎路後的迴歸之作,值得研究。SOA,業界鐵定的未來趨勢,要緊緊跟隨。

在後面,我會告訴你每一步的學習方法和學習重點。

JAVA自學之路 三:要動手

無論如何,請堅持不懈的動手實驗!

學習Java要動手,僅僅是看和聽是不能夠學好程式設計的。總有同學來信問我們這樣的問題,說:"老師我看了視訊了,可是怎麼一動手就沒有任何思路呢?"對此,我一般都會說不要著急,如果你只是看了視訊就想行雲流水的話,那老師這些年的鍛鍊真是白費了,這麼多年的苦練才能略有些行雲流水的感覺,你一朝一夕就想自己能夠達到,不是太奢侈了嗎?

作為程式設計的過來人想一下,當年自己學程式設計的時候是什麼時候有思路的呢?至少也是照貓畫虎畫了一段時間之後吧,我本人是在某一個領域畫虎畫了上萬行程式碼的時候才慢慢有自己思路的。就像寫作文,要有自己思路總是一般來說要經過幾個階段,首先學習詞彙,然後學習造句,然後大量閱讀別人的文章,自己模仿著寫一些,逐漸的經驗積累,才能形成自己的思路。學程式設計,恐怕也得慢慢的來吧,只是看一看、聽一聽視訊,是不足以學好程式設計的。

所以,動手吧,跟著做,一行一行的跟著敲,一個項目敲完了,比如坦克,再試著加一些自己的功能,按照自己的思路敲一些程式碼,收穫遠比干聽大的多。

如果遇到,暫時對於一些思路不能理解的同學,我一般都會勸告說,動手寫,先寫程式碼,量變會引起質變的。而這種質變的確發生過不少次。

提醒一句,要理解程式碼思路之後再跟著敲 ,揹著敲,千萬不要左邊擺著別人的程式,右邊自己一個一個子母的寫,這就不再是程式設計師了,成了打字員了。

紙上得來終覺淺,所以:別問那麼多,別想那麼多,動手寫吧。

JAVA自學之路 四:要事為先

對待人生的任何事情都要:抓大放小,要事為先!

對於一個以前從來沒有接觸過java的人,java無疑是龐大的,似乎每個領域都可以拓展開來都是一片開闊地,每一個領域要想深入接觸到每一個細節所耗費的精力都是巨大的。這個時候大家都胸懷壯志,兩眼發光的盯著每一個嶄新的知識點,遇見了任何一個知識點都恨不得摳的清清楚楚,明明白白。

難道這有什麼不對嗎?

我的意見是,這樣並沒什麼大毛病,但是學習效率太低了!我們推薦的學習方式是,抓大放小,要事為先{馬士兵老師的這句話可能並不適合當代的大學生。仔細思考} 。

比如說學習J2SE的時候,學到GUI這一章,有的同學認為,既然學到這兒了,我們去把SWING細細的瞭解一遍吧;還有的同學,遇到了在Linux下的Shell程式設計,就恨不得把Shell先學成專家才肯,或者是才敢,繼續往下學習;有沒有過這樣的感覺,一本書的上冊沒有學好,覺著下冊心裡也沒底兒,甚至非要把上冊複習一遍才敢繼續學習。如果你也是這樣,要去看看心理醫生啦,沒準兒會有潔癖的毛病。

任何事情都要追求完美才敢繼續往後進行,是一種性格缺陷

大膽的放棄一些東西吧,有失才有得,把自己有限的、寶貴的精力用在對於就業直接相關的地方,這才是最有效率的學習方式!等你參加工作,有了可持續發展的事業動力和經濟基礎,有時間有精力閒的沒事兒乾的時候,再去研究那些其它吧。

曾經有一個故事,說得是產能和產量的關係。

一個人喜歡讀書,讀了一輩子,無所不通,這時候要做任何工作都可以,他的產能到了極致,但是,他老了,即便每天產出大量的東西也不能維持多久了,一輩子的產量並沒有多少。另一個人直接工作,忙,天天在機器旁日復一日,做了一輩子,沒時間學習和進修,可以想象,產量能有多大呢。

人的一生,要鍛鍊產能,也要及時產出,引擎要轉,也要停下來加油,這兩者平衡的越好,你的貢獻和產量就會越大。如果鑽研的東西和產能目標(或者說近期的產能目標)無關的話,要捨得放手。

所以,對於SWING,暫時先扔在一邊吧。對於shell,對於各種協議過於詳細的細節,對於喜歡的遊戲程式設計,對於javascript各種華而不實的效果,都暫時和它們分別吧。一切和我們的直接工作目標關聯不大的東西,扔在一邊或者弄清楚到足夠支援下一步的學習就可以了。 {能否把這種工作目標換成其他的東西呢?}

那這樣豈不是妨礙我成為通曉各種細節的高手了嗎?

我一向不認為一個人掌握了很多很多知識點的細節就是高手了,一個人如果告訴你,回字有四種寫法,你會認為他是高手嗎?毫不客氣的說,現在我們所教授的所有知識細節在網上或書中都可以找到,只要你肯花時間花精力去動手試,去鑽研,沒有什麼不能掌握的。struts、spring你能掌握嗎?當然能!但是如果把時間花在spring的各種細節的研究上,花在研究中國企業應用不廣泛地的spring mvc上,這個精力就太浪費了,而且學習的積極性會受到打擊,誰願意整天泡在細節的蜘蛛網中掙扎不出來呢?誰願意天天經歷風雨卻總是不能見到彩虹呢?

蓋房子,要先建骨架,再談修飾。畫山水,要先畫結構,再談潤色。

認識一臺結構複雜的機器,應該首先認清楚脈絡,然後再逐步認識每一個關節。

為了應付從小學到大學的考試,我們背了各種各樣的不應該提前掌握的細節,同時也養成了見到細節就摳的學習習慣。而現在,是到改改的時候了。

請在合適的時間,做合適的事情吧。{Do Forward!Think Forward!Sanely!}

把時間和精力花在作項目上面,花在寫作品以及鍛鍊解決問題的能力上面吧,這是邁向高手的正確的而且快速的方向。

我一直不認為一個課程提供了很多很多的細節就是優秀的價值高的課程了,掌握必要的細節,這個不含糊,至於其他,或者通過視訊給出(這樣可以給出更多的細節,但是不佔上課時間,課上只講重要的、必要的細節知識),或者在掌握了自學的能力後自己能夠查出,這才是正途。

當你看書到某個地方暫時不理解的時候的,暫時放手吧,追求一些行雲流水、自然而然的境界吧,只是不要停下前進的腳步,不要被大路旁邊的支根末節干擾了你前進的行程,項目,真實的項目,這才是目的,就在不遠的前方。

陶淵明讀書,叫做「不求甚解」,但他是大詩人。

諸葛亮讀書,總是「觀其大略」,但他是大政治家。

作研究的,是在確定了方向之後才詳細的研究深入的東西。

到了廬山,脈絡形狀扔在一邊,盯著一棵棵小草、一粒粒石子的看,怎麼樣才能識得「真面目」?

作為應用型的人才,是研究回字的n種寫法還是抓緊時間向著主要應用的方向努力,請自己作出抉擇。

以項目驅動自己的學習吧,當把握了技術的脈絡之後再去補充細節的研究,是正途。這輩子就不研究其他的方向了嗎?當然要研究!但是在將來合適的時間再說吧。

所以,抓大放小,要事為先!

JAVA自學之路 五:問題解決之道

既然是學習,就不可能不遇到問題。

既然是自學,就沒有方便的和老師探討的機會。

那麼,遇到問題之後,環境配不通,程式調不過,運行不正常,遇見這些惱人的問題的時候,該怎麼辦呢?

首先我要恭喜你,遇見問題,意味著你又有漲經驗的機會了,每解決一個問題,你的JAVA經驗值就應該上升幾百點,問題遇到的越多,知識提升的越快。 但是總是解決不了也是很惱人的,怎麼辦呢? 我一般要求我們的學生都是這樣來進行的。

當你遇到一個問題的時候:

1:要仔細的觀察錯誤的現象,是的,要仔細

有不少同學的手非常快,在編譯一個程式的時候,報了一大堆的錯誤,掃了一眼之後就開始盯著程式碼一行一行的找,看清什麼錯誤了嗎?沒有!有的時候安裝軟體出問題了,一個對話方塊彈出來說出錯了,馬上舉手問老師:「不得了了,出錯了,出錯了」。

「什麼錯誤?」

「還沒看呢?」

這都是典型的不上心的方法!請記住,學習程式設計並不是一件很容易的事情,自己首先要重視,要用心才可以。 在開發中,仔細觀察出錯資訊,或者運行不正常的資訊,是你要做的第一件事。讀清楚了,才能在以後的步驟中有的放矢,哭了半天,總要知道哭的是誰才成。

這裡又分三種情況:

A:錯誤資訊讀懂了,那麼請進入2步:要仔細思考問題會出在哪些環節

B:沒讀懂,愣是一點沒看懂,進入第4步吧:google

C:讀了個半懂,有些眉目但是不太能確定,第2步和第4步結合著來。

2:要仔細思考問題會出在哪些環節(重要)

當你讀懂了一個問題之後,要好好的思考這個問題可能會在哪些環節上出錯。

一輛汽車從總成品線上下來,車門子關不上! 哪錯了?你怎麼查? 當然是順著生產線一站一站的查下來。 程式也是一樣的,也是一系列語句完成後產生的結果。

寫一個網路程式,總是發現伺服器端打印不出接收的資料,有幾個環節會出錯?仔細分析這個現象的環節:

客戶端產生資料->按「傳送」按鈕->傳送到伺服器->伺服器接收到後列印

這幾個環節都有可能會出錯:

有可能客戶端根本就沒產生資料,有可能傳送按鈕按下去後根本就沒發出去,或者發出去的不是你產生的東西,或者根本就沒連線網路,或者傳送出去伺服器沒有接收到,或者接收到之前就列印了等等等等。

學著去這樣仔細的分析程式的環節和這些環節可能會產生的問題,你的經驗值定然會大幅度快速的提升,這樣做很累人,但是一件事情如果做下來一點都不累的話,這個東西還有價值嗎?

在網頁A輸入了一個人的名字,提交到B,首先儲存到資料庫,然後再讀出來,發現亂碼!怎麼辦?當然是分析環節:

客戶輸入->HTTP傳送->B接收->儲存到資料庫->讀出->展現到網頁

每個環節都可能出問題,怎麼才能知道哪裡出的問題?繼續往下讀。

3:如何定位錯誤(重要)分析清楚有哪些環節之後

定位有以下三種辦法:

A列印輸出,比如java的System.out.println(),比如js的alert(),這種辦法常用,必須掌握

B Debug,可以參考我們的視訊《坦克大戰》,詳細講了Eclipse的偵錯。

C 刪掉一部分偵錯一部分,也就是去掉一部分的功能,做簡化,然後偵錯剩下的功能,JSP和JavaScript常用。

4:如果還不行,google吧

還查不出來?恭喜你,你遇到的錯誤是值得認真對待的錯誤,是會影響你學習生涯的錯誤,問一下google或者百度吧。照著下面的方法查檢視。

一般來講,搜尋引擎可以搜到各種知識點,我曾經跟同學們開玩笑說:「學會了怎麼google或者baidu,其實沒必要跟老師學了,自己全都搞懂了,尚學堂是沒必要來的。」當然,只是玩笑,培訓的作用有三個:

A:系統化知識

B:真實項目鍛鍊經驗

C:少走彎路,節省時間

不知不覺開始做廣告了,請原諒,處其位謀其事,總得為尚學堂說點什麼:)

言歸正傳,如何查搜尋引擎?

先精後粗,首先先進行儘量精確的查詢,比如一個錯誤,SocketException,你懷疑它是在connect( )方法出的問題,那麼當然是選這樣的關鍵詞java connect SocketException

先中後英,本著以解決問題為主的想法,練習英文還是先放在一邊吧,首先應該在中文網頁中查詢,還不行的話,搜尋英文的吧,最近的尚學堂課程中會帶大家閱讀英文的書籍。有很多東西就像一層窗戶紙,遠看灰濛濛怪唬人的,你壯著膽子一捅,它就破了。閱讀英文的書籍就是如此,不是想象中的那麼困難:)寧可在沙場上戰死,也不能被嚇死不是嗎:)

資訊篩選,搜尋出來的結果不見得能夠完全匹配,建議大家多閱讀前幾頁的搜尋結果,多開啟幾個網頁看看,不過,我的經驗是超過3頁一般就沒意義了,所以超過3頁還沒有找到合適的答案,或許應該調整一下關鍵詞,或者放粗整個搜尋的結果了。

經常的進行知識難點的查詢,如果一個問題牽扯的面比較廣,就乾脆到網上搜索一些相關的專題,比如「java亂碼mysql」 「oracle創建使用者」等等,如果有必要,不要犯懶,勤動手寫一些小小的測試程式,來弄明白知識點的細節。這也是漲知識的重要的途徑。

5:什麼?還不行?那麼就BBS吧

如果實在還不行,就到BBS上面問一問高手吧。 到哪個BBS上?

google或者百度不就行了麼?關鍵詞「java論壇」「java bbs」

然後在搜尋結果裡好好的看看那些活動頻繁的論壇,以後就是你經常光顧的地方了。http://community.csdn.net就很不錯。

向別人提問是非常需要技巧的!

曾經有人問我這樣的問題:「請問如何才能學好java呢?」這個要求太泛泛了。還有人給我一段程式碼甚至jar包也寄過來,然後說老師的我的程式碼中有個錯誤您幫我查查。

我沒有辦法去花大量的時間建立環境去偵錯一個還不知道存在不存在的錯誤!

還有人在BBS上問這樣的問題:「是否有人能幫我完成一個完整聊天的程式?請幫我寫一個登陸模組吧!」

這個要求有些過分了,有人幫你做是你的運氣,沒有人幫你是正常反應。

向別人提問,應該首先確定你已經做了自己應該做的事,簡單說是我前面列舉的1,2,3,4步你都作過了,然後再求助於人。不要沒有經過認真思考就草率的向別人提問,自己也不會有長足進步的。

6:還解決不了?問老師吧,這個只能是在你參加了培訓的前提下了。

7:還解決不了?天哪,是不是思路從根上就搞錯了?

JAVA自學之路 六:項目的自學

現在就業競爭的激烈程度已經遠遠高於當年了,記得我當年畢業時,一個會程式設計的畢業生站到臺上,大聲問道:「我會ASP,月薪5000有沒有人要?」 臺下的企業馬上嘩的舉起一大片手:"我要我要!"。那時,沒有任何項目經驗也會有人提供學習的機會。這種好日子恐怕一去不復返了(有些誇張,但無疑當時找一份不錯的工作是比現在要容易的多)。

而現在,即便是各種必要的知識你掌握的差不多了,但還有一座大山橫在你的面前,那就是——項目經驗。

有經驗的程式設計師都知道,學習程式設計的最有效率的方式,恐怕就是把你扔到一個項目組,連滾帶爬的做下一兩個項目來,你馬上會發現所有的知識點全都連到一起了,不再是分散的,而是形成一個整體了。那種感覺是僅僅深入鑽研知識點而不寫真實項目的人所不能體會的。一個項目就是一根繩子可以把大片的知識串到一起。

如果想鍛鍊實際開發的能力而不僅僅是背誦或者瞭解一些知識點,如果想成為真正的好手而不僅僅是背誦「回」字有幾種寫法,那麼,作項目吧!

目前,各種程式設計的知識點變得越來越容易掌握,按照JAVA自學之路 五:問題解決之道 中的各種辦法也可以逐步積累自己知識的廣度和深度,那現在什麼才能夠體現水平的不同?當然是項目經驗。

目前,尚學堂的課程已經超越了知識點的研究和羅列,我們將在未來的時間裡逐步公佈各個知識點的視訊,包括SSH、EJB等,這樣做有兩個好處:首先自學的同學可以免費得到原來商業培訓的內容,這樣起碼可以節省一些時間,省一些力氣。其次尚學堂自己可以更加專注於項目上。

目前尚學堂的項目寫作佔了課程50%左右的比重,尚學堂的項目也早已經超越了簡單的MIS系統的概念,逐步的成為綜合了搜尋引擎、工作流、SCA/SDO、Linux/UNIX、大型資料庫系統、設計模式、架構模式、負載均衡等各種深層應用的綜合大型項目並且採用手把手式的教學方法,做的更加的深入和細緻,從現在看效果相當好,最近142班的就業就完全證明了這一點(瞭解142的就業情況),我們的計劃是最近逐步將項目比重提升到70%以上,相信效果會更好。籤於公司的規定,我們並不能將所有的項目實戰都錄製成視訊來公佈,但是已經公佈的項目實戰也是非常的有價值的:

1:Chat & Tank系列

2:BBS

3:Shopping(近期公佈)

那麼如果自學我們應該怎麼樣才能學習項目的開發呢?

一個比較有效的辦法是,可以在現有項目的基礎上做的更深入一些,比如在你按照視訊完成了BBS之後,可以增加一些其他的功能,例如註冊/積分/精華/搜尋/貼圖等等,在完成了Shopping之後,可以增加一些評論/排行/統計/存貨等等方面的業務邏輯,嘗試用自己的技術將他們作出來,這樣既積攢了項目經驗,又記住了知識點。

那麼如何才能確定我要寫什麼樣的業務邏輯呢?

應該講這對於一個初學者是非常困難的,一些簡單的系統,比如說BBS、Shopping、圖書管理等等,它們的業務邏輯很容易確定,去瀏覽和參考一些現成系統的功能,很容易就能瞭解了。但是對於商用的大型系統,光是瞭解業務邏輯本身就會花費大量的精力,如果有時間有精力有財力的話,還是建議考慮一下我們的培訓吧,這樣經驗的積累和薪水的提升會更快,從以前的統計資料看非常容易就可以回收這筆投資(替尚學堂的廣告,必須得寫,請見諒,但保證真實)。如果條件不允許,那麼就按照上面的方法來學習項目吧,不要因為暫時不能接觸更大型更深入的項目而氣餒,記住:機會總是青睞有準備的頭腦,努力吧。

需要的點贊加收藏私信我領取,瑞思拜


IT145.com E-mail:sddin#qq.com