官术网_书友最值得收藏!

1.5 怎么學(xué)習(xí)Java

學(xué)習(xí)Java語言,先要解決入門的問題。要找到阻礙入門的難點,一個一個地克服,這樣才能有效率。本節(jié)分析了讀者在學(xué)習(xí)Java語言過程中可能遇到的困難,并提出了有針對性的解決方法。

1.5.1 入門之道

人們發(fā)明工具擴展自己的能力。飛機使人“飛翔”在天空、潛艇使人“遨游”在深海。使用任何工具都需要學(xué)習(xí)工具的用法。工具越復(fù)雜,學(xué)習(xí)越費時間。學(xué)習(xí)開飛機一定比學(xué)習(xí)騎自行車費時。計算機是人類一項偉大的發(fā)明,它是用來幫助人們進行腦力勞動的機器。因為它復(fù)雜,所以,需要較長的時間來學(xué)習(xí)。

人們常說:萬事開頭難。程序設(shè)計入門之難,難在何處?只有鎖定難點,才能攻堅克難。

(1)難在基礎(chǔ)知識不具備。對于學(xué)習(xí)Java所需要的基礎(chǔ)知識我們?yōu)樽x者進行了全面的梳理,在本章的插頁中對于Java的基礎(chǔ)知識分別做了系統(tǒng)講解。如果對計算機的基本組成和工作原理以及計算機解題過程不了解,如果沒有掌握某些必備的基礎(chǔ)知識,例如數(shù)制知識和數(shù)在內(nèi)存中的存儲形式,就不能很好地理解位的左右移算符的操作。如果不知道數(shù)的補碼表示,就不能得出并理解如圖1-15所示的代碼的運行結(jié)果,就不知道0-1的結(jié)果是-1,不知道int型最大正整數(shù)2147483647+1,得到的是int型最小負整數(shù)-2147483648,詳見圖1-15所示的代碼和運行結(jié)果。

圖1-15 int的最大值和最小值

(2)難在目的不清晰。如果對程序設(shè)計語言以及編寫程序的目的和意義不甚了解,學(xué)習(xí)寫程序就沒有目的,也建立不起來興趣,不可能有持久的動力。

(3)難在語法知識不準(zhǔn)確、不扎實。如果對程序設(shè)計語言的語法知識掌握不全面、不準(zhǔn)確,那么寫程序就會困難重重。語法知識是枯燥乏味的,在這一點上計算機語言和自然語言是一致的。如果識字不多、詞匯量缺乏,不懂語法規(guī)則,寫文章的難度可想而知。同樣地,對程序設(shè)計語言的語法規(guī)則不熟悉,寫不出程序,或者即使勉強寫出程序,也是錯誤連篇的。

(4)難在數(shù)學(xué)基礎(chǔ)薄弱,抽象思維能力不強,對數(shù)學(xué)的作用認(rèn)識不清晰。例如要求編寫用梯形法計算定積分的程序,如果不知道梯形法求定積分的數(shù)學(xué)原理,寫程序就無從下手。

(5)難在知識的綜合運用。算法和數(shù)據(jù)結(jié)構(gòu)通常屬于程序語言課程的后續(xù)課。但是,尼克勞斯·沃思(Niklaus.Wirth)的著名公式:程序=算法+數(shù)據(jù)結(jié)構(gòu)指出了算法和數(shù)據(jù)結(jié)構(gòu)對于程序設(shè)計的重要性。所以,讀者需要超前學(xué)習(xí)一些常用算法和數(shù)據(jù)結(jié)構(gòu)知識。

(6)難在問題分析不準(zhǔn)確。編寫的程序不能正確實現(xiàn)問題自身的計算和邏輯,執(zhí)行結(jié)果會顯得答非所問。

(7)難在思維方式不匹配。如果從人類解題方式到機器解題方式的轉(zhuǎn)變(Transition)不做充分的訓(xùn)練,二者之間的思維方式差異將成為學(xué)習(xí)編程序最大的絆腳石。

我們常說用漢語思維、用英語思維,是指用語言建模我們的思維過程,表達思維結(jié)果。計算機語言是形式語言,和自然語言在表達思維的形式上差異很大。

(1)自然語言詞匯豐富、語法復(fù)雜、有引申義、有歧義、有冗余、有模糊表達。

(2)形式語言詞匯和語法規(guī)則有限、無引申義、無歧義、無冗余、要精確表達。

例如說:

“如果我們不能按期完成,如果我們不能保證質(zhì)量,那么我們的工程是失敗的。”

在計算機程序中,直接翻譯成下面的邏輯是錯誤的。

 

if(finished Date>expired Date)

if(quality Level<disigned Level)

printf(“The engineering is failed.”);

為什么這個邏輯是錯誤的?顯然,自然語言中兩個如果疊句之間是或的關(guān)系,但是,在計算機語言中,連續(xù)的兩個if語句的條件表達式是與的關(guān)系。后面的if是前者的嵌套的if語句。因此需要修改成下面的格式才能與自然語言邏輯一致。

 

if(finished Date>expired Date ||quality Level<disigned Level)

printf(“The engineering is failed.”);

