尼古拉斯·沃斯

尼古拉斯·沃斯

尼古拉斯·沃斯(Niklaus Wirth,1934年2月15日—),生於於瑞士溫特圖爾,是瑞士計算機科學家。少年時代的Niklaus Wirth與數學家Pascal一樣喜歡動手動腦。1958年,Niklaus從蘇黎世工學院取得學士學位後來到加拿大的萊維大學深造,之後進入美國加州大學伯克利分校獲得博士學位。

人物簡介


從1963年到1967年,他成為斯坦福大學的計算機科學部助理教授,之後又在蘇黎世大學擔當相同的職位。1968年,他成為ETH的信息學教授,又往施樂帕洛阿爾托研究中心進修了兩年。
他有一句在計算機領域人盡皆知的名言“演演算法+數據結構=程序”(Algorithm+Data Structures=Programs)

公式


尼古拉斯·沃斯
尼古拉斯·沃斯
憑藉一句話獲得圖靈獎的Pascal之父——Nicklaus Wirth,讓他獲得圖靈獎的這句話就是他提出的著名公式:“演演算法+數據結構=程序”。
這個公式對計算機科學的影響程度足以類似物理學中愛因斯坦的“E=MC^2”——一個公式展示出了程序的本質。
Nicklaus Wirth,1934年出生於瑞士,1963年在加州大學伯克利分校取得博士學位。取得博士學位后直接被以高門檻著稱的斯坦福大學聘到剛成立的計算機科學系工作。在斯坦福大學成功的開發出Algol W以及PL360后,愛國心極強的Nicklaus Wirth於1967年回到祖國瑞士,第二年在他的母校蘇黎世工學院他創建與實現了Pascal語言——當時世界上最受歡迎的語言之一。
後來他的學生Philipe Kahn畢業后和Anders Hejlsberg(Delphi之父)創辦了Borland公司靠Turbo Pascal起家,很快成為了將Borland發展成為全球最大的開發工作廠商,這一切都不得不說要歸工於PASCAL語言的魅力。PASCAL已經影響了整整幾代的程序員,Nicklaus Wirth的思想還將會繼續指引現在和以後的程序員前進的方向。

Pascal之父


