當前位置: 華文世界 > 科技

高大上的計算思維到底是什麽?

2024-02-18科技

現在很多地方都在講計算思維、編程思維,這到底是什麽?和我們有什麽關系?今天我們就來聊聊這個話題。

計算思維,或者稱為編程思維也行,這是不同的譯者給出的結果,其實就是一個東西。計算思維的提出人是美國卡內基·梅隆大學電腦科學系主任-周以真。

所謂計算思維,可以理解為「 電腦是如何解決問題的 」,包括四個部份:分解、演算法、模式辨識、抽象。

我們先來看 分解。 下面這張圖如果是會編程的朋友,一眼就能夠看出來它是什麽。

對,這就是流程圖,也就是程式的思路。這和我們寫文章是一個意思,寫一篇文章,都是要先構思,形成框架,時間、地點、人物、起因、過程、結果,然後再逐步細化。編程也是一樣,首先要根據使用者的需求,形成一個概要設計文件,描述清楚這個程式做什麽用?給誰用?大體的思路、過程……,然後在這個基礎之上,再形成詳細設計文件,流程圖就是這些文件中最常用的描述工具。

流程圖體現的就是分解的思想,即 把一個大問題逐步分解為多個小問題,然後逐個擊破 ,這樣無論多復雜的問題都可以化解。而生活中的分解思想隨處可見,比如國慶日計劃全家出去自駕遊,從行程、訂票、住宿、交通到隨行物品、個人偏好、風土人情等等,這些因素都要考慮,也是一個大工程,弄不好就會留有遺憾,但如果提前規劃好,將旅行分解為若幹個部份,比如行程規劃、各類票的預訂……,然後每個部份再做進一步分解,最後一項項落實,整個過程就會有條不紊,不留遺憾。所以具備分解思維的人,往往不畏難,即使再復雜的問題交給他,他也會條理清晰的規劃出具體方案。而生活中也常見這種人,一遇到事情就退縮,「太難了」,「我做不了」,因為在他眼中,這是一個無比復雜的事情,毫無頭緒,所以不敢做,但如果他懂得分解,就會發現這個事情雖然復雜,但並非不可做。

計算思維的第二部份是 演算法 。演算法這個詞比較專業,但並不難理解,字面意思就是計算的方法,專業的解釋是「 電腦解決通用問題的一系列步驟 」。現在人工智能已經影響到生活的方方面面,像ChatGPT之類的大語言模型,更是掀起了人工智能的新高潮,那麽這些人工智能為什麽那麽厲害呢?這背後就是演算法,各類演算法。當然這些演算法往往有著高深莫測的名稱,例如Transformer、BERT、K-means、Random Forest、RLHF、Q-Learning,演算法的背後往往是苦澀難懂的高等數學公式。但我們不要被表象欺騙,所有的演算法都只是電腦解決某類問題的步驟而已,而電腦如何解決問題是人(程式設計師)告訴它的,所以演算法和日常生活有著緊密的聯系。

接下來我們舉個生活中的例子,來解釋一類常用演算法。上學期間,我們經常會遇到站隊這個場景,要按照高矮進行排序,如果你是老師,要如何做呢?

方法一:找出最矮的站在第一,然後在剩余人中找最矮的,站第二,以此類推。這種方法很簡單,在電腦演算法中我們把它稱為「選擇排序演算法」,屬於排序演算法中的一種。原理看起來高大上的演算法也不過如此嗎。當然這種演算法是有弊端的,如果只有幾個人排隊,一眼就能看出誰最矮,如果有100個人呢,恐怕就沒那麽容易了,所以我們可以用第二種方法。

方法二:每次兩兩比較,矮的站前面,以此類推。比如一開始先比較左邊二人,矮的站右邊(以右邊為隊首),會發現原來二人的位置無需調整。

接著比較第二第三兩人,會發現他兩的位置需要調整。

繼續比較第三、第四兩人,他們的位置也需要調整。

然後是第四、第五兩人,同樣需要調整。

經過前幾次比較調整,我們發現了一個規律,就是最矮的那位同學從原來左邊第二移到了最右邊,也就是隊首,如果把這個同學想象成一個水中的氣泡,因為它最輕(最矮),所以直接升到了水面(隊首),這個過程可以形象的叫做冒泡。經過第一圈的多次比較,我們把最矮的同學放到了隊首,接下來我們按照剛才的思路繼續。重新從左邊二人開始比較,二人的位置無需調整。

