【IT軟技能】零基礎如何自學JAVA

附java自學相關資料:

Java自學之路——(精華版)


Java面試題和答案


面試角度詮釋Java工程師

阿里巴巴Java開發手冊 v1.2.0

JAVA自學之路 一:學會選擇 

爲了就業,不少同學參加各種各樣的培訓。 
決心做軟件的,大多數人選的是java,或是.net,也有一些選擇了手機、嵌入式、遊戲、3G、測試等。 

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

每個培訓機構都會宣傳自己的好處,並不能說明大的趨勢。 
一些新聞文章很有可能是槍手寫的,不必太過相信。 
國外背景的教師和課程,未必適合你。 
那麼怎麼才能確定自己將來的方向?如何才能從紛繁複雜、或真或假的數據世界中挖出一條路? 
我講一個通過招聘網站的觀察方法。 
可以到各種招聘的網站上查詢信息(可以到google上查詢招聘的網站),例如: 
http://www.51job.com (http://www.51job.com) 
http://www.chinahr.com (http://www.chinahr.com) 
http://www.zhaopin.com (http://www.zhaopin.com) 
以及csdn的招聘頻道等(這是很多年前的,現在類似或者更好的網站個人補充一個 拉勾網
還有一個網站也不錯,http://www.jobui.com,綜合了各大招聘網站的數據。 
這些數據都是最真實不摻假的原始數據,你可以每隔一段時間搜索一次,一些規律就會被總結出來了。 
比如說我在http://www.jobui.com中搜索java,全國大概提供了3萬個職位。 
然後要多翻幾頁,這樣不僅能夠看清楚大概有多少是有效的職位,而且還可以看清楚用人單位最關心的技能是什麼,這個很重要,決定着你將來要花多少時間和精力在特定的知識點上,比如說swing,搜了一下,全國只有700個左右的職位,仔細讀了一下,也並非全是有效的職位,花太多時間和精力在這個上面就不值得了,當然自己感興趣或者爲了研究的話另當別論。不過如果是爲了快速的就業,把太多時間和精力花在很多職業生涯的前一、二年用不到的知識上就太可惜了。 同時,並非某一個行業的職位數目少,就不能當作一個方向進行選擇,比如.NET,我搜索到的職位數是1.6萬左右,比java少,是不是就選java了呢?不一定,因爲java職位雖然多,但是可能競爭者可能也多,有些方向雖然職位數不多,但是和你競爭這些職位的人數量也少,不見得就不能選擇。 
不過,如果某一個方向的職位數目過少,你可就要小心了,選擇這樣的方向風險會非常大,如J2ME。 
我個人覺得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上,這個精力就太浪費了,而且學習的積極性會受到打擊,誰願意整天泡在細節的蜘蛛網中掙扎不出來呢?誰願意天天經歷風雨卻總是不能見到彩虹呢? 
蓋房子,要先建骨架,再談修飾。
畫山水,要先畫結構,再談潤色。
認識一臺結構複雜的機器,應該首先認清楚脈絡,然後再逐步認識每一個關節。
爲了應付從小學到大學的考試,我們背了各種各樣的不應該提前掌握的細節,同時也養成了見到細節就摳的學習習慣。而現在,是到改改的時候了。 
請在合適的時間,做合適的事情吧。
把時間和精力花在作項目上面,花在寫作品以及鍛鍊解決問題的能力上面吧,這是邁向高手的正確的而且快速的方向。 
我一直不認爲一個課程提供了很多很多的細節就是優秀的價值高的課程了,掌握必要的細節,這個不含糊,至於其他,或者通過視頻給出(這樣可以給出更多的細節,但是不佔上課時間,課上只講重要的、必要的細節知識),或者在掌握了自學的能力後自己能夠查出,這纔是正途。 當你看書到某個地方暫時不理解的時候的,暫時放手吧,追求一些行雲流水、自然而然的境界吧,只是不要停下前進的腳步,不要被大路旁邊的支根末節干擾了你前進的行程,項目,真實的項目,這纔是目的,就在不遠的前方。 
陶淵明讀書,叫做“不求甚解”,但他是大詩人。
諸葛亮讀書,總是“觀其大略”,但他是大政治家。
作研究的,是在確定了方向之後才詳細的研究深入的東西。
到了廬山,脈絡形狀扔在一邊,盯着一棵棵小草、一粒粒石子的看,怎麼樣才能識得“真面目”?
作爲應用型的人才,是研究回字的n種寫法還是抓緊時間向着主要應用的方向努力,請自己作出抉擇。 
以項目驅動自己的學習吧,當把握了技術的脈絡之後再去補充細節的研究,是正途。
這輩子就不研究其他的方向了嗎?
當然要研究!但是在將來合適的時間再說吧。 
所以,抓大放小,要事爲先!
那麼,在JAVA的這些課程中,哪些纔是大,纔是要事呢?請繼續讀下去。

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吧 

言歸正傳,如何查搜索引擎? 
先精後粗,首先先進行儘量精確的查找,比如一個錯誤,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步你都作過了,然後再求助於人。不要沒有經過認真思考就草率的向別人提問,自己也不會有長足進步的。 
那我該怎麼樣向別人提問呢? 
在google或百度搜索《提問的智慧》,你會找到答案。 
在這裏我給出一個鏈接http://community.csdn.net/IndexPage/SmartQuestion.aspx,磨刀不誤砍柴功,先花點時間去閱讀一下吧。 
得到別人的回答,要懂得感恩。 
不需要去寫信感謝,不需要支付費用,不需要那些花言巧語,做到下面這一點就夠了: 
當你逐步成爲高手的時候,要回答別人在論壇上提出的問題,有時間有精力的前提之下! 

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

現在就業競爭的激烈程度已經遠遠高於當年了,記得我當年畢業時,一個會編程的畢業生站到臺上,大聲問道:“我會ASP,月薪5000有沒有人要?” 臺下的企業馬上嘩的舉起一大片手:"我要我要 !"
那時 沒有任何項目經驗也會有人提供學習的機會:)
這種好日子恐怕一去不復返了(有些誇張,但無疑當時找一份不錯的工作是比現在要容易的多) 
而現在,即便是各種必要的知識你掌握的差不多了,但還有一座大山橫在你的面前,那就是-項目經驗。 
有經驗的程序員都知道,學習編程的最有效率的方式,恐怕就是把你扔到一個項目組,連滾帶爬的做下一兩個項目來,你馬上會發現所有的知識點全都連到一起了,不再是分散的,而是形成一個整體了。那種感覺是僅僅深入鑽研知識點而不寫真實項目的人所不能體會的。一個項目就是一根繩子可以把大片的知識串到一起。 
如果想鍛鍊實際開發的能力而不僅僅是背誦或者瞭解一些知識點,如果想成爲真正的好手而不僅僅是背誦“回”字有幾種寫法,那麼,作項目吧! 
目前,各種編程的知識點變得越來越容易掌握,按照《JAVA自學之路 五:問題解決知道》中的各種辦法也可以逐步積累自己知識的廣度和深度,那現在什麼才能夠體現水平的不同?當然是項目經驗。 