尼古拉斯·沃斯
尼古拉斯·沃斯
成長曆程
威茨1934年2月15日生於瑞士北部離蘇黎世不遠的溫特圖爾 (Winterthur),其父瓦爾特是一位地理學教授。威茨小時就喜歡動手動腦,他的最大愛好就是組裝飛機模型。中學畢業以後,威茨進入在歐洲甚至全世界都很有名的蘇黎世工學院(ETH),1958年取得學士學位。之後他到加拿大的萊維大學深造(Laval是和加拿大名城魁北克隔聖勞倫斯河相望的一座城市),於1960年取得碩士學位。之後他又一次遷移到美國加州,進入加州大學伯克利分校,於1963年獲得博士學位。
學成以後,威茨受聘到斯坦福大學剛剛成立的計算機科學系工作。著名的斯坦福大學門檻極高,怎麼會看中這個來自歐洲小國的毛頭小夥子呢?原來在50 年代末、60年代初,威茨的計算機經驗和成就相當顯赫:在蘇黎世工學院時,瑞士的計算機先驅斯帕塞(A.P.Speiser,他曾經出任IFIP的主席)曾經給威茨上過有關計算機的課程,也曾經用過由斯帕塞開發的計算機ERMETH;在萊維大學時,威茨學了數值分析,上過AlvacⅢE計算機;在伯克利時,威茨先是有一台Bendix G-15計算機可用,後來又參加了為IBM 704開發NELIAC語言編譯器的科研小組(NELIAC是一個類似於Algol 58的語言)。威茨在撰寫博士論文時,Algol 60報告已經發表。Algol 60是第一個清晰定義的語言,其語法是用嚴格公式化的方法說明的。但當時已有一些學者認識到,清晰的規格說明對於可靠而有效的實現是必需的,但還不夠。Algol 60報告中還有一些缺陷和不足。威茨在和Algol的設計者之一馮·維京格藤(Andrian van Wijngaarden)多次接觸和討論以後,決定對Algol 60做進一步改進,並以此為自己的博士論文課題。這就誕生了由威茨所設計的第一個語言Euler。Euler雖然在實用性上考慮並不很周到,但在學術上卻非常優美,為編譯器的系統設計創造了一個很好的基礎。
Algol W編譯器的開發和語言PL360
正是由於上述經歷和成果,斯坦福大學看中了威茨。與此同時,IFIP負責Algol語言完善與擴充的工作小組也看中了威茨,吸收他參加工作。當時,小組中有兩派,一派勁頭十足地要設計一個新語言,以便樹起一個新的里程碑;另一派則覺得時間太緊,主張對Algol 60進行適當擴充。威茨參加進去以後,自稱同時屬於這兩派,並提交了一份建議書。這份建議書經過霍爾(Tony Hoare)等人的修改、完善以後獲得通過,這就是Algol W(W是威茨名字的首字母)。第二年,也即1966年,Algol W在斯坦福大學的第一台IBM 360上成功實現並正式應用。這中間還有一個小插曲:IBM 360當時只提供彙編語言和FORTRAN語言,但威茨和他的學生都覺得這兩者並不適宜於作為設計編譯器的工具。為此,威茨決定定義另一種語言來描寫 Algol W的編譯器。威茨用了兩周時間寫出這個語言的定義,然後用了4個月的時間在Burroughs公司的Bu5000計算機上完成了交叉編譯程序,而威茨的一個學生則把這個交叉編譯程序移植到IBM 360上去。這些額外的工作極大地加快了Algol W編譯器的開發,同時催生了一個新的語言PL360。PL360 雖然是作為輔助工具而開發的,但卻在許多地方獲得應用。
商業應用
說來有趣,沃思開發PASCAL的初衷是為了有一個適合於教學的語言,並沒有想到商業應用。但一經推出,由於它的簡潔明了,它所提供的豐富的數據結構和控制結構為程序員提供了極大的方便與靈活性,也由於它特別適合於由微處理器所組成的計算機系統,竟然大受歡迎,廣泛地流傳開來。在C語言問世以前,PASCAL是風靡全球、最受歡迎的語言之一,創下了發行拷貝數最多的世界記錄。單是沃思的一個學生菲力浦·凱恩(Phillipe Kahn),從ETH畢業以後,在美國加利福尼亞州辦了一個軟體公司,就賣出了100多萬個PASCAL拷貝,成為百萬富翁。
結構化程序設計概念
1971年,沃思基於其開發程序設計語言和編程的實踐經驗,在4月份的 Communications of ACM上發表了論文“通過逐步求精方式開發程序’(Program Development by Stepwise Refinement),首次提出了“結構化程序設計”(structure programming)的概念。這個概念的要點是:不要求一步就編製成可執行的程序,而是分若干步進行,逐步求精。第一步編出的程序抽象度最高,第二步編出的程序抽象度有所降低…… 最後一步編出的程序即為可執行的程序。用這種方法編程,似乎複雜,實際上優點很多,可使程序易讀、易寫、易調試、易維護、易保證其正確性及驗證其正確性。結構化程序設計方法又稱為“自頂向下”或“逐步求精”法,在程序設計領域引發了一場革命,成為程序開發的一個標準方法,尤其是在後來發展起來的軟體工程中獲得廣泛應用。有人評價說沃思的結構化程序設計概念“完全改變了人們對程序設計的思維方式”,這是一點也不誇張的。1983年1月,ACM在紀念 Communications of ACM創刊 25周年時,從其 1/4個世紀發表的大量論文中評選出有“里程碑意義的研究論文” 25篇,每年1篇,沃思的這篇論文就是其中之一。
繼續創造性的研究與開發工作
PASCAL的成功也罷,結構化程序設計思想的巨大影響也罷,都沒有停止沃思繼續創造性的研究與開發工作。20世紀70年代中期,為適應併發程序設計的需要,沃思又成功開發了一個獲得廣泛應用的語言Modula。M0dula除了提供併發程序設計功能之外,另外一個重要特徵是引進了模塊概念(這也是這個語言叫做Modula的原因)。此外,它還引進了“進程”(process)這一和併發程序相聯繫而產生的重要概念。Modula語言還特別適合於書寫系統程序。但是,比Modula具有更加重大得多意義的卻是它的第二個版本Modula.2。這是 1976年,沃思再次赴美國,到 Xerox公司的 Palo Alto研究中心參與Alto計算機的設計與開發工作。Alto是世界上第一個具有圖形用戶界面的個人計算機系統(可惜Xerox公司沒有把它商品化,而由Apple公司學去了它的技術而推出 Macintosh)。
1984 年獲得了圖靈獎
凡是學過一點計算機的人大概都知道“演演算法+數據結構=程序”這一著名公式。提出這一公式並以此作為其一本專著書名的瑞士計算機科學家尼克勞斯·威茨(Niklaus Wirth)於1984 年獲得了圖靈獎。這是瑞士學者中唯一獲此殊榮的人。

