運算思維:未來必備的思考能力

更新於 發佈於 閱讀時間約 12 分鐘
Computational Thinking will be a fundamental skill used by everyone in the world. To reading, writing, and arithmetic, let's add computational thinking to every child's analytical ability. 運算思維將成為世界上每個人都使用的一項基本技能,除了閱讀、寫作和算術,應該讓孩子都有運算思維的分析能力。
—引用知名電腦科學家周以真Jeannette M. Wing著作
  【Computational thinking and thinking about computing

運算思維是由許多不同的解決問題的技巧構成,核心為創造演算法,其他還包含運算模型科學方法捷徑思考邏輯模式比對表示法抽象化拆解評估檢驗
本文除了介紹運算思維是甚麼,還會說明各個問題解決技巧,希望讀者不只了解各個技巧,更學會以豐富且彼此連結的方式組合使用這些技巧

1.運算思維是甚麼?

Photo by Mark Fletcher-Brown on Unsplash

運算思維的定義

  運算思維一詞最早由數學家Seymour Papett提出,他認為數學應該要以計算為基礎,使用截然不同的方式來教學;然而,電腦科學改變的不是只有數學,所有領域都因此改變。
  運算思維並不僅僅是指電腦思考的方式,儘管我們越來越頻繁地使用運算思維來寫電腦程式,所謂的運算思維,指的是人類解決問題的多元技能之集合,其根本是來自於對計算本質的研究。

  運算思維利用大部分科目發展出的創意、清楚解釋事物的能力、團隊合作等技巧,並帶入數學科學思考方式

  運算思維是非常特別的問題解決技巧,包括使用邏輯演算法進行思考、注意到每個出現的細節,以及設計方法解決問題。

運算思維的重要性

  我們創造出運算模型來試著呈現事物實際樣貌,不再只仰賴真實世界,若發現運算結果跟理論衝突,可透過思考哪裡出錯,找出方法來修正,進而理論與模型更貼近真實世界。
  演算法如今已出現在我們生活的所有面向,並大幅改變人類的生活方式,且持續深化中。這就是為什麼了解運算思維對於每個人都如此重要,就像要了解物質世界,就要學習物理;要了解生物世界就要學習生物學一樣。我們都需要學習一些電腦科學,才能了解這個正在無聲佔據我們人生的虛擬世界。

運算思維的應用

  如果找到可以解所有數獨遊戲演算法,那人類再也不需花時間解數獨遊戲;有了精準預測蚊子飛行軌跡演算法,那就可以在被牠吸血之前,將其殲滅;有了準確分析大氣層雲系變化演算法,那就可以預測天氣,再也不用擔心曬衣服的時候下大雨。
  現在許多銀行使用演算法判斷取代人工買賣股票NASA建立軌跡演算法算出如何在火星準確降落,進行太空探險Youtube利用演算法建立推薦系統自動判斷用戶觀看取向推送影片;飛機和汽車依導航演算法算出最佳路徑;Amazon用演算法預測用戶的消費習慣推送優惠消息

2.運算思維核心

Photo by Brett Ritchie on Unsplash

演算法創造

  運算思維的核心在於創造演算法,找出一個問題的解決辦法不是只為了得到單一問題的答案,而是這個解法可以得到跟此問題相關的一系列問題的答案,而且只要盲目跟隨演算法指令就可以解決。
  簡單來說,光是能算出 20+22 = 42 這樣的算法還不夠好,我們想要的是演算法能得到任意兩個數字相加的結果。
  假使我們知道某個理論,它能解釋事物如何運作,那麼就可以創造依同樣方式運作的演算法,建立一個運算模型,利用該模型進行實驗,進一步研究真實世界,並做出預測。
  演算法是個極強大的工具,一旦被創造,就可以不經思考地被使用來完成任務。我們只需要跟隨一串指令,就可無限地遵循操作(一次次地進行導覽、完美地贏得每次比賽、成功的拯救每個病患),而不用再花時間精力來解決問題,也不用再重複思考。甚至要求其他人只要照著演算法操作,可以獲得同樣的成效。
  在電腦時代,演算法可以轉換為程式碼,而電腦可以替代人類執行程式碼。所以電腦科學家對演算法特別感興趣,這是因為演算法是程式基礎,但在電腦尚未發明之前,人類就已經在設計演算法了,儘管運算思維這個名詞是近年才出現,卻已經是個古老的技巧

