計算機科學漫談--轉載

計算機科學漫談
計算機科學的發展和其他學科一樣,是由問題驅動的。你問自己一個問題,如果天下沒人能給你答案,發現這個問題的答案或部分答案就是很好的科學研究。不過問題有大有小,因而成果的重要性就不一樣。要做好的研究,心裏一定要有好的問題。  

 

先讓我們來看看編程序方面的問題。學計算機的人都會編程,可如何保證程序編得又快又好,問題就大了,這是一個在過去幾十年裏製造了數千個博士的問題。提高軟件的生產率和正確率是非常困難的,一般一個好的程序員一年大概能寫5萬行左右的新代碼。有沒有什麼辦法提高到一年能寫相當於現在50萬行新代碼的水平。各種研究都有,例如設計各種各樣的工具,改進程序設計語言等等。大學裏開發的工具很多是研究性質的,商業化的工具很多是工程性質的,是大學研究結果的綜合。改進程序設計語言一直是一個非常重要的問題,POPL是這方面的核心會議之一。其中類型理論始終是重要的研究課題之一。中國人在這方面做過不少貢獻,提到類型理論,很多人都知道Luo Zhaohui。 

如何保證程序的正確性是另外一個很重要的與編程有關的問題。用計算機自動驗證程序的正確性曾幾何時是一個很熱門的問題,好幾個圖靈獎的獲得者都與這個問題有關。現在已經很少有人研究了。不過這些研究大大加深了人們對程序設計和語義的理解。比如說,我們現在知道了現在的編程實質上是一種HOARE邏輯上的形式推理,程序的正確性就是定理證明。程序驗證的失敗很大程度上是定理證明的失敗。定理證明曾經是人工智能的一個熱門話題,Otter是最具代表的全自動一階邏輯證明器之一。可惜的是,所有的全自動證明器都遇到了一個無法逾越的障礙,就是沒辦法做自動歸納證明。我們知道實際應用離不開整數,整數上的命題很多是用歸納法證明的,但歸納模式千變萬化,迄今爲止歸納模式無法自動生成。半自動的證明器有不少,可只有專家才能用。 

說到這裏,不能不談談眼下熱門的Ontology有關的研究。搞人工智能的人在上個世紀搞壞了名聲,只要和人工智能這個詞沾上邊,一般就有騙子的嫌疑。現在申請項目沒人會用”人工智能“這個術語了,不過沒關係,現在可以叫”知識工程“或Ontology或其他什麼的。搞知識工程的人發現用一階邏輯表達知識不行,因爲其中的定理無法自動證明。簡化到HORN邏輯還是不行。再簡化找一種能保證自動證明定理的邏輯,終於有了,就是現在流行的Description Logic。你可以想象這邏輯有多弱。Ontology研究不管怎麼吹,超出Description Logic就是不可判定的。你也千萬別用到算術和方程什麼的,一用就超出Description Logic了。Google已經暗示不會開發與RDF和OWL有關的產品,實際上是看壞這項技術。 

順帶說一下,從事這種與理論和邏輯有關的研究沒有數年在邏輯和代數方面的學習功底,門都沒有。比如說如果你要研究不同計算系統之間的關係,你得理解Grothendieck Institution。這就是爲什麼在歐洲很多計算機科學系和數學系是在一起的。 

現在做分佈式應用最流行的辦法是用WEB SERVICE,簡單而且容易開發。有沒有什麼好辦法,可以快速簡單的把一大堆WEB SERVICE搞在一起,MICROSOFT, IBM,還有其他工業巨頭兩年前難得地放棄了自己的標準達成了一致,搞了一個統一的標準, 就是BPML (Business Process Management Language), 。 用BPML寫的程序調用不同的部署在網上的WEB SERVICE,完成用戶想要的功能。

BPML是怎麼設計出來的? 祕密是PI演算(Pi-Calculus)。BPML的設計者Assaf Arkin和他的同事都是PI演算的行家裏手,他們從PI演算清楚知道這個語言需要什麼。那末PI演算又是什麼東西呢?

