設萬維讀者為首頁 廣告服務 聯繫我們 關於萬維
簡體 繁體 手機版
分類廣告
版主:諍友
萬維讀者網 > 教育學術 > 帖子
計算機科學與技術學習心得 (1)
送交者: 1dea 2003年07月11日18:44:41 於 [教育學術] 發送悄悄話

計算機科學與技術學習心得

[原創] Newsoftstudio

  計算機科學與技術這一門科學深深的吸引着我們這些同學們,上計算機系已經有近三
年了,自己也做了一些思考,原先不管是國內還是國外都喜歡把這個系分為計算機軟件理
論、計算機系統、計算機技術與應用。後來又合到一起,變成了現在的計算機科學與技術
。我一直認為計算機科學與技術這門專業,在本科階段是不可能切分成計算機科學和計算
機技術的,因為計算機科學需要相當多的實踐,而實踐需要技術;每一個人(包括非計算
機專業),掌握簡單的計算機技術都很容易(包括原先Major們自以為得意的程序設計),
但計算機專業的優勢是:我們掌握許多其他專業並不"深究"的東西,例如,算法,體繫結
構,等等。非計算機專業的人可以很容易地做一個芯片,寫一段程序,但他們做不出計算
機專業能夠做出來的大型系統。今天我想專門談一談計算機科學,並將重點放在計算理論
上。

1、計算機理論的一個核心問題-------------從數學談起:

  [1]高等數學Vs數學分析    

  記得當年大一入學,每周四課時高等數學,天天作業不斷(那時是七天工作制)。頗
有些同學驚呼走錯了門:咱們這到底念的是什麼系?不錯,你沒走錯門,這就是計算機科學
與技術系。我國計算機科學系裡的傳統是培養做學術研究,尤其是理論研究的人(方向不
見得有多大的問題,但是做得不是那麼盡如人意)。而計算機的理論研究,說到底了,如
網絡安全學,圖形圖像學,視頻音頻處理,哪個方向都與數學有着很大的關係,雖然也許
是正統數學家眼裡非主流的數學。這裡我還想闡明我的一個觀點:我們都知道,數學是從
實際生活當中抽象出來的理論,人們之所以要將實際抽象成理論,目的就在於想用抽象出
來的理論去更好的指導實踐,有些數學研究工作者喜歡用一些現存的理論知識去推導若干
條推論,殊不知其一:問題考慮不全很可能是個錯誤的推論,其二:他的推論在現實生活
中找不到原型,不能指導實踐。嚴格的說,我並不是一個理想主義者,政治課上學的理論
聯繫實際一直是指導我學習科學文化知識的航標(至少我認為搞計算機科學與技術的應當
本着這個方向)。

  其實我們計算機系學數學僅學習高等數學是不夠的(典型的工科院校一般都開的是高
等數學),我們應該像數學系一樣學一下數學分析(清華計算機系開的好像就是數學分析
,我們學校計算機學院開的也是,不過老師講起來好像還是按照高等數學講),數學分析
這門科學,咱們學計算機的人對它有很複雜的感情。在於它是偏向於證明型的數學課程,
這對我們培養良好的分析能力和推理能力極有幫助。我的軟件工程學導師北工大數理學院
的王儀華先生就曾經教導過我們,數學系的學生到軟件企業中大多作軟件設計與分析工作
,而計算機系的學生做程序員的居多,原因就在於數學系的學生分析推理能力,從所受訓
練的角度上要遠遠在我們平均水平之上。當年出現的怪現象是:計算機系學生的高中數學
基礎在全校數一數二(希望沒有冒犯其它系的同學),教學課時數也僅次於數學系,但學
完之後的效果卻不盡如人意。難道都是學生不努力嗎,我看未見得,方向錯了也說不一定
,其中原因何在,發人深思。

  我個人的淺見是:計算機系的學生,對數學的要求固然跟數學系不同,跟物理類差別
