斯坦福大學編譯原理
⑴ 《Compilers Principles》txt下載在線閱讀全文,求百度網盤雲資源
《Compilers Principles編譯原理》(Alfred V. Aho)電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/1uTWbyl7EEuUO1EgQpbxOkg
書名:Compilers Principles編譯原理
作者:Alfred V. Aho
豆瓣評分:9.2
出版社:機械工業出版社
出版年份:2011-1
頁數:1009
內容簡介:
本書是編譯領域無可替代的經典著作,被廣大計算機專業人士譽為「龍書」。本書上一版自1986年出版以來,被世界各地的著名高等院校和研究機構(包括美國哥倫比亞大學、斯坦福大學、哈佛大學、普林斯頓大學、貝爾實驗室)作為本科生和研究生的編譯原理課程的教材。該書對我國高等計算機教育領域也產生了重大影響。 第2版對每一章都進行了全面的修訂,以反映自上一版出版20多年來軟體工程。程序設計語言和計算機體系結構方面的發展對編譯技術的影響。本書全面介紹了編譯器的設計,並強調編譯技術在軟體設計和開發中的廣泛應用。每章中都包含大量的習題和豐富的參考文獻。 本書適合作為高等院校計算機專業本科生和研究生的編譯原理與技術課程的教材,也可供廣大計算機技術人員參考。
作者簡介:
Alfred V.Aho,美國歌倫比亞大學教授,美國國家工程院院士,ACM和IEEE會士,曾獲得IEEE的馮·諾伊曼獎。著有多部演算法、數據結構、編譯器、資料庫系統及計算機科學基礎方面的著作。
Monica S.Lam,斯坦福大學計算機科學系教授,曾任Tensilica的首席科學家,也是Moka5的首任CEO。曾經主持SUIF項目,該項目產生了最流行的研究用編譯器之一。
Ravi Sethi,Avaya實驗室總裁,曾任貝爾實驗室高級副總裁和Lucent Technologies通信軟體的CTO。他曾在賓夕法尼亞州立大學,亞利桑那州立大學和普林斯頓大學任教,是ACM會士。
Jefirey D.Ullman斯坦福大學計算機科學系教授和Gradiance CEO。他的研究興趣包括資料庫理論、資料庫集成、數據挖掘和利用信息基礎設施教學等。他是美國國家工程學院院士、IEEE會士,獲得過ACM的Karlstrom傑出教育獎和Knuth獎。
⑵ CCCF專欄 | 智能計算系統——一門人工智慧專業的系統課程
我國人工智慧底層研究能力缺失的現象嚴重,最根本的原因在於這方面人才教育培養的缺失。2018年中,作者陳雲霽在中國科學院大學開設了一門「智能計算系統」課程。這門課程受到了學生的歡迎,有很多選不上課的學生跟著旁聽了整個學期。
關鍵詞:智能計算系統 人工智慧 專業課程
編者按 :5年前,本文作者陳雲霽受邀在CCCF專欄上發表了一篇題為《體系結構研究者的人工智慧之夢》 1 的文章,第一次公開介紹他從通用處理器轉向深度學習處理器方向的心路歷程(那篇文章後來也被收錄進了《CCCF優秀文章精選》)。經過5年的努力,陳雲霽在深度學習處理器方向作出了國際公認的貢獻:他的學術論文被頂級會議ISCA』18超過四分之一的論文引用,他的技術成果被應用到華為、曙光、阿里等近億台智能手機和伺服器中。他因此被Science雜志評價為智能晶元的「先驅」和「領導者」。現在,當深度學習處理器已經成為學術界和工業界的熱點時,陳雲霽再次轉身,邁向人工智慧系統課程教學的新舞台。這篇文章將和大家分享他走向這個新舞台的心路歷程。
智能計算系統課程的開設
我是一名中國科學院計算技術研究所的青年科研人員,主要從事計算機系統結構和人工智慧交叉方向的基礎研究。看到本文的標題和作者單位,大家可能會覺得有一點奇怪:作者和人工智慧專業課程有什麼關系?因為傳統意義上,上課是高校教師的職責,中國科學院的員工除非是自願擔任了中國科學院大學(國科大)的崗位教授,否則並沒有上課的義務。
驅使我主動思考人工智慧專業課程設計的最主要的原因,是這樣一個眾所周知的現象:越是人工智慧上層(演算法層、應用層,見圖1)的研究,我國研究者對世界作出的貢獻越多;越是底層(系統層、晶元層),我國研究者的貢獻越少。在各種ImageNet比賽中,我國很多機構的演算法模型已經呈現「霸榜」的趨勢,可以說代表了世界前沿水平。但這些演算法模型絕大部分都是在CUDA 2 編程語言、Tensorflow編程框架以及GPU之上開發的。在這些底層「硬 科技 」中,我國研究者對世界的貢獻就相對少了很多。底層研究能力的缺失不僅會給我國人工智慧基礎研究拖後腿,更重要的是,將使得我國智能產業成為一個空中樓閣,走上信息產業受核心晶元和操作系統制約的老路。
圖1 人工智慧研究大致層次
我國人工智慧底層研究能力缺失的原因很多,我認為最根本的原因在於這方面的人才教育培養的缺失。沒有肥沃的土壤,就長不出參天大樹。沒有具備系統思維的人工智慧專業學生,我國就難以出現傑夫·迪恩(Jeff Dean)這樣的智能計算系統大師,也不會產生有國際競爭力的智能系統產品。因此,在人工智慧專業學生的培養上,我們應當主動作為去改變局面。
2018年我國有35個高校設立了人工智慧本科專業,這是重新思考和梳理人工智慧培養體系的一次重大機遇。就我目前的了解,大部分高校在考慮人工智慧課程體系時,採用的是純演算法、純應用的教學思路。這樣培養出來的學生,仍然是偏向上層應用開發,對智能計算系統缺乏融會貫通的理解。
事實上,各個高校不乏有識之士,在課程設計上繞開系統課程往往受制於三大客觀困難:一是國內還沒有太多人工智慧系統類的課程可供參考,二是國內缺乏人工智慧系統類課程的師資,三是國際上缺乏人工智慧系統課程的教材。
基於自己的研究背景,我對人工智慧的演算法和系統都有一些粗淺的涉獵。我是否能為解決人工智慧系統課程、師資、教材上的困難作一點微薄的貢獻?是否可以身體力行地培養一些具備系統思維和能力的人工智慧專業學生呢?
因此,2018年中,我向中國科學院大學申請開設一門人工智慧專業的系統課程,名為「智能計算系統」(曾名「智能計算機」),希望能培養學生對智能計算完整軟硬體技術棧(包括基礎智能演算法、智能計算編程框架、智能計算編程語言、智能晶元體系結構等)融會貫通的理解。這門課程受到了學生的歡迎,有很多選不上課的學生跟著旁聽了整個學期。讓我尤其感動的是,有其他研究所的學生慕名自發地從中關村跑到懷柔來聽課,上一次課來回車程就要三個小時,回到中關村都是深夜。這也許能說明這門課對學生來說有一定吸引力,大家在聽課中有真正的收獲。
人工智慧專業學生培養和課程體系
人工智慧專業的課程體系設計應該服務於學生培養目標。那麼高校人工智慧專業應該培養什麼樣的學生?
這個問題可能還沒有統一的答案。對比和人工智慧專業非常接近的計算機專業,高校的計算機專業培養的顯然不是計算機的使用者,而是計算機整機或者子系統的研究者、設計者和製造者。
我國計算機專業的前輩在六十多年前開始設立計算機專業時,就高瞻遠矚地設計了一個軟硬結合的方案來培養計算機整機或者子系統的研究者、設計者和製造者。這套方案經過六十年的演進,依然基本保持了當年的初衷。今天,各個高校的計算機專業,基本都開設了計算機組成原理、操作系統、編譯原理、計算機體系結構等系統類的必修課程(見圖2)。也就是說,雖然計算機專業的學生畢業後大多從事軟體開發工作,但是他們對計算機硬體系統還是有基礎的了解的。
圖2 網易雲課堂上的計算機專業培養方案 3
人工智慧專業學生的培養目標應當是人工智慧系統或者子系統的研究者、設計者和製造者。只有實現這個目標,高校培養的人才才能源源不斷地全面支撐我國人工智慧的產業和研究。為了實現這個目標,人工智慧專業的課程設計應當包括軟硬兩條線(就像計算機專業)。如果人工智慧專業只開設機器學習演算法、視聽覺應用等課程,那充其量只能算是「人工智慧應用專業」或者「人工智慧演算法專業」。畢竟演算法只是冰山露出水面的一角,冰山底下90%還是硬體和系統。
就拿擁有世界上最大的AI演算法研究團隊的公司谷歌來說,谷歌董事長約翰·軒尼詩(John Hennessy)是計算機體系結構科學家,圖靈獎得主;谷歌AI的總負責人傑夫·迪恩(Jeff Dean)是計算機系統研究者;谷歌AI最令人矚目的三個進展(Tensorflow, AlphaGo, TPU)都是系統,而不僅僅是某個特定演算法,演算法只是系統的一個環節。因此,從人工智慧國際學術主流來看,系統的重要性是不亞於演算法的。
只學過演算法的學生或許對於調模型參數很在行,但是對一個演算法的耗時、耗電毫無感覺。這樣的學生不具備把一個演算法在工業系統上應用起來的基本功(因為一個演算法真正要用起來必須滿足延遲和能耗的限制)。
只有加入了系統線的課程,學生才能真正理解人工智慧是怎樣工作的,包括一個人工智慧演算法到底如何調用編程框架,編程框架又是怎麼和操作系統打交道,編程框架里的運算元又是怎樣一步步在晶元上運行起來。這樣的學生能親手構建出復雜的系統或者子系統,在科研上會有更大的潛力,在產業里也會有更強的競爭力。正如業界所雲:「會用Tensorflow每年賺30萬人民幣,會設計Tensorflow每年賺30萬美元。」
有很多老師和我說:「人工智慧專業確實應當有一些系統類的課程。但國內從來沒有開過這樣的課,也沒有合適的教材,我們學院也缺乏相應的老師來教這樣的課程。」這是很實際的三個客觀困難,但不應當影響我們對人工智慧專業的課程設計。
從學生角度講,人工智慧專業開設什麼課程,應該是看國家和企業需要學生會什麼,而不完全是看老師現在會什麼。六十年前,我國沒有幾個人見過計算機,更別說開課了。但為了兩彈一星等科學和工程計算任務,我國依然成立了中科院計算所,並在計算所辦計算機教師培訓班,在清華大學、中國科學技術大學等高校(此處恕不能一一列全)開設計算機專業,這才有了今天我國巨大的計算機產業。
從教師角度講,人工智慧的系統研究已經成為國際學術熱點,講授這類課程是一個教學相長的過程,能幫助教師走到國際學術前沿。今年美國計算機方向Top4高校(斯坦福大學、卡耐基梅隆大學、加州大學伯克利分校和麻省理工學院)以及其他多個國際單位的研究者聯合發布了一份名為「Machine Learning System(機器學習系統)」的白皮書。在這樣的新興熱門方向布局培育一批青年教師,無疑對提升所在高校乃至我國在人工智慧學術界的影響力有巨大幫助。
因此,不論是對於人工智慧專業的學生還是教師來說,把系統類課程開起來,都是有必要,也是有實際意義的。
什麼是智能計算系統
簡單來說,智能計算系統就是人工智慧的物質載體。現階段的智能計算系統通常是集成通用CPU和智能晶元(英偉達GPU或寒武紀MLU等)的異構系統,並向開發者提供智能計算編程框架和編程語言等。之所以要在通用CPU之外加上智能晶元,主要是因為通用CPU難以滿足人工智慧計算不斷增長的速度和能耗需求。例如,2012年穀歌大腦用了1.6萬個CPU核運行了數天來訓練怎麼識別貓臉,這對於工業應用來說是很難接受的。顯然,要想真正把人工智慧技術用起來,必須使用異構的智能計算系統。而為了降低異構智能計算系統的編程難度,就需要有面向智能計算的編程框架和編程語言。
事實上,智能計算系統已經以種種形態廣泛滲透到我們的生活中了。IBM的超級計算機Summit用機器學習方法做天氣預報,BAT的數據中心上運行著大量的廣告推薦任務,華為的手機上集成寒武紀深度學習處理器來處理圖像分析和語音識別,特斯拉的自動駕駛系統……都可以看成是智能計算系統。在智能時代,中國乃至全世界都需要大批的智能計算系統的開發者、設計者、應用者。
智能計算系統的發展並不是一蹴而就的事情。20世紀80年代面向符號主義智能處理的專用計算機(Prolog機和LISP機)可以被看成是第一代智能計算系統。但是當時人工智慧缺乏實際應用,演算法也不成熟,而且當時摩爾定律還處於飛速發展階段,專用計算機相對每18個月性能就能翻番的通用CPU並沒有太大優勢。因此,第一代智能計算系統逐漸退出了 歷史 舞台。
「智能計算系統」課程重點關注的是第二代智能計算系統,主要是面向深度學習等機器學習任務的計算機。相對於30年前的第一代智能計算系統,當今的第二代深度學習智能計算系統可謂是碰到了天時地利人和。當前圖像識別、語音識別、自然語言理解、 游戲 、廣告推薦等人工智慧應用已開始落地,深度學習演算法發展速度令人應接不暇。尤其重要的是,通用CPU性能發展已經趨停,要支撐不斷發展的深度學習演算法,必須要靠智能計算系統。因此,深度學習智能計算系統會在很長一個階段里都是學術界和產業界關注的焦點。「智能計算系統」課程將能幫助學生深刻理解深度學習智能計算系統。
第二代智能計算系統主要支持深度學習等機器學習任務。未來如果人類真的要在通用人工智慧道路上再往前走一步,那未來的第三代智能計算系統需要支持的演算法將遠遠超出機器學習的范疇,必須包括聯想、推理、涌現等高級認知智能演算法。我個人猜測,第三代智能計算系統可能會是孵化通用人工智慧的虛擬世界環境。「智能計算系統」課程或許能激發學生的好奇心,吸引學生投身於未來的第三代智能計算系統的研究中。
智能計算系統課程概況
「智能計算系統」這門課程主要是面向人工智慧、計算機和軟體工程專業的高年級本科生或研究生。課程目標是培養學生對智能計算完整軟硬體技術棧(包括基礎智能演算法、智能計算編程框架、智能計算編程語言、智能晶元體系結構等)融會貫通的理解,成為智能計算系統(子系統)的設計者和開發者。
課程的前序課程包括C/C++編程語言、計算機組成原理和演算法導論(或機器學習)。課程的課時相對比較靈活,可以是大學期上一個學期(40學時,課程提綱見表1),可以是小學期集中上一周(20學時),也可以嵌入到其他機器學習課程中作為一個補充。對於20學時的短期學習,課程希望學生能對智能計算系統「知其然」,主要是面向實際操作;對於40學時的長期學習,課程希望學生能對智能計算系統「知其所以然」,因此要把機理講透。
表1 智能計算系統課程提綱(40學時)
在課程講授上,應該秉承兩個原則。一是應用驅動。一門好的工程學科的課程應當是學以致用的,尤其是「智能計算系統」這樣的課程,如果上完之後只學會了一些定理和公式,那基本沒效果。另外一個原則是全棧貫通。過去計算機專業課程設計有個問題,就是條塊分割明顯,比如操作系統和計算機體系結構是割裂的,操作系統對計算機體系結構提出了什麼要求,計算機體系結構對操作系統有哪些支持,沒有一門課把這些串起來。「智能計算系統」作為高年級本科生(或研究生)課程,有義務幫助學生把過去所有的人工智慧軟硬體知識都串起來,形成整體理解。
對於「智能計算系統」課程,驅動範例是一個抓手。在國科大上課時,我們選擇了視頻風格遷移作為驅動範例。簡單來說,風格遷移可以保留一個視頻中每幀圖片的基本內容,但是把圖片的繪畫風格改掉(比如從普通照片遷移成畢加索風格或者中國水墨畫風格等,見圖3)。對於學生來說,這是很有意思又在能力范圍之內的一個驅動範例。
圖3 從普通照片到畢加索風格遷移的驅動範例
我們圍繞如何實現視頻實時風格遷移,一步步帶著學生寫出演算法,移植到編程框架上,為編程框架編寫運算元,再為運算元設計晶元,構建多晶元系統,並測評這個系統的速度、能效和精度上的優勢和劣勢,然後進行系統的閉環迭代優化。最後再給大家一個智能計算系統的實驗環境,包括攝像頭和智能晶元開發板,學生就可以實現一個對攝像頭拍攝的視頻進行畫風實時轉換的「半產品」應用了。
結語
我的母親是一位中學教師。我自己成長過程中,對我幫助非常大的幾位前輩恩師陳國良、胡偉武和徐志偉,也都是常年浸淫在教學第一線,有著極大教學熱情的名師。從小到大,這些長輩的言傳身教,讓我深刻地感受到,教育是一項偉大的事業,能深刻地改變學生、改變行業、改變 社會 、改變國家、改變人類。今天我們教給學生的那些人工智慧知識,可能會影響明天我國在智能時代的競爭力。因此,雖然手頭有不少基礎研究任務,但我還是情願把培養人工智慧的系統人才當成自己未來最重要的使命,把自己絕大部分時間精力花在「智能計算系統」這門課程在各個高校的講授和推廣上。
非常欣慰的是,「智能計算系統」這樣新生的一門課程,雖然還有很多缺陷,但還是得到了很多師生的支持和鼓勵。我們已在或將在中國科學院大學、北京大學、北京航空航天大學、天津大學、中國科學技術大學、南開大學、北京理工大學、華中 科技 大學等多個高校聯合開設這門課程。今年我們還會開放這門課程的所有PPT、講義、教材、錄像、代碼、雲平台和開發板,供老師們批評指正。非常歡迎大家給我發郵件,提出寶貴意見。
未來,我們希望和更多培養人工智慧專業學生的高校合作,廣泛參與人工智慧系統課程的交流研討,共同提高人工智慧系統課程的教學水平。相信通過大家的共同努力,一定能解決人工智慧系統課程開設中的實際困難,使得我國未來培養出來的人工智慧人才沒有技術上的短板。
作為一名青年教師,我在教學能力和經驗上與很多教育領域的前輩有著巨大的差距,還需要更多地學習。這門「智能計算系統」課程,對於我國的人工智慧系統能力培養來說,也頂多是起到拋磚引玉的作用。正如魯迅先生在《熱風·隨感錄四十一》中寫給青年的一段話所言:「有一分熱,發一分光,就令螢火一般,也可以在黑暗裡發一點光……倘若有了炬火,出了太陽,我們自然……隨喜贊美這炬火或太陽;因為他照了人類,連我都在內。」
腳註:
1 此文發表在《中國計算機學會通訊》(CCCF) 2014年第5期,https://dl.ccf.org.cn/institude/institudeDetail?id=3738875863074816&_ack=1。
2 CUDA:Compute Unified Device Architecture,計算統一設備架構。
3 參見https://study.163.com/curricula/cs.htm。
作者介紹:
陳雲霽
CCF傑出會員、CCF青年科學家獎獲得者、CCCF編委。中科院計算所研究員。曾獲首屆國家自然科學基金「優秀青年基金」、首屆國家萬人計劃「青年拔尖人才」以及中科院青年人才獎等獎項。主要研究方向為計算機體系結構。[email protected]
點擊 「閱讀原文」 ,加入CCF。
⑶ 計算機著名專家knuth是美國哪所大學的教授
斯坦福大學計
算機系,任正教授
Donald E. Knuth,1938年出生於Wisconsin。1960年,當他畢業於Case Institute of Te
chnology數學系時,因為成績過於出色,被校方打破歷史
慣例,同時授予學士和碩士學位。他隨即進入大名鼎鼎的加州理工學院
數學系,僅用三年時間便取得博士學位,此時年僅25歲。
畢業後留校任助理教授,28歲時升為副教授。30歲時,加盟斯坦福大學計
算機系,任正教授。從31歲那年起,他開始出版他的歷史性經典巨著:
The Art of Computer Programming。他計劃共寫7卷,然而僅僅出版三卷
之後,已經震驚世界,使他獲得計算機科學界的最高榮譽Turing Award!
此時,他年僅38歲!後來,此書與牛頓的「自然哲學的數學原理」等一起,
被評為「世界歷史上最偉大的十種科學著作」之一。相信學過數據結構和編
譯原理的同學們都知道KMP演算法和LR(K)演算法有多麼不可思議,然而此書
中這樣的演算法比比皆是!
在計算機科學上,他主要是一位理論家。然而,他在理論以外也同樣做出
驚人的成就。鼎鼎大名的排版軟體Tex,就是他的作品。此外,還有Metafont
等,也在世界上得到廣泛使用。
Knuth獲得圖靈獎時為36歲,前面多說了兩歲。估計他可能是歷史上最年輕的圖靈獎
獲得者,甚至有可能永遠把這個記錄保持下去。
相比之下,其他獲得圖靈獎的人當時一般都是五十幾歲或者六十幾歲(例如去年的
姚先生,和剛去世的Simon),可見Knuth有多偉大!他真不愧為大師中的大師!
他很早就提前退休,為的是集中精力把巨著The Art of Computer Programming寫完。
他一生共帶過二十四個(此數字也許不準)博士生,發誓不會再帶更多的學生。但是,
他有一個奇妙的承諾:
在他定期進行的講座中,會不斷提出一些新的難題。如果有人能在給定的期限內解出
任何一道難題,他將為那個人的博士論文簽名!不知道
世界之大,有沒有哪位後起之秀能獲得這樣的殊譽?
他的其它著作和論文難以數計,其中包括Concrete Mathematics等名著。
從1977年起,他獲得Fletcher Jones Professor of Computer Science的
頭銜,並且同時兼任Professor of Electrical Engineering。1990年,斯坦
福大學更授予他一個非同尋常的頭銜Professor of The Art of Computer
Science,作為對他的特殊貢獻的承認!
他的其它榮譽數不勝數,其中主要的有:美國國家科學院院士,美國藝術
與科學院院士,美國工程院院士,法國科學院外籍院士,挪威科學院外籍
院士.......;美國數學會Steele獎,瑞典皇家科學院Adelskold獎,以色列
工學院Harvey獎,IEEE馮諾依曼獎,東京高科技獎...... 共達數十個之多。
同時,他還是牛津大學等二十幾所大學的榮譽博士。早在1970年,他就在
國際數學大會上做過特邀報告。建議感興趣的同學參觀他的竹葉:
http://www-cs-faculty.stanford.e/~knuth/
我去了他的主頁,其中竟然有中文高德納。據他介紹是1977年弗朗西斯.姚給他取的中文名字。估計就是上面說的姚先生
姚先生據說是我們南大畢業的一位師兄現在的導師,他主要研究編譯領域的東西,2001年得了圖靈獎,是第一個得到圖靈獎的華人。我對它的了解也就這么多。
yao的英文叫Andrew,而不是Fransis。他好象不是主要研究編譯的,而
是研究計算理論的。ACM的網頁上說他對計算幾何,復雜性理論,數據
結構分析,通訊復雜度,偽隨機數理論都有重要貢獻。hehe,姚先生
實在是數學高手(先生是Harvard的物理博士),台灣國立大學出身的少見
人才。
這個三卷本的寶典確實不是一般人啃的下來。
不止一兩個高人告訴我
這套書出來以後
被擺在書架上機會會更多。
高德納還有兩卷沒寫完呢!
今年他過了1000000歲生日,第四卷也在寫。
因為他寫了三卷,對文本編輯器很不滿。
就自己編了第一個支持tex格式的編輯器
用來寫書
還有一個故事:大抵如下
linux的發明人說:我一覺醒來,上帝告訴我,我編寫了世界上最好的操作系統
還有一個牛人(記不得名字了)說:我一覺醒來,上帝告訴我,我編寫了世界上最好的文字處理系統
Donald說:「我沒有對你們那麼說過!"
這個故事就在他的網頁上,他現在Stanford。
可以到他的主頁看看去http://www-cs-faculty.stanford.e/~knuth/
你知道他是什麼人,他是數據結構與演算法的奠基人,是這門學科的鼻祖。現在,連他導的那19個博士都著作等身了.其中R. Sedgewick(Princeton演算法課的掌門人)還寫了著名的教材Algorithms in C/C++/Java等等,每種版本5個part呢。
有人真能把這三本書讀完,我相信。
能理解多少呢?只有自己知道
還有,注意你在他的書里每發現一個錯誤,他就付給你2。56美元吆
⑷ 哪本"編譯原理"的書比較好
我們學校用的是《編譯原理》與《編譯原理與實踐》這兩本書,這兩本書都是國外的教材。我覺得《編譯原理與實踐》這本書不錯,自學應該能看懂,而且代碼比較多,書最後還有整個小型編譯器的源代碼。
編譯不好學,你就慢慢學吧。
下面的資料請作參考:
當代編譯技術三大聖經級別的教材
1.龍書(Dragon book)
書名是Compilers: Principles,Techniques,and Tools
作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
內容簡介
《編譯原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界著名的計算機 科學家,他們在計算機科學理論、資料庫等很多領域都做出了傑出貢獻。《編譯原理》 是編譯領域無可替代的經典著作,被廣大計算機專業人士譽為「龍書」。《編譯原理》一 直被世界各地的著名高等院校和科研機構(如貝爾實驗室、哥倫比亞大學、普 林斯頓大學和斯坦福大學等)廣泛用作本科生和研究生編譯原理與技術課程的 教材,《編譯原理》對我國計算機教育界也具有重大影響。 書中深入討論了編譯器設計的重要主題,包括詞法分析、語法分析、語法制 導分析、類型檢查、運行環境、中間代碼生成、代碼生成、代碼優化等,並在 最後兩章中討論了實現編譯器的一些編程問題和幾個編譯器實例,而且每章都 提供了大量的練習和參考文獻。
與上一版相比,《編譯原理》第二版進行了全面的修訂,涵蓋了編譯器開發方面的最新進展。每章中都提供了大量的系統及參考文獻。《編譯原理》是編譯原理課程方面的經典教材,內容豐富,適合作為高等院校計算機及相關專業本科生及研究生的編譯原理課程的教材,也是廣大技術人員的極佳參考讀物。
作者簡介
Alfred V.Aho,美國歌倫比亞大學教授,美國國家工程院院士,ACM和IEEE會士,曾獲得IEEE的馮·諾伊曼獎。著有多部演算法、數據結構、編譯器、資料庫系統及計算機科學基礎方面的著作。
Monica S.Lam,斯坦福大學計算機科學系教授,曾任Tensilica的首席科學家,也是Moka5的首任CEO。曾經主持SUIF項目,該項目產生了最流行的研究用編譯器之一。
Ravi Sethi,Avaya實驗室總裁,曾任貝爾實驗室高級副總裁TLucent Technologies通信軟體的CTO。他曾在賓夕法尼亞州立大學、亞利桑那州立大學和普林斯頓大學任教,是ACM會士。
Jeffrey D.Ullman斯坦福大學計算機科學系教授和Gradiance CEO,他的研究興趣包括資料庫理論、資料庫集成、數據挖掘和利用信息基礎設施教學等。他是美國國家工程院院士、IEEE會士,獲得過ACM的KarIstrom傑出教育家獎和Knuth獎。
第一版中文版
第二版中文版
2.鯨書(Whale book)
書名是:Advanced Compiler Design and Implementation
作者是:Steven S.Muchnick
內容簡介
本書迎接現代語言和體系結構的挑戰,幫助讀者作好准備,去應對將來要遇到的編譯器設計的問題。
本書涵蓋現代微處理器編譯器的設計和實現方面的所有高級主題。本書從編譯設計基礎領域中的高級問題開始,廣泛而深入地闡述各種重要的代碼優化技術,分析各種優化之間的相對重要關系,以及實現這些優化的最有效方法。
本書特點
●為理解高級編譯器設計的主要問題奠定了基礎
●深入闡述優化問題
●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相關商業編譯 器作為案例,說明編譯器結構、中間代碼設計和各種優化方法
●給出大量定義清晰的關於代碼生成、優化和其他問題的演算法
●介紹由作者設計的以清晰、簡潔的方式描述演算法的語言ICAN (非形式編譯演算法表示)。
本書是經典的編譯器著作,與「龍書」齊名,稱為鯨書。書中針對現代語言和體系結構全面介紹了編譯器設計與實現的高級論題,從編譯器的基礎領域中的高級問題開始,然後深入討論了各種重要的代碼優化。本書專為編譯器專業人士和計算機專業本科生,研究生編寫,在設計和實現高度優化的編譯器以及確定優化的重要性和實現優化的最有效的方法等方面,為讀者提供了非常有價值的指導。
作者簡介
Steven S.Muchnick,曾是計算機科學教授,後作為惠普的PA-RISC和SUN的SPARC兩種計算機體系結構的核心開發成員,將自己的知識和經驗應用於編譯器設計,並擔任這些系統的高級編譯器設計與實現小組的領導人。他在研究和開發方面的雙重經驗,對於指導讀者作出編譯器設計決策極具價值。
3.虎書(Tiger book)
書名是:Modern Compiler Implementation in C /Java /ML,Second Edition
作者是:Andrew W.Appel,with Jens Palsberg
內容簡介
《現代編譯原理——C語言描述(英文版)/圖靈原版計算機科學系列》全面講述了現代編譯器的各個組成部分,包括:詞法分析、語法分析、抽象語法、語義檢查、中間代碼表示、指令選擇、數據流分析、寄存器分配以及運行時系統等。與大多數編譯原理的教材不同,《現代編譯原理——C語言描述(英文版)/圖靈原版計算機科學系列》採用了函數語言和面向對象語言來描述代碼生成和寄存器分配,對於編譯器中各個模塊之間的介面都給出了實際的 C 語言頭文件。 全書分成兩部分,第一部分是編譯的基礎知識,適用於第一門編譯原理課程(一個學期);第二部分是高級主題,包括面向對象語言和函數語言、垃圾收集、循環優化、 SSA(靜態單賦值)形式、循環調度、存儲結構優化等。
本書是一本著名的編譯原理課程的教材。國際上眾多名校均採用本書作為編譯原理課程的教材,包括美國麻省理工學院、加州大學伯克利分校、普林斯頓大學和英國劍橋大學等。本書在國外享有「虎書」的稱號,與有「龍書」之稱的《編譯原理》(Alfred Aho 等編著)齊名。與編譯原理方面的其他名著相比,本書出版時間晚,內容新。 書中專門為學生提供了一個用 C 語言編寫的實習項目,包括前端和後端設計,學生可以在一學期內創建一個功能完整的編譯器。
作者簡介
Andrew W.Appel,美國普林斯頓大學計算機科學系教授,第26屆ACM SIGPLAN-SIGACT程序設計原理年會大會執行主席,1998-1999年在貝爾實驗室做研究工作。主要研究方向是計算機安全、編譯器設計、程序設計語言等。
⑸ 學習編譯原理哪本書好
我們學校用的是《編譯原理》與《編譯原理與實踐》這兩本書,這兩本書都是國外的教材。我覺得《編譯原理與實踐》這本書不錯,自學應該能看懂,而且代碼比較多,書最後還有整個小型編譯器的源代碼。
編譯不好學,你就慢慢學吧。
下面的資料請作參考:
當代編譯技術三大聖經級別的教材
1.龍書(Dragon book)
書名是Compilers: Principles,Techniques,and Tools
作者是:Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman
內容簡介
《編譯原理》作者Alfred V.Aho、Ravi Sethi和Jeffrey D.Ullman是世界著名的計算機 科學家,他們在計算機科學理論、資料庫等很多領域都做出了傑出貢獻。《編譯原理》 是編譯領域無可替代的經典著作,被廣大計算機專業人士譽為「龍書」。《編譯原理》一 直被世界各地的著名高等院校和科研機構(如貝爾實驗室、哥倫比亞大學、普 林斯頓大學和斯坦福大學等)廣泛用作本科生和研究生編譯原理與技術課程的 教材,《編譯原理》對我國計算機教育界也具有重大影響。 書中深入討論了編譯器設計的重要主題,包括詞法分析、語法分析、語法制 導分析、類型檢查、運行環境、中間代碼生成、代碼生成、代碼優化等,並在 最後兩章中討論了實現編譯器的一些編程問題和幾個編譯器實例,而且每章都 提供了大量的練習和參考文獻。
與上一版相比,《編譯原理》第二版進行了全面的修訂,涵蓋了編譯器開發方面的最新進展。每章中都提供了大量的系統及參考文獻。《編譯原理》是編譯原理課程方面的經典教材,內容豐富,適合作為高等院校計算機及相關專業本科生及研究生的編譯原理課程的教材,也是廣大技術人員的極佳參考讀物。
作者簡介
Alfred V.Aho,美國歌倫比亞大學教授,美國國家工程院院士,ACM和IEEE會士,曾獲得IEEE的馮·諾伊曼獎。著有多部演算法、數據結構、編譯器、資料庫系統及計算機科學基礎方面的著作。
Monica S.Lam,斯坦福大學計算機科學系教授,曾任Tensilica的首席科學家,也是Moka5的首任CEO。曾經主持SUIF項目,該項目產生了最流行的研究用編譯器之一。
Ravi Sethi,Avaya實驗室總裁,曾任貝爾實驗室高級副總裁TLucent Technologies通信軟體的CTO。他曾在賓夕法尼亞州立大學、亞利桑那州立大學和普林斯頓大學任教,是ACM會士。
Jeffrey D.Ullman斯坦福大學計算機科學系教授和Gradiance CEO,他的研究興趣包括資料庫理論、資料庫集成、數據挖掘和利用信息基礎設施教學等。他是美國國家工程院院士、IEEE會士,獲得過ACM的KarIstrom傑出教育家獎和Knuth獎。
第一版中文版
第二版中文版
2.鯨書(Whale book)
書名是:Advanced Compiler Design and Implementation
作者是:Steven S.Muchnick
內容簡介
本書迎接現代語言和體系結構的挑戰,幫助讀者作好准備,去應對將來要遇到的編譯器設計的問題。
本書涵蓋現代微處理器編譯器的設計和實現方面的所有高級主題。本書從編譯設計基礎領域中的高級問題開始,廣泛而深入地闡述各種重要的代碼優化技術,分析各種優化之間的相對重要關系,以及實現這些優化的最有效方法。
本書特點
●為理解高級編譯器設計的主要問題奠定了基礎
●深入闡述優化問題
●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相關商業編譯 器作為案例,說明編譯器結構、中間代碼設計和各種優化方法
●給出大量定義清晰的關於代碼生成、優化和其他問題的演算法
●介紹由作者設計的以清晰、簡潔的方式描述演算法的語言ICAN (非形式編譯演算法表示)。
本書是經典的編譯器著作,與「龍書」齊名,稱為鯨書。書中針對現代語言和體系結構全面介紹了編譯器設計與實現的高級論題,從編譯器的基礎領域中的高級問題開始,然後深入討論了各種重要的代碼優化。本書專為編譯器專業人士和計算機專業本科生,研究生編寫,在設計和實現高度優化的編譯器以及確定優化的重要性和實現優化的最有效的方法等方面,為讀者提供了非常有價值的指導。
作者簡介
Steven S.Muchnick,曾是計算機科學教授,後作為惠普的PA-RISC和SUN的SPARC兩種計算機體系結構的核心開發成員,將自己的知識和經驗應用於編譯器設計,並擔任這些系統的高級編譯器設計與實現小組的領導人。他在研究和開發方面的雙重經驗,對於指導讀者作出編譯器設計決策極具價值。
3.虎書(Tiger book)
書名是:Modern Compiler Implementation in C /Java /ML,Second Edition
作者是:Andrew W.Appel,with Jens Palsberg
內容簡介
《現代編譯原理——C語言描述(英文版)/圖靈原版計算機科學系列》全面講述了現代編譯器的各個組成部分,包括:詞法分析、語法分析、抽象語法、語義檢查、中間代碼表示、指令選擇、數據流分析、寄存器分配以及運行時系統等。與大多數編譯原理的教材不同,《現代編譯原理——C語言描述(英文版)/圖靈原版計算機科學系列》採用了函數語言和面向對象語言來描述代碼生成和寄存器分配,對於編譯器中各個模塊之間的介面都給出了實際的 C 語言頭文件。 全書分成兩部分,第一部分是編譯的基礎知識,適用於第一門編譯原理課程(一個學期);第二部分是高級主題,包括面向對象語言和函數語言、垃圾收集、循環優化、 SSA(靜態單賦值)形式、循環調度、存儲結構優化等。
本書是一本著名的編譯原理課程的教材。國際上眾多名校均採用本書作為編譯原理課程的教材,包括美國麻省理工學院、加州大學伯克利分校、普林斯頓大學和英國劍橋大學等。本書在國外享有「虎書」的稱號,與有「龍書」之稱的《編譯原理》(Alfred Aho 等編著)齊名。與編譯原理方面的其他名著相比,本書出版時間晚,內容新。 書中專門為學生提供了一個用 C 語言編寫的實習項目,包括前端和後端設計,學生可以在一學期內創建一個功能完整的編譯器。
作者簡介
Andrew W.Appel,美國普林斯頓大學計算機科學系教授,第26屆ACM SIGPLAN-SIGACT程序設計原理年會大會執行主席,1998-1999年在貝爾實驗室做研究工作。主要研究方向是計算機安全、編譯器設計、程序設計語言等。
⑹ 大三計算機系學生對IT沒有興趣,喜歡設計怎麼辦
20 世紀40年代世界第一台現代計算機在美國誕生以來,美國一直執全球計算機學界之
牛耳,這同時也是美國計算機產業界占據絕對優勢的重要原因之一。我們成批量地引進
的國外眾多優秀教材絕大多數也都來自美國。計算機學科仍然在高速發展,與此對應的
計算機人才培養模式也在不斷變化,密切關注和跟蹤國外尤其是美國名校的教學新動態
乃至培養思路和教育思想,應該是非常有意義的。
本文即選擇了美國計算機學科最負盛名的五所高校,對目前各校計算機科學(Computer
Science)專業的本科教學體系進行了一些分析。
斯坦福大學
斯坦福大學擁有獨立的計算機科學系。瀏覽該校的教學手冊,最具特色的恐怕要算多門
科普性計算機知識講座了,一般有兩到三個單元,涉及面非常之廣,從量子計算到數字
演員,從計算科學的偉大思想到網路安全,從網上拍賣到使用元編譯發現大型開放源代
碼軟體中的大量錯誤,其中還不乏對技術烏托邦、斯諾「兩種文化」、計算機面臨的困
境以及迅速發展所帶來的諸多問題的思考。開課的老師陣容強大,基本上都是響當當的
名教授,甚至包括圖靈獎得主John McCarthy。用這種講座代替計算機科學導論性質的專
門課程,可以充分展示計算機科學的豐富內涵,使學生較早地了解學科的輪廓和脈絡,
對於開闊學生視野,啟發學生的學習興趣也大有好處。由於美國大學中專業的選擇非常
靈活,而近年來計算機學科招生受行業影響流失嚴重(這種情況甚至驚動了比爾·蓋茨,
2004年微軟到各大高校招兵買馬時,他每站必到,利用自己的明星效應,大講計算機學
科的美妙前景),可以想像,這種講座同樣也肩負著吸引學生選擇計算機專業的重大使命
。
斯坦福大學典型的低年級課程設置如表1所示。
表1 斯坦福大學低年級主要課程設置
數學(至少23個單元)
數學 41(課程號,下同) 微積分 I 5
數學 42 微積分 II 5
統計 116 概率論 3~5
計算機 103 離散結構 4或6
以下任選兩門:
數學 51 微積分 5
數學 103/113 線性代數 3
數學 109 應用群論 3
計算機 157 邏輯和自動推理 4
計算機 205 機器人、視覺和圖形學數學方法 3
科學(至少11個單元)
物理 53 力學 4
物理 55 電磁學 4
其他
工程基礎(至少13個單元)
計算機 106 程序設計抽象/方法學 5
工程 40 電子學基礎 5
選修課
技術與社會(3~5個單元)
進一步的課程設置如表2所示。
表2 斯坦福大學高年級主要課程設置
程序設計(2門課)
計算機 107(課程號,下同) 程序設計范型 5
計算機 108 面向對象系統設計 4
理論(2門課)
計算機 154 自動機與復雜性理論 4
計算機 161 演算法的設計與分析 4
系統(3門課)
電子電氣 108B或282 數字系統或計算機體系結構 4
計算機 編譯原理 3
計算機 計算機網路 3
計算機 操作系統 3
應用(選2門課)
計算機 人工智慧 3~4
計算機 資料庫 3
計算機 圖形學 3
項目(1門課)
計算機 至少3個單元
限選課(多門)
加州大學伯克利分校
伯克利的課程設置也有很多獨樹一幟的地方,尤其是在專業基礎課方面,除了有專業導
引課程「計算機科學專題」之外,對於沒有編程經驗的學生,第一門編程課是符號編程
入門,採用LISP語言。有一定編程經驗或者有自學能力的學生,可以選擇多種語言和環
境的自主學習(Self-paced)課程,包括C、 Fortran、C++、Java,以及UNIX的使用等,
這種多元化與伯克利計算機科學與電子電氣工程同系有關。但是所有學生在第二學期都
要學習一組獨特的基礎課:61A「計算機程序的結構與解釋」,採用MIT Abelson等編著
的同名教材(中譯本機械工業出版社出版,清華大學出版社出版了影印版);61B「數據結
構」(教材採用自編講義);61C「計算機結構」(Machine Structures),採用Hennessy的
《計算機組織與設計》(中譯本清華大學出版社出版,機械工業出版社出版了影印版)。
這項規定就是轉校生也不例外,可見其中蘊涵了伯克利多年的教學經驗結晶。
伯克利其他比較有特點的課程還有:將離散數學和概率論結合講授的CS70,主講是名教
授 Christos Papadimitriou;CS98-1 編程練習課,以主要大學生編程競賽中的賽題為
授課素材;CS 169 軟體工程直接用Kent Beck的《極限編程》(人民郵電出版社出版了中
譯本)作為教材,非常超前,但是既然連Pressman的《軟體工程:實踐者方法》新版中敏
捷方法都已經成為重頭戲,既然IEEE都已經開始制定敏捷方法相關標准,這種課程選材
也就不顯得那麼駭世驚俗了。除了軟體工程課程常見內容外,教學側重實際,貫穿了極
限編程的思想,涵蓋UML、JUnit單元測試、軟體架構、設計模式和反模式、重構、CVS版
本控制、系統和集成測試,最後要求完成一個實際產品,並進行演示。
UIUC(伊利諾依大學厄班納-香檳分校)
UIUC的計算機科學專業創建於1972年,到1986年基本定型,十多年來幾乎沒有什麼變化
。其教學體系如圖1所示。
圖1 UIUC改革前的計算機科學課程體系
其中,數值分析方向課程中,Math225為矩陣論,CS257為數值方法,CS35x代表數值分析
導論、常微分數值方法、偏微分與數值逼近和數值線性代數;
理論方向課程中,CS173為離散結構,CS273為計算理論,CS37x包括演算法、形式方法、程
序驗證;
人工智慧方向課程中,CS348為人工智慧導論,CS34x包括機器人、機器學習與模式識別
;
軟體方向,CS125為計算機科學導論,CS225為數據結構與軟體工程原理,CS31x包括數據
庫、圖形學、多媒體,CS32x包括軟體工程、操作系統設計、分布式系統、編程語言與編
譯器、並行計算、實時系統、編譯器構造、編程語言設計;
硬體方向課程中,CS231為計算機體系結構I,CS232為計算機體系結構II,CS33x包括計
算機組成、VLSI系統與邏輯設計、VLSI系統設計、通信網路、嵌入式體系架構與軟體。
可以看到,處在圖1中最下面的課程基本上都是在多門中選擇一至三門,整個體系脈絡清
晰,具有很高的靈活性。與斯坦福不同的是,UIUC的計算機科學導論課程比較簡單,只
有一門為新生開的計算機科學導向課(CS100),而且並非必修。名為「計算機科學導論」
的CS125實際上是以Java語言為主的編程入門課,涵蓋了一些演算法的內容。此外還有與之
配套的實驗課。當然,系裡所開的許多面向高年級和研究生層次的講座是對低年級開放
的。
2003年,在工程院院長David Daniel的倡導下,計算機系對教學計劃進行了改革,以反
映目前社會、行業和技術的發展趨勢。主要的變化有:
* 在必修要求中增加了兩門編程課:CS241 系統編程,採用Gary Nutt的《操作系統》作
為主教材,Stevens的《Unix環境高級編程》作為編程教材;CS242 程序設計實驗(Progr
amming Studio),教學大綱基本上以Kernighan的《程序設計實踐》為藍本(以上教材機
械工業出版社均出版了中譯本和影印版)。
* 必修要求中增加了一年的高級項目,強調團隊合作和軟體工程實踐,包括文檔寫作、
口頭表達、項目規劃與管理等,實際上是在實踐中學習軟體工程。這門課也可以用兩學
期的軟體工程或者一年的高級論文代替。仍然充分保留了靈活性,有利於因材施教。
* 增加了CS173 離散結構的學時,部分原CS273的內容移到這里,同時CS273又新增了原C
S375的內容。這實際上是提高了對計算機理論的要求。
* 在專業課程中增加了數據挖掘、信息檢索和高級圖形學。
CMU(卡內基梅隆大學)
與MIT、伯克利等學校計算機科學仍然和電子與電氣工程同處一系不同,CMU的計算機科
學系成立於1965年,是全美最早的,如今它已經升格為計算機科學學院。其研究生項目
中除了機器人方向與硬體關系較多之外,其他基本上都是純軟的。從這個意義上來說,C
MU的教學體系對於偏軟的計算機科學系應該有較大的借鑒意義。
CMU 的教學手冊上沒有從傳統意義上針對計算機科學專業學生的導論課,雖然有名為「
計算機科學偉大思想」的兩學期課程,但是從內容上看應該是離散數學的替代,因為此
外CMU並沒有其他離散數學方面的課程。此課程沒有教材,內容比傳統離散數學要靈活得
多,涉及概率、代數、演算法、加密理論、復雜性理論、博弈論等,非常注重學習的趣味
性和實用性。
與其他名校相同,CMU對程序設計的重視也給人留下很深印象:本土新生的第一堂課就是
「初中級程序設計」,直接講授Java。然後是中高級程序設計(Java)、C語言編程技巧、
高級編程實踐(Java)、程序設計原理(用SML語言講授)。
目前計算機科學專業教學計劃中的一個難點,是硬體課程的設置問題。硬體知識體系本
身非常豐富,但是硬體課程多了,又削弱了計算機科學專業的特色。CMU在這一問題上是
怎樣處理的呢?計算機科學學院的現任院長Randal E. Bryant 親自給出了回答,他用15
~213「計算機系統導論」一門課(12個單元)完成了硬體知識的教學。這項教學改革的成
果就是一本厚達900多頁的書:《Computer Systems: A Programmer's Perspective》(
中譯本《深入理解計算機系統》已經由中國電力出版社出版)一書。他在該書的序言中說
:
「本課程的宗旨是用一種不同的方式向學生介紹計算機。因為,我們的學生中幾乎沒有
人有機會構造計算機系統。而大多數學生,甚至是計算機工程師,也要求能日常使用計
算機和編寫計算機程序。所以我們決定從程序員的角度來講解系統,並採用這樣的過濾
方法:我們只討論那些影響用戶級C程序的性能、正確性或實用性的主題。
比如,我們排除了諸如硬體加法器和匯流排設計這樣的主題。雖然我們談及了機器語言,
但是不關注如何編寫匯編語言,而是關心編譯器怎樣翻譯C的各種構造,比如指針、循環
、過程調用和返回,以及switch語句。更進一步,我們將更廣泛和現實地看待系統,包
括硬體和系統軟體,討論鏈接、載入、進程、信號、性能優化、評估、I/O以及網路與並
發編程。
這種做法使得我們講授本課程的方式對學生來講既實用、具體,又能實踐,同時也非常
利於調動學生的積極性。」
網站上的一些隨書配套實驗,也獨具匠心。因此此書的成功是水到渠成的。根據配套網
站上的列表,它已經被全球80多所院校採用作為教材。
MIT(麻省理工學院)
MIT的課程設置,只能用其學生起點高來解釋。該校沒有典型意義上的計算機科學專業,
偏軟的只有理論計算機科學和人工智慧及其應用兩個專業。因此沒有類似於其他學校的
導論課程。
在MIT 的電子電氣工程與計算機科學系中,所有學生都要參加如下四門課程:6.001「計
算機程序的結構與解釋」,當然與伯克利相同,採用的是Abelson等編著的同名教材;6.
002「電路與電子學」;6.003「信號與系統」(自編講義);6.004 「計算結構」(Comput
ation Structures),與伯克利的61C「計算機結構」對等(教材是自編課件)。此外有兩
門專業基礎數學課:「概率系統分析」(教授自編教材)和「計算機科學數學」,後者的
教材是國外院校普遍採用的Rosen所著《離散數學及其應用》(中文版由機械工業出版社
出版)。
對MIT的學生而言,實驗課程有多種選擇:電氣工程和計算機科學實驗,模擬電子實驗,
數字系統實驗,微機項目實驗,半導體設備項目實驗。此外,無論何種專業,都有軟體
工程實驗課。值得注意的是,本科生各專業的必修課程中並沒有軟體工程課程。也就是
說,軟體工程的內容都在實踐中完成了。帶軟體工程實驗課的是因為提出Liskov 替換原
則而知名的女教授Barbara Liskov,她剛剛獲得了2004年度的馮·諾依曼獎。作為美國
工程院和藝術科學院的雙院士,她幾十年在軟體開發研究方面的經驗,將有力地保證這
門實驗課程的質量。
分析與總結
由上面的材料可以看出,各個學校的教學體系之間還是有不小差異的。這首先得歸因於
歷史沿革形成的專業側重、機構設置上的不同。其中MIT算是一極,由於和電子電氣專業
深深地融合,計算機專業帶有很強的「硬派」色彩。而CMU可以算作另一極,計算機科學
有自己的獨立學院,非常罕見,因此它的課程設置「軟化嚴重」——與硬體相關的只用
一門課就解決了。UIUC和斯坦福由於都擁有獨立的科系,所以可以歸入後一陣營。伯克
利可以認為處於兩極中間,但是仔細分析起來,它的計算機科學專業目前雖然仍屬於電
子電氣和計算機科學系,但是有相當大的獨立性,1973年創立以來,一直有自己的主席
和教學安排,所以離後者更近一些。
此外,各校在專業導入課程的設置上差別也非常明顯。基本上可以分為三類。按
IEEE-ACM《Computer Curricula 2001》(以下簡稱CC2001)的分法,斯坦福屬於廣度優先
(有明確的注重廣度的導引課程),MIT的屬於函數為先(採用函數式語言),CMU和 UIUC屬
於對象為先(直接採用Java)。伯克利有些特殊,它有導引課,但是廣度稍差,緊接著又
採用函數語言,同時開設學生自學為主可以任選的多種語言課程,屬於混合多元型。應
該說各個學校在剛入門時如何調動學生積極性,培養對專業的感情上都有自己的思考。
無論哪種類型,將課堂變得有趣,能夠容納更多計算機科學的方面,都已經成為一種趨
勢。
無論如何,各校存在的差異並不妨礙各自培養出同樣優秀的人才,這也給我們提供了一
種有益的啟示,辦學思路和方法應該是因地制宜的。
當然,總的來說,各學校之間的共性還是主要的。歸納起來,有這么幾個特點,值得我
們思考:
1. 硬體課程整體在減少
偏軟類的三所院校中,CMU最為徹底,硬體課程只有一門課,而UIUC也只有兩門必修(兩
門體系結構),斯坦福也是兩門(電子學、體系結構或數字系統)。其中的原因,前面引述
的Randal E. Bryant所言作出了解釋,畢竟計算機科學需要關注的在計算機系統層次中
已經越來越高,底層越來越變得透明了。事實上,CC2001中制定的硬體課程也只有一門
。而國內目前一般還開設數字邏輯、微機原理、計算機組成與結構、微機實驗等硬體類
課程。
2. 程序設計日益重視
在CMU, UIUC和斯坦福,必修的程序設計類課程往往在四五門左右。伯克利加起來也有
四門。MIT雖然沒有大量前導性的編程課程,但是由於在後面計算機系統工程、計算機語
言工程、軟體工程實驗、Web軟體工程諸課程都有實際的項目要完成,所以實際學時也很
多,UIUC的改革更說明了這一點。同時,還出現了強調提高程序設計技巧,與軟體工程
環境和工具相結合,提倡團隊合作,高級程序設計課程與數據結構、演算法課融合的趨勢
。這方面的代表有斯坦福。該校副系主任Eric Roberts曾執教入門類課程多年,總結了
一套在語言教學中融入軟體工程和現代程序設計觀念,結合演算法和數據結構教學的經驗
。其成果就是《C語言的科學和藝術》和《C程序設計的抽象思維》兩本書(影印版已由機
械工業出版社出版)。作為CC2001工作組兩位主席之一,他在C語言教學中強調庫與介面
設計、編程風格的重要性,並進而介紹抽象、封裝的概念,產生了很大影響。反觀國內
目前很多學校的語言教學和程序設計教學,不僅學時偏少,與其他課程孤立,而且脫離
實際,造成語言學習和相關專業課學習都變得非常枯燥,不利於調動學生的積極性。
應該說,這些名校的教學體系、教材和經驗都是豐富的寶藏,值得好好挖掘,比如每門
核心課程的教學法,實驗課程的安排,各門課程的銜接,大型項目的選材等。
美國大學本科的基本入學條件是
1. 要有SAT成績:至少1600分
2.平均分/GPA 成績至少80分/GPA 3.0以上
3.IBT成績85分 參考資料:http://www.douban.com/group/topic/2781655/
要想了解更多,請照參考資料.