《像计算机科学家一样思考Java》—— 导读
前言
像計(jì)算機(jī)科學(xué)家一樣思考Java
我們從別人的發(fā)明中享受了很大益處,我們也應(yīng)該樂于以我們的任何一種發(fā)明為別人服務(wù),并且這種事我們應(yīng)該自愿地和慷慨地去做。
——本杰明·富蘭克林,引用自Edmund S. Morgan所著的《本杰明·富蘭克林傳》
我為什么寫這本書
1999年,當(dāng)我還在科爾比學(xué)院教書的時(shí)候,我便開始寫這本書了。現(xiàn)在,這已經(jīng)是第5個(gè)版本了。那時(shí),我正使用Java程序設(shè)計(jì)語言來教授計(jì)算機(jī)科學(xué)導(dǎo)論課程,但始終沒有找到一本合適的教材。一方面,這些書的內(nèi)容太多,讓學(xué)生去閱讀一本800頁的技術(shù)書籍顯然不可能,即便是我硬叫他們?nèi)プx也不可能,更何況我并不想他們這么做。另外,書中多數(shù)內(nèi)容的針對(duì)性都很強(qiáng),比如Java語言的細(xì)節(jié)和Java類庫等內(nèi)容,而這些類庫在學(xué)期結(jié)束時(shí)很有可能就已經(jīng)過時(shí)了。這樣的書籍顯然不是我需要的。
另一方面,我發(fā)現(xiàn)一開始就講面向?qū)ο缶幊滩⒉缓线m。很多在其他方面表現(xiàn)得很好的學(xué)生,一旦接觸到對(duì)象就一頭霧水了。于是我開始寫這本書,每天寫一章,一共寫了13天,第14天編輯,然后是復(fù)印和裝訂。上課第一天我便把書分發(fā)給學(xué)生們,并叫他們每周閱讀一章,這樣一來,他們閱讀的速度比我書寫的速度慢了7倍。
背后的哲學(xué)
以下是我寫這本書的一些想法:
詞匯很重要。學(xué)生應(yīng)該有能力去討論程序并且能夠聽懂我所講的話。我嘗試著引入盡可能少的術(shù)語,并在第一次使用這些術(shù)語時(shí)精心地給出定義,然后在每章的最后附上術(shù)語表。在我的課程中,我會(huì)在小測(cè)驗(yàn)和考試中包含一些和詞匯相關(guān)的題目,然后要求學(xué)生使用恰當(dāng)?shù)男g(shù)語進(jìn)行回答。
要編寫程序。學(xué)生應(yīng)該理解算法,知曉程序設(shè)計(jì)語言本身,并能夠調(diào)試程序。太多的書籍都將程序調(diào)試內(nèi)容給忽略掉了。本書最后的附錄D講述程序調(diào)試的內(nèi)容,附錄C討論程序開發(fā)內(nèi)容(可以幫你避免調(diào)試)。我建議學(xué)生們盡早地閱讀這些內(nèi)容,并且時(shí)常回過頭來復(fù)習(xí)。
有些概念需要時(shí)間來消化。對(duì)于一些較難的內(nèi)容,本書將反復(fù)講到,這樣可以給學(xué)生更多的機(jī)會(huì)去復(fù)習(xí)和鞏固。如果第一次沒有學(xué)會(huì),可以在后面趕上。
我試圖盡量少地使用Java語言來教會(huì)學(xué)生獲得盡量多的編程能力。本書的目的在于教學(xué)生如何編寫程序和一些計(jì)算機(jī)科學(xué)導(dǎo)論方面的概念,而不是Java語言。因此,我去除了一些Java語言特性方面的內(nèi)容,比如switch語句便沒有必要了,多數(shù)類庫也不在本書的教授范圍之內(nèi),特別是一直在變并很可能被替換掉的AWT。
這種最小化的方式有它的優(yōu)點(diǎn)。除了章后練習(xí),每章大概10頁左右。在我的課程中,我要求學(xué)生提前閱讀要講的章節(jié),他們都愿意這么做并且理解得很好。這樣一來,我們便有時(shí)間來討論一些更抽象的內(nèi)容、做一些課內(nèi)練習(xí)和學(xué)習(xí)本書之外的內(nèi)容。
但是,這種最小化方式也有缺點(diǎn)。從本質(zhì)上講,這種方式?jīng)]有多少有趣的地方。書中的多數(shù)例子只是在展現(xiàn)基本的語言特性,并且很多練習(xí)都包含了字符串操作和數(shù)學(xué)相關(guān)的知識(shí)。我認(rèn)為其中的一些內(nèi)容是有趣的,但是還有很多能夠激發(fā)學(xué)生興趣的內(nèi)容,比如圖形、聲音和網(wǎng)絡(luò)應(yīng)用只是一帶而過。
問題在于,很多令人興奮的內(nèi)容都包含大量的細(xì)節(jié),而其中的概念并不多。從教學(xué)上講,這樣浪費(fèi)了太多的努力但又達(dá)不到教學(xué)目的。因此,在取悅學(xué)生和富含知識(shí)之間便出現(xiàn)了一個(gè)折中。我讓老師們自己去解決這種平衡。作為幫助,本書的附錄中包含圖形、鍵盤輸入和文件輸入等內(nèi)容。
面向?qū)ο缶幊?br />有些書一上來便介紹對(duì)象,另一些書先通過面向過程的編程方式進(jìn)行引導(dǎo),再逐漸講授面向?qū)ο缶幊谭绞健1緯捎煤笠环N方式。
Java中許多面向?qū)ο筇匦远际怯上惹罢Z言出現(xiàn)的問題來驅(qū)動(dòng)的,并且它的實(shí)現(xiàn)也受到了這些語言發(fā)展歷史的影響。在學(xué)生不了解他們需要解決的問題的情況下,有些特性是很難解釋的。推遲講面向?qū)ο缶幊滩⒉皇俏业囊鈭D所在,相反,我會(huì)盡快地涉及到這些內(nèi)容,只是我每次只講一個(gè)概念,并且盡可能清晰,以使學(xué)生可以相對(duì)獨(dú)立地練習(xí)每一個(gè)知識(shí)點(diǎn),然后再加入后續(xù)的概念。但是我也承認(rèn),達(dá)到這樣的目的確實(shí)需要時(shí)間。
目錄
第1章 程序之道
1.1 什么是編程語言
1.2 什么是程序
1.3 什么是調(diào)試
1.4 形式語言和自然語言
1.5 第一個(gè)程序
1.6 術(shù)語表
1.7 練習(xí)
第2章 變量和類型
第3章 無返回值方法
第4章 條件語句和遞歸
第5章 GridWorld(第一部分)
第6章 有返回值方法
第7章 迭代和循環(huán)
第8章 字符串
第9章 可變對(duì)象
第10章 GridWorld(第二部分)
第11章 創(chuàng)建對(duì)象
第12章 數(shù)組
第13章 對(duì)象數(shù)組
第14章 數(shù)組對(duì)象
第15章 面向?qū)ο缶幊?br />第16章 GridWorld(第三部分)
總結(jié)
以上是生活随笔為你收集整理的《像计算机科学家一样思考Java》—— 导读的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos下hadoop的安装
- 下一篇: Docker多步构建更小的Java镜像