則更大。通常非數學專業的所?quot;高等數學",無非是把數學分析中較困難的理論部分
刪去,強調套用公式計算而已。而對計算機系來說,數學分析里用處最大的恰恰是被刪去
的理論部分。說得難聽一點,對計算機系學生而言,追求算來算去的所謂"工程數學"已經
徹底地走進了誤區。記上一堆曲面積分的公式,難道就能算懂了數學?那倒不如現用現查
,何必費事記呢?再不然直接用Mathematica或是Matlab好了。 退一萬步講,即使是學高
等數學我想大家看看華羅庚先生的《高等數學導論》也是比一般的教材好得多。華羅庚在
數學上的造詣不用我去多說,但是他這光輝的一生做得我認為對我們來說,最重要的幾件
事情: 首先是它籌建了中國科學院計算技術研究所,這是我們國家計算機科學的搖籃。在
有就是他把很多的高等數學理論都交給了做工業生產的技術人員,推動了中國工業的進步
。第三件就是他一生寫過很多書,但是對高校師生價值更大的就是他在病期間在病床上和
他的愛徒王元寫了《高等數學引論》(王元與其說是他的愛徒不如說是他的同事,是中科
院數學所的老一輩研究員,對歌德巴赫猜想的貢獻全世界僅次於陳景潤)這書在我們的圖
書館裡居然找得到,說實話,當時那個書上已經長了蟲子,別人走到那裡都會閃開,但我卻格外感興趣,上下兩冊看了個遍,我的最大收穫並不在於理論的闡述,而是在於他的理論完全的
實例化,在生活中去找模型。這也是我為什麼比較喜歡具體數學的原因,正如我在上文中
提到的,理論脫離了實踐就失去了它存在的意義。正因為理論是從實踐當中抽象出來的,
所以理論的研究才能夠更好的指導實踐,不用於指導實踐的理論可以說是毫無價值的。

  我在系裡最愛做的事情就是給學弟學妹們推薦參考書。沒有別的想法,只是希望他們
少走彎路。中文的數學分析書,一般都認為以北大張築生老師的"數學分析新講"為最好。
張築生先生一生寫的書並不太多,但是只要是寫出來的每一本都是本領域內的傑作,這本
當然更顯突出些。這種老書看起來不僅是在傳授你知識,而是在讓你體會科學的方法與對
事物的認識方法。萬一你的數學實在太好,那就去看菲赫金哥爾茨?quot;微積分學教程"
好了-------------但我認為沒什麼必要,畢竟你不想轉到數學系去。吉米多維奇的"數學
分析習題集"也基本上是計算型的書籍。書的名氣很大,倒不見得適合我們,還是那句話,
重要的是數學思想的建立,生活在信息社會裡我們求的是高效,計算這玩意還是留給計算
機吧。不過現在多用的似乎是復旦大學的《數學分析》,高等教育出版社的,也是很好的
教材。

  中國的所謂高等代數,就等於線性代數加上一點多項式理論。我以為這有好的一面,
因為可以讓學生較早感覺到代數是一種結構,而非一堆矩陣翻來覆去。這裡不得不提南京
大學林成森,盛松柏兩位老師編的"高等代數",感覺相當舒服。此書相當全面地包含了關
於多項式和線性代數的基本初等結果,同時還提供了一些有用的又比較深刻的內容,如St
urm序列,Shermon-Morrison公式,廣義逆矩陣等等。可以說,作為本科生如能吃透此書,
就可以算是高手。國內較好的高等代數教材還有清華計算機系用的那本,清華出版社出版
,書店裡多多,一看就知道。從抽象代數的觀點來看,高等代數裡的結果不過是代數系統
性質的一些例子而已。莫宗堅先生的《代數學》裡,對此進行了深刻的討論。然而莫先生
的書實在深得很,作為本科生恐怕難以接受,不妨等到自己以後成熟了一些再讀。

  正如上面所論述的,計算機系的學生學習高等數學:知其然更要知其所以然。你學習
的目的應該是:將抽象的理論再應用於實踐,不但要掌握題目的解題方法,更要掌握解題
思想,對於定理的學習:不是簡單的應用,而是掌握證明過程即掌握定理的由來,訓練自
己的推理能力。只有這樣才達到了學習這門科學的目的,同時也縮小了我們與數學系的同
學之間思維上的差距。

  [2]計算數學基礎

  概率論與數理統計這門課很重要,可惜大多數院校講授這門課都會少些東西。少了的
