【觀書有感】《全圖解-寫給所有人的運算思維入門》

不只是Coding,學習寫程式背後的思維方法

4/15/2025 | 江森 | 閱讀時間:16 min |
. . .
cover picture

前言

約莫在智慧型手機剛普及,行動裝置開始進入人們的日常生活,人們開始滑起各種應用程式(App),這時候演算法這個詞也開始流行起來。

從那時候起,其實一直到現在也是,演算法被描述成科技巨頭操控人們的無形魔法,只要擁有它就能掌控大眾,主宰人們生活的各個層面,並且讓企業賺得缽滿盆滿。

在接觸寫程式之後,我親身驗證了一個道理:群眾對於陌生的事物,時常會誇大,或是妖魔化。

所以演算法到底是什麼?

我想就用我最近閱讀的一本書來介紹好了!

這本書的書名叫:《寫給所有人的運算思維入門》,作者為日本電腦科學專家、通往未來有限公司(みらいアクセス合同会社)創辦人-草野俊彥。

本書以生活化的角度切入,淺白地介紹了運算思維,以及程式開發者是如何解決問題的。

既然目標讀者是所有人,IT素人也能理解本書內容,認識運算思維,這個建構了我們習以為常的現代科技生活—無所不在的各類智慧裝置、網路通訊,以及近期的AI狂潮——的思維方式。

有在寫程式的人一定要了解它,不寫程式的人也需要認識它。

它不只能用在寫程式,也是一種相當實用的思考框架。

演算法是什麼?

電腦,包括你用的各種智慧裝置,其實都只能執行簡單的指令。

這些簡單的指令必須明確、精準。

以日常移動來說,人對移動這個概念可能不會有太多遲疑,它可以是行走、搭乘或駕駛交通工具,但以上的描述對電腦而言,其實是相當曖昧、模糊,以至於窒礙難行。

那對電腦而言怎樣才算明確、精準?

書中用駕駛來舉例,想像你打算開車回家,來到路口時要操作車輛轉彎,人類駕駛只要專注在目標車道的轉向,憑手感轉動方向盤,利用視線修正車輛的軌跡,就能完成轉彎。

但如果讓電腦來做同樣的操作就會變成:「進入路口2公尺後,用3kgf的力將方向盤往右轉0.87圈」!

原本對人來說可以簡單完成的事情,若變成給電腦下指令,就需要明確、精準到近乎繁瑣、囉唆的地步了。

給電腦的指令之所以需要這麼囉唆,是因為電腦沒有「理所當然」的常識,書中稱之為「內隱知識」。

內隱知識,讓人可以不假思索地進行日常的各種活動,因為我們無意識地依靠生活經驗、學識背景、本能、情緒等等,這早已成為我們行為的一部分,所以我們能夠直覺地發揮這些能力,這是電腦所缺乏的。

因此我們在要求電腦執行任務時,會需要將整體情況、目標,化約成明確的指令,電腦才有辦法執行。

追根究底,電腦的運作不過就是利用電流控制0與1的訊號來計算而已,所以就像前面所說的,電腦只能執行簡單的指令。

那為什麼現今的電腦有各種強大功能,能完成各種複雜的工作,甚至最近的AI浪潮,也讓電腦看起來聰明到不可思議呢?

因為演算法。

「程式由兩個要素構成:讓人與電腦相互理解用的程式語言,以及提供給電腦的指示步驟的演算法(algorithm)。演算法意指為了解開問題的一連串程序。」

演算法說穿了,就只是讓電腦自動完成工作的「一系列步驟」。

複雜巧妙的演算法其實是「簡單指令的複雜組合」。

讓簡單指令,能夠組合在一起的關鍵在於「邏輯」,它在電腦科學領域還有另一個名字:「運算思維」。

看到「運算」,你可能會覺得「很數學」、「很抽象」,但在了解這個概念後會發現,其實我們相當常使用「運算思維」的方式來工作與生活,只是沒有特別意識到,並且刻意練習這種思考方式。

用日常生活來舉例,像是做菜,料理的步驟其實就是演算法,雖然煮一道菜不需要像電腦程式那樣嚴謹(除非你想寫一個給料理機器人用的料理演算法)。

但料理還是有它的邏輯與程序在,像是備料、食材處理、食材搭配、烹煮調味等等,這些程序該怎麼安排、食材該怎麼處理與組合等等。

當有大廚將這些步驟整理成食譜,其實就是寫成一個讓其他人也能照著步驟完成料理的演算法。

(除了駕駛與料理的例子,書還提供許多有趣的問題給讀者進行思考練習,或是跟著作者的思路一起來體驗運算思維的操作過程。)

運算思維

運算思維的內涵包含四個步驟:拆解問題 -> 模式辨識 -> 抽象化 -> 演算法設計。

從這套流程我們可以發現,演算法是在運算思維的最後流程才冒出來。

運算思維的運用,初步會先將遇到的問題進一步定義與拆解,如果問題太過龐大、空泛、複雜,就很難找到下手解決問題,甚至走錯方向。