再如,自然語言中某數(shù)xn次方,有多種表達方式,寫成數(shù)學(xué)式子也有x^nxn等形式。但是在Java語言中,只能是Math.pow(x,n)這種形式了。如果寫成下面的形式,那就已經(jīng)不是表達式了。

for(inti = 1; i <=n; i++) y = y*x;

初學(xué)者普遍有一種感覺是高級語言死板。但如果高級語言定義不嚴(yán)格,恐怕編譯器就受不了了。

讀者學(xué)習(xí)高級語言的語法語義規(guī)則,及程序結(jié)構(gòu)知識,通過對具體問題求解過程的積累,可逐步達成從人類解題方式到機器解題方式的轉(zhuǎn)變。

概括地說,讀者只有打好堅實的基礎(chǔ),寫程序才能快速入門。從手工計算到利用計算機,正如從步行到乘飛機,計算速度有了大幅度提高。人類只有為計算機編程序,才能“乘機”而行,享受高速計算帶來的快樂。而編程序,需要具有的基礎(chǔ)知識和能力類似于圖1-16所示的梯級上升狀,讓我們拾級而上,踏上編程之旅吧!

圖1-16 編程需要的基礎(chǔ)知識

1.5.2 精通之路

俗話說:師父領(lǐng)進門,修行在個人。入門不能一蹴而就,精通更需要較長時間。讀者在學(xué)習(xí)過程中應(yīng)注重實踐、多做編程練習(xí),同時還需要注意,方向正確、方法得當(dāng)。

所謂方向正確指的是:要進行Java知識的拓展。Java的類數(shù)量多,從最初的幾百個類到目前的幾千個類,不可能在一本書中完全講解。程序員由于不知道類庫中有某個現(xiàn)成的類可用,自己辛辛苦苦地從頭寫一個,浪費了寶貴時間。在充分理解本書所講解內(nèi)容的基礎(chǔ)上,讀者應(yīng)多研讀一些Java經(jīng)典著作,諸如《Head First設(shè)計模式》、《Java Language Specification》(Third Edition)(James Gosling著)、《Thinking in Java》(Bruce Eckel著)、《Effective Java中文版》、《Java并發(fā)編程實戰(zhàn)》、《重構(gòu)改善既有代碼的設(shè)計》等書。

所謂方法得當(dāng),讀者應(yīng)注意實現(xiàn)幾個轉(zhuǎn)變:從語法到語用的轉(zhuǎn)變、代碼數(shù)量積累到代碼質(zhì)量提高的轉(zhuǎn)變、學(xué)習(xí)Java語言到研究Java技術(shù)的轉(zhuǎn)變、寫程序(program)到做項目(project)的轉(zhuǎn)變。

總體而言,讀者要通過擴展閱讀、研究技術(shù)、完成項目,逐漸走向精通Java的境界。

拓展知識

James Gosling,Java之父

James Gosling 在12歲時已經(jīng)能設(shè)計電子游戲機,幫助鄰居修理收割機。他大學(xué)時期在天文系擔(dān)任程序開發(fā)工讀生,并于1977年獲得了加拿大卡爾加里大學(xué)計算機科學(xué)學(xué)士學(xué)位。1981年James Gosling開發(fā)了Unix上運行的Emacs類編輯器Gosling Emacs(以C語言編寫)。1983年他獲得了美國卡內(nèi)基梅隆大學(xué)計算機科學(xué)博士學(xué)位。畢業(yè)后James Gosling來到IBM工作,設(shè)計出了IBM第一代工作站系統(tǒng),但不受重視。后來他轉(zhuǎn)至Sun公司工作。

1990年,James Gosling與Patrick Naughton和Mike Sheridan等人合作開發(fā)了“綠色計劃”項目,該項目后來發(fā)展成了一套語言叫做“Oak”,后改名為Java。1994年底,James Gosling在硅谷召開的“技術(shù)、教育和設(shè)計大會”上展示了Java程序。2000年,Java成為世界上最流行的計算機語言。

2009年4月,Sun公司被甲骨文公司并購。James Gosling于2010年4月時宣布從甲骨文公司離職。2011年3月29日,他宣布加入Google。

2011年8月30日,僅僅加入Google數(shù)月之后的James Gosling宣布離開,加盟了一家從事海洋機器人研究的創(chuàng)業(yè)公司Liquid Robotics,并擔(dān)任首席軟件架構(gòu)師。

2017年5月22日,James Gosling加盟亞馬遜云計算部門。

主站蜘蛛池模板: 江山市| 馆陶县| 保靖县| 淮北市| 年辖:市辖区| 梅州市| 公安县| 宁夏| 从化市| 武冈市| 靖西县| 昆明市| 剑阁县| 弋阳县| 利津县| 延津县| 临邑县| 阿勒泰市| 扎囊县| 澄迈县| 金乡县| 正定县| 华容县| 武汉市| 襄汾县| 井研县| 大连市| 徐闻县| 来安县| 永仁县| 尉犁县| 永州市| 桦川县| 工布江达县| 黄山市| 莱西市| 昌图县| 凯里市| 苏尼特左旗| 天峨县| 永平县|