標籤:

原來,計算思維該這樣理解

原來,計算思維該這樣理解

容易被誤解的計算思維

2006年,卡內基·梅隆大學周以真教授首次系統性地定義了計算思維。這一年,她在美國計算機權威期刊《Communications of the ACM》上發表了題為《Computational Thinking》的論文,由此開啟了計算思維大眾化的全新曆程。

在此之前,「計算思維」在非計算機領域的應用多集中在科研學術圈,如計算化學、計算生物學、計算決策學等。像我這樣的普羅大眾真正開始了解「計算思維」的價值是在《Computational Thinking》發表之後(的10年)。今天,計算思維成了世界公認的普適思維方式,和理論思維、實驗思維一樣,任何人在解決任何問題時都可以運用。

計算思維對每個人都意義重大,但卻非常容易被誤解。有人望文生義,以為計算思維就是關於數學的學問;有人片面理解,以為學了編程就懂了計算思維;有人非要攀高枝,連學個Word、Exel、PPT都要說培養了計算思維。

計算思維被誤解成這樣,小編決心為它正名,帶大家好好認識下計算思維。

計算思維是什麼,不是什麼

計算思維是什麼呢?

在《Computational Thinking》這篇論文中,周以真教授用「硬科學」的術語描述了計算思維:計算思維是運用計算機科學的基本理念,進行問題求解,系統設計以及理解人類行為。也就是說,計算思維是一種解決問題的思考方式,而不是具體的學科知識,這種思考方式要運用計算機科學的基本理念,而且用途挺廣的。

想要更快更好的理解計算思維,先來看看周以真教授對計算思維的幾個清晰論斷。

1 計算機思維是研究計算的。

2 是概念化,不是編程。

3 是基礎技能,不是死記硬背的技能。

4 是人的思考方式,不是計算機的思考方式。

5 是數學思維、工程思維的補充和結合。

6 是想法,不是人造產品。

理解了上面6句話,就能在很大程度上減少對計算思維的誤解了。

把編程當作計算思維是對計算思維的常見誤解之一,甚至一些學計算機專業出身的人也會有類似的觀點,其實不然。計算思維是一種概念化的思考方式,而編程則是一種行為,雖然編程的過程中經常會用到計算思維,但計算思維絕不是編程。把信息素養當作計算思維也是對計算思維的常見誤解之一,其實計算思維和信息素養完全不同。信息素養注重的是培養人們對信息進行有效利用的方式方法,重點在於利用信息工具和信息,比如Excel、錄音機、感測器、QQ的使用,從互聯網上找到自己想要的信息等。而計算思維則是研究計算的,研究一個問題中哪些可以計算,怎樣進行計算。

計算思維不是一門孤立的學問,也不是一門學科知識,它源於計算機科學,又和數學思維、工程思維有非常緊密的關係。說它和數學思維相關,是因為用計算思維解決問題時,需要將問題抽象為可計算的數學問題,例如比較羅馬帝國的崛起和蒙古人的擴張,需要選擇適當的數學模型來對國力進行量化計算。在運用計算思維設計大型複雜系統時,需要考慮效率、可靠性、自動化等問題,這些都是工程思維中非常重要的東西。

計算思維是每個人在日常生活中都可以運用的一種思考方式。沒錯,每個人都可以運用,而且可以用在幾乎任何地方。出行路線規劃、理財投資選擇、科學研究分析、天氣預報預測,不論你試圖解決什麼問題,運用計算思維都能幫你化繁為簡,四兩撥千斤。

理解計算思維,首先要理解計算

理解計算思維的前提是理解計算,因為計算思維本質上還是研究計算的,研究在解決問題過程中,哪些是可計算的,以及如何計算。

通常我們理解的計算是算術運算,如「1+1=2」,,但運算其實有很多種類,如集合運算、邏輯運算、條件運算等等。集合運算如 「 ?U(A∩B)=(?UA)∪(?UB)」,這裡面就沒有具體的數值運算了,而是用代表集合的字母進行運算;又比如邏輯運算「1∧0=0」,這個運算里有數值「0」和1,但意義完全不同,這裡的「1」代表的是「真」—即命題為真,「0」代表的是「假」—即命題為假,通過用數字「0」和「1」來代換命題的真假,用「∧」來代換邏輯語言里的「並且」,邏輯判斷過程也能通過計算來實現。