3.運算思維的解決問題技巧

Photo by Olav Ahrens Røtne on Unsplash

運算模型

  運算模型的概念是指,把現實生活中某見想要進一步了解的事物,如天氣,創造一個演算法,讓它在虛擬世界中進行同樣的事。模型能模擬這個事物,透過模擬結果,可以對事物預測未來的發展,譬如預測明天是否下雨。
  生物學家創造如心臟或是癌細胞的模型,可以減少活體動物實驗,改成虛擬動物實驗經濟學家創造財務模型評估政策會帶給國家災難或是繁榮,在真實世界運作前確認風險。而電腦遊戲,如魔獸世界,其實就是奇幻世界的模型,玩家則是可以改變這個虛擬世界的角色,讓人們實現在現實世界無法做到的夢想
  簡單來說,有了精準的運算模型,便可以在模型上進行實驗,比起在現實世界實驗,不但快速高效且大幅降低投入成本。除了運用在物理學生物學化學地理學考古學等等,無論哪個領域,它都能帶來新的運作方式,甚至創造出未來的產業。

科學方法

  要支持運算模型的程序,需要理解科學是怎麼運作的。舉例來說,理解一個模型會出現甚麼結果是很重要的,若是結果與現實不相符,則必須透過新預測並進行測試,來確保現實世界的每個結果都有效。
  所謂科學方法就是觀察新現象得到新理論或修正舊理論的系統技術。因為所使用的方法必須具備科學精神,因此,須遵循以下步驟,形成迭代遞歸,直到所有的理論與實驗盡量符合,達成一致
1. 仔細觀察,發現現象
  過去以往的定義是利用感官去查知、覺察自然界的種種現象,但因為感官的主觀性,使得這項定義逐漸被揚棄。現在,大多改為經實驗操作而測量到某已知或未知的物理量,亦即物理量必須是可被測量的。
2. 形成理論解釋現象
  所有觀察的現象,都必須被既有的理論所解釋,如果既有的理論無法解釋,至少要提出假說或學說來解釋這種現象。
3. 推論
  根據以上形成的理論,詳加比較歸納演繹,進而得到新的現象預測
4. 反覆實驗驗證
  重新設計不同實驗,重複上述步驟,如果還不能使實驗結果與理論預測符合,則必須再重複,如果兩相符合,則可形成結論

捷徑思考

  有幾種情況我們必須改用捷徑式演算法,有時候,我們無法創造最佳解的演算法,有可能是根本做不到,又或者是無法在許可時間內完成。這些情況只能把目標放在得出一個足夠好的答案,而不是最佳解,像是平常使用的導航,本質上就是這樣規畫路線的。

邏輯思考

  邏輯思考指的是仔細且準確地看待細節,也就是說演算法當中的指令必須包含所有可能性
  舉例來說,在撰寫條件判斷式,除了判斷為TRUE的指令要執行,判斷為False的指令還有無法判斷TRUE or False的狀況也要設定,這樣才能保證電腦遇到每種狀況至少都可以進行下去,否則他可能會給出錯誤的答案,或是當機。
  在創造一個演算法的時候,必須非常有邏輯地思考它是如何運作的,至少在腦中有一套邏輯推論確保它能成功運作。我們絕不會希望因為少了某個細節,而使火星登陸機器人成功起飛並登陸火星後,立刻就當機。

