年輕人不看可惜了,如何學(xué)好計算機科學(xué)(轉載)
計算機科學(xué)與技術(shù)反思錄
計算機科學(xué)與技術(shù)這一門(mén)科學(xué)深深的吸引著(zhù)我們這些同學(xué)們,上計算機系已經(jīng)有近三年了,自己也做了一些思考,我一直認為計算機科學(xué)與技術(shù)這門(mén)專(zhuān)業(yè),在本科階段是不可能切分成計算機科學(xué)和計算機技術(shù)的,因為計算機科學(xué)需要相當多的實(shí)踐,而實(shí)踐需要技術(shù);每一個(gè)人(包括非計算機專(zhuān)業(yè)),掌握簡(jiǎn)單的計算機技術(shù)都很容易(包括程序設計),但計算機專(zhuān)業(yè)的優(yōu)勢就在于,我們掌握許多其他專(zhuān)業(yè)并不“深究”的東西,例如,算法,體系結構,等等。非計算機專(zhuān)業(yè)的人可以很容易地做一個(gè)芯片,寫(xiě)一段程序,但他們做不出計算機專(zhuān)業(yè)能夠做出來(lái)的大型系統。今天我想專(zhuān)門(mén)談一談?dòng)嬎銠C科學(xué),并將重點(diǎn)放在計算理論上。
計算機理論的一個(gè)核心問(wèn)題——從數學(xué)談起:
記得當年大一入學(xué),每周六課時(shí)高等數學(xué),天天作業(yè)不斷(那時(shí)是六日工作制)。頗有些同學(xué)驚呼走錯了門(mén):咱們這到底念的是什么系?不錯,你沒(méi)走錯門(mén),這就是計算機科學(xué)與技術(shù)系。我國計算機科學(xué)系里的傳統是培養做學(xué)術(shù)研究,尤其是理論研究的人(方向不見(jiàn)得有問(wèn)題,但是做得不是那么盡如人意)。而計算機的理論研究,說(shuō)到底了,如網(wǎng)絡(luò )安全,圖形圖像學(xué),視頻音頻處理,哪個(gè)方向都與數學(xué)有著(zhù)很大的關(guān)系,雖然也許是正統數學(xué)家眼里非主流的數學(xué)。這里我還想闡明我的一個(gè)觀(guān)點(diǎn):我們都知道,數學(xué)是從實(shí)際生活當中抽象出來(lái)的理論,人們之所以要將實(shí)際抽象成理論,目的就在于想用抽象出來(lái)的理論去更好的指導實(shí)踐,有些數學(xué)研究工作者喜歡用一些現存的理論知識去推導若干條推論,殊不知其一:?jiǎn)?wèn)題考慮不全很可能是個(gè)錯誤的推論,其二:他的推論在現實(shí)生活中找不到原型,不能指導實(shí)踐。嚴格的說(shuō),我并不是一個(gè)理想主義者,政治課上學(xué)的理論聯(lián)系實(shí)際一直是指導我學(xué)習科學(xué)文化知識的航標(至少我認為搞計算機科學(xué)與技術(shù)的應當本著(zhù)這個(gè)方向)。
其實(shí)我們計算機系學(xué)數學(xué)光學(xué)高等數學(xué)是不夠的(典型的工科院校一般都開(kāi)的是高等數學(xué)),我們應該像數學(xué)系一樣學(xué)一下數學(xué)分析(清華計算機系開(kāi)的好像就是數學(xué)分析),數學(xué)分析這門(mén)科學(xué),咱們學(xué)計算機的人對它有很復雜的感情。在于它是偏向于證明型的數學(xué)課程,這對我們培養良好的分析能力極有幫助。我的軟件工程學(xué)導師北工大數理學(xué)院的王儀華先生就曾經(jīng)教導過(guò)我們,數學(xué)系的學(xué)生到軟件企業(yè)中大多作軟件設計與分析工作,而計算機系的學(xué)生做程序員的居多,原因就在于數學(xué)系的學(xué)生分析推理能力,從所受訓練的角度上要遠遠在我們之上。當年出現的怪現象是:計算機系學(xué)生的高中數學(xué)基礎在全校數一數二(希望沒(méi)有冒犯其它系的同學(xué)),教學(xué)課時(shí)數也僅次于數學(xué)系,但學(xué)完之后的效果卻不盡如人意。難道都是學(xué)生不努力嗎,我看未見(jiàn)得,方向錯了也說(shuō)不一定,其中原因何在,發(fā)人深思。
我個(gè)人的淺見(jiàn)是:計算機系的學(xué)生,對數學(xué)的要求固然跟數學(xué)系不同,跟物理類(lèi)差別則更大。通常非數學(xué)專(zhuān)業(yè)的所謂“高等數學(xué)”,無(wú)非是把數學(xué)分析中較困難的理論部分刪去,強調套用公式計算而已。而對計算機系來(lái)說(shuō),數學(xué)分析里用處最大的恰恰是被刪去的理論部分。說(shuō)得難聽(tīng)一點(diǎn),對計算機系學(xué)生而言,追求算來(lái)算去的所謂“工程數學(xué)”已經(jīng)徹底地走進(jìn)了誤區。記上一堆曲面積分的公式,難道就能算懂了數學(xué)?那倒不如現用現查,何必費事記呢?再不然直接用Mathematics或是Matalab好了。
我在系里最?lèi)?ài)做的事情就是給學(xué)弟學(xué)妹們推薦參考書(shū)。中文的數學(xué)分析書(shū),一般都認為以北大張筑生老師的“數學(xué)分析新講”為最好。萬(wàn)一你的數學(xué)實(shí)在太好,那就去看菲赫金哥爾茨的“微積分學(xué)教程”好了--但我認為沒(méi)什么必要,畢竟你不想轉到數學(xué)系去。吉米多維奇的“數學(xué)分析習題集”也基本上是計算型的東東。書(shū)的名氣很大,倒不見(jiàn)得適合我們,還是那句話(huà),重要的是數學(xué)思想的建立,生活在信息社會(huì )里我們求的是高效,計算這玩意還是留給計算機吧。不過(guò)現在多用的似乎是復旦大學(xué)的《數學(xué)分析》也是很好的教材。
中國的所謂高等代數,就等于線(xiàn)性代數加上一點(diǎn)多項式理論。我以為這有好的一面,因為可以讓學(xué)生較早感覺(jué)到代數是一種結構,而非一堆矩陣翻來(lái)覆去。這里不得不提南京大學(xué)林成森,盛松柏兩位老師編的“高等代數”,感覺(jué)相當舒服。此書(shū)相當全面地包含了關(guān)于多項式和線(xiàn)性代數的基本初等結果,同時(shí)還提供了一些有用的又比較深刻的內容,如Sturm序列,Shermon-Morrison公式,廣義逆矩陣等等。可以說(shuō),作為本科生如能吃透此書(shū),就可以算高手。國內較好的高等代數教材還有清華計算機系用的那本,清華出版社出版,書(shū)店里多多,一看就知道。從抽象代數的觀(guān)點(diǎn)來(lái)看,高等代數里的結果不過(guò)是代數系統性質(zhì)的一些例子而已。莫宗堅先生的《代數學(xué)》里,對此進(jìn)行了深刻的討論。然而莫先生的書(shū)實(shí)在深得很,作為本科生恐怕難以接受,不妨等到自己以后成熟了一些再讀。
正如上面所論述的,計算機系的學(xué)生學(xué)習高等數學(xué):知其然更要知其所以然。你學(xué)習的目的應該是:將抽象的理論再應用于實(shí)踐,不但要掌握題目的解題方法,更要掌握解題思想,對于定理的學(xué)習:不是簡(jiǎn)單的應用,而是掌握證明過(guò)程即掌握定理的由來(lái),訓練自己的推理能力。只有這樣才達到了學(xué)習這門(mén)科學(xué)的目的,同時(shí)也縮小了我們與數學(xué)系的同學(xué)之間思維上的差距。
概率論與數理統計這門(mén)課很重要,可惜大多數院校講授這門(mén)課都會(huì )少些東西。少了的東西現在看至少有隨機過(guò)程。到畢業(yè)還沒(méi)有聽(tīng)說(shuō)過(guò)Markov過(guò)程,此乃計算機系學(xué)生的恥辱。沒(méi)有隨機過(guò)程,你怎么分析網(wǎng)絡(luò )和分布式系統?怎么設計隨機化算法和協(xié)議?據說(shuō)清華計算機系開(kāi)有“隨機數學(xué)”,早就是必修課。另外,離散概率論對計算機系學(xué)生來(lái)說(shuō)有特殊的重要性。而我們國家工程數學(xué)講的都是連續概率。現在,美國已經(jīng)有些學(xué)校開(kāi)設了單純的“離散概率論”課程,干脆把連續概率刪去,把離散概率講深些。我們不一定要這么做,但應該更加強調離散概率是沒(méi)有疑問(wèn)的。這個(gè)工作我看還是盡早的做為好。
計算方法學(xué)(有些學(xué)校也稱(chēng)為數學(xué)分析學(xué))是最后一門(mén)由數理學(xué)院給我們開(kāi)的課。一般學(xué)生對這門(mén)課的重視程度有限,以為沒(méi)什么用。不就是照套公式嘛!其實(shí),做圖形圖像可離不開(kāi)它,密碼學(xué)搞深了也離不開(kāi)它。而且,在很多科學(xué)工程中的應用計算,都以數值的為主。這門(mén)課有兩個(gè)極端的講法:一個(gè)是古典的“數值分析”,完全講數學(xué)原理和算法;另一個(gè)是現在日趨流行的“科學(xué)與工程計算”,干脆教學(xué)生用軟件包編程。我個(gè)人認為,計算機系的學(xué)生一定要認識清楚我們計算機系的學(xué)生為什么要學(xué)這門(mén)課,我是很偏向于學(xué)好理論后用計算機實(shí)現的,最好使用C語(yǔ)言或C++編程實(shí)現。向這個(gè)方向努力的書(shū)籍還是挺多的,這里推薦大家高等教育出版社(CHEP)和施普林格出版社(Springer)聯(lián)合出版的《計算方法(Computational Methods)》,華中理工大學(xué)數學(xué)系寫(xiě)的(現華中科技大學(xué)),這方面華科大做的工作在國內應算是比較多的,而個(gè)人認為以這本最好,至少程序設計方面涉及了:任意數學(xué)函數的求值,方程求根,線(xiàn)性方程組求解,插值方法,數值積分,場(chǎng)微分方程數值求解。李慶揚的那本則理論性過(guò)強,與實(shí)際應用結合得不太緊。
每個(gè)學(xué)校本系里都會(huì )開(kāi)一門(mén)離散數學(xué),涉及集合論,圖論,和抽象代數,數理邏輯。不過(guò),這么多內容擠在離散數學(xué)一門(mén)課里,是否時(shí)間太緊了點(diǎn)?另外,計算機系學(xué)生不懂組合和數論,也是巨大的缺陷。要做理論,不懂組合或者數論吃虧可就太大了。從理想的狀態(tài)來(lái)看,最好分開(kāi)六門(mén)課:集合,邏輯,圖論,組合,代數,數論。這個(gè)當然不現實(shí),因為沒(méi)那么多課時(shí)。也許將來(lái)可以開(kāi)三門(mén)課:集合與邏輯,圖論與組合,代數與數論。(這方面我們學(xué)校已經(jīng)著(zhù)手開(kāi)始做了)不管課怎么開(kāi),學(xué)生總一樣要學(xué)。下面分別談?wù)勆厦娴娜M內容。
021yin.com /html/Dir/2001/11/06/3391.htm自己去看看吧。總的來(lái)說(shuō),學(xué)集合/邏輯起手不難,普通高中生都能看懂。但越往后越感覺(jué)深不可測。
學(xué)完以上各書(shū)之后,如果你還有精力興趣進(jìn)一步深究,那么可以試一下GTM系列中的《Introduction to Axiomatic Set Theory》和《A Course of Mathematical Logic》。這兩本都有世界圖書(shū)出版社的引進(jìn)版。你如果能搞定這兩本,可以說(shuō)在邏輯方面真正入了門(mén),也就不用再浪費時(shí)間聽(tīng)我瞎侃了。
據說(shuō)全中國最多只有三十個(gè)人懂圖論。此言不虛。圖論這東東,技巧性太強,幾乎每個(gè)問(wèn)題都有一個(gè)獨特的方法,讓人頭痛。不過(guò)這也正是它魅力所在:只要你有創(chuàng )造性,它就能給你成就感。我的導師說(shuō),圖論里面隨便揪一塊東西就可以寫(xiě)篇論文。大家可以體會(huì )里面內容之深廣了吧!國內的圖論書(shū)中,王樹(shù)禾老師的“圖論及其算法”非常成功。一方面,其內容在國內教材里算非常全面的。另一方面,其對算法的強調非常適合計算機系(本來(lái)就是科大計算機系教材)。有了這本書(shū)為主,再參考幾本翻譯的,如Bondy & Murty的《圖論及其應用》,人民郵電出版社翻譯的《圖論和電路網(wǎng)絡(luò )》等等,就馬馬虎虎,對本科生足夠了。再進(jìn)一步,世界圖書(shū)引進(jìn)有GTM系列的“Modern Graph Theory“。此書(shū)確實(shí)經(jīng)典!國內好象還有一家出版了個(gè)翻譯版。不過(guò),學(xué)到這個(gè)層次,還是讀原版好。搞定這本書(shū),也標志著(zhù)圖論入了門(mén)。
離散數學(xué)方面我們北京工業(yè)大學(xué)實(shí)驗學(xué)院有個(gè)世界級的專(zhuān)家,叫邵學(xué)才,復旦大學(xué)概率論畢業(yè)的,教過(guò)高等數學(xué),線(xiàn)性代數,概率論,最后轉向離散數學(xué),出版著(zhù)作無(wú)數,論文集新加坡有一本,堪稱(chēng)經(jīng)典,大家想學(xué)離散數學(xué)的真諦不妨找來(lái)看看。這老師的課我專(zhuān)門(mén)去聽(tīng)過(guò),極為經(jīng)典。不過(guò)你要從他的不經(jīng)意的話(huà)中去挖掘精髓。在同他的交談當中我又深刻地發(fā)現一個(gè)問(wèn)題,雖說(shuō)邵先生寫(xiě)書(shū)無(wú)數,但依他自己的說(shuō)法每本都差不多,我實(shí)在覺(jué)得詫異,他說(shuō)主要是有大綱的限制,不便多寫(xiě)。這就難怪了,很少聽(tīng)說(shuō)國外寫(xiě)書(shū)還要依據個(gè)什么大綱(就算有,內容也寬泛的多),不敢越雷池半步,這樣不是看誰(shuí)的都一樣了。外版的書(shū)好就好在這里,最新的科技成果里面都有論述,別的先不說(shuō),至少是“緊跟時(shí)代的理論知識”。
組合感覺(jué)沒(méi)有太適合的國產(chǎn)書(shū)。還是讀Graham和Knuth等人合著(zhù)的經(jīng)典“具體數學(xué)”吧,西安電子科技大學(xué)出版社有翻譯版。 抽象代數,國內經(jīng)典為莫宗堅先生的“代數學(xué)”。此書(shū)是北大數學(xué)系教材,深得好評。然而對本科生來(lái)說(shuō),此書(shū)未免太深。可以先學(xué)習一些其它的教材,然后再回頭來(lái)看“代數學(xué)”。國際上的經(jīng)典可就多了,GTM系列里就有一大堆。推薦一本談不上經(jīng)典,但卻最簡(jiǎn)
單的,最容易學(xué)的:“非常通俗易懂,而且把抽象代數和線(xiàn)性代數結合起來(lái),對初學(xué)者來(lái)說(shuō)非常理想,我校比較牛的同學(xué)都有收藏。
數論方面,國內有經(jīng)典而且以困難著(zhù)稱(chēng)的”初等數論“(潘氏兄弟著(zhù),北大版)。再追溯一點(diǎn),還有更加經(jīng)典(可以算世界級)并且更加困難的”數論導引“(華羅庚先生的名著(zhù),科學(xué)版,九章書(shū)店重印,繁體的看起來(lái)可能比較困難)。把基礎的幾章搞定一個(gè)大概,對本科生來(lái)講足夠了。但這只是初等數論。本科畢業(yè)后要學(xué)計算數論,你必須看英文的書(shū),如Bach的“Introduction to Algorithmic Number Theory“。
計算機科學(xué)理論的根本,在于算法。現在很多系里給本科生開(kāi)設算法設計與分析,確實(shí)非常正確。環(huán)顧西方世界,大約沒(méi)有一個(gè)三流以上計算機系不把算法作為必修的。算法教材目前公認以Corman等著(zhù)的“Introduction to Algorithms“為最優(yōu)。對入門(mén)而言,這一本已經(jīng)足夠,不需要再參考其它書(shū)。
再說(shuō)說(shuō)形式語(yǔ)言與自動(dòng)機。我看過(guò)北郵的教材,應該說(shuō)寫(xiě)的還清楚。但是,有一點(diǎn)要強調:形式語(yǔ)言和自動(dòng)機的作用主要在作為計算模型,而不是用來(lái)做編譯。事實(shí)上,編譯前端已經(jīng)是死領(lǐng)域,沒(méi)有任何open problems,北科大的班曉娟博士也曾經(jīng)說(shuō)過(guò),編譯的技術(shù)已相當成熟。如果為了這個(gè),我們完全沒(méi)必要去學(xué)形式語(yǔ)言--用用yacc什么的就完了。北郵的那本在國內還算比較好,但是在深度上,在跟可計算性的聯(lián)系上都有較大的局限,現代感也不足。所以建議有興趣的同學(xué)去讀英文書(shū),不過(guò)國內似乎沒(méi)引進(jìn)這方面的教材。可以去互動(dòng)出版網(wǎng)上看一看。入門(mén)以后,把形式語(yǔ)言與自動(dòng)機中定義的模型,和數理邏輯中用遞歸函數定義的模型比較一番,可以說(shuō)非常有趣。現在才知道,什么叫“宮室之美,百官之富”!
計算機科學(xué)和數學(xué)的關(guān)系有點(diǎn)奇怪。二三十年以前,計算機科學(xué)基本上還是數學(xué)的一個(gè)分支。而現在,計算機科學(xué)擁有廣泛的研究領(lǐng)域和眾多的研究人員,在很多方面反過(guò)來(lái)推動(dòng)數學(xué)發(fā)展,從某種意義上可以說(shuō)是孩子長(cháng)得比媽媽還高了。但不管怎么樣,這個(gè)孩子身上始終流著(zhù)母親的血液。這血液是the mathematical underpinning of computer science(計算機科學(xué)的數學(xué)基礎),也就是理論計算機科學(xué)。原來(lái)在東方大學(xué)城圖書(shū)館中曾經(jīng)看過(guò)一本七十年代的譯本(書(shū)皮都沒(méi)了,可我就愛(ài)關(guān)注這種書(shū)),大概就叫《計算機數學(xué)》。那本書(shū)若是放在當時(shí)來(lái)講決是一本好書(shū),但現在看來(lái),涵蓋的范圍還算廣,深度則差了許多,不過(guò)推薦大一的學(xué)生倒可以看一看,至少可以使你的計算數學(xué)入入門(mén)。
最常和理論計算機科學(xué)放在一起的一個(gè)詞是什么?答:離散數學(xué)。這兩者的關(guān)系是如此密切,以至于它們在不少場(chǎng)合下成為同義詞。(這一點(diǎn)在前面的那本書(shū)中也有體現)傳統上,數學(xué)是以分析為中心的。數學(xué)系的同學(xué)要學(xué)習三四個(gè)學(xué)期的數學(xué)分析,然后是復變函數,實(shí)變函數,泛函數等等。實(shí)變和泛函被很多人認為是現代數學(xué)的入門(mén)。在物理,化學(xué),工程上應用的,也以分析為主。
隨著(zhù)計算機科學(xué)的出現,一些以前不太受到重視的數學(xué)分支突然重要起來(lái)。人們發(fā)現,這些分支處理的數學(xué)對象與傳統的分析有明顯的區別:分析研究的問(wèn)題解決方案是連續的,因而微分,積分成為基本的運算;而這些分支研究的對象是離散的,因而很少有機會(huì )進(jìn)行此類(lèi)的計算。人們從而稱(chēng)這些分支為“離散數學(xué)”。“離散數學(xué)”的名字越來(lái)越響亮,最后導致以分析為中心的傳統數學(xué)分支被相對稱(chēng)為“連續數學(xué)”。
離散數學(xué)經(jīng)過(guò)幾十年發(fā)展,基本上穩定下來(lái)。一般認為,離散數學(xué)包含以下學(xué)科:
1) 集合論,數理邏輯與元數學(xué)。這是整個(gè)數學(xué)的基礎,也是計算機科學(xué)的基礎。
2) 圖論,算法圖論;組合數學(xué),組合算法。計算機科學(xué),尤其是理論計算機科學(xué)的核心是
算法,而大量的算法建立在圖和組合的基礎上。
3) 抽象代數。代數是無(wú)所不在的,本來(lái)在數學(xué)中就非常重要。在計算機科學(xué)中,人們驚訝地發(fā)現代數竟然有如此之多的應用。
但是,理論計算機科學(xué)僅僅就是在數學(xué)的上面加上“離散”的帽子這么簡(jiǎn)單嗎?一直到大約十幾年前,終于有一位大師告訴我們:不是。D.E.Knuth(他有多偉大,我想不用我廢話(huà)了)在Stanford開(kāi)設了一門(mén)全新的課程Concrete Mathematics。 Concrete這個(gè)詞在這里有兩層含義:
首先:對abstract而言。Knuth認為,傳統數學(xué)研究的對象過(guò)于抽象,導致對具體的問(wèn)題關(guān)心不夠。他抱怨說(shuō),在研究中他需要的數學(xué)往往并不存在,所以他只能自己去創(chuàng )造一些數學(xué)。為了直接面向應用的需要,他要提倡“具體”的數學(xué)。在這里我做一點(diǎn)簡(jiǎn)單的解釋。例如在集合論中,數學(xué)家關(guān)心的都是最根本的問(wèn)題--公理系統的各種性質(zhì)之類(lèi)。而一些具體集合的性質(zhì),各種常見(jiàn)集合,關(guān)系,映射都是什么樣的,數學(xué)家覺(jué)得并不重要。然而,在計算機科學(xué)中應用的,恰恰就是這些具體的東西。Knuth能夠首先看到這一點(diǎn),不愧為當世計算機第一人。其次,Concrete是Continuous(連續)加上discrete(離散)。不管連續數學(xué)還是離散數學(xué),都是有用的數學(xué)!
理論與實(shí)際的結合——計算機科學(xué)研究的范疇
前面主要是從數學(xué)角度來(lái)看的。從計算機角度來(lái)看,理論計算機科學(xué)目前主要的研究領(lǐng)域包括:可計算性理論,算法設計與復雜性分析,密碼學(xué)與信息安全,分布式計算理論,并行計算理論,網(wǎng)絡(luò )理論,生物信息計算,計算幾何學(xué),程序語(yǔ)言理論等等。這些領(lǐng)域互相交叉,而且新的課題在不斷提出,所以很難理出一個(gè)頭緒來(lái)。想搞搞這方面的工作,推薦看中國計算機學(xué)會(huì )的一系列書(shū)籍,至少代表了我國的權威。下面隨便舉一些例子。
由于應用需求的推動(dòng),密碼學(xué)現在成為研究的熱點(diǎn)。密碼學(xué)建立在數論(尤其是計算數論),代數,信息論,概率論和隨機過(guò)程的基礎上,有時(shí)也用到圖論和組合學(xué)等。很多人以為密碼學(xué)就是加密解密,而加密就是用一個(gè)函數把數據打亂。這樣的理解太淺顯了。
現代密碼學(xué)至少包含以下層次的內容:
第一,密碼學(xué)的基礎。例如,分解一個(gè)大數真的很困難嗎?能否有一般的工具證明協(xié)議正確?
第二,密碼學(xué)的基本課題。例如,比以前更好的單向函數,簽名協(xié)議等。
第三,密碼學(xué)的高級問(wèn)題。例如,零知識證明的長(cháng)度,秘密分享的方法。
第四,密碼學(xué)的新應用。例如,數字現金,叛徒追蹤等。
在分布式系統中,也有很多重要的理論問(wèn)題。例如,進(jìn)程之間的同步,互斥協(xié)議。一個(gè)經(jīng)典的結果是:在通信信道不可靠時(shí),沒(méi)有確定型算法能實(shí)現進(jìn)程間協(xié)同。所以,改進(jìn)TCP三次握手幾乎沒(méi)有意義。例如時(shí)序問(wèn)題。常用的一種序是因果序,但因果序直到不久前才有一個(gè)理論上的結果....例如,死鎖沒(méi)有實(shí)用的方法能完美地對付。例如,......操作系統研究過(guò)就自己去舉吧!
如果計算機只有理論,那么它不過(guò)是數學(xué)的一個(gè)分支,而不成為一門(mén)獨立的科學(xué)。事實(shí)上,在理論之外,計算機科學(xué)還有更廣闊的天空。
我一直認為,4年根本不夠學(xué)習計算機的基礎知識,因為面太寬了......
這方面我想先說(shuō)說(shuō)我們系在各校普遍開(kāi)設的《計算機基礎》。在高等學(xué)校開(kāi)設《計算機基礎課程》是我國高教司明文規定的各專(zhuān)業(yè)必修課程要求。主要內容是使學(xué)生初步掌握計算機的發(fā)展歷史,學(xué)會(huì )簡(jiǎn)單的使用操作系統,文字處理,表格處理功能和初步的網(wǎng)絡(luò )應用功能。但是在計算機科學(xué)系教授此門(mén)課程的目標決不能與此一致。在計算機系課程中目標應是:讓學(xué)生較為全面的了解計算機學(xué)科的發(fā)展,清晰的把握計算機學(xué)科研究的方向,發(fā)展的前沿即每一個(gè)課程在整個(gè)學(xué)科體系中所處的地位。搞清各學(xué)科的學(xué)習目的,學(xué)習內容,應用領(lǐng)域。使學(xué)生在學(xué)科學(xué)習初期就對整個(gè)學(xué)科有一個(gè)整體的認識,以做到在今后的學(xué)習中清楚要學(xué)什么,怎么學(xué)。計算機基本應用技能的位置應當放在第二位或更靠后,因為這一點(diǎn)對于本系的學(xué)生應當有這個(gè)摸索能力。這一點(diǎn)很重要。推薦給大家一本書(shū):機械工業(yè)出版社的《計算機文化》(New Perspective of Computer Science),看了這本書(shū)我才深刻的體會(huì )到自己還是個(gè)計算機科學(xué)初學(xué)者,才比較透徹的了解了什么是計算機科學(xué)。另外在廈門(mén)大學(xué)趙致琢老師的著(zhù)作《計算科學(xué)導論》當中的很多經(jīng)典理論都是在同類(lèi)書(shū)籍中很難找到的。看看他也許你才會(huì )明白一個(gè)最基本的問(wèn)題:為什么計算機科學(xué)叫計算科學(xué)更為準確。這本書(shū)在世界上也可成為精品級的著(zhù)作。
一個(gè)一流計算機系的優(yōu)秀學(xué)生決不該僅僅是一個(gè)編程高手,但他一定首先是一個(gè)編程高手。我上大學(xué)的時(shí)候,第一門(mén)專(zhuān)業(yè)課是C語(yǔ)言程序設計,念計算機的人從某種角度講相當一部分人是靠寫(xiě)程序吃飯的。在我們北京工業(yè)大學(xué)實(shí)驗學(xué)院計算機系里一直有這樣的爭論(時(shí)至今日CSDN上也有),關(guān)于第一程序設計語(yǔ)言該用哪一種。我個(gè)人認為,用哪種語(yǔ)言屬于末節,關(guān)鍵在養成良好的編程習慣。當年老師對我們說(shuō),打好基礎后學(xué)一門(mén)新語(yǔ)言只要一個(gè)星期。現在我覺(jué)得根本不用一個(gè)星期,前提是先把基礎打好。不要再猶豫了,學(xué)了再說(shuō),等你抉擇好了,別人已經(jīng)會(huì )了幾門(mén)語(yǔ)言了。
匯編語(yǔ)言和微機原理是兩門(mén)特煩人的課。你的數學(xué)/理論基礎再好,也占不到什么便宜。這兩門(mén)課之間的次序也好比先有雞還是先有蛋,無(wú)論你先學(xué)哪門(mén),都會(huì )牽扯另一門(mén)課里的東西。所以,只能靜下來(lái)慢慢琢磨。這就是典型的工程課,不需要太多的聰明和頓悟,卻需要水滴石穿的漸悟。有關(guān)這兩門(mén)課的書(shū),計算機書(shū)店里不難找到。弄幾本最新的,對照著(zhù)看吧。組成原理推薦《計算機組成與結構》清華大學(xué)王愛(ài)英教授寫(xiě)的。匯編語(yǔ)言大家拿8086/8088入個(gè)門(mén),之后一定要學(xué)80x86匯編語(yǔ)言。實(shí)用價(jià)值大,不落后,結構又好,寫(xiě)寫(xiě)高效病毒,高級語(yǔ)言里嵌一點(diǎn)匯編,進(jìn)行底層開(kāi)發(fā),總也離不開(kāi)他,推薦清華大學(xué)沈美明的《IBM—PC匯編語(yǔ)言程序設計》。有些人說(shuō)不想了解計算機體系結構,也不想制造計算機,所以諸如計算機原理,匯編語(yǔ)言,接口之類(lèi)的課覺(jué)得沒(méi)必要學(xué),這樣合理嗎?顯然不合理,這些東西遲早得掌握,肯定得接觸,而且,這是計算機專(zhuān)業(yè)與其他專(zhuān)業(yè)學(xué)生相比的少有的幾項優(yōu)勢。做項目的時(shí)候,了解這些是非常重要的,不可能說(shuō),僅僅為了技術(shù)而技術(shù),只懂技術(shù)的人最多做一個(gè)編碼工人,而永遠不可能全面地了解整個(gè)系統的設計,而編碼工人是越老越不值錢(qián)。關(guān)于組成原理還有個(gè)講授的問(wèn)題,在我學(xué)這門(mén)課程時(shí)老師講授時(shí)把CPU工作原理譽(yù)微程序設計這一塊略掉了,理由是我們國家搞CPU技術(shù)不如別的國家,搞了這么長(cháng)時(shí)間好不容易出了個(gè)龍芯比Intel的還差個(gè)十萬(wàn)八千里,所以建議我們不要學(xué)了。我看這在各校也未見(jiàn)得不是個(gè)問(wèn)題吧!若真是如他所說(shuō),那中國的計算機科學(xué)哪個(gè)方向都可以停了,軟硬件,應用,有幾項搞得過(guò)美國,搞不過(guò)別人就不搞了,那我們坐在這里干什么?教學(xué)的觀(guān)念需要轉變的。
模擬電路這東東,如今不僅計算機系學(xué)生搞不定,電子系學(xué)生也多半害怕。如果你真想軟硬件通吃,那么建議你先看看邱關(guān)源的“電路原理”,也許此后再看模擬電路底氣會(huì )足些。教材:康華光的“電子技術(shù)基礎”(高等教育出版社)還是不錯的(我校電子系在用)。有興趣也可以參考童詩(shī)白的書(shū)。
數字電路比模擬電路要好懂得多。推薦大家看一看我們北工大劉英嫻教授寫(xiě)的《數字邏輯》業(yè)績(jì)人士都說(shuō)這本書(shū)很有參考價(jià)值(機械工業(yè)出版社的)。原因很明了,實(shí)用價(jià)值高,能聽(tīng)聽(tīng)她講授的課程更是有一種“享受科學(xué)”的感覺(jué)。清華大學(xué)閻石的書(shū)也算一本好教材,遺憾的一點(diǎn)是集成電路講少了些。真有興趣,看一看大規模數字系統設計吧(北航那本用的還比較多)。
計算機系統結構該怎么教,國際上還在爭論。國內能找到的較好教材為Stallings的“Computer Organization and Architectureesigning for Performance“(清華影印
本)。國際上最流行的則是“Computer architecture: aquantitative approach“, by Patterson & Hennessy。
操作系統可以隨便選用《操作系統的內核設計與實(shí)現》和《現代操作系統》兩書(shū)之一。這兩部都可以算經(jīng)典,唯一缺點(diǎn)就是理論上不夠嚴格。不過(guò)這領(lǐng)域屬于Hardcore System,所以在理論上馬虎一點(diǎn)也情有可原。想看理論方面的就推薦清華大學(xué)出版社《操作系統》吧,高教司司長(cháng)張堯學(xué)寫(xiě)的,我們教材用的是那本。 另外推薦一本《Windows操作系統原理》機械工業(yè)出版社的,這本書(shū)是我國操作系統專(zhuān)家在微軟零距離考察半年,寫(xiě)作歷時(shí)一年多寫(xiě)成的,教操作系統的專(zhuān)家除了清華大學(xué)的張堯學(xué)(現高教司司長(cháng))幾乎所有人都參加了。Bill Gates親自寫(xiě)序。里面不但結合windows2000,xp詳述操作系統的內核,而且后面講了一些windows編程基礎,有外版書(shū)的味道,而且上面一些內容可以說(shuō)在國內外只有那本書(shū)才有對windows內核細致入微的介紹,
如果先把形式語(yǔ)言學(xué)好了,則編譯原理中的前端我看只要學(xué)四個(gè)算法:最容易實(shí)現的遞歸下降;最好的自頂向下算法LL(k);最好的自底向上算法LR(k);LR(1)的簡(jiǎn)化SLR(也許還有另一簡(jiǎn)化LALR)。后端完全屬于工程性質(zhì),自然又是another story。
推薦教材:Kenneth C.Louden寫(xiě)的“Compiler Construction Principles and Practice”即是《編譯原理及實(shí)踐》(機械工業(yè)出版社的譯本)
學(xué)數據庫要提醒大家的是,會(huì )用VFP,VB, Power builder不等于懂數據庫。(這世界上自以為懂數據庫的人太多了!)數據庫設計既是科學(xué)又是藝術(shù),數據庫實(shí)現則是典型的工程。所以從某種意義上講,數據庫是最典型的一門(mén)計算機課程——理工結合,互相滲透。另外推薦大家學(xué)完軟件工程學(xué)后再翻過(guò)來(lái)看看數據庫技術(shù),又會(huì )是一番新感覺(jué)。推薦教材:Abraham Silberschatz等著(zhù)的 “Database System Concepts“.作為知識的完整性,還推薦大家看一看機械工業(yè)出版社的《數據倉庫》譯本。
計算機網(wǎng)絡(luò )的標準教材還是來(lái)自Tanenbaum的《Computer Networks》(清華大學(xué)有譯本)。還有就是推薦謝希仁的《計算機網(wǎng)絡(luò )教程》(人民郵電出版社)問(wèn)題講得比較清楚,參考文獻也比較權威。不過(guò),網(wǎng)絡(luò )也屬于Hardcore System,所以光看書(shū)是不夠的。建議多讀RFC,種左右常用協(xié)議,就沒(méi)有幾個(gè)人敢小看你了。再做的工作我看放在網(wǎng)絡(luò )設計上就比較好了。
數據結構的重要性就不言而喻了,學(xué)完數據結構你會(huì )對你的編程思想進(jìn)行一番革命性的洗禮,會(huì )對如何建立一個(gè)合理高效的算法有一個(gè)清楚的認識。對于算法的建立我想大家應當注意以下幾點(diǎn):
當遇到一個(gè)算法問(wèn)題時(shí),首先要知道自己以前有沒(méi)有處理過(guò)這種問(wèn)題.如果見(jiàn)過(guò),那么你一般會(huì )順利地做出來(lái);如果沒(méi)見(jiàn)過(guò),那么考慮以下問(wèn)題:
1. 問(wèn)題是否是建立在某種已知的熟悉的數據結構(例如,二叉樹(shù))上?如果不是,則要自己設計數據結構。
2. 問(wèn)題所要求編寫(xiě)的算法屬于以下哪種類(lèi)型?(建立數據結構,修改數據結構,遍歷,查找,排序...)
3. 分析問(wèn)題所要求編寫(xiě)的算法的數學(xué)性質(zhì).是否具備遞歸特征?(對于遞歸程序設計,只要設計出合理的參數表以及遞歸結束的條件,則基本上大功告成.)
4. 繼續分析問(wèn)題的數學(xué)本質(zhì).根據你以前的編程經(jīng)驗,設想一種可能是可行的解決辦法,并證明這種解決辦法的正確性.如果題目對算法有時(shí)空方面的要求,證明你的設想滿(mǎn)足其要求.一般的,時(shí)間效率和空間效率難以兼得.有時(shí)必須通過(guò)建立輔助存儲的方法來(lái)節省時(shí)間.
5. 通過(guò)一段時(shí)間的分析,你對解決這個(gè)問(wèn)題已經(jīng)有了自己的一些思路.或者說(shuō),你已經(jīng)可以用自然語(yǔ)言把你的算法簡(jiǎn)單描述出來(lái).繼續驗證其正確性,努力發(fā)現其中的錯誤并找出解決辦法.在必要的時(shí)候(發(fā)現了無(wú)法解決的矛盾),推翻自己的思路,從頭開(kāi)始構思.
6. 確認你的思路可行以后,開(kāi)始編寫(xiě)程序.在編寫(xiě)代碼的過(guò)程中,盡可能把各種問(wèn)題考慮得詳細,周密.程序應該具有良好的結構,并且在關(guān)鍵的地方配有注釋.
7. 舉一個(gè)例子,然后在紙上用筆執行你的程序,進(jìn)一步驗證其正確性.當遇到與你的設想不符的情況時(shí),分析問(wèn)題產(chǎn)生的原因是編程方面的問(wèn)題還是算法思想本身有問(wèn)題.
8. 如果程序通過(guò)了上述正確性驗證,那么在將其進(jìn)一步優(yōu)化或簡(jiǎn)化。
9. 撰寫(xiě)思路分析,注釋.
對于具體的算法思路,只能靠你自己通過(guò)自己的知識和經(jīng)驗來(lái)加以獲得,沒(méi)有什么特定的規律(否則程序員全部可以下崗了,用機器自動(dòng)生成代碼就可以了).要有豐富的想象力,就是說(shuō)當一條路走不通時(shí),不要鉆牛角尖,要敢于推翻自己的想法.我也只不過(guò)是初學(xué)者,說(shuō)出上面的一些經(jīng)驗,僅供大家參考和討論。
關(guān)于人工智能,我覺(jué)得的也是非常值得大家仔細研究的,雖然不能算是剛剛興起的學(xué)科了,但是絕對是非常有發(fā)展前途的一門(mén)學(xué)科。我國人工智能創(chuàng )始人之一,北京科技大學(xué)涂序彥教授(這老先生是我的導師李小堅博士的導師)對人工智能這樣定義:人工智能是模仿、延伸和擴展人與自然的智能的技術(shù)科學(xué)。在美國人工智能官方教育網(wǎng)站上對人工智能作了如下定義:Artificial Intelligence, or AI for short, is a combination of computer science, physiology, and philosophy. AI is a broad topic, consisting of different fields, from machine vision to expert systems. The element that the fields of AI have in common is the creation of machines that can “think“.
這門(mén)學(xué)科研究的問(wèn)題大概說(shuō)有:
?。?)符號主義: 符號計算與程序設計基礎,知識表達方法 :知識與思維,產(chǎn)生式規則,語(yǔ)意網(wǎng)絡(luò ),一階謂詞邏輯問(wèn)題求解方法:搜索策略,啟發(fā)式搜尋,搜尋算法,問(wèn)題規約方法,謂詞演算:歸結原理,歸結過(guò)程專(zhuān)家系統:建立專(zhuān)家系統的方法及工具
?。?)聯(lián)接主義(神經(jīng)網(wǎng)絡(luò )學(xué)派):1988年美國權威機構指出:數據庫,網(wǎng)絡(luò )發(fā)展呈直線(xiàn)上升,神經(jīng)網(wǎng)絡(luò )可能是解決人工智能的唯一途徑。
我想對于人工智能的學(xué)習,大家一定不要像學(xué)數學(xué)似的及一些現成的結論,要學(xué)會(huì )分析問(wèn)題,最好能利用程序設計實(shí)現,這里推薦給大家ACM最佳博士論文獎獲得者涂曉媛博士的著(zhù)作《人工魚(yú)—計算機動(dòng)畫(huà)的人工生命方法》(清華大學(xué)出版社)。搞人工生命的同學(xué)不會(huì )不知道國際知名的涂氏父女吧。關(guān)于人工智能的書(shū)當然首選《Artificial Intelligence A New Synthesis》Nils J.Nilsson.鼻祖嘛!
關(guān)于網(wǎng)絡(luò )安全我也想在這里說(shuō)兩句,隨著(zhù)計算機技術(shù)的發(fā)展,整個(gè)社會(huì )的信息化水平突飛猛進(jìn),計算機網(wǎng)絡(luò )技術(shù)日新月異,網(wǎng)絡(luò )成了當即社會(huì )各個(gè)工作領(lǐng)域不可缺少的組成部分,只要有網(wǎng)絡(luò )存在,網(wǎng)絡(luò )安全問(wèn)題就是一個(gè)必須解決好的問(wèn)題,學(xué)習網(wǎng)絡(luò )安全不是簡(jiǎn)簡(jiǎn)單單的收集一些黑客工具黑一黑別人的網(wǎng)站,而是要學(xué)習他的數學(xué)原理,實(shí)現原理,搞清底層工作機制,這樣才能解決大部分的現有問(wèn)題和新出現的安全問(wèn)題。
關(guān)于計算機科學(xué)的一些邊緣科學(xué)我想談一談軟件工程技術(shù),對于一個(gè)企業(yè),推出軟件是不是就是幾個(gè)程序員坐在一起,你寫(xiě)一段程序,我寫(xiě)一段程序呢?顯然不是。軟件工程是典型的計算機科學(xué)和數學(xué),管理科學(xué),心理學(xué),社會(huì )學(xué)等學(xué)科的綜合。它使我們這些搞理論和技術(shù)的人進(jìn)入了一個(gè)社會(huì )。你所要考慮的不僅僅是程序的優(yōu)劣,更應該考慮程序與軟件的區別,軟件與軟件產(chǎn)品的區別,軟件軟件產(chǎn)品的市場(chǎng)前景,如何去更好的與人交流。這方面我還在學(xué)習階段,以后這方面再寫(xiě)文章吧,先推薦給大家幾本書(shū):暢銷(xiāo)20年不衰的《人月神話(huà)》(清華大學(xué)中文版,中國電力出版社影印版),《軟件工程-實(shí)踐者研究的方法》(機械工業(yè)出版社譯本),《人件》(據說(shuō)每一位微軟公司的部門(mén)經(jīng)理都讀過(guò)這本書(shū),推薦老總們和想當老總的同學(xué)都看看,了解一下什么是軟件企業(yè)中的人)以及微軟公司的《軟件開(kāi)發(fā)的科學(xué)與藝術(shù)》和《軟件企業(yè)的管理與文化》(研究軟件企業(yè)的制勝之道當然要研究微軟的成功經(jīng)驗了!)
關(guān)于計算機技術(shù)的學(xué)習我想是這樣的:學(xué)校開(kāi)設的任何一門(mén)科學(xué)都有其滯后性,不要總認為自己掌握的某門(mén)技術(shù)就已經(jīng)是天下無(wú)敵手了,雖然現在Java,VB,C,C++用的都很多,怎能保證沒(méi)有被淘汰的一天,我想.NET平臺的誕生和X#語(yǔ)言的初見(jiàn)端倪完全可以說(shuō)明問(wèn)題。換言之,在我們掌握一門(mén)新技術(shù)的同時(shí)就又有更新的技術(shù)產(chǎn)生,身為當代的大學(xué)生應當有緊跟科學(xué)發(fā)展的素質(zhì)。舉個(gè)例子,就像有些同學(xué)總說(shuō),我做網(wǎng)頁(yè)設計就喜歡直接寫(xiě)html,不愿意用什么Frontpage,Dreamweaver。能用語(yǔ)言寫(xiě)網(wǎng)頁(yè)固然很好,但有高效的手段你為什么不使呢?僅僅是為了顯示自己的水平高,unique? 我看真正水平高的是能夠以最快的速度接受新事物的人。高級程序設計語(yǔ)言的發(fā)展日新月異,今后的程序設計就像人們在說(shuō)話(huà)一樣,我想大家從xml中應是有所體會(huì )了。難道我們真就寫(xiě)個(gè)什么都要用匯編,以顯示自己的水平高,真是這樣倒不如直接用機器語(yǔ)言寫(xiě)算了。反過(guò)來(lái)說(shuō),想要以最快的速度接受并利用新技術(shù)關(guān)鍵還是在于你對計算機科學(xué)地把握程度。
計算機技術(shù)牽扯的內容更為廣泛些,一項一項說(shuō)恐怕沒(méi)個(gè)一年半載也說(shuō)不清。我只想提醒大家的還是那句話(huà),技術(shù)與科學(xué)是不能分家的,學(xué)好了科學(xué)同時(shí)搞技術(shù),這才是上上策。猶如英語(yǔ),原先人們與老外交流必須要個(gè)翻譯,現在滿(mǎn)馬路的人都會(huì )說(shuō)英語(yǔ)。就連21世紀英語(yǔ)演講比賽的冠軍都輪不到英語(yǔ)系的學(xué)生了。計算機也是一樣的,我們必須面對的一個(gè)現實(shí)就是:計算機真就只是一個(gè)工具,如果不具備其它方面的素養,計算機系的學(xué)生雖然不能說(shuō)找不到工作,不過(guò)總有一天當其他專(zhuān)業(yè)性人才掌握了計算機技術(shù)后將比我們出色許多。原因就在于計算機解決的大都是實(shí)際問(wèn)題,實(shí)際問(wèn)題的知識卻是我們少有的。單一的計算機技術(shù)沒(méi)有立足之地。
我想是時(shí)候指出:學(xué)習每一個(gè)課程之前,都要先搞清這一課程的學(xué)習目的。這一學(xué)科的應用領(lǐng)域。據我自身所了解到的同齡同學(xué)和低年級的同學(xué)的學(xué)習狀況:他們之中很少有人知道學(xué)一個(gè)學(xué)科的學(xué)習目的,期末考試結束了也不知道學(xué)這科做什么用。這就失去了讀計算機科學(xué)的意義。當然這與現存的教育思想不能說(shuō)一點(diǎn)關(guān)系都沒(méi)有。
總的來(lái)說(shuō),從教育角度來(lái)講,國內高校的課程安排不是很合理,強調理論,又不愿意在理論上深入教育,無(wú)力接受新技術(shù),想避開(kāi)新技術(shù)又無(wú)法避得一干二凈。我覺(jué)得關(guān)鍵問(wèn)題就是國內的高校難于突破現狀,條條框框限制著(zhù)怎么求發(fā)展。我們雖然認識得到國外教育的優(yōu)越性,但為什么遲遲不能采取行動(dòng)?哪怕是去粗取精的取那么一點(diǎn)點(diǎn)。我們需要改變。從我們自身角度來(lái)講,多數人4年下來(lái)既沒(méi)有學(xué)習計算機科學(xué)的學(xué)術(shù)水平,也沒(méi)有學(xué)習計算機技術(shù)的那種韌勁。在我剛上大一時(shí),我的計算機科學(xué)入門(mén)導師,淮北煤炭師范學(xué)院王愛(ài)平教授曾經(jīng)對我說(shuō)過(guò)這樣一番話(huà):“當你選擇了計算機這一門(mén)科學(xué),就意味著(zhù)你踏上了一條不歸路,就意味著(zhù)你一生都要為之奮斗……你的身后是懸崖,只有向前走,不能往后退。”
有些同學(xué)說(shuō)按照這樣學(xué)習學(xué)的東西太多,有的未見(jiàn)得有用,我想打個(gè)形象的比方:學(xué)校學(xué)出來(lái)的人都是一個(gè)球體,方方面面的知識都應具備。可是社會(huì )上需要球體的地方很少,反而需要的是磚和瓦,即精通某一行的人才。但是對于同等體積的物體,用球體來(lái)改造是最方便最省事的。學(xué)校的學(xué)生很多,為了能夠使更多的學(xué)生來(lái)適應這個(gè)社會(huì ),學(xué)校也就不得以把所有的學(xué)生都打造成一個(gè)球體,然后讓社會(huì )對這些學(xué)生進(jìn)行再加工,成為真正能夠有用的人才。即使你非常清楚自己的將來(lái)要干什么,并且非常下定決心要走自己的路,這一步你也必須走,世界是在不斷變化的,你不能預料未來(lái)。想清楚,努力去干吧!
必須結束這篇“胡侃”了,再侃下去非我力所能及。其實(shí)計算機還有很多基礎課都值得一侃。怎奈我造詣?dòng)邢蓿?不敢再讓內行恥笑。對于博大精深的計算機科學(xué),我只能說(shuō)我永遠都是個(gè)Beginner.最后聲明:這些只針對本科階段的學(xué)習。即使把這些全弄通了,前面的路還長(cháng),計算機科學(xué)需要我們?yōu)橹畩^斗......學(xué)習計算機科學(xué)需要韌性,更需要創(chuàng )新,需要激情。深刻學(xué)習理論知識,勇于接受新技術(shù)的挑戰,這才是我們這一代人應具有的素質(zhì)。最后送大家一句話(huà)“Wake up every day with a feeling of passion for the difference technology will make in people’s life!”。
在我大一時(shí)無(wú)意中找到了南京大學(xué)網(wǎng)友sir的帖子“胡侃(理論)計算機學(xué)習”,這個(gè)帖子對我的大學(xué)生活起了至關(guān)重要的作用,也因此同他成為了好友,本帖子在原有帖子的基礎上改進(jìn)了其中我認為不太合適的理論,修正了一些觀(guān)點(diǎn),在推薦教材方面結合我的學(xué)習情況有了較大改變。值得一提的是增加了一些計算機理論的內容,計算機技術(shù)的內容結合我國的教學(xué)情況和我們學(xué)習的實(shí)際情況進(jìn)行了重寫(xiě)。感謝大家的支持,這篇文章才能比較快的完成,這里也只是寫(xiě)下了我在學(xué)習計算機科學(xué)時(shí)的所思所想,很不成熟。與原文相比增加了一些推薦參考書(shū),刪去了一些過(guò)陳舊的難以找到的材料。并且對一些問(wèn)題作了更為詳細地闡述,也增加了一些新觀(guān)點(diǎn)。希望大家多多討論,改進(jìn)不足,讓我們共同努力吧!