比較第二、第三兩人,位置無需調整。

比較第三、第四二人,位置需要調整。

因為第五個人就是隊首,也就是第一圈比較中篩選出的最矮者,所以無需比較第四、第五。這樣經過第二輪比較,我們將第二矮的同學放到了對應的位置。剩下的步驟都是類似的了,重新從左邊開始第三輪比較……,直到將所有同學排序完畢。這個排序方法在電腦中被稱為「氣泡排序演算法」。這個方法的好處是不論是5個人,還是5萬人,都可以用這種方法排序。

我們剛剛用生活中的例子解釋了電腦中的排序演算法,只要我們掌握了一種演算法,就可以解決所有同類別的問題,比如有了氣泡排序,不僅可以做隊伍的排序,也可以做任何事物的排序,只要這些事物之間可以比較大小即可。在電腦中排序隨處可見,比如開啟各類商品網站,映入眼簾的是各類商品,這些商品都是排序的。

排序演算法只是演算法中的一類,其他還有:加密演算法、圖論演算法、搜尋演算法、壓縮演算法、機器學習演算法……。

有人會說,這些專業的內容對生活有用嗎?別說,還真有用。大家有收到過垃圾短訊或垃圾郵件吧,這些垃圾資訊中除了大量廣告之外,就是詐騙資訊,比如說下面這個場景:足球世界杯期間,你是個球迷,每場比賽必看,同時也會和朋友激烈爭論接下來某場比賽的勝負。

這時你收到一個短訊「內部訊息:哥倫比亞 vs 烏拉圭,哥倫比亞勝!」,你的第一反應可能是「無聊」,接下來這場比賽如期舉行,結果居然和短訊預測相同,哥倫比亞果然勝利了。「這不過是狗屎運!」,你如是想。接下來的比賽是美國對陣比利時,你又收到一個短訊「內部訊息:美國 vs 比利時,比利時勝!」,你在想「又是這個垃圾短訊,我到要看看結果如何」,結果出來了,短訊又預言準了!你有些動心了,連續二場比賽預測準確,還是有些本事的。接下來是準決賽,法國對陣德國,法國隊如日中天,是奪冠大熱門,你和朋友們都認為法國會贏。那個短訊又如期而至「內部訊息:法國 vs 德國,德國贏!」,怎麽可能?德國隊員都是老態龍鐘了,簡直胡說八道。但是前面二場都預測準了,對方也許大有來頭,我要不要小賭一把?於是你找到一個博彩網站,裏面可以針對世界杯結果下註,你花了100元賭德國贏,「反正就100,輸了也沒關系」,比賽完畢,結果如你所願,德國真的贏了!媒體一片嘩然,出乎了大部份人的預料,你如期贏了一小把,更關鍵的是你對短訊的內容深信不疑,「這必然是有高人在背後,否則不可能連續三場都準,連某名嘴都沒預測準確」。接下來就是決賽,德國對陣巴西,你急切的等待短訊的到來。「內部訊息:德國 vs 巴西,想知道預測結果嗎?請往XXXX賬號匯款1萬元」。果然天下沒有免費的午餐,還是要花錢的,不過可以理解,人家當然也要盈利,既然前三場都那麽準,第四場我就賭把大的,給他一萬,然後在博彩網站下重註,這樣絕對能大賺一筆!於是你把錢打給了對方,至此,騙局完成!不論比賽結果如何,你都輸了。

這種場景我們都似曾相識,有人說既然對方能連續預測準確,肯定是有高人在啊,不可能都是運氣吧。你輸就輸在這了!騙子很巧妙的運用了一個方法,在電腦中被稱為二分法,騙子的做法是這樣的:首先拿到大量(假設10萬個)個人聯系方式,比如手機號、郵箱等,然後在第一場比賽(哥倫比亞vs 烏拉圭)之前,編輯二段內容,一段是預測哥倫比亞贏,一段預測烏拉圭贏,然後分別發送給一半人,也就是說5萬人收到的資訊是哥倫比亞贏,5萬人看到的是烏拉圭贏,不論比賽結果如何,都有一半人會看到正確的結果。在第二場比賽(美國vs比利時)之前,再編輯二段資訊,分別預測美國和比利時贏,然後分別發給上一輪看到正確結果的5萬人。