模式比對

  對於運算思維而言,要能觀察出兩個不同問題在本質上的相似度非常重要,想達到這個目的,必須對這兩個問題進行模式比對 
  當我們辨認出問題的模式,就可以不加思索地做出正確反應。這也是許多程式運作方式的核心,它們會比對規則與情況,而決定要遵循哪一套合適的指令。發展這類程式的程式設計師,得要列出程式所要比對的模式。機器學習也與模式比對有關,如今程式可以自己找出模式
  在解決問題時,模式比對可以讓人省去很多時間,因為每次遇到新問題不用從零開始。當新問題與之前解過的問題相似,就可以使用舊解法。例如在人臉辨識出現以前,就已經有了指紋辨識,所以在開發人臉辨識演算法時,可以思考是否可以沿用指紋辨識的設計,畢竟兩種辨識演算法都是在做圖像的辨認,應該有極高的相似度。

表示法

  透過一個好的表示法,能讓問題更容易解決。它是一種組織資訊的方式。像是把影像點陣圖來表示,或是儲存許多形成格線的像素,或是儲存向量圖(線條與形狀),再透過濾鏡來呈現一種模式,創造演算法讓電腦能執行影像分析

抽象化

  抽象化技巧是以某些方式把細節藏起來,讓問題在設計演算法與評估上更容易被處理。
  其中控制抽象化(control abstraction)是透過將指令集合起來,再進行更大步驟的指令,也就是說隱藏小步驟的細節。假設要做一道番茄炒蛋,其中細節需要準備食材與調味料、打蛋、番茄切塊、混和炒熟、加調味料等等,這些步驟集合起來便成了一個簡單的指令【製作番茄炒蛋】,同理可推論任何菜餚。
  假設未來要做的是一整桌菜,製作單一菜餚的步驟就不需要再考究,因為已經知道作法,要思考的就變成是安排每道菜的製作時間與流程。
  另一種抽象化為數據抽象化(data abstraction)是隱藏儲存數據的細節。舉例,數字會以二進位的方式儲存在電腦;在系統中,16這個數字會儲存成0001000,然而我們在思考時,會直接想成16這樣的十進位數字,要求使用程式的人輸入數字時,也會要求輸入十進位數字,而非二進位數字。
  不過最終電腦依舊是以二進位數字運作,無關乎是誰使用這個程式,都不需要知道數字實際上是這樣被儲存的,因為這個細節被隱藏了。
  在程式的評估檢驗也會用到此技巧。譬如評估同樣功能的演算法何者花費時間較短,我們並不需要直接去計算所花時間,而是隱藏時間這個細節,改而思考程式的工作量,即指令的數量,數量越少的花費時間就少。透過計算指令數量,我們就可以知道結果,讓評估演算法的效率變得更簡單。

拆解

  拆解是將一個大問題分解成幾個較容易解決的小問題,透過個別解決小問題,達成解決大問題的目標。
  這是一個強大的解決問題技巧,它讓我們能寫出長達百萬個指令的複雜程式,若少了這個技巧,今天電腦無法擁有做到那麼多事情的程式。
  它與抽象化技巧息息相關,操作概念是將一個程式目標分成多個小任務,接著再針對小任務各別撰寫程式,每個小任務都非常容易解決,最後組合起來就可以解決程式目標。
  一旦完成這些個別元件,只需要思考它們能做甚麼,而不用想它們是如何完成任務的,為了讓這些步驟變得更容易理解,只要幫每個小程式命名,寫清楚各別的任務目標,不需要再思考這些煩人的細節,即可組合解決最終問題

評估檢驗

  評估檢驗對演算法非常重要,我們需要知道它是否能成功運作,以及是否符合問題的特殊屬性要求
  為了確認解法是一個符合目的的優秀解,要評估的東西有很多。最基本的是運行正確(functional correctness),必須一直都是如此才行,無論發生甚麼狀況,都能做正確的事,給出正確的答案
  除了運行正確,可能還要評估執行速度,演算法能運行多快?有更快的方法嗎?有沒有特殊情況使速度減慢?情況是否常發生呢?這些得依問題的需求來思考,評估一個演算法是否適用於該情況。