東西現在看至少有隨機過程。到畢業還沒有聽說過Markov過程,此乃計算機系學生的恥辱
。沒有隨機過程,你怎麼分析網絡和分布式系統?怎麼設計隨機化算法和協議?據說清華
計算機系開有"隨機數學",早就是必修課。另外,離散概率論對計算機系學生來說有特殊
的重要性。而我們國家工程數學講的都是連續概率。現在,美國已經有些學校開設了單純
的"離散概率論"課程,乾脆把連續概率刪去,把離散概率講深些。我們不一定要這麼做,
但應該更加強調離散概率是沒有疑問的。這個工作我看還是儘早的做為好。

  計算方法學(有些學校也稱為數學分析學)是最後一門由數理學院給我們開的課。一
般學生對這門課的重視程度有限,以為沒什麼用。不就是照套公式嘛!其實,做圖形圖像
可離不開它,密碼學搞深了也離不開它。而且,在很多科學工程中的應用計算,都以數值
的為主。這門課有兩個極端的講法:一個是古典的"數值分析",完全講數學原理和算法;
另一個是現在日趨流行的"科學與工程計算",乾脆教學生用軟件包編程。我個人認為,計
算機系的學生一定要認識清楚我們計算機系的學生為什麼要學這門課,我是很偏向於學好
理論後用計算機實現的,最好使用C語言或C++編程實現。向這個方向努力的書籍還是挺多
的,這裡推薦大家高等教育出版社(CHEP)和施普林格出版社(Springer)聯合出版的《
計算方法(Computational Methods)》,華中理工大學數學系寫的(現華中科技大學),
這方面華科大做的工作在國內應算是比較多的,而個人認為以這本最好,至少程序設計方
面涉及了:任意數學函數的求值,方程求根,線性方程組求解,插值方法,數值積分,場
微分方程數值求解。李慶揚先生的那本則理論性過強,與實際應用結合得不太緊,可能比
較適合純搞理論的。

  [3]也談離散數學   

  每個學校本系裡都會開一門離散數學,涉及集合論,圖論,和抽象代數,數理邏輯。
不過,這麼多內容擠在離散數學一門課里,是否時間太緊了點?另外,計算機系學生不懂
組合和數論,也是巨大的缺陷。要做理論,不懂組合或者數論吃虧可就太大了。從理想的
狀態來看,最好分開六門課:集合,邏輯,圖論,組合,代數,數論。這個當然不現實,
因為沒那麼多課時。也許將來可以開三門課:集合與邏輯,圖論與組合,代數與數論。(
這方面我們學校已經着手開始做了)不管課怎麼開,學生總一樣要學。下面分別談談上面
的三組內容。

  古典集合論,北師大出過一本《基礎集合論》不錯。

  數理邏輯,中科院軟件所陸鍾萬教授的《面向計算機科學的數理邏輯》就不錯。現在
可以找到陸鍾萬教授的講課錄像http://www.cas.ac.cn/html/Dir/2001/11/06/3391.htm自
己去看看吧。總的來說,學集合/邏輯起手不難,普通高中生都能看懂。但越往後越感覺深
不可測。

  學完以上各書之後,如果你還有精力興趣進一步深究,那麼可以試一下GTM系列中的《
Introduction to Axiomatic Set Theory》和《A Course of Mathematical Logic》。這
兩本都有世界圖書出版社的引進版。你如果能搞定這兩本,可以說在邏輯方面真正入了門
,也就不用再浪費時間聽我瞎侃了。

  據說全中國最多只有三十個人懂圖論。此言不虛。圖論這門科學,技巧性太強,幾乎
