《Java就該這樣學(xué)》基于建構(gòu)主義教育思想,通過大量循序漸進(jìn)的案例,讓學(xué)生在體驗(yàn)中掌握J(rèn)ava語句,同時(shí)獲得編程能力、排錯(cuò)能力和學(xué)習(xí)能力!禞ava就該這樣學(xué)》多次使用陷阱式教學(xué)法,幫助學(xué)生深刻理解所學(xué)知識(shí),理解面向?qū)ο缶幊趟枷!禞ava就該這樣學(xué)》詳細(xì)介紹了Java程序設(shè)計(jì)的開發(fā)環(huán)境、概念和方法。內(nèi)容分為四個(gè)階段:小案例階段、小案例推動(dòng)大項(xiàng)目階段、重點(diǎn)建立復(fù)雜編程邏輯階段和綜合大項(xiàng)目階段,用于鞏固面向?qū)ο缶幊趟枷,并且彌補(bǔ)即時(shí)聊天項(xiàng)目在數(shù)據(jù)庫應(yīng)用上的不足。
本書的內(nèi)容和組織形式立足于高校教學(xué)教材的要求,適用于從職業(yè)院校到重點(diǎn)本科院校的課程和學(xué)生群體,可以作為Java語言入門教材,或者面向就業(yè)的實(shí)習(xí)實(shí)訓(xùn)教材,同時(shí)也可以作為計(jì)算機(jī)技術(shù)的培訓(xùn)教材,讀者完全可以通過本書自學(xué)Java技術(shù)。
一直在尋找一本能夠快樂教大家學(xué)編程的書,今年碰到王洋老師,被他的“教育是用生命影響生命的過程”而打動(dòng)!再仔細(xì)看他的書,一看不忍釋卷,不是一般的有趣,簡直是相當(dāng)?shù)挠腥,真如王洋老師自己所說的,他學(xué)中文的妻子也跟著《Java就該這樣學(xué)》學(xué)會(huì)了Java編程! 讓我們一起來隨著《Java就該這樣學(xué)》玩代碼吧!
關(guān)于學(xué)習(xí)
一直以來人們都認(rèn)為教師和書籍是知識(shí)的載體,教學(xué)過程就是將知識(shí)傳遞給學(xué)生,于是書上寫滿了正確的知識(shí),學(xué)生看書就可以迅速掌握知識(shí),理論上這是高效率的系統(tǒng)。事實(shí)上只有極少數(shù)人能夠適應(yīng)這樣的系統(tǒng),因?yàn)檫@些知識(shí)也是有人經(jīng)過一個(gè)過程得到的,忽略了發(fā)現(xiàn)知識(shí)的過程,而直接將結(jié)果傳遞給學(xué)生,似乎高效率,但是學(xué)生卻常常無所適從,因?yàn)閷W(xué)習(xí)是發(fā)現(xiàn)知識(shí)的過程,而不是記住知識(shí)的過程。
好在建構(gòu)主義教育思想指明了更加適合學(xué)生的教學(xué)過程,在這一思想下,書和教師從正確知識(shí)的傳遞者,轉(zhuǎn)變成探索知識(shí)的引領(lǐng)者,帶領(lǐng)著學(xué)生去體驗(yàn)、去感覺、去發(fā)現(xiàn)屬于學(xué)生自己的知識(shí)。正如這本書,讀者會(huì)發(fā)現(xiàn)有60%的內(nèi)容是不正確的,這些錯(cuò)誤是學(xué)習(xí)過程避免不了的。優(yōu)秀學(xué)生的不同之處就是,通過自己的努力在到達(dá)學(xué)習(xí)目標(biāo)的道路上,不斷地調(diào)整,將錯(cuò)誤的理解剔除掉,問題是大多數(shù)學(xué)生無法完成這個(gè)過程,要么陷入錯(cuò)誤的包圍中,最終放棄了探索,要么通過死記硬背來達(dá)到學(xué)習(xí)目的,結(jié)果是學(xué)生能夠通過考核,卻沒有運(yùn)用知識(shí)的能力。學(xué)習(xí)離正確的軌道越來越遠(yuǎn),甚至很多人迷失了學(xué)習(xí)的真正目標(biāo),將記住知識(shí)作為唯一的目標(biāo),很多教育者苦苦探索的正確的教育途徑,在教育理論研究中早已經(jīng)被發(fā)現(xiàn),那就是建構(gòu)主義教育。
建構(gòu)主義教育思想從來不認(rèn)為掌握知識(shí)是學(xué)習(xí)的最終目的,我認(rèn)為學(xué)習(xí)的目標(biāo)是認(rèn)知、能力和精神。認(rèn)知和知識(shí)是不同的,知識(shí)停留在人的頭腦中,而認(rèn)知是能夠被熟練使用的知識(shí);能力在不同的領(lǐng)域是不同的,在這本書的范疇內(nèi),一個(gè)優(yōu)秀的Java程序員,需要有編程的能力、排除錯(cuò)誤的能力、探索新技術(shù)的能力;如果學(xué)習(xí)的目的僅僅是為了掌握一項(xiàng)技術(shù),那么人終將會(huì)被新的技術(shù)手段所替代,任何學(xué)習(xí)過程都需要是生命價(jià)值的提升,一個(gè)程序員需要有嚴(yán)謹(jǐn)?shù)膽B(tài)度、專注的品質(zhì)、探索的精神和創(chuàng)新的意識(shí)。這些學(xué)習(xí)目標(biāo)不是一節(jié)課或一個(gè)章節(jié)的任務(wù),而是需要通過整個(gè)教學(xué)過程來建構(gòu)。
一直以來學(xué)生的學(xué)習(xí)動(dòng)機(jī)都是教育理論界熱衷討論的話題,我認(rèn)為學(xué)生學(xué)習(xí)的動(dòng)機(jī)有三個(gè)方面:一是為了獲得喜悅,二是為了消除恐懼,三是自我效能。好的成績可以獲得家長、老師的表揚(yáng),可以有更好的名次甚至獎(jiǎng)學(xué)金;而差的成績會(huì)被批評(píng)、留級(jí),甚至拿不到畢業(yè)證。我們發(fā)現(xiàn)普遍的教學(xué)手段是為了推動(dòng)學(xué)習(xí)動(dòng)機(jī)的前兩個(gè)方面,這造成了兩個(gè)可能的結(jié)果:一是有些學(xué)生對(duì)于獎(jiǎng)勵(lì)或者懲罰麻木了,一旦喪失了學(xué)習(xí)動(dòng)機(jī),自然好的成績就無從談起;二是在另外一些學(xué)生身上,這些手段一直能夠起作用,我們會(huì)得到所謂的好學(xué)生,問題是,這些動(dòng)機(jī)是外界推動(dòng)的,而非內(nèi)生的,這些習(xí)慣于此的好學(xué)生或許一生都在意別人的評(píng)價(jià)。如果教學(xué)過程能夠激發(fā)學(xué)生的自我效能,讓學(xué)生的學(xué)習(xí)是基于自己強(qiáng)烈的愛好和成功的喜悅,我們就一定能夠培養(yǎng)出優(yōu)秀的學(xué)生,而他們也將一生受益。
問題是,為什么建構(gòu)主義教育思想如此的好,卻很少在教學(xué)實(shí)踐中應(yīng)用?這是因?yàn)榻?gòu)主義和現(xiàn)有的教學(xué)形式相比仍有些弱點(diǎn):
第一,建構(gòu)主義教育的效率理論上比較低,F(xiàn)在我們能夠在短時(shí)間內(nèi)將大量的正確知識(shí)傳遞給學(xué)生,學(xué)生只需要理解記憶就好了,而建構(gòu)主義教育要呈現(xiàn)知識(shí)探索的過程,這樣會(huì)消耗更多的時(shí)間和精力。
第二,建構(gòu)主義教育的效果不可控。學(xué)生是通過體驗(yàn)自己發(fā)現(xiàn)整合知識(shí),那么不同的學(xué)生或許得到的結(jié)論不同、深度不同。
第三,考核困難。我們不能再用知識(shí)點(diǎn)來考核學(xué)生,因?yàn)榻虒W(xué)過程中就沒有傳遞經(jīng)典的知識(shí)點(diǎn)。
第四,實(shí)施建構(gòu)主義教育對(duì)于教師的要求比較高。教學(xué)過程的設(shè)計(jì)建立在對(duì)學(xué)生深入理解的基礎(chǔ)上,教師不僅僅要準(zhǔn)備知識(shí)。
為了實(shí)現(xiàn)上述效果,教師將扮演不同以往的角色,教師不再是知識(shí)的載體,教師將陪伴著學(xué)生一同探索,帶領(lǐng)著學(xué)生犯錯(cuò)誤,引領(lǐng)著學(xué)生思考整合。為了克服建構(gòu)主義教育思想的弱點(diǎn),在寫這本書時(shí),我基于對(duì)學(xué)生和技術(shù)的理解,剔除了大量知識(shí)點(diǎn)的講解,在反復(fù)的教學(xué)實(shí)踐中,已經(jīng)能夠獲得和傳統(tǒng)教學(xué)相同的教學(xué)效率。另外,我大量總結(jié)和研究了學(xué)生的學(xué)習(xí)過程,建立了學(xué)生在學(xué)習(xí)Java過程中的學(xué)習(xí)曲線,依照學(xué)習(xí)曲線來評(píng)估和考核學(xué)生的學(xué)習(xí)效果。
關(guān)于本書
本書總結(jié)了我多年來在這條道路上的探索,力求提供基于建構(gòu)主義教育思想的Java教學(xué)材料,幫助學(xué)生輕松地掌握作為Java程序員所需要的知識(shí)和能力。書中的內(nèi)容并不是簡單的案例堆砌,每個(gè)部分的任務(wù)都包含了對(duì)相關(guān)知識(shí)的整合,都基于學(xué)生的學(xué)習(xí)曲線特點(diǎn)。
我在8年教學(xué)探索后才動(dòng)手寫這本書,是因?yàn)槲乙恢毕嘈拧敖逃怯蒙绊懮倪^程”。我無法在一本書中實(shí)現(xiàn)和我親自上課同樣的影響過程,課堂上一遍遍地重復(fù)代碼所傳遞的嚴(yán)謹(jǐn)態(tài)度,無法在書中呈現(xiàn),加上我對(duì)技術(shù)、對(duì)學(xué)生的理解,以及對(duì)建構(gòu)主義教育思想理解的局限,讓我清楚地知道,我并沒有完成一部讓我心滿意足的作品,書中不可避免地有很多不足,懇請(qǐng)讀者批評(píng)指正。
這本書的內(nèi)容是我數(shù)以萬計(jì)的學(xué)生的成果,甚至有很多案例是我的學(xué)生在學(xué)習(xí)過程中發(fā)明的。從8年前開始的這段探索并不是一揮而就的,我誠摯地感謝我所教過的學(xué)生,是他們的忍受、包容和努力幫助我完成了這本書。我要感謝我的家人,我兒子的出生和成長,讓我開始接觸和研究教育理論,給我之前漫無目的的探索指明了方向。為了讓這本書通俗易懂,我那學(xué)文科的愛人像一名真正的學(xué)生一樣,通過這本書來學(xué)習(xí)Java技術(shù),在她的努力下,這本書具備了更廣的覆蓋范圍,確保讀者即使沒有任何專業(yè)基礎(chǔ),也能夠通過這本書掌握J(rèn)ava技術(shù)。同時(shí)也要感謝電子工作業(yè)出版社的老師為本書的出版所付出的辛勤工作。
光盤使用
我一直希望這本書的定價(jià)盡可能低,希望有更多的人能夠沒有負(fù)擔(dān)地學(xué)習(xí)Java技術(shù),本意不想提供光盤,但是權(quán)衡再三,由于本書中的代碼是伴隨著講解逐步展開的,很多代碼沒有整體呈現(xiàn)(否則會(huì)增加太多頁數(shù)),所以不得不通過光盤提供書中的代碼,這些代碼被放在codes目錄中,按照書中的章節(jié)組織。需要強(qiáng)調(diào)的是,請(qǐng)不要直接編譯運(yùn)行,或者復(fù)制我所提供的代碼,光盤中的代碼是我的,只有你親手輸入到電腦里的內(nèi)容才屬于你。
王洋于2012年1月14日
王洋,國家軟件出口中心首席IT教育專家,10年知名IT企業(yè)CTO從業(yè)經(jīng)驗(yàn),9年IT教學(xué)培訓(xùn)從業(yè)經(jīng)驗(yàn)。曾在清華、北大、北理工、北航等近百所國內(nèi)知名院校做技術(shù)演講,近5年每年在全國各高校進(jìn)行130多場(chǎng)技術(shù)講座,反響熱烈。
“基于學(xué)生認(rèn)知曲線的項(xiàng)目驅(qū)動(dòng)教學(xué)法”創(chuàng)始人,通過該方法培養(yǎng)出來的教師多次獲得學(xué)生綜合測(cè)評(píng)滿分的成績,近萬名學(xué)生接受過該方法的學(xué)習(xí)和指導(dǎo),學(xué)生覆蓋清華、北大的研究生,985、211知名院校的本科生、專科生。
第1部分 認(rèn)識(shí)Java程序
1.1 寫代碼前的準(zhǔn)備
1.1.1 程序的入口
1.1.2 初步理解類和對(duì)象
1.2 畫王八
1.2.1 運(yùn)行Java程序
1.2.2 繪圖
1.3 滿天星星
1.4 飛行的小球
1.4.1 使用線程
1.4.2 線程的生命周期
1.5 小球撞墻
1.6 下大雪
1.7 鍵盤控制小球
1.8 打字母的游戲
1.9 鼠標(biāo)控制小球
1.10 第一階段總結(jié)
第2部分 認(rèn)識(shí)Java程序
2.1 聊天界面
2.1.1 任務(wù)描述
2.1.2 做按鈕
2.1.3 Java的布局思想
2.1.4 登錄界面
2.1.5 主界面
2.2 響應(yīng)用戶輸入
2.2.1 任務(wù)描述
2.2.2 事件響應(yīng)
2.2.3 關(guān)于字符串內(nèi)容的比較
2.2.4 取得用戶名和密碼
2.2.5 用面向?qū)ο蟮乃枷胫貙?br>2.2.6 上溯和下溯的討論
2.3 IO流
2.3.1 任務(wù)描述
2.3.2 讀一個(gè)字符
2.3.3 讀整個(gè)文件
2.3.4 復(fù)制文件
2.3.5 復(fù)制大文件
2.3.6 文件的加密/解密
2.3.7 異常的干擾
2.3.8 字符流
2.3.9 實(shí)現(xiàn)聊天記錄
2.4 建立網(wǎng)絡(luò)通信
2.4.1 什么是網(wǎng)絡(luò)
2.4.2 在網(wǎng)絡(luò)上傳消息
2.4.3 到服務(wù)器驗(yàn)證用戶名和密碼
2.4.4 將聊天信息發(fā)送到服務(wù)器
2.5 數(shù)據(jù)庫訪問
2.5.1 接觸MySQL
2.5.2 創(chuàng)建和刪除數(shù)據(jù)庫
2.5.3 創(chuàng)建、修改和刪除表
2.5.4 關(guān)于數(shù)據(jù)庫設(shè)計(jì)
2.5.5 學(xué)習(xí)添加、刪除和修改數(shù)據(jù)
2.5.6 查詢數(shù)據(jù)
2.5.7 SQL復(fù)習(xí)
2.5.8 用Java訪問數(shù)據(jù)庫
2.5.9 用戶身份驗(yàn)證
2.5.10 將代碼融入項(xiàng)目中
2.5.11 討論反射
2.6 應(yīng)對(duì)多用戶訪問
第3部分 獲得邏輯能力
3.1 用數(shù)組實(shí)現(xiàn)的記事本
3.2 使用鏈表的記事本
3.3 讓Java系統(tǒng)庫幫助你
3.4 思考面向?qū)ο蠛兔嫦蜻^程的不同
3.5 深入學(xué)習(xí)ArrayList和LinkedList
3.5.1 泛型
3.6 Set集合
3.7 試試二分查找法,理解二叉樹
3.8 復(fù)制一個(gè)目錄的內(nèi)容
3.9 Map
3.10 保存用戶的Socket
3.11 同步用戶名
3.12 多用戶轉(zhuǎn)發(fā)邏輯
第4部分 理解面向?qū)ο?br>4.1 用面向?qū)ο蟮乃枷胫貙懥奶斐绦?br>4.2 做一個(gè)數(shù)據(jù)庫的管理工具
4.3 駕馭JTable
4.4 有更好的方法駕馭JTable
4.5 用面向?qū)ο蟮姆椒{馭JTable
4.6 完成資源管理器
4.7 有沒有更好的參數(shù)傳遞方式
附錄A 準(zhǔn)備編程環(huán)境