4. 結論

  運算思維是由許多不同的問題解決技巧組成,重要的是,要理解這些技巧並非各個不同的活動,而是以多樣且相連的方式組合在一起使用。它對於問題以及系統會帶來不同的思考方式,把這些技巧作為基礎,用來創造電腦理解的解法。演算法改變我們的生活、工作、遊戲方式,未來也將持續。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
程式語言只是工具,更重要的是程式邏輯 【運算思維】 1.拆解: 將一個任務或問題拆解成數個步驟或部分。 2.找出規律: 預測問題的規律,並找出模式做測試。 3.歸納與抽象化: 找出最主要導致此模式的原則或因素。 4.設計演算法: 設計出能夠解決類似問題並且能夠被重複執行的指令流程。
最近很多人私訊我他們自學遇到的瓶頸,有些人會覺得學不會程式,是自己太笨沒天分,或從小數理能力就差,才學不起來。但以我自己這些年自學程式並創業的經驗,我認為可能原因是自己操之過急了,因為想要快速達到像是轉職或是創業等等目標,所以覺得得學得越快越好。但這個領域需要的是長時間的磨練,慢慢一點點累積
設定好你的目標,做好目標分解,接下來就是學習與實作,在過程中,肯定會遇到各種問題需要debug,這應該是剛入門自學程式的人最痛苦的部分,可能看到bug不知道google要下甚麼關鍵字,也可能搜出一堆文章看得頭昏腦脹,所以想跟大家分享我在自學製作封鎖電商黑名單chrome插件過程,是怎麼面對這種狀況的
之前跟大家分享【表現目標】和【學習目標】,有助於設定自學的終點,但是在執行目標的過程中是否遇過有目標也難以下手的問題呢?今天想跟大家說說【拆解目標】,這也是我在自學製作封鎖電商黑名單chrome插件賺取被動收入過程中運用的方法,希望對剛入門自學程式的朋友有幫助
除了增進程式技術和技巧以外,我覺得建立起正確的【自學心態】更重要,保持正確的態度能讓你持續不斷的精進學習,不會半途而廢,也更能享受進步帶來的成就感,我從自己過去零基礎開始自學程式然後做出線上服務的經驗,整理出一些入門自學的朋友應該抱持的心態,相信會很有幫助
最近很多人私訊我他們自學遇到的瓶頸,我發現剛入門學會了一些基礎的人,就算想到一個專題,很可能不曉得怎麼把專題切成一個個功能再去實作,我想這個問題應該在於【不了解程式可以做出甚麼功能】。 我從自學程式創業的經驗,整理了一個方法,分享給大家:作為一個使用者,使用別人做的作品,試著去拆解裡面有哪些功能
程式語言只是工具,更重要的是程式邏輯 【運算思維】 1.拆解: 將一個任務或問題拆解成數個步驟或部分。 2.找出規律: 預測問題的規律,並找出模式做測試。 3.歸納與抽象化: 找出最主要導致此模式的原則或因素。 4.設計演算法: 設計出能夠解決類似問題並且能夠被重複執行的指令流程。
最近很多人私訊我他們自學遇到的瓶頸,有些人會覺得學不會程式,是自己太笨沒天分,或從小數理能力就差,才學不起來。但以我自己這些年自學程式並創業的經驗,我認為可能原因是自己操之過急了,因為想要快速達到像是轉職或是創業等等目標,所以覺得得學得越快越好。但這個領域需要的是長時間的磨練,慢慢一點點累積
設定好你的目標,做好目標分解,接下來就是學習與實作,在過程中,肯定會遇到各種問題需要debug,這應該是剛入門自學程式的人最痛苦的部分,可能看到bug不知道google要下甚麼關鍵字,也可能搜出一堆文章看得頭昏腦脹,所以想跟大家分享我在自學製作封鎖電商黑名單chrome插件過程,是怎麼面對這種狀況的
之前跟大家分享【表現目標】和【學習目標】,有助於設定自學的終點,但是在執行目標的過程中是否遇過有目標也難以下手的問題呢?今天想跟大家說說【拆解目標】,這也是我在自學製作封鎖電商黑名單chrome插件賺取被動收入過程中運用的方法,希望對剛入門自學程式的朋友有幫助
除了增進程式技術和技巧以外,我覺得建立起正確的【自學心態】更重要,保持正確的態度能讓你持續不斷的精進學習,不會半途而廢,也更能享受進步帶來的成就感,我從自己過去零基礎開始自學程式然後做出線上服務的經驗,整理出一些入門自學的朋友應該抱持的心態,相信會很有幫助
最近很多人私訊我他們自學遇到的瓶頸,我發現剛入門學會了一些基礎的人,就算想到一個專題,很可能不曉得怎麼把專題切成一個個功能再去實作,我想這個問題應該在於【不了解程式可以做出甚麼功能】。 我從自學程式創業的經驗,整理了一個方法,分享給大家:作為一個使用者,使用別人做的作品,試著去拆解裡面有哪些功能
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文探討了向計算機學習思維原則的重要性,文章闡述了如何在保持原則性的同時兼顧靈活性,以應對日益複雜的決策環境。同時,文章也提供了在日常工作中如何應用這種思維方式的具體建議。
你正在學習編程,探索算法和數據結構,在這個過程中,你會遇到許多複雜的問題,比如如何分析算法的性能、如何證明算法的正確性,以及如何解決優化問題。這時,你會發現《Concrete Mathematics》是一個非常有用的資源。
Thumbnail
電腦只做一件事情: 運算。 我們所看到的任何酷酷的應用: 不論是網頁動畫、遊戲特效、甚至是 AI 說的話,全部都 是由電腦的運算結果組合而成的。 首先我們來梳理一下各個名詞之間的關聯: 1. 運算分成兩個部分: 運算子 (運算的名稱,如: 加法) 和運算元 (運算的對象,如: 8)。運算就是對資
Thumbnail
本文將探討心算不只是數學技能,更是強化工作記憶、專注力的有效方法,適合渴望腦力提升的你深入了解。 心算:鍛煉工作記憶的隱藏良方 在這個充斥著智慧科技的時代,手機成為了我們生活中不可或缺的一部分,其中手機的「計算機」功能為我們解決了計算問題,卻也無形中讓我們漸漸忽略了心算的重要性。 你可能不
Thumbnail
決斷的演算:預測、分析與好決定的11堂邏輯課 探討人類演算法的設計概念,把電腦科學解決問題的方法套用到人類日常生活的挑戰上。
Thumbnail
運算思維由2006年3月,美國卡內基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)教授因提出並倡導「運算思維」而享譽計算機科學界。 運算思維分成四個步驟 拆解 將一個大問題拆解成許多小問題,各個擊破解決,當小問題解決了大問題也就解決了。 模式識別 將複雜的問題分解
Thumbnail
現在都在探討AI成形後的社會模式 每一個階段的習慣科技都只是為了我們人類的需求很誕生 不過在現階段的認知我認為人類始終能掌控科技 因為 AI人工智能最厲害的是"計算" 而我們人類最厲害的是"算計" "計算"靠的是公式."算計"靠的是想像 有算計的是世界才
Thumbnail
我們的思維常常呈現網狀結構,涉及大量相關訊息,表達和行動需要線性思維,而網狀思維與線性思維不相匹配,中間隔著關鍵的一步,即讓網狀思維變得有邏輯和組織。 金字塔原理的核心價值就在於找到一套系統方法,建構一個層級清晰、邏輯清晰的樹狀思維。 只有完成這一步,從思考到表達、從思考到行動的道路才算是完整的。
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
Thumbnail
在Python中,數值運算非常直觀,你可以使用標準的數學運算符號進行基本的數值運算。以下是一些基本的數值運算: 進行計算時,按照「先乘除後加減」的規則,並優先計算小括號刮起來的運算式。 print('答案:' ,(1+1)*2) #​答案: 4 復合型態的運算子 指定運算子 = 若是結合算術
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
本文探討了向計算機學習思維原則的重要性,文章闡述了如何在保持原則性的同時兼顧靈活性,以應對日益複雜的決策環境。同時,文章也提供了在日常工作中如何應用這種思維方式的具體建議。
你正在學習編程,探索算法和數據結構,在這個過程中,你會遇到許多複雜的問題,比如如何分析算法的性能、如何證明算法的正確性,以及如何解決優化問題。這時,你會發現《Concrete Mathematics》是一個非常有用的資源。
Thumbnail
電腦只做一件事情: 運算。 我們所看到的任何酷酷的應用: 不論是網頁動畫、遊戲特效、甚至是 AI 說的話,全部都 是由電腦的運算結果組合而成的。 首先我們來梳理一下各個名詞之間的關聯: 1. 運算分成兩個部分: 運算子 (運算的名稱,如: 加法) 和運算元 (運算的對象,如: 8)。運算就是對資
Thumbnail
本文將探討心算不只是數學技能,更是強化工作記憶、專注力的有效方法,適合渴望腦力提升的你深入了解。 心算:鍛煉工作記憶的隱藏良方 在這個充斥著智慧科技的時代,手機成為了我們生活中不可或缺的一部分,其中手機的「計算機」功能為我們解決了計算問題,卻也無形中讓我們漸漸忽略了心算的重要性。 你可能不
Thumbnail
決斷的演算:預測、分析與好決定的11堂邏輯課 探討人類演算法的設計概念,把電腦科學解決問題的方法套用到人類日常生活的挑戰上。
Thumbnail
運算思維由2006年3月,美國卡內基·梅隆大學計算機科學系主任周以真(Jeannette M. Wing)教授因提出並倡導「運算思維」而享譽計算機科學界。 運算思維分成四個步驟 拆解 將一個大問題拆解成許多小問題,各個擊破解決,當小問題解決了大問題也就解決了。 模式識別 將複雜的問題分解
Thumbnail
現在都在探討AI成形後的社會模式 每一個階段的習慣科技都只是為了我們人類的需求很誕生 不過在現階段的認知我認為人類始終能掌控科技 因為 AI人工智能最厲害的是"計算" 而我們人類最厲害的是"算計" "計算"靠的是公式."算計"靠的是想像 有算計的是世界才
Thumbnail
我們的思維常常呈現網狀結構,涉及大量相關訊息,表達和行動需要線性思維,而網狀思維與線性思維不相匹配,中間隔著關鍵的一步,即讓網狀思維變得有邏輯和組織。 金字塔原理的核心價值就在於找到一套系統方法,建構一個層級清晰、邏輯清晰的樹狀思維。 只有完成這一步,從思考到表達、從思考到行動的道路才算是完整的。
Thumbnail
邏輯運算子 它們在許多情境下都是程式語言中重要的工具,用於進行條件判斷和控制流程 在日常中總會遇到有些需要思考判斷的問題,比如要買東西,就會考慮到CP值,東西要好且要便宜,就是and的概念,如果在一些比較複雜的狀況,例如想晚餐吃什麼,就會想火鍋或燒烤都行,這就是or的概念。
Thumbnail
在Python中,數值運算非常直觀,你可以使用標準的數學運算符號進行基本的數值運算。以下是一些基本的數值運算: 進行計算時,按照「先乘除後加減」的規則,並優先計算小括號刮起來的運算式。 print('答案:' ,(1+1)*2) #​答案: 4 復合型態的運算子 指定運算子 = 若是結合算術