學(xué)習(xí)Java其實(shí)應(yīng)該上升到如何學(xué)習(xí)程序設(shè)計(jì)這種境界,其實(shí)學(xué)習(xí)程序設(shè)計(jì)又是接受一種編程思想。
每一種語言的程序設(shè)計(jì)思想大同小異,只是一些由語言特性的而帶來的細(xì)微差別,比如Java中的Interface,你幾乎在以前的學(xué)習(xí)中沒有碰到過。以下我仔細(xì)給你說幾點(diǎn): 1。
我們必須明確一個(gè)大方向,也就是說現(xiàn)在面向?qū)ο蟮木幊谭懂牎1M管人工智能曾經(jīng)有所浪潮(看看Borland為什么有Turbo Prolog),但未來5-10年工業(yè)界廣泛承認(rèn)并接受的將是面向?qū)ο笫降木幊獭?/p>
2。工業(yè)界目前最流行的面向?qū)ο缶幊陶Z言就是C++和Java。
所以基本上鎖定這兩個(gè)方向就可以了。而且完全可以同時(shí)掌握。
3。掌握J(rèn)ava的精華特性而且一定要知道為什么。
比如,Interface和multi-thread。用interface是更好的多繼承的模型,而多線程則是設(shè)計(jì)到語言一級(jí)的重要特性。
要完全理解interface是為什么,用多線程又有幾種常用的編程模型。 4。
理解了語言的特性是為什么了之后,就可以試著上升到設(shè)計(jì)這個(gè)層次,畢竟學(xué)習(xí)語言是要用的。目前比較好的開發(fā)模式是采用自定向下的面向?qū)ο蟮脑O(shè)計(jì),加上MVC的模式(你可以看一下我介紹的關(guān)于MVC的內(nèi)容)。
首先要找出最頂層的對(duì)象(這往往是最難的),然后一層一層往下遞歸,記住每次應(yīng)符合7+/-2的原則,因?yàn)槲覀內(nèi)说亩逃洃浘褪沁@樣。一般有圖形用戶界面的應(yīng)從界面開始設(shè)計(jì)。
5。有了基本設(shè)計(jì)模型后,可以學(xué)一些設(shè)計(jì)模式(Design Pattern)。
這是目前證明很有效的。比如體系結(jié)構(gòu)模式(Layering分層,Pipe/Filter管道或過濾器),設(shè)計(jì)模式(有很多,比如對(duì)象池Object Pool、緩沖池Cache等),編程模式(比如Copy-on-Write)。
懂了這些模式之后,就會(huì)對(duì)系統(tǒng)的整體結(jié)構(gòu)有很好的把握,而學(xué)術(shù)上也有傾向一個(gè)系統(tǒng)完全可以由各種模式組合而成。前面提到的MT實(shí)際上就有好幾種模式,掌握后就不用自己花很多時(shí)間去試了。
另外一個(gè)很重要的領(lǐng)域就是并行和分布式計(jì)算領(lǐng)域,大概有20種左右。 6。
接下來就不能紙上談兵了,最好的方法其實(shí)是實(shí)踐。一般教科書上的例子并不能算是實(shí)踐,只能算是讓你掌握語言特性用的。
而提倡做實(shí)際的Project也不是太好,因?yàn)槟氵€沒有熟練的能力去綜合各種技術(shù),這樣只能是你自己越來越迷糊。我認(rèn)為比較好的方法是找一些比較經(jīng)典的例子,每個(gè)例子比較集中一種編程思想而設(shè)計(jì)的,比如在我的實(shí)踐當(dāng)中,我曾經(jīng)學(xué)習(xí)過一個(gè)很經(jīng)典的例子就是用Java實(shí)現(xiàn)的HotDraw(源自SmallTalk),你可以用rolemodel或hotdraw在搜索引擎上找一下,我記不大清楚了。
好象rolemodel.com是個(gè)網(wǎng)站,上面有原代碼和一些基本設(shè)計(jì)的文檔。另一個(gè)來源可以到 是個(gè)不錯(cuò)的文檔基地。
從HotDraw上我學(xué)到了什么是Framework,以及如何用rolemodel的方式來構(gòu)造,這樣我就可以應(yīng)用到其他的地方。順便說一句,這個(gè)例子你絕對(duì)不會(huì)覺得小,只會(huì)覺得大,并且他還是真正的商用的Framework。
7。結(jié)合前面學(xué)到的設(shè)計(jì)模式你就可以很好的理解這些經(jīng)典的例子。
并且自己可以用他來實(shí)現(xiàn)一些簡(jiǎn)單的系統(tǒng)。如果可以對(duì)他進(jìn)行進(jìn)一步的修改,找出你覺得可以提高性能的地方,加上自己的設(shè)計(jì),那就更上一個(gè)層次了,也就會(huì)真正地感到有所收獲。
8。好象以上談的跟Java沒什么關(guān)系,其實(shí)我們?cè)缇蛻?yīng)該從單純的學(xué)習(xí)語言到真正的學(xué)習(xí)好編程的領(lǐng)域。
學(xué)習(xí)技術(shù)是沒有止境的,你學(xué)習(xí)第一種語言可能要半年時(shí)間,以后每種語言都不應(yīng)該超過兩個(gè)月,否則你會(huì)覺得學(xué)習(xí)語言是包袱,是痛苦。 9。
學(xué)習(xí)是為了用的,是為了讓你的程序產(chǎn)生價(jià)值,把握住這個(gè)原則會(huì)比較輕松點(diǎn)。 沒有第10點(diǎn)了,因?yàn)闆]有東西是十全十美的,。
我在Java 1.0正式問世前就開始學(xué)習(xí)Java,這么多年過去了,到現(xiàn)在我的Java學(xué)習(xí)歷程還沒有停過。
我閱讀原文書,研究原始碼,撰寫程序,自認(rèn)為走得扎實(shí),不奢望一步登天。像我這樣老式的學(xué)習(xí)方式,顯然和現(xiàn)在的快餐主義背道而馳。
從許多讀者的來信和學(xué)生的反應(yīng)中,我發(fā)現(xiàn)大多數(shù)的人對(duì)于Java的學(xué)習(xí)歷程都差不多是:因?yàn)楣拘枰褂肑ava來進(jìn)行服務(wù)器的計(jì)畫,所以忙忙地學(xué)習(xí)Java語言,然后就開始使用J2EE的API,開始寫起程序來了。如此急就章的學(xué)習(xí)方式,程序員基礎(chǔ)能力根本就不夠,對(duì)于對(duì)象導(dǎo)向精髓不能掌握,對(duì)于Java語言內(nèi)部的運(yùn)作機(jī)制毫無所悉,對(duì)API的整體連貫性懵懵懂懂。
當(dāng)然,我們也不好因此責(zé)怪程序員,畢竟軟件技術(shù)變動(dòng)得太快。公司不可能給程序員足夠的訓(xùn)練之后才開始做計(jì)畫。
程序員一下子被指派使用A技術(shù),還沒弄懂A技術(shù)是怎么回事,又被指派使用B技術(shù),而且都是縫縫補(bǔ)補(bǔ)的方式邊學(xué)邊用,每次都像是全新的開始,遑論技術(shù)能量的累積。我很慶幸的是,我不太有這樣的困擾。
因?yàn)槲沂琴Y訊工程系出身(而且我大學(xué)時(shí)上課一向很認(rèn)真),所以理論基礎(chǔ)穩(wěn)固,學(xué)習(xí)新技術(shù)對(duì)我來說不是難事。我就讀大學(xué)時(shí),周遭許多同學(xué)都瞧不起數(shù)據(jù)結(jié)構(gòu)、程序語言、操作系統(tǒng)這些所謂「學(xué)院派」的課程,以為這些課程一點(diǎn)都不實(shí)用。
他們認(rèn)為到了外面公司,這些信息科系所學(xué)的一切都派不上用場(chǎng),「只要會(huì)Visual Basic和數(shù)據(jù)庫就夠了」。這種偏差的心態(tài),恐怕會(huì)使得他們?cè)谥R(shí)經(jīng)濟(jì)時(shí)代吃足了苦頭。
另外還有一派同學(xué)很瞧不起程序設(shè)計(jì)工作,他們告訴我,像我這樣會(huì)寫程序的人,未來進(jìn)了社會(huì)「還不是被他們這些走管理的人踩在腳下」。所以,他們很輕忽理工課程的學(xué)習(xí),甚至還有人相當(dāng)熱衷「成功學(xué)」,認(rèn)為這是邁向成功的快捷方式,卻因此把學(xué)校的課業(yè)棄之不顧。
我不敢相信有人竟然如此地本末倒置。前一類的人太過于短視近利,后一類的人太過于好高騖遠(yuǎn)。
我一直很不能理解這些人的想法為什么會(huì)這樣,或許是因?yàn)樯鐣?huì)環(huán)境的風(fēng)氣使然。我很慶幸我到目前還沒被社會(huì)的大染缸給玷污了(最好這輩子都不要)。
我不認(rèn)為我的學(xué)習(xí)方式是一種典范,但是一路走來,倒也頗有進(jìn)展。許多讀者來信問我的學(xué)習(xí)歷程,雖然我個(gè)人的學(xué)習(xí)方式不見得適用于每個(gè)人,但或許還有一些參考價(jià)值(特別是對(duì)于那些有志進(jìn)入信息行業(yè)的年輕學(xué)子),我想透過本文簡(jiǎn)短地?cái)⑹鲆幌隆?/p>
我一向是采用先深后廣(也稱為Bottom-Up,Deep-First)的學(xué)習(xí)方式。比方說,當(dāng)我在學(xué)A技術(shù)的時(shí)候,學(xué)到一半發(fā)現(xiàn)需要B技術(shù)的基礎(chǔ),我會(huì)到書局找出一兩本B技術(shù)的書,然后把A先擱著,開始看起B(yǎng)技術(shù)的書。
甚至,我在技術(shù)書籍上看到不太熟悉的英文句構(gòu)時(shí),我會(huì)找出一本英文文法書詳細(xì)讀過。這種先深后廣的學(xué)習(xí)方式,適合學(xué)生時(shí)代全面地自我能力提升,但不適合業(yè)界人士。
試想,老板要你開發(fā)的ERP系統(tǒng)已經(jīng)延遲了,你怎有空研究J2EE原文書中的英文文法。先深后廣的好處是,學(xué)習(xí)很扎實(shí);缺點(diǎn)是有時(shí)候會(huì)偏離主題太多。
有一次我發(fā)現(xiàn)我原本是要學(xué)某軟件技術(shù),幾次「先深后廣」下來,我居然看起老子的道德經(jīng)了。在技術(shù)上,我一直都是一個(gè)喜新厭舊的人,很少有軟件技術(shù)能讓我持續(xù)研究半年以上,我?guī)缀趺扛魩讉€(gè)月就要換一次領(lǐng)域。
Java 能讓我持續(xù)這么久,也正是因?yàn)镴ava的領(lǐng)域廣。透過Java,我的技術(shù)視野變開闊了。
這些年來,我換過的 Java 相關(guān)領(lǐng)域包括了:虛擬機(jī)器、數(shù)據(jù)庫、企業(yè)運(yùn)算、多媒體、2D/3D圖學(xué)、網(wǎng)絡(luò).…..等。我的學(xué)習(xí)完全是興趣導(dǎo)向的,所以壓力并不大。
因?yàn)橛信d趣,所以我會(huì)很想充分理解一切細(xì)節(jié)。又因?yàn)槔斫猓栽S多原本片片斷斷的知識(shí)都可以漸漸互相融會(huì)貫通,累積技術(shù)能量,理論和實(shí)務(wù)之間的藩籬被打破了,學(xué)習(xí)效率倍增。
我多年來的學(xué)習(xí)觸覺很敏銳,我常常會(huì)搶先一步學(xué)好有前瞻性的技術(shù)。比方說,Java還在beta時(shí)、UML還在0.8時(shí)、XML還在draft時(shí),我都已經(jīng)透過網(wǎng)絡(luò)下載技術(shù)文件回來每天抱著猛讀了。
而在Java、UML、XML當(dāng)紅之后,我已經(jīng)差不多把這些技術(shù)都摸熟了。至于該學(xué)什么技術(shù),我的判斷方式是以技術(shù)的優(yōu)劣來決定。
優(yōu)秀而有獨(dú)到之處的技術(shù)是我的最愛,雖然這類的技術(shù)不見得會(huì)在市場(chǎng)上勝出,但學(xué)習(xí)這些技術(shù)所得到的啟發(fā),對(duì)于技術(shù)能量的累積與能力的提升會(huì)有相當(dāng)大的助益。至于技術(shù)差,但市場(chǎng)需求甚殷者,我還是懶得碰。
(好吧!我承認(rèn)我曾因?yàn)槭袌?chǎng)需求的緣故而學(xué)過MFC。越清楚MFC的技術(shù)細(xì)節(jié),越是討厭它,這真是個(gè)不堪回首的經(jīng)驗(yàn)。)
我通常只看英文技術(shù)資料,畢竟大部分第一手的技術(shù)信息都是以英文來傳播。所以我很早就開始閱讀英文技術(shù)資料。
讀英文技術(shù)資料的好處是,就算沒有學(xué)到書中的專業(yè)知識(shí),至少也累積培養(yǎng)了英文閱讀能力,我一直都是抱著這樣的態(tài)度。一開始是正襟危坐的看英文技術(shù)書籍,字典、翻譯機(jī)隨侍在側(cè);幾年下來,現(xiàn)在是躺著看、趴著看、很隨性地看英文技術(shù)書籍,因?yàn)榭从⑽募夹g(shù)書籍變成一種習(xí)慣了。
現(xiàn)在,我可以用很快的速度吸收英文技術(shù)書籍的知識(shí)(有人叫我「吃書的機(jī)器」,我把這稱號(hào)當(dāng)作是一種恭維)。近年來,我花在寫程序的時(shí)間不多,因?yàn)闀r(shí)間對(duì)。
學(xué)習(xí)了一學(xué)期的Java課程,覺得是該總結(jié)自己的心得體會(huì)了。開始學(xué)習(xí)任何一門課(包括java),興趣最重要。一直覺得自己在學(xué)計(jì)算機(jī)編程語言,學(xué)習(xí)了很多,但每門語言都停留在知識(shí)邊緣地帶,都沒深入到它們的精華部分,對(duì)它們的精華部分知之甚少,于是趁學(xué)校開設(shè)這門課,并且有自己的老師講解,還有了上機(jī)的機(jī)會(huì),比自己自學(xué)省事多了,于是鼓足信心,開始了漫長(zhǎng)的java征途。
還記得我編寫的第一個(gè)經(jīng)典程序“hello Word”。從那時(shí)起我已開始走進(jìn)Java的世界。當(dāng)時(shí)自己不是很理解為什么main方法一定要這樣來定義public static void main(String[] args),能不能不這樣寫?問了好多同學(xué),他們告訴我的答案是一樣的“java本身要求就是這樣子的”,但我自己不甘心,就進(jìn)行了下面的好多操作:把main改個(gè)名字運(yùn)行一下,看看報(bào)什么錯(cuò)誤,然后根據(jù)出錯(cuò)信息進(jìn)行分析;把main的public取掉,在試試看,報(bào)什么錯(cuò)誤;static去掉還能不能運(yùn)行;不知道m(xù)ain方法是否一定要傳一個(gè)String[]數(shù)組的,把String[]改掉,改成int[],或者String試試看;不知道是否必須寫args參數(shù)名稱的,也可以把a(bǔ)rgs改成別的名字,看看運(yùn)行結(jié)果如何。 結(jié)果把Hello World程序反復(fù)改了七八次,不斷運(yùn)行,分析運(yùn)行結(jié)果,最后就徹底明白為什么了main方法是這樣定義的了。接著在以后的學(xué)習(xí)中我也采用這樣的方法解決問題,卻發(fā)現(xiàn)自己的速度比別人慢了好多,我就把自己的課余時(shí)間也分一部分給了java。
因?yàn)榛A(chǔ)是最重要的,只有基礎(chǔ)牢固才有可能對(duì)后面的學(xué)習(xí)有更加深刻的認(rèn)識(shí)!
學(xué)習(xí)一門新的語言,參考書是離不開的。聽老師說訂的教材偏難,不適合我們初學(xué)者,于是我在圖書館借了參考書(一本篇幅較短的入門書來學(xué)習(xí)那些最簡(jiǎn)單、最基本的東西,包括學(xué)習(xí)Java語法等)。同時(shí),對(duì)一個(gè)最簡(jiǎn)單的程序也應(yīng)該多去調(diào)試,多想想如果改動(dòng)一下會(huì)出現(xiàn)什么結(jié)果?為什么必須那樣寫?多去想想這些問題然后去操作,會(huì)讓你有更多的收獲。這樣反復(fù)地思考是很有用的。
在學(xué)習(xí)Java的語法時(shí),Java的語法是類似c語言的,所以學(xué)習(xí)的比較輕松。唯一需要注意的是有幾個(gè)不容易搞清楚的關(guān)鍵字的用法,public,protected,private,static,什么時(shí)候用,為什么要用,怎么用,和同學(xué)一起討論了好久才得以解決。
在學(xué)習(xí)Java的面向?qū)ο蟮木幊陶Z言的特性。比如繼承,構(gòu)造器,抽象類,接口,方法的多態(tài),重載,覆蓋,Java的異常處理機(jī)制。對(duì)于一個(gè)沒有面向?qū)ο笳Z言背景的人來說,我覺得這個(gè)過程需要花很長(zhǎng)很長(zhǎng)時(shí)間,因?yàn)閷W(xué)習(xí)Java之前沒有C++的經(jīng)驗(yàn),只有C語言的經(jīng)驗(yàn),花了很長(zhǎng)時(shí)間,才徹底把這些概念都搞清楚,把書上面的例子反復(fù)的揣摩,修改,嘗試,把那幾章內(nèi)容反復(fù)的看過來,看過去,看了很多遍,才徹底領(lǐng)悟了。
開始熟悉Java的類庫?;A(chǔ)類庫里面的類非常非常多。據(jù)說有3000多個(gè)。但是我真正使用的只有幾個(gè),比如說 java.io.*; java.util.*; java.sql.*;等。
在學(xué)習(xí)Java的過程中我得出這樣的結(jié)論:
1.學(xué)習(xí)中,要養(yǎng)成良好的習(xí)慣(寫括號(hào)時(shí)要成對(duì),字母大小寫要區(qū)分,單詞拼寫要準(zhǔn)確)。
2.在學(xué)習(xí)的過程中,最好不是僅僅停留在java表層,不是抄書上的例子運(yùn)行出結(jié)果就可以。要注意,即便對(duì)一個(gè)簡(jiǎn)單的例子也要有耐心去琢磨、調(diào)試、改動(dòng)。
3.在學(xué)習(xí)的過程中一定要?jiǎng)邮肿?、試著寫代碼,而不是抱一本書看看就行。很多東西和體會(huì)必須自己動(dòng)手才能真正屬于自己。
4.在 Java 的學(xué)習(xí)過程中,可能會(huì)遇到形形色色的問題不容易解決,應(yīng)多去專業(yè)論壇了解相關(guān)的知識(shí),書本上的知識(shí)有限。要會(huì)從網(wǎng)上搜索有用的信息 加以整理,促進(jìn)學(xué)習(xí)的深入和知識(shí)水平的提高。
看了好多網(wǎng)上課程,說學(xué)到一定程度要嘗試著自己做東西,但覺得自己僅僅經(jīng)過一學(xué)期的學(xué)習(xí),還遠(yuǎn)遠(yuǎn)不夠,希望自己在以后學(xué)習(xí)中繼續(xù)努力,能夠真真正正擁有一門編程語言,對(duì)自己今后的發(fā)展起到作用。在學(xué)習(xí)java語言的同時(shí),也讓我學(xué)會(huì)了如何來發(fā)現(xiàn)問題,如何解決問題,怎樣有效的學(xué)習(xí)等等,相信會(huì)對(duì)我一生都有幫助。
網(wǎng)上有很多java的基礎(chǔ)教程,但是這套教程只是基礎(chǔ)。
要學(xué)會(huì)真正到j(luò)ava就要一套完整到j(luò)ava視頻教程。完整的java教程可以看看IT學(xué)習(xí)聯(lián)盟的<>。
零基礎(chǔ)Java就業(yè)班包括Java基礎(chǔ) 進(jìn)階 高級(jí) 項(xiàng)目。是一套完整的Java視頻教程。
關(guān)于如何學(xué)習(xí)java,我剛才看到一篇很不錯(cuò)的文章,是一個(gè)農(nóng)民工介紹自己如何自學(xué)java,并找到j(luò)ava的工作,里面介紹了他的學(xué)習(xí)方法和學(xué)習(xí)過程,希望對(duì)你有幫助。 我是一名地地道道的農(nóng)民工,生活在經(jīng)濟(jì)落后的農(nóng)村,有一個(gè)哥哥和一個(gè)弟弟,父母都是地道的農(nóng)民,日出而作,日落而息,我從小到大學(xué)習(xí)一直很好,從小學(xué)到高一都,成績(jī)?cè)谌?jí)一直名列前茅,這樣我也順利了考上省的重點(diǎn)高中,然而,每個(gè)學(xué)期開學(xué)是家里最為難的時(shí)候,每次交學(xué)費(fèi)都讓父母發(fā)愁許久,家里為了給我籌錢讀書,都借了不少錢,才讓我讀上高中。
我知道我讀到高中家里已經(jīng)欠了好多債,為了減輕家里的負(fù)擔(dān),我選擇了退學(xué)。 2009年我高一退學(xué),為了給家里還債,干過建筑工地的小工,搞過塑料制品加工,送水工等等。
很工資都很低,一個(gè)月也就1000多,加上加班費(fèi)一個(gè)月能拿2000多一點(diǎn),我每個(gè)月都向家里寄回800-1000元,到了2011年末,一次偶然的機(jī)會(huì)我接觸了Java,聽說Java的前景挺不錯(cuò),工資相對(duì)于我一個(gè)農(nóng)民工來說簡(jiǎn)直是天文數(shù)字,于是我在新華書店買了幾本Java的書,盡管白天辛苦工作,晚上回來還是堅(jiān)持看書,但有于基礎(chǔ)太差很多都很不明白,但還是堅(jiān)持看,一有看1-2個(gè)小時(shí)Java的書,看著看著許多基礎(chǔ)都慢慢的學(xué)會(huì)了,但那些比較難的還是看不懂,后來還買了有些關(guān)于框架的書,還是看不懂,這樣斷斷續(xù)續(xù)的持續(xù)了半年多,覺得自己Java的基礎(chǔ)都差不多懂了,但框架還是看不懂,還有最缺的項(xiàng)目經(jīng)驗(yàn),看了很多招聘Java程序員的簡(jiǎn)介都要項(xiàng)目經(jīng)驗(yàn),相對(duì)我一個(gè)農(nóng)民工來連框架都弄不明白,想找一份Java工作對(duì)我來說簡(jiǎn)直是奢侈。我只想學(xué)Java,并不敢想以后能從事Java的工作。
一次,在百度上看到一篇讓我很鼓舞的文章,是一個(gè)Java高手介紹在沒有基礎(chǔ)的朋友怎么自學(xué)入門Java,文章寫的很好,包含了如何學(xué)習(xí),該怎么學(xué)習(xí),他提到一個(gè)方法就是看視頻,因?yàn)榭磿鴮?shí)在太枯燥和費(fèi)解的,不少是我們也看不懂,這點(diǎn)我真的很認(rèn)同,我自己看書都看了很久才學(xué)會(huì)基礎(chǔ)。曾經(jīng)有想過參加培訓(xùn),但是上萬元的培訓(xùn)費(fèi)讓我望而卻步,我工資這么低,每個(gè)月還有向家里匯錢,加上城市消費(fèi)比較高,雖然每個(gè)月只有幾百剩下,但是相對(duì)于上萬萬學(xué)費(fèi)和四個(gè)月的吃住費(fèi)用逼我連想不敢想。
于是我決定看視頻,我就去搜索Java的視頻,雖然我零星的找到一些Java的視頻,但是都不系統(tǒng)。最重要連項(xiàng)目都沒有。
后來我找到一份很好的視頻,是IT學(xué)習(xí)聯(lián)盟這個(gè)網(wǎng)站一套視頻叫<>,網(wǎng)址:和css怎么樣 如何可以的話 上手jsp是很快的
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:3.508秒