在嘗試拆解問題的過程,如果發現某些現象一再出現(模式識別),那就可以整理成規則(抽象化)來處理。

程式設計中的DIY原則(Don’t repeat yourself)就是這樣,當寫程式的開發者發現,他們不斷在寫重複的代碼,或是不斷將某段代碼一直複製貼上時,就該考慮該怎麼將這個「反覆執行」的動作,抽換成讓程式自動運行的規則,來完成這個低效的作業。

最後將規則統整成一連串解決問題的步驟,就是演算法。

以前我還在政府機關任職的時候,執行公務都必須按照既定的SOP進行。

SOP其實也是演算法的一種,我之前有寫過的一篇:《為什麼流程很重要?從戰術執法到運算思維,我學到受用一生的思維技術》就有提過。

(有些人會將SOP視為僵化的教條,確實啦!如果制定出來就不再隨著時代變遷更新的話,那這種沒有迭代可能性的有毒SOP確實跟演算法扯不上邊。)

其實大部分專業工作者在工作時,都會有一套專屬的流程,這是經驗總結出來的Know-How,專業人士或者說專業化,就是熟練流程並且能夠精準判斷情況的行為。

所以懂專業才不會瞎忙(雖然專業遭到輕忽的情況好像在各行各業大量發生…),正如美國的生產管理學家-威廉·愛德華茲·戴明所說的:「說不出你的工作流程,就代表你根本不知道自己在幹嘛!」

演算法可以解決曖昧問題?

雖然食譜上料理步驟可以視為一種演算法,但做菜有時候含有「藝術」成分,多年經驗的大廚有時候會隨性揮灑,但電腦在運行過程不存在模糊的空間,機器會完全按照演算法的規則來執行。

人類的判斷力具有彈性。 機器人(電腦)是有限制的,無法自行任意推敲內容來決定規則。

那當碰到曖昧的人性問題,演算法還有介入的空間嗎?

有句老話是這樣說的:「運用之妙,存乎一心」。

有時候不是解決辦法不存在,而是有沒有辦法想到。

許多巧妙的解決方案,都是人類思考能力極致的展現。

書中有一個思考練習是關於購物的情境,讓我覺得很有啟發,這個問題是關於該如何評估人們購物時的主觀購買慾望。

作者提到:

將隨心情影響的划算感轉換為「機率性現象」,程式設計便大有可為。

本來曖昧難解的人類喜好、心情,換成數學的機率概念來描述就變得清晰起來。

近期的AI狂潮,讓人們見識到,即便指令既不明確也不精準,機器也能準確理解人類使用的自然語言,甚至只靠模糊的指令,也能產生有結構、條理的回答,這感覺很神奇,但其本質仍然是簡單指令所構成的演算法。

當簡單的事物持續累積,且不斷彼此互動時,最終就會增長成極其複雜的系統或現象,這在探討系統理論 (Systems Theory)與複雜性科學 (Complexity Science)的領域中,有個專有名詞稱作「湧現 (Emergence)」。

其實在生活中就有許多湧現的例子,像是天氣,其本質不過就是水分子與空氣的流動,當規模變大,就會複雜到連超級電腦也難以預測的天氣系統(所以你看氣象預報都只寫機率);市場,從最單純的買賣行為,演變成千絲萬縷的經濟脈動;群眾行為,像是投票,即便確定少數選民的投票偏好,也沒有一家民調公司能夠「每一次」都完美預言選舉的當選人等等。

電腦演算法也是一種湧現,原本單純的0與1的電流訊號,演變成現在的AI。

湧現造成的複雜性,讓一般人甚至連專家也難以完全理解其中的運作機制,這樣你應該就能了解為什麼運算思維可以有這麼大的能耐,甚至讓演算法成為一種科技信仰。

結語

網路通訊的發展,讓獲取資訊不再是問題。

所以記憶知識資料的能力價值,已經被搜尋引擎的等技術工具取代大半,反倒是觀點、思路、如何解決問題的能力,開始變得稀缺。

畢竟培養思考能力,比死記硬背知識還要花費成本(時間、方法、麻煩程度)。

運算思維是一套簡單實用的思考框架,它讓素人也能一窺大神們解決問題的思路,雖然它出身自資訊領域,卻不只能拿來coding。

近期生成式AI的迭代,各式強大功能讓各界驚嘆,也讓各個專業領域的知識工作者人人自危,各種販賣焦慮的言論也隨著AI熱潮竄起。

不免讓人覺得,如果AI的產出水準這麼高,人們所積累的學經歷與思考產出是不是毫無意義?AI最終仍會取代人的思考?

我最近看到一個觀點,讓我覺得,不需要悲觀到完全交出思考的主導權:

AI在本質上還是工具,駕馭AI、對AI下指令的還是人。

而該怎麼對AI提問,取決於你的思考品質,問問題的能力會決定AI的回答水準。

垃圾進就只有垃圾出(garbage in, garbage out),資訊領域流傳已久的那句老話依然適用。

延伸閱讀

演算法是什麼?

《為什麼流程很重要?從戰術執法到運算思維,我學到受用一生的思維技術》