在上面這三類運算中,「1和2」、「 A、B」 「1和0」是計算對象,是用特定符號代表一定的含義(可能是數、集合、命題真假等等);「+」、「?U、∩、U」和「∧」是運算符,也就是運算規則(可能是加減乘除、可能是求並/補集、可能是判斷並且/或者的複合命題)。如果把計算對象用特定的符號串表示,計算的實質就是將已知的特定的符號串,按照預定的規則,一步一步地改變符號串,經過有限步驟,最終得到一個滿足預定條件的符號串的過程。

當我們跳出算術運算的局限,理解了計算的本質後,就會發現原來好多看似不可計算的東西都能變得可計算,也就很容易理解計算思維的普適性了。因為經過一定的抽象,我們對很多問題的理解都能用特定的數學語言來描述,接下來,當我們用特定的數學語言去描述解決過程的時候,就是在用計算化的方式來求解了。

計算思維里的人機分工

當我們把一個問題的求解操作變的可計算化後,我們是要靠人力去進行運算嗎?NO!運用計算思維就是為了把人從大量的機械的運算中解脫出來,讓計算機去做這些事。

在用計算思維解決問題時,人負責把實際問題轉化為可計算問題,並設計演算法讓計算機去執行,計算機負責具體的運算任務,這就是計算思維里的人機分工。

人機分工能大幅提高問題處理的效率,減少出錯率,特別是在處理情況複雜,運算量大的問題時。比如出行路線規劃,在沒有導航軟體的時候,我們想要規劃從A點到B點的最近的路線,可能要花費不少功夫,往往是我們根據經驗進行判斷,並不精確,很難有足夠的時間和精力去尋找最優解。

當我們用電子地圖來表示實際地理情況,用坐標點來表示實際位置時,最短路線的問題就轉化為比較地圖上A點到B點的各種線段組合的長度問題。從輸入起點和目的地到導航軟體給出導航路線不到半秒的時間裡,後台伺服器已經進行了高達千萬甚至上億次的運算,這種效率高出人類N個數量級。

計算思維里的2A

Abstraction (抽象)和Automation(自動化)是計算思維的兩大核心特徵。

想要理解抽象和自動化之於計算思維的重要性,我們先來看下運用計算思維進行問題求解的關鍵路徑:

<1>把實際問題抽象為數學問題,並建模

將人對問題的理解用數學語言描述出來

<2>進行映射,把數學模型中的變數等用特定的符號代替

用符號一一對應數學模型中的變數和規則等

<3>通過編程把解決問題的邏輯分析過程寫成演算法

把解題思路變成計算機指令,也就是演算法

<4>執行演算法,進行求解

計算機根據演算法,一步步完成相應指令,求出結果

建立數學模型的過程就是理解問題的過程,並且要把你對問題的理解用數學語言描述出來。這很關鍵,數學模型的好壞意味著你對問題的理解程度夠不夠深,而且數學模型還說明了在這個問題中,哪些東西可以計算以及如何進行計算,這可以說是計算思維里最最核心的東西了。這個關鍵過程需要的核心能力就是抽象能力以及一定的數學基礎。

數學建模只是可計算化的第一步,為了讓計算機幫我們去求解,我們還需要虛擬的符號來代替的數學模型里的每個變數和運算規則,這個過程就是映射啦!

完成映射,我們就能把解題思路(注意,是解題思路,不是數學模型)用程序語言完整地告訴計算機啦,這個過程就是具體的編程寫演算法的過程啦!這一步需要較強的編程能力,但編程能力的核心之一也是抽象思維能力。對於編程能力不夠強的人來說,映射還有編程的過程可以交給擅長編程的人來做。

關鍵路徑的前3步都是人來完成的,最後一步執行演算法進行運算是機器自動完成的,體現了計算思維的自動化的特點。

在整個過程中,抽象是方法,是手段,貫穿整個過程的每個環節。自動化是最終目標,讓機器去做計算的工作,把人腦解放出來,中間目標是實現問題的可計算化,體現在成果上就是數學模型、映射、還有演算法。

至此,你應該對計算思維有個差不多的理解了。當你再聽到某些課程顧問說「我們的課程能培養孩子的計算思維時」,你可以反問一下他們是怎樣培養孩子的計算思維的,而不是傻傻地為一個聽起來高大上的辭彙買單。俗話說「師傅領進門,修行在個人」,真正運用計算思維去解決問題,還需要各位踏踏實實地掌握相關知識,並加以操練才行。

https://www.zhihu.com/video/922154072503631872
推薦閱讀:

向前兼容與向後兼容
機械鍵盤使用技巧教程?
Webpack4入門(3)
青空文庫注音轉word注音的方案
【大學】要勇於承認自己的無知--高德納

TAG:計算機 |