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

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

所謂計算思維,可以理解為“計算機是如何解決問題的”,包括四個部分:分解、算法、模式識別、抽象。

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

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

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

計算思維的第二部分是算法。算法這個詞比較專業,但并不難理解,字面意思就是計算的方法,專業的解釋是“計算機解決通用問題的一系列步驟”。現在人工智能已經影響到生活的方方面面,像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的用戶基本都喜歡滑雪、爬山,而你從未瀏覽過相關內容,那么系統除了推送日常你喜愛的內容之外,還會將滑雪、爬山的文章、廣告推送給你,這樣就可以進行精準營銷。我們剛才說的用戶畫像,就是模式識別的應用。

那么模式識別在生活中有哪些應用呢?我們說過模式識別就是透過表象看本質,找到規律,借助《教父》中的一句臺詞“花半秒鐘就看透事物本質的人,和花一輩子都看不清事物本質的人,注定是截然不同的命運”。所以生活中活的通透的人都是模式識別的高手!

計算思維最后一部分是抽象,所謂抽象指的是“忽略細節,關注要點”,在計算機編程中有很多抽象的概念,例如:變量、指針、封裝、函數、繼承、多態、依賴注入、耦合……,正因為如此編程被認為是比較難學的一門技術。經常寫程序的人,對抽象絕對不陌生。那么抽象的思維對生活有什么幫助嗎?其實生活中的抽象也比比皆是,比如我們常用的地圖就是抽象的概念,一張行政地圖中只關注地名、公路、河流等主要信息,而忽略建筑、植被等信息。

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

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

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

來源: 孫老師聊人工智能