每個問題都有一個獨特的方法,讓人頭痛。不過這也正是它魅力所在:只要你有創造性,
它就能給你成就感。我的導師說,圖論裡面隨便找一塊東西就可以寫篇論文。大家可以體
會裡面內容之深廣了吧!國內的圖論書中,王樹禾老師的"圖論及其算法"非常成功(順便
推薦大家王先生的"數學思想史",個人認為了解科學史會對我們的學習和研究起到很大的
推動作用)。一方面,其內容在國內教材里算非常全面的。另一方面,其對算法的強調非
常適合計算機系(本來就是科大計算機系教材)。有了這本書為主,再參考幾本翻譯的,
如Bondy & Murty的《圖論及其應用》,人民郵電出版社翻譯的《圖論和電路網絡》等等,
就馬馬虎虎,對本科生絕對足夠了。再進一步,世界圖書引進有GTM系列的"Modern Graph
Theory"。此書確實經典!國內好象還有一家出版了個翻譯版。不過,學到這個層次,還
是讀原版好(說實話,主要是親身體驗翻譯版的弊端,這個大家自己體會)。搞定這本書
,也標誌着圖論入了門。

  離散數學方面我們北京工業大學實驗學院有個世界級的專家,叫邵學才,復旦大學概
率論畢業的,教過高等數學,線性代數,概率論,最後轉向離散數學,出版著作無數,論
文集新加坡有一本,堪稱經典,大家想學離散數學的真諦不妨找來看看。這老師的課我專
門去聽過,極為經典。不過你要從他的不經意的話中去挖掘精髓。在同他的交談當中我又
深刻地發現一個問題,雖說邵先生寫書無數,但依他自己的說法每本都差不多,我實在覺
得詫異,他說主要是有大綱的限制,不便多寫。這就難怪了,很少聽說國外寫書還要依據
個什麼大綱(就算有,內容也寬泛的多),不敢越雷池半步,這樣不是看誰的都一樣了。
外版的書好就好在這裡,最新的科技成果裡面都有論述,別的先不說,至少?quot;緊跟時
代的理論知識"。

  原先離散數學和數據結構歸在一起成為離散數學結構,後來由於數據結構的內容比較
多,分出來了,不過最近國外好像有些大學又把它們合併到了一起,道理當然不用說,可
能還是考慮到交叉的部分比較多。比較經典的書我看過得應算是《Discrete Mathematica
l Structures》了,清華大學出版社有個影印版的。

  [4]續談其他的一些計算數學

  組合數學我看的第一本好像是北大捐給我們學院的,一本外版書。感覺沒有太適合的
國產書。還是讀Graham和Knuth等人合著的經典"具體數學"吧,西安電子科技大學出版社有
翻譯版。

  《組合數學》,《空間解析幾何》還有那本《拓撲學》,看這三本書的時候是極其費
事的,原因有幾點,首先是這三本書無一例外,都是用繁體字寫的,第二就是書真得實在
是太髒了,我在圖書館的座位上看,同學們都離我做得很遠。我十分不自然,不願意影響
同學,但是學校不讓向外借這種書(呵呵,說起這是也挺有意思,別人都不看這種書,只
有我在看,老師就特別的關注我,後來我和他講了這些書的價值,他居然把他們當作是震
館之寶,老師都不許借,不過後來他們看我真得很喜歡看,就把書借給了我,當然用的是
館長的名義借出去的。)不過收穫是非常大的,再後來學習計算機理論時裡面的很多東西
都是常會用到的。當然如果你沒看過這些書絕對理解不到那個層次。拿拓撲學來說,我們
學校似乎是美開設這門課程,但是這門課程的重要性是顯而易見的,沒有想到的是在那本
書的很多頁中都夾着一些讀書筆記,而那個筆記的作者及有些造詣,有些想法可以用到現
代網絡設計當中。

  抽象代數,國內經典為莫宗堅先生的《代數學》。此書聽說是北大數學系教材,深得
好評。然而對本科生來說,此書未免太深。可以先學習一些其它的教材,然後再回頭來看
"代數學"。國際上的經典可就多了,GTM系列裡就有一大堆。推薦一本談不上經典,但卻最
簡單的,最容易學的http://www.math.miami.edu/~ec/book/這本"Introduction to Line
ar and Abstract Algebra"非常通俗易懂,而且把抽象代數和線性代數結合起來,對初學
者來說非常理想,我校比較牛的同學都有收藏。

  數論方面,國內有經典而且以困難著稱摹凍醯仁邸?(潘氏兄弟著,北大版)。再追