榮譽


他是好幾種編程語言的主設計師:
Algol W Modula Pascal Modula-2 Oberon
他亦是Euler語言的發明者之一。1984年他因發展了這些語言而獲圖靈獎。他亦是Lilith電腦和Oberon系統的設計和執行隊伍的重要成員。
他的文章Program Development by Stepwise Refinement視為軟體工程中的經典之作。他寫的一本書的書名Algorithms + Data Structures = Programs(演演算法+數據結構=程式)是計算機科學的名句。
歐洲人通常都將他的名字讀得正確,讀作“Nih-klaus Virt”;但美國人通常讀成“Nickles Worth”近似的音。於是有人便說,歐洲人傳址呼叫他,美國人傳值呼叫他。

學術著作


沃斯的學術著作很多,主要有如下幾種,其中一些是由法文譯成英文的:《系統程序設計導論》(《Systematic Programming:An Introduction》,Prentice-Hall,1973。其法文版已出至第5版) ;
《演演算法 數據結構=程序》(《Algorithms Data Structures=Programs》,Prentice-Hall,1976)。
《演演算法和數據結構》(《Algorithms and Data Structures》,Prentice-Hall,1986)。
《Modula-2程序設計》(《Programming in Modula-2》, Springer,1988,第4版)。
《PASCAL用戶手冊和報告:ISO PASCAL標準》 (《PASCAL User Manual and Report:ISO PASCAL Standard》,Springer,1991)。
《Oberon計劃:操作系統和編譯器的設計》(《Project Oberon:the Design of an Operating System and Compiler》,ACM Pr.,1992)。
《Oberon程序設計:超越Pascal和Modula》(《Programming in Oberon:Steps beyond Pascal and Modula》,ACM Pr.,1922)。
《數字電路設計教材》(《Digital Circuit Design for Computer Science Students:An Introductory Textbook》,Springer,1995)。
ACM除了在1984年授予沃斯圖靈獎外,1987年又授予他另一項獎:計算機科學教育傑出貢獻獎。另一個重要的國際學術組織IEEE也授予過沃斯兩個獎項:1983年的Emanual Piore獎和1988年的計算機先驅獎(Computer Pioneer Award)。1992年,加州大學伯克利分校命名威茨為“傑出校友”。
沃斯是在1984年10月於舊金山舉行的ACM年會上接受圖靈獎的。沃斯發表了題為“從程序設計語言設計到計算機建造”(From Programming Language Design to Computer Construction)的圖靈獎演說,回顧了自己在計算機領域所做的工作。演說全文刊載於《Communications of ACM》1985年2月,159-164頁,也可見《ACM 圖靈獎演說集》(《ACM Turing Award Lectures-The First 20 rears:1966-1985》,ACM Pr.),179- 196頁。