第二場比賽結果出來後,剩下2.5萬人看到了正確的預測結果,接下來如法炮製:

到最後決賽之前,還剩下1.25萬人,騙子會編輯資訊要求所有人匯款1萬元給他,假設大部份人有足夠的警惕性,只有1/100的人匯款,那麽騙子也會收到125萬元!不僅如此,最後比賽結果出來,總有一半人看到了正確的預測結果,那這些人就是鐵粉了,騙子接下來說什麽,他們都會相信的……,所以騙子最終獲利遠不止125萬,而他的花費成本幾乎可以忽略不計,只是發送了10多萬條短訊而已。

騙子套用了電腦中的二分法,也是演算法中的一種,而如果你了解二分法,就不會上當受騙了。

接下來我們看計算思維中的第三部份: 模式辨識 ,簡單來說模式辨識就是「透過表象看本質,找規律」,舉個例子:

過路口時,紅綠燈的規則我們都懂:

如果遇到紅燈,就停止

如果遇到綠燈,就透過

如果遇到黃燈,就……

這三條規則我們可以歸納為以下一條規律:如果遇到X燈,就執行Y動作。這個X就代表前面的紅綠黃,Y代表停止、透過……,所以看起來模式辨識並不難。

那麽模式辨識在電腦中有哪些套用呢?這太廣了,我們會發現現在的APP非常聰明,推播給我們的內容往往是我們所關註的,而不像早期的APP,往往需要翻閱很多內容才能看到自己感興趣的。這其實是基於大數據分析的使用者畫像在起作用。

簡單來說,就是APP會搜集你的各類資訊,包括基本資訊:器材型號、使用時段、瀏覽內容類別等等,也包括個人資訊:性別、年齡、職業、收入、愛好、行業……,然後APP提供商會根據這些資訊進行分析,將你進行歸類,打上標簽。比如你經常瀏覽購物網站,系統會給你打上「購物達人」的標簽,並且帶有一個權重,代表這個標簽的重要性。同時你還愛聽音樂,瀏覽音樂網站,系統會給你打上「音樂迷」的標簽,同時帶有權重。隨著標簽的增多,慢慢你的畫像就出來了。接下來系統會分析貼有相同標簽的人具有哪些共性的行為或喜好,然後將符合條件內容推播給屬於這個畫像的使用者。舉個例子,你是一個職場年輕人,透過對你的資訊搜集,系統分析出你的畫像是A,而屬於A的使用者基本都喜歡滑雪、爬山,而你從未瀏覽過相關內容,那麽系統除了推播日常你喜愛的內容之外,還會將滑雪、爬山的文章、廣告推播給你,這樣就可以進行精準行銷。我們剛才說的使用者畫像,就是模式辨識的套用。

那麽模式辨識在生活中有哪些套用呢?我們說過模式辨識就是透過表象看本質,找到規律,借助【教父】中的一句台詞「花半秒鐘就看透事物本質的人,和花一輩子都看不清事物本質的人,註定是截然不同的命運」。所以生活中活的通透的人都是模式辨識的高手!

計算思維最後一部份是 抽象 ,所謂抽象指的是「忽略細節,關註要點」,在電腦編程中有很多抽象的概念,例如:變量、指標、封裝、函數、繼承、多型、依賴註入、耦合……,正因為如此編程被認為是比較難學的一門技術。經常寫程式的人,對抽象絕對不陌生。那麽抽象的思維對生活有什麽幫助嗎?其實生活中的抽象也比比皆是,比如我們常用的地圖就是抽象的概念,一張行政地圖中只關註地名、公路、河流等主要資訊,而忽略建築、植被等資訊。

如果你炒股的話,對股票走勢圖會非常熟悉,這裏面同樣只關註漲落、成交量、趨勢等資訊,而忽略市值、收益等細節。

我們可以舉出很多這樣的抽象例子,在現代社會中,不管你願不願意,是必須要具有一定的抽象思維的。更不要說我們從小學到大的數學,那更是抽象的學科了。

總之,以分解、演算法、模式辨識、抽象為代表的計算思維代表著另一種思維方式,與日常思維相比,這是完全不同的一個角度,當我們有了另一個視角,這個世界在我們眼中就會完全不同!