5.3 淺探計算學科的本質 ——《逆襲大學》連載
返回到【全文目錄】
目錄
5.3 淺探計算學科的本質
當計算當作一門學科得到認可之後,整個學科的發展有了明確的方向。作為一名專業人員的成長,需要區別於非專業人員的是,要能把握住專業的核心。在計算學科的發展過程中,由於專業與行業外在的表現太豐富了。為了回答這個問題,需要認識計算學科到底應該是什麼樣的?這個問題的探討源於一系列的質問,包括:
- 電腦科學是科學,還是工程學科,或者只是一門技術?——這個問題如此重要,決定了計算學科培養什麼人,這些人應該具備哪些能力。
- 學科的智力本質是什麼?——我們一直在強調學習過程中的實踐,強調動手能力的培養在計算學科人才培養中的基礎地位。而作為高科技領域的代表,我們所講的“動手”,核心在腦。抓住學科在智力方面的本質要求,對塑造專業思維的意義非常重要。
- 電腦科學和工程目前的核心課程是否反映了這一領域?怎樣把理論和實驗室的工作整合在課程中?——我們要追求學以致用,我們要學習最新的知識,而不是學習過時的,用不上的知識。在大學有限的幾年的時間內,學生能夠接受的知識量是有限的,必須將海量的專業知識整理成一定的層次,形成一個個的“套裝”,這就是大學的課程。專業的核心課程應該對這一領域有全面、深入的概括,即強調最新的發展,又能具備一定的基礎,滿足未來發展的需要。
要回答這樣的問題,從學術研究的角度,需要首先對學科有一個明確的定義,甚至要論證其是否能夠稱為一個學科。
能行性問題是計算學科的根本問題是
研究過程和方法不在此處鋪開來講,最終的結果是,歷經四年,ACM和IEEE/CS共同推出《計算作為一門學科》的報告,給出了學科的定義。在這個討論過程中,出現過多種說法,最終寫入報告的簡短定義是:“計算學科是對描述和變換資訊的演算法過程的系統研究,包括它的理論、分析、設計、有效性、實現和應用。”這個定義抽去了用於計算的裝置的具體形態(電子計算機還是其他的生物計算機、量子計算機等),而是把握住了要去面對的最實質性的物件——資訊,並且抓住了進行資訊處理的關鍵——演算法,也指明瞭從事這個學科的人員可以實施的工作方向——由理論到應用。
在對學科進行定義的同時,報告中確定了計算學科所研究的根本問題是能行性問題,也就是什麼能被(計算機有效地)自動進行。“能行性”表述依然很抽象,但放眼看來,確實是抓住了學科最關鍵的部分,涉及到硬體和軟體在內的理論、方法、技術的研究,以及應用研究和開發。
關於能行性,在很早以前,我國古代學者就認為,對於一個數學問題,只有當確定了其可以用算盤解算它的規則時,該問題才是可解的。這已經體現了演算法化思想,是我國古代學者對“能行性”問題的樸素的理解。近代形式化方法和理論研究的發展,最終促使人們在計算本質的認識上取得了突破性進展。
現代計算機的原型是20世紀30年代後期英國數學家圖靈提出的圖靈機。圖靈機通過形式化的方式闡述了計算的本質,轉用自然語言的描述為:任何計算,在本質上都可以還原為計算者(人或者機器)對一條兩端可以無限延長的紙帶上的一串0、1進行變換、最終得到一個滿足預先規定的符號串的變換過程。進而發現,存在一些問題是不能用任何機械過程解決的。即存在一些問題,是圖靈機無解的。圖靈對計算本質的描述,揭示了計算的能行性的本質,提出了可計算性的概念。
在計算機的構造方面,由於連續物件很難進行自動化處理,從“能行性”的角度,決定了計算機本身的結構,以及它處理的物件都是離散的。連續物件必須經過離散化後,才能被計算機處理。
計算過程可以從能行性的角度進行描述。一個問題在判定為可計算問題後,為求解這個問題,必須給出實際解決該問題的操作序列(軟體角度的指令序列和硬體角度的執行指令的序列),同時還必須確保操作序列的資源(時間和空間)消耗是合理的。計算學科中大量的研究內容與分支學科方向與之相關。例如,積體電路技術、數字系統邏輯設計、數值計算方法、演算法設計技術、計算複雜性理論、密碼學、人工智慧等,都是圍繞這一基本問題展開的,其核心是計算的效率。
計算正確性是需要關注的基本問題,其中體現著能行性問題:一個問題在給出了能行的操作序列,必須確保計算的正確性。正確性不能保證,計算沒有意義。圍繞正確性的分支學科與研究方向包括:演算法理論、程式設計方法、形式語義學、計算語言學、容錯理論與技術、電路測試技術、程式測試技術、軟體工程、網路協議等。
硬體和軟體的工程中體現著能行性。為了實現自動計算,需要發明和製造自動計算機器,要在理論上提供觀察和描述計算的平臺,而且要實際製造出能夠真正執行的自動計算機器。更進一步地,計算的平臺在使用上還必須方便,於是有了計算模型、計算機體系結構、實際的計算機系統、系統軟體和工具軟體、高階程式設計語言、軟體開發工具與環境等學科分支。
在計算機的應用中體現著能行性。任何專案在投資活動之前要提交可行性研究報告,需要對市場、收益、技術、法規等專案影響因素進行具體調查、研究、分析,確定有利和不利的因素,分析專案的可行性,評估專案經濟效益和社會效益,及時停止不適合開展的專案,避免損失的發生。
對大學生而言,心中放著能行性這樣一個核心的問題,將有助於在學習專業的過程中形成的對學科的完整認識,有助於融會貫通所學知識。能行性在學科中的普適,也使我們能夠追求在基礎層面的全面發展,避免了對學科、行業的片面理解。
學科的形態
所謂學科形態,大體上是指這門學科在歷史發展過程中,形成的學科思維結構和知識結構的外在樣式。系統地學習某一門學科的專業知識,把握住學科的基本形態是很重要的一件事。例如,汽車專業的大學生,認識到的知識形態是駕駛汽車、維修汽車,還是設計汽車,這對於他從事和汽車相關的工作,將有非常大的影響,進而影響到了專業學習目標的確定。回到計算機學科,其學科形態更難以把握,尤其是當今軟體產品已經成為了計算機系統的主要成分,軟體的不可見性是一個明顯的障礙。
計算機學科的三種形態是:抽象、理論和設計。
第一種形態是抽象(abstraction),也稱模型化,是指在思維中對同類事物去除表象的、次要的方面,抽取共同的、主要的方面,從而做到從個別中把握一般、從現象中把握本質的認知過程和思維方法。典型的抽象方法的步驟為:(1)確定問題並形成假設;(2)構造模型並做出預言;(3)設計實驗並收集資料;(4)分析結果。這種源於實驗科學的方法,廣泛地用在演算法、資料結構和系統結構等模型的構造過程中。通過對所建立的模型的假設、利用各種設計策略,在一定理論框架指導下進行實驗,分析計算的侷限性、有效性、新計算模型的特性,以及驗證對未加以證明的理論的預測。
第二種形態是理論(theory),是指為理解一個領域中物件之間的關係而構建的基本概念和符號。計算學科的理論用來建立和理解計算學科所依據的數學原理,表現為定義、定理和性質及其證明。理論源於數學,對於計算學科來講,指的是以離散數學為代表的構造性數學。在理論方面的研究,一方面建立完整的理論體系,另一方面,在現有理論的指導下,建立解決具體問題的數學模型,從而實現對客觀世界的理性認識。
第三種形態是設計(design),是指為解決某一個應用領域中的問題而構造系統或裝置的過程,這裡的系統可以是硬體系統,也可以是軟體系統。設計源於工程學,具有較強的實踐性、社會性和綜合性,在實現中要受社會因素、客觀條件(包括其他相關學科)的影響。設計的基本過程包括:需求說明、規格說明、設計和實現方法、測試和分析。
這三種學科形態值得在學習過程中隨機研習,多加體會。在此,我想用一個經典問題,和讀者一起對此初步淺淺淺地品味一番。
18世紀時,歐洲有一個風景秀麗的小城哥尼斯堡(今俄羅斯加里寧格勒),那裡的普萊格爾河上有七座橋,將河中的兩個島和河岸連結起來,城中的居民經常沿河過橋散步。那麼,一個人怎樣才能一次走遍七座橋,而每座橋只走過一次,最後回到出發點?
這就是著名的“哥尼斯堡七橋問題”,如圖5–3所示。大家都試圖找出問題的答案,但是誰也找不出這樣一條路徑,並且,誰也不敢斷定這樣的路線是不存在的。
著名數學家尤拉知道這個問題後,他沒有像其他人一樣跑到哥尼斯堡去走走。他這樣看這個難題:
把南北兩岸和兩個小島抽象為四個點A、B、C、D,而把這些橋抽象為連線兩個點的一條線,這樣,“七橋問題”就表示成了如圖5–4所示的由點和線條組成的簡單圖,解決“哥尼斯堡七橋問題”就等價於圖中所畫圖形的一筆畫問題,即從某一點出發,經過每條邊一次僅一次,最後回到原點。
這個圖如果能夠一筆畫成的話,對應的“哥尼斯堡七橋問題”也就解決了。
尤拉用的辦法就是抽象方法!他把問題中的橋、岸、島等具體事物的具體形態去掉了,而只留下了反映事物本質的要素,從而使人們的思維能夠集中在要解決問題的核心,不被與問題無關的表象的現象所迷惑。而如今,人們在處理諸如此類的結構,也將其抽象為圖的問題,然後再進行處理。例如由城市、鄉村為點,城市之間的道路、水路、航線、公交車為邊形成的交通圖;網路工程中由計算機、各種網路裝置為點,它們之間的連線為邊的網路連線圖;在當前流行的社交網路中,由使用者為點,使用者之間的好友關係為邊的社交網路圖。這種簡單的用點和邊構成的圖模型,將外在形態各異的問題,變成了同一類的問題。
尤拉將問題抽象之後,並未像別人一樣,在紙上對各種可能的一筆畫方案畫來畫去,以求找到一種可能,而是通過對點和邊在數量上的關係進行了研究。尤拉發現:
如果存在經過每條邊一次且僅一次回到出發點的路徑,則充分必要條件是:(1)圖是連通的;(2)在圖中與每個頂點相連的邊數必須是偶數。
這個結論能夠通過數學方法嚴格證明,是圖論中的一個重要定理。據此,由於與A點相連的邊是5條,與其他點相連的邊是3條,都不是偶數,這樣的路徑是不存在的。
這就是理論的力量!以後,人們再也不必為這個事情爭來爭去了。在經過抽象得出模型之後,通過對其中包含的因素進行定義,研究其性質,推導並證明其中存在的定理,這些結論性的成果成了解決實際問題的依據。由於理論是在數學的層面上形成的,其嚴謹性保證了結論的可靠性。尤拉據此發表了論文《與位置幾何有關的一個問題的解》,為一個新的學科——圖論(Graph Theory)的誕生奠定了基礎。今天,圖論已經廣泛地應用在電腦科學、運籌學、控制論、資訊理論等學科中,成為對現實世界進行抽象的一個強有力的數學工具。這個被計算學科視為經典的理論分支也在指導著數不清的工程專案,這是支撐可靠的設計的基礎。
最後講講設計。不少人一說抽象和理論就頭疼,但設計還好,這是直接生產產品的環節。設計的過程是給定問題,結合技術要求和條件,設想和考察各種可能的解決方案,直到得到一個可靠的、成本符合要求的設計成果。科技發展到現在的程度,軟、硬體產品的設計是個複雜的問題,需要抽象和理論的支援。例如,要設計的產品是汽車衛星導航系統,需要實現兩個城市之間路徑的規劃。為此,定義好需求後,首先需要將其抽象為圖模型,路徑規劃對應的就是圖論中的最短路徑問題,涉及這個問題的基礎性問題已經形成理論體系,可靠性得以保證,同時也有多個現成的演算法可以利用。也就是說,這個最核心的問題可以在理論指導下完成。而到實際的產品中,這個最短路徑中的“短”可以是最短的距離、最少的時間,或者是最省錢,這是在設計中要考慮的問題。在實際的工程專案設計中,諸如質量保障、進度安排等等各個環節,都能在理論的指導下進行。
理論是前人經驗的結晶和濃縮,在理論指導下的設計,即是建立在豐富經驗基礎上的實踐。忽視理論,意味著一切工作都是基於直接經驗,直接經驗建立的週期和可靠性,都是一個不可把握的因素。有人空有理論而實踐水平不高,這樣的理論學習沒有意義,但不是說理論沒有用,只能是他沒有能力用上去而已。這正是給我們在學習中提出的問題,讓實踐工作能在理論的指導下進行,做到能活學活用。
計算學科變得越來越龐大,生產環節的分工越來越細化,追求全才也已經不是當前的一個現實選擇。計算機類專業的學生,需要對整個學科的形態有個總體的把握,也要根據自己的目標,在某些方面形成專長。這是一個非常必要的選擇。例如,經常聽人建議如果想讀研究生,要學好理論課。為什麼這樣說?膚淺的回答是,考研科目就是這些課程,這是應試思維的延續。深層的原因是,研究生作為更高一個層次的教育階段,對抽象和理論提出了更高的要求,重視理論課是必然的結果。
返回到【全文目錄】