|
 | 淺談計算思維 |
| | 【科學技術(3)】
淺談計算思維
伍加,2010年3月30日,周二
周以真 (Jeannette M. Wing) 是華人計算機科學家中的佼佼者。她曾任卡內基梅隆大學計算機系主任,現任美國國家自然科學基金會(NSF) 計算機和信息科學與工程部(CISE) 主任。她在2006年提出的計算思維[1]引發了對計算機教育的改革,有數個 NSF CISE 的科研項目支持對計算思維的研究,她的文章[1]被翻譯成了中文和德文。那麼,究竟什麼是計算思維?為什麼計算思維很重要?
根據伍加的理解,計算思維可以用四個字來概括:抽象、算法。如果再對這四個字略加修飾,可以用八個字來概括計算思維:合理抽象、高效算法。
對於學習各類科學(包括自然科學和社會科學)的學生來說,計算思維意味着對物理世界進行建模和模擬,把物理世界的變化解釋成一種計算的過程;把對物理性質的研究也看成一種計算的過程。這就是抽象,這就是由具體上升到一般的過程。要做到這一點,必須懂得可計算性,即計算的能力和極限,知道那些問題可以計算,那些問題不可能計算。這就是我所說的“合理”抽象。如果把某種物理性質抽象成了一種計算過程,結果這種計算永不停機,那結果就沒有太大價值;如果計算過程停機,但是所需的計算時間太多,那麼這種抽象模型在某個時間段里也不會有太大的實際意義。比如採用“窮舉法”來破譯由兩萬位密鑰加密的信息,這個“窮舉抽 象”在當前的計算技術制約下就是不合理的,因為這樣的計算需要億萬年之後才會出結果。所以,計算思維要求首先要學會抽象,而且是合理抽象,把有待解決的問題抽象成有效的計算過程。
如果面對的問題是可計算的,合理的抽象,即有效的計算模型已經建立起來,下一步就是要會用計算的方法來解決現實問題。具體說來,就是要學會對問題進行有效的分解,並且儘量重用計算結果,重用計算過程,重用程序,從而快速獲得計算結果。這裡需要有兩種技能,一是設計算法的能力,二是優化算法的能力,二者的結合才能使計算過程在最短時間內完成。算法設計與分析是計算機系學生的必修課,它對於計算思維的培養非常重要。許多常用的算法都有深刻的哲理,比如遞歸、並發、啟發、學習等,由於牽涉到許多技術細節,在此不予展開。
為什麼計算思維非常重要?Jim Gray [2]最近對科學的發展總結出四個範式,也許我們能用它來解釋計算思維的重要性。
- 經驗積累型:幾千年前,人們靠經驗來證實或證偽某種猜想,逐步形成人類的知識。神農嘗百草就是一個例子。遠古時候,人們經常因吃東西而生病,甚至喪命。神農的科學實驗就是嘗遍百草,能吃的放在身體左邊的袋子裡,介紹給別人吃;不好吃的就放在身體右邊袋子裡,作藥用。不能吃的就提醒人們注意。
- 數學理論型:幾百年前,人們為各種物理現象和物理過程建立理論模型,比如開普勒定律,牛頓定律,馬克思威爾方程,狹義相對論,廣義相對論,等等。這些理論模型越來越複雜,越來越抽象,缺乏直觀性。
- 計算模擬型:在過去幾十年間,用計算機模擬物理現象和物理過程十分流行。許多科學家不再像從前那樣用望遠鏡、顯微鏡等儀器直接觀測世界,而是把那些觀測儀器與計算機相連,把觀測到的數據輸入計算機計算,科學家們面對計算機屏幕,觀察研究模擬實驗的結果。
- 數據探索型:今天,我們處於信息爆炸的時代,各種理論、實驗、模擬都統一在信息處理這種數據探索框架之下。科學研究就是收集數據,計算數據,分析數據。這些 數據的來源可以是傳感器也可以是計算模擬結果,通過軟件進行分析計算,結果存儲在數據庫中。科學家必須能夠用統計學知識對這些計算數據進行挖掘、探索、和 提煉。
這種科學發展的範式變化為我們揭示了這樣一個事實:科學研究和實踐正在從計算密集型工作向數據密集型工作 轉變。這也是為什麼我們今天又越來越多的學科冠以“計算”二字,比如計算物理學,計算生物學,計算經濟學,等等。作為一名有志於科學的青年學生,必須知道數據如何在計算機中存儲,數據如何在不同計算機之間傳輸,數據如何在不同應用環境中進行語義解釋。所要這些知識,都需要計算思維。
參考資料:
[1] Jeannette M. Wing, Computational Thinking, Communications of ACM, Vol. 49, No. 3, March 2006, page 33-35.
[2] Jim Gray, eScience: A Transformed Scientific Method, http://research.microsoft.com/en-us/collaboration/fourthparadigm/4th_paradigm_book_jim_gray_transcript.pdf. Mountain View, CA, January 11, 2007.
伍加,2010年3月30日,周二
http://blog.creaders.net/invictus/
|
|