開始今天的文章之前,我們先一起來頭腦風暴一下。
在商場門口,揮動著手臂跟大家打招呼的吹氣人,它的手臂為什麼能上下揮動呢?
來做個實驗吧。
有這樣一個長條形的塑膠袋子,我們想象它是吹氣人的手臂。跟所有的袋子一樣,它一頭是封閉的,一頭是開口。
現在用剪刀,在它封閉的那頭頂端,剪出一個小口子。
然後,用吹風機,從開口的那一頭往裡吹風,會發生什麼?
在腦海裡執行一下吧。
沒錯,風會把袋子抬起來,變成直直的一條。
好,如果這一次,這個洞口我們不開在袋子的頂端,而是開在側面。
然後,把洞口朝下,還是同樣,用吹風機往裡吹風,袋子會怎麼樣呢?
在腦海裡執行一遍吧——
風吹進袋子:
袋子變直了:
風從洞口吹出來:
風的反作用力,把袋子抬起來
袋子彎折,空氣的通路被阻擋,袋子掉下來,接著重複上面的過程。
就這樣,袋子像一隻手臂,不停的上下揮動:
來看看它的程式:
風吹進袋子——袋子變直——風從洞口向下出來——袋子被抬起——風被阻斷,袋子掉落——回到第一步,不斷迴圈。
你看,這就是
程式設計
。
聽起來高大上的程式設計,其實充斥在我們的生活之中。
經常有讀者問我,“程式設計思維到底是什麼?要不要給孩子學程式設計?”
說實話,我也一直覺得程式設計挺高深的。
妞爸程式設計很厲害,他是世界上第一個把人工智慧影象識別用於搜尋脈衝星的科學家。我倆剛談戀愛的時候,他送給我一個用我名字命名的專屬聊天程式,類似於MSN,專門用來和我跨洋聊天。(嗯,理工直男的浪漫,就是這麼……不花錢……)
每次我看到他在電腦前敲下一排排程式碼,就能讓電腦從千萬個訊號中找到太空中的星星,都會覺得太不可思議了,有時會拉著他問東問西。
這段時間在考察章魚老師的數學思維課,我經常跑去他們辦公室。章魚老師的聯合創始人凳子老師是北大的計算機碩士,我纏著他請教了一次,頗有豁然開朗之感。
正好這兩天我在B站上偶爾看到了日本著名的NHK教育臺製作的科普節目
《Texico》
。
NHK的節目向來經典,《像烏鴉一樣思考》、《啊!設計》就是他們製作的。《Texico》是講程式設計思維的,做的實在太好太魔性了,牆裂推薦給大家,我是一口氣看完的,經常有那種“喔,原來是這樣”的發現新知識的爽感。
我就藉著這個節目,加上我的理解,來跟大家聊聊程式設計思維吧。至於要不要上程式設計課、怎麼選,至少我們要對程式設計思維有個基本瞭解才能去做判斷,否則太容易被忽悠了。
內容很多,我會分成幾篇文章和大家聊。但我首先得承認,我的理解還是很初步的,這背後的廣袤,咱們一起慢慢學習吧。
一、程式設計思維到底是什麼?
說到程式設計,其實我們大部分人指的是“計算機語言”,像Scratch、Python、C++,都是計算機語言。計算機語言只能說是狹義上的程式設計。
計算機語言是什麼呢?就是計算機能聽懂的話,我們用這些話告訴計算機,在什麼情況下做什麼事情。
最底層的計算機語言,其實是二進位制碼,就是用一串0和1組成的字元,來告訴計算機做什麼。
舉個形象的例子,在下面這張圖裡,“10111”這串字元代表字母“W”,“101”這串字元代表字母“E”。那麼“10111 101”就是“WE”——我們。
可以想象,用二進位制碼來寫程式,該有多複雜。好在我們現在有了“高階語言”,Scratch、Python、Java、C++都是高階語言,用這些語言寫出程式之後,它們會再被翻譯成二進位制碼來讓計算機執行。
那這些語言有什麼區別呢?
這就好像我們要跟一個外國人說話,可以用英語、法語、德語,區別只是這個語言好不好懂、好不好用。
這裡面最好懂的就是Scratch,它是大白話的中文,不需要孩子懂英語,也不需要會打字,因為它的指令被做成了一個個的圖示,只要用滑鼠把指令拖到一起就行了。
像上面這些程式,是不是一看就懂?
Python就需要孩子會說英語、會打字了,好處是語法結構比較簡單,讀起來就跟讀英語句子差不多,妞爸就是Python的深度愛好者。
但這所有的計算機語言,學的不過是語法罷了,是一種工具。
這就好像你要叫一個外國人幫你做一件事情,你掌握了英語的語法,但到底要叫這個人去做一件什麼有趣的事,怎麼樣一步步做成這件事,還做的快、做的好、做的漂亮,後面的這些,才是程式設計思維。
就像前面提到的商場門口不停揮手的充氣人。你要想到目的是讓小人揮手,想到剪出一個洞的方法,想到充氣後“手臂伸直-抬高-落下-迴圈前面動作”的一步步的過程,這才是程式設計思維。
而且,程式設計思維並不僅僅是和電腦對話。我們生活中很多東西都是程式設計的結果。
二、無處不在的程式設計思維
比如說郵遞員送信。
信件在派送之前,要由專人進行“重組”,按照一個特別的表格重新排序。
但是,這張表格並不是簡單的按照某某路1號、2號、3號的地址順序進行排序,而是按照一定的程式來進行編排的。
是什麼樣的程式呢?
我們先來看看沒有被“程式設計”的信件,放在地圖上是什麼樣子:
是無序的散落。
那按照程式重組之後呢?
擺在地圖上,就像是一筆畫一樣連了起來。
這就是配送時的最短路徑。這條路線還考慮了單行道、禁止右轉等等交通狀況,是一條經過了程式化設計的路線。
再舉個搬箱子的例子。
有按順序擺放的1、2、3、4號箱子,要搬到對面,怎麼搬呢?
你是這樣打算的嗎?
先分四步一個個抬到對面。
但是,這樣的結果是,箱子順序反了……
接下來只能再一個個調整箱子的順序。
怎麼最佳化流程呢?
其實,只要加上一個手推車就行了。
把箱子放上手推車,1號在最下面,4號在最上面,箱子的順序反了。
接著,從手推車上把箱子再一個個搬下來: 4號先搬下來,放在最下面; 1號最後一個搬下來,放在最上面。
哇噢,箱子的順序又正過來了。
能
一步步分解流程、想到結果,再進行最佳化,這就是
程式設計
思維
啊。
之前我看到一個新聞,有個大學生去幹快遞,他對快遞路線、流程、車子的裝卸方法進行了重新的最佳化設計,很快就做到了公司管理層。這就是程式設計思維的生產力。
我曾經在文章裡說過,文憑改變命運的時代已經過去了,將來是
思維改變命運
的時代。
我覺得未來的機會藍海並不在白領行業,而是在藍領行業。大學生可以用自己的知識、思維,去做藍領行業的領頭羊,去改造藍領行業,把它變成創新、創業的機會。
在什麼行業並不重要,重要的是你在這個行業裡所處的位置。
這也是為什麼我們一直強調底層能力,一直反對用刷題填充孩子的時間,反對為了一時的成績去閹割孩子的思維的原因。
只要你看到無處不在的機會,看到思維的生產力,就不會那麼焦慮了。
再來看一個有趣的例子。
有一個小車,只有右邊的輪子會轉。把它放在地上,會發生什麼呢?
小車一直在向左打圈圈。
把小車邊上的金屬條按下去,就變成只有左邊的輪子會轉了。
現在,在地上放一個箱子,然後放開小車,會發生什麼呢?
在腦海裡執行一下吧。
放在地上——只有右邊輪子在轉——向左轉彎——碰到箱子——然後呢?
原來這就是掃地機器人的程式啊。
所以,程式設計思維,並不是指讓孩子去學習計算機語言,讓每個孩子都會寫程式碼,都去做碼農。
當我們說到每個孩子都應該懂點程式設計,指的是每個孩子都應該具有這種廣義上的程式設計思維。這是一種思考的模式,一種解決問題的方法,一種創造力。
具有程式設計思維,即使將來不學工具性的計算機語言,把它用在別的領域也一樣會很有生產力。
而程式設計思維是可以被鍛鍊的,
它是邏輯學、數學和計算機科學的結晶,背後是一整套的核心思維方法。
這些核心思維方法是什麼,在之後的文章裡,我們再慢慢來說。
謝謝你關注帝呱呱星球,這裡有傳說中的海淀、順義媽媽。因為地域和工作的原因,我們得以接觸優質的教育資源和先進的育兒理念,希望和你分享雞娃時代裡不一樣的育兒新認知、帝都新生活。