那麼如果自學我們應該怎麼樣才能學習項目的開發呢?
一個比較有效的辦法是,可以在現有項目的基礎上做的更深入一些,比如在你按照視頻完成了BBS之後,可以增加一些其他的功能,例如註冊/積分/精華/搜索/貼圖等等,在完成了Shopping之後,可以增加一些評論/排行/統計/存貨等等方面的業務邏輯,嘗試用自己的技術將他們作出來,這樣既積攢了項目經驗,又記住了知識點。
那麼如何才能確定我要寫什麼樣的業務邏輯呢?
應該講這對於一個初學者是非常困難的,一些簡單的系統,比如說BBS、Shopping、圖書管理等等,它們的業務邏輯很容易確定,去瀏覽和參考一些現成系統的功能,很容易就能瞭解了。但是對於商用的大型系統,光是瞭解業務邏輯本身就會花費大量的精力,如果有時間有精力有財力的話,還是建議考慮一下我們的培訓吧,這樣經驗的積累和薪水的提升會更快,從以前的統計數據看非常容易就可以回收這筆投資(替尚學堂的廣告,必須得寫,請見諒,但保證真實)。 
如果條件不允許,那麼就按照上面的方法來學習項目吧,不要因爲暫時不能接觸更大型更深入的項目而氣餒,記住:機會總是青睞有準備的頭腦,努力吧。 

發佈了49 篇原創文章 · 獲贊 41 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章