溯一點,還有更加經典(可以算世界級)並且更加困難的"數論導引"(華羅庚先生的名著
,科學版,九章書店重印,繁體的看起來可能比較困難)。把基礎的幾章搞定一個大概,
對本科生來講足夠了。但這只是初等數論。本科畢業後要學計算數論,你必須看英文的書
,如Bach的"Introduction to Algorithmic Number Theory"。

  計算機科學理論的根本,在於算法。現在很多系裡給本科生開設算法設計與分析,確
實非常正確。環顧西方世界,大約沒有一個三流以上計算機系不把算法作為必修的。算法
教材目前公認以Corman等著的《Introduction to Algorithms》為最優。對入門而言,這
一本已經足夠,不需要再參考其它書。 深一點的就是大家作為常識都知道的TAOCP了。即
是《The Art of Computer Programming》3冊內容全世界都能看下來的本身就不多,Gate
s曾經說過"若是你能把這書上面的東西都看懂,請把你的簡歷發給我一份"我的學長司徒彥
南兄就曾千里迢迢從美國托人買這書回來,別的先不說,可見這書的在我們計算機科學與
技術系中的分量。

   再說說形式語言與自動機。我看過北郵的教材,應該說寫的還清楚。有一本通俗易懂
的好書,MIT的sipser的 《introduction to theory of computation》。但是,有一點要
強調:形式語言和自動機的作用主要在作為計算模型,而不是用來做編譯。事實上,編譯
前端已經是死領域,沒有任何open problems,北科大的班曉娟博士也曾經說過,編譯的技
術已相當成熟。如果為了這個,我們完全沒必要去學形式語言-------------用用yacc什麼
的就完了。北郵的那本在國內還算比較好,但是在深度上,在跟可計算性的聯繫上都有較
大的局限,現代感也不足。所以建議有興趣的同學去讀英文書,不過國內似乎沒引進這方
面的教材。可以去互動出版網上看一看。入門以後,把形式語言與自動機中定義的模型,
和數理邏輯中用遞歸函數定義的模型比較一番,可以說非常有趣。現在才知道,什麼叫"宮
室之美,百官之富"!

  計算機科學和數學的關係有點奇怪。二三十年以前,計算機科學基本上還是數學的一
個分支。而現在,計算機科學擁有廣泛的研究領域和眾多的研究人員,在很多方面反過來
推動數學發展,從某種意義上可以說是孩子長得比媽媽還高了。但不管怎麼樣,這個孩子
身上始終流着母親的血液。這血液是the mathematical underpinning of computer scie
nce(計算機科學的數學基礎),也就是理論計算機科學。原來在東方大學城圖書館中曾經
看過一本七十年代的譯本(書皮都沒了,可我就愛關注這種書),大概就叫《計算機數學
》。那本書若是放在當時來講決是一本好書,但現在看來,涵蓋的範圍還算廣,深度則差
了許多,不過推薦大一的學生倒可以看一看,至少可以使你的計算數學入入門,也就是說
至少可以搞清數學到底在計算機科學什麼地方使用。

  最常和理論計算機科學放在一起的一個詞是什麼?答:離散數學。這兩者的關係是如
此密切,以至於它們在不少場合下成為同義詞。(這一點在前面的那本書中也有體現)傳
統上,數學是以分析為中心的。數學系的同學要學習三四個學期的數學分析,然後是復變
函數,實變函數,泛函數等等。實變和泛函被很多人認為是現代數學的入門。在物理,化
學,工程上應用的,也以分析為主。

  隨着計算機科學的出現,一些以前不太受到重視的數學分支突然重要起來。人們發現
,這些分支處理的數學對象與傳統的分析有明顯的區別:分析研究的問題解決方案是連續
的,因而微分,積分成為基本的運算;而這些分支研究的對象是離散的,因而很少有機會
進行此類的計算。人們從而稱這些分支為"離散數學"。"離散數學"的名字越來越響亮,最
後導致以分析為中心的傳統數學分支被相對稱為"連續數學"。

  離散數學經過幾十年發展,基本上穩定下來。一般認為,離散數學包含以下學科:

1) 集合論,數理邏輯與元數學。這是整個數學的基礎,也是計算機科學的基礎。