我們知道所有串行計算機程序都可以化歸爲LAMBDA演算。LAMBDA演算是和圖靈機等價的。大多與計算機語言相關的研究都可以化爲對LAMBDA演算的研究。上個世紀七十年代前,LAMBDA演算是沒有語義的。DANA SCOTT發現了LAMBDA演算的語義成爲了現代計算機科學的開端。DANA SCOTT發現了一個高階函數的集合(叫論域),每個程序都可以化爲一個方程,而這個方程在這個集合上有唯一的最小解,這個解就是這個程序的語義。這項工作帶來了象潮水般的後續結果,影響直到今天還到處可見。只要你談遞歸的語義,就會是某種形式的論域。

PI演算和論域很好的處理了串行計算機程序。可對分佈式計算卻很難處理。PI演算就是分佈式計算的理論模型。PI演算的發明人ROBIN MILLER從沒拿過PHD。他得圖靈獎的時候通知他因爲他的四項成就而得獎,他寫信說其中一項不是他的,如果不把那一項拿走,他拒絕得獎。由PI演算延伸出來的東西多得不得了,因爲它涉及到了分佈式計算的本質。這些理論是數理邏輯中模型論的一部分。PI演算就是一個單純的公理邏輯體系,包括幾個算子和十幾條數學公理。就象羣概括了很多東西,PI演算概括了所有分佈計算和通信系統。如果你讀有關的論文,和數學論文樣式沒有任何區別。正因爲PI演算是數學理論,它的定理支配着不僅計算機系統,而且支配着象交通系統和生物這樣領域的現象。中國的林惠民當選科學院院士的主要成就之一就是在PI演算裏作的。

上次談到提高軟件的生產率和正確率是計算機軟件研究和開發的大問題。商業的集成開發環境(IDE),各種軟件工程的方法(如UML),工具(如Debugger)無不是爲了這個目的,就是又快又好的開發程序。Knuth 把程序設計叫藝術,由此命名他的得意著作。其實計算機科學的一個大目標就是要讓這種藝術變爲工程,要讓程序變得和其他工業產品如汽車那樣可以大規模高效地生產。

現在的很多工具雖然已經大大提高了程序開發的效率,沒人會懷疑 Visual Studio 對開發 Windows 程序的作用。但是還有許多實際問題沒有解決。舉個簡單的例子,比如說,你怎麼知道程序肯定沒有Bug。數年前阿麗亞娜火箭發射失敗就是因爲控制程序裏的一個小Bug而損失了五億美元。我們已經談到過,因爲定理自動證明的侷限使得程序自動驗證無法實用化。現在廣泛採用的辦法就是測試,即用盡可能多的輸入看程序的運行結果。我曾經在一個大公司看到對一個大程序產品的測試,四十多人的全職隊伍,測試了兩年,可想而知其中的甘苦。象Windows這樣的產品測試簡直是天文數字, 投入的金錢真的也是天文數字,還不能保證樣樣都測試到。那麼能不能有什麼辦法自動檢查?當你問了這個問題,你已經有了一個絕好的研究問題。答案之一就是Model Checking。Model Checking理論上把所有可能的情況都執行了一遍,確保程序滿足要求。注意這裏是指理論上,實際上並不需要。爲什麼不要,就要用到很多理論知識,一個是指稱語義和抽象指派來壓縮檢查的空間,一個是與公理語義和代數語義有關的形式規範, 再加上Model Checking本身的技巧。指稱語義學是Dana Scott 奠基發展起來的。公理語義學的奠基人Tony Hoare。代數語義學中Guttag和Goguen等人貢獻極大。中國有兩位學者年輕的時候曾經作爲訪問學者和Hoare合作過幾年,一位是周巢塵,一位是何積豐,兩位現在都是中科院院士。Model Checking在芯片驗證上已經實用化,但在軟件上還在努力,但前途光明。NASA的軟件研究所搞的JAVA PathFinder就是其中的代表之一。NASA有個牛皮的編程高手,自稱凡他編的程序就不會有錯。用JAVA PathFinder一查,居然有幾十個Bug,當時就傻了眼。

計算機科學東西太多,比如數據庫,安全,網絡和通訊等等,有關的會議總是特別熱鬧。太化時間,我以後再慢慢寫吧。  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章