計算思維是一種重要的思維方式,有了計算思維就會知道如何將一個問題抽象,變為讓計算機可「理解」即可計算模型,這個計算能夠收斂並在有限的時空內得出結果。但僅靠抽象的理論是訓練和培養不出來的,只要動手編程,情況就會大有不同。
尹寶林在本期發表了《編程實踐是培養計算思維的必由之路》一文(詳見今日微信第四條),探討編程和培養計算思維的關係,我很贊同他的觀點。早在2006年3月,周以真(Jeannette M. Wing)在CACM上發表了《計算思維》(Computational Thinking)一文(譯稿發表在本刊2007年第11期)。
周以真的文章發表後,引起了國內計算機教育界的高度關注,有眾多專家發表有關計算思維的看法,有的高校還在課程中增加了計算思維的內容。但據我了解,國內把這件事搞清楚的人似乎不多,問題在於:從概念出發,沒搞清計算思維的本質。
我們從初中開始學習平面幾何,就是為了訓練邏輯思維,讓學生通過公理從點線面等元素中找到關聯關係,進而證明一個結論。儘管我們現在日常工作中很少用到平面幾何的知識,但這種邏輯思維已經融入我們的腦海中,無時無刻不在影響我們的思維。
計算思維有點類似。人們把一個要解決的問題構造成一個模型(行話叫算法),用計算機理解的語言(通常要通過編譯)編程(描述該模型),再讓計算機執行程序,最終形成結果,這個過程就是計算思維的過程,這有點像平面幾何中的「已知、求、解」。人類的認知規律是從實踐到理論,從現象到本質,即從問題出發,通過解決問題總結出規律,再用總結出的規律解決新的問題。因此,沒有編程實踐而空談計算思維是沒有意義的,這也是為什麼很多高校多年進行抽象的計算思維教育而收效甚微的原因。
實際上,即使從事的不是計算機專業工作,計算思維也是非常重要的。有了計算思維就會知道如何將一個問題抽象,變為讓計算機可「理解」即可計算模型,這個計算能夠收斂並在有限的時空內得出結果。有了計算思維就會了解如何把一個大的問題分解成一個個子問題,再把一個子問題分解成為子子問題,直到不需要分解,這就是自頂向下和結構化設計的方法。有了結構化設計思想,就會簡化問題,從而「分而治之,各個擊破」。有了計算思維就會明白正確性和可行性的關係和區別,就會明白解決問題的方案不僅要在理論上正確,而且要在實際中可行。
具有計算思維就會清楚如何清晰定義一個數據類型(角色)和對其的操作,還會了解如何用最短的編碼表徵一個數據。如果規章制定者學過編程,就不會在法規中使用「一般」、「原則上」和「試行」這樣的詞彙;如果公安部門在身份證編碼中使用字母和數字,就不會把身份證編成18位,而你的生日這一重要信息也不會暴露在「光天化日」之下。
有了計算思維就會知道如何定義標識符,了解如何定義全局變量和局部變量及其作用域(權限),了解指針及通過函數的參數傳遞結果是多麼巧妙!當然也不會編出有goto語句使結構紊亂的程序。
計算思維作為一種重要的思維方式,僅靠抽象的理論是訓練和培養不出來的,但只要動手編程,情況就會大有不同。據我十多年的計算機工程實踐,對於一個計算機專業人士,沒有寫過兩萬行代碼,大概還達不到那個境界,那程序的美感自然也體會不到。
學校應當停止那些概念式的教學方式,而應該從編程開始,在這點上,沒什麼捷徑可走!
1996年任CCF專職副秘書長。1998年創建YOCSEF,2004年4月起,任CCF秘書長。2005~2008年任國際信息學奧林匹克競賽主席,2009~2015年擔任世界工程組織聯合會信息與通訊委員會秘書長。
zidedu@ccf.org.cn
點擊「閱讀原文」,點擊了解並加入CCF。