2) 圖論,算法圖論;組合數學,組合算法。計算機科學,尤其是理論計算機科學的核心
是算法,而大量的算法建立在圖和組合的基礎上。

3) 抽象代數。代數是無所不在的,本來在數學中就非常重要。在計算機科學中,人們驚
訝地發現代數竟然有如此之多的應用。

 但是,理論計算機科學僅僅就是在數學的上面加上"離散"的帽子這麼簡單嗎?一直到大
約十幾年前,終於有一位大師告訴我們:不是。D.E.Knuth(他有多偉大,我想不用我再說
了)在Stanford開設了一門全新的課程Concrete Mathematics。 Concrete這個詞在這裡有
兩層含義:

  首先:對abstract而言。Knuth認為,傳統數學研究的對象過於抽象,導致對具體的問
題關心不夠。他抱怨說,在研究中他需要的數學往往並不存在,所以他只能自己去創造一
些數學。為了直接面向應用的需要,他要提倡"具體"的數學。在這裡我做一點簡單的解釋
。例如在集合論中,數學家關心的都是最根本的問題-------------公理系統的各種性質之
類。而一些具體集合的性質,各種常見集合,關係,映射都是什麼樣的,數學家覺得並不
重要。然而,在計算機科學中應用的,恰恰就是這些具體的東西。Knuth能夠首先看到這一
點,不愧為當世計算機第一人。其次,Concrete是Continuous(連續)加上discrete(離
散)。不管連續數學還是離散數學,只要是能與我們研究的內容掛上鈎的都是有用的數學

2、理論與實際的結合-------------計算機科學技術研究的範疇與學習方法      前
面主要是從數學角度來看的。從計算機角度來看,理論計算機科學目前主要的研究領域包
括:可計算性理論,算法設計與複雜性分析,密碼學與信息安全,分布式計算理論,並行
計算理論,網絡理論,生物信息計算,計算幾何學,程序語言理論等等。這些領域互相交
叉,而且新的課題在不斷提出,所以很難理出一個頭緒來。想搞搞這方面的工作,推薦看
中國計算機學會的一系列書籍,至少代表了我國的權威。下面隨便舉一些例子。

  由於應用需求的推動,密碼學現在成為研究的熱點。密碼學建立在數論(尤其是計算
數論),代數,信息論,概率論和隨機過程的基礎上,有時也用到圖論和組合學等。很多
人以為密碼學就是加密解密,而加密就是用一個函數把數據打亂。這樣的理解太淺顯了。

現代密碼學至少包含以下層次的內容:

第一,密碼學的基礎。例如,分解一個大數真的很困難嗎?能否有一般的工具證明協議正
確?

第二,密碼學的基本課題。例如,比以前更好的單向函數,簽名協議等。

第三,密碼學的高級問題。例如,零知識證明的長度,秘密分享的方法。

第四,密碼學的新應用。例如,數字現金,叛徒追蹤等。

  密碼學方面值得推薦的有一本《應用密碼學》還有就是平時多看看年會的論文集,感
覺這種材料實用性比較強,會提高很快。

在分布式系統中,也有很多重要的理論問題。例如,進程之間的同步,互斥協議。一
個經典的結果是:在通信信道不可靠時,沒有確定型算法能實現進程間協同。所以,改進
TCP三次握手幾乎沒有意義。例如時序問題。常用的一種序是因果序,但因果序直到不久前
才有一個理論上的結果....例如,死鎖沒有實用的方法能完美地對付。例如,......*作系
統研究過就自己去舉吧!

  如果計算機只有理論,那麼它不過是數學的一個分支,而不成為一門獨立的科學。事
實上,在理論之外,計算機科學還有更廣闊的天空。

0%(0)
標 題 (必選項):
內 容 (選填項):
實用資訊
回國機票$360起 | 商務艙省$200 | 全球最佳航空公司出爐:海航獲五星
海外華人福利!在線看陳建斌《三叉戟》熱血歸回 豪情築夢 高清免費看 無地區限制
一周點擊熱帖 更多>>
一周回復熱帖
歷史上的今天:回復熱帖
2002: 高考如何鋪就就業路
2002: 如何看今年高考作文題