在這個國家里的每一位國民
都應(yīng)該學會編程
這能讓你懂得如何去思考
——史蒂夫·喬布斯
比爾·蓋茨,扎克伯格等硅谷精英鼓勵每個人都來學編程。很多美國公立學校在一年級就開設(shè)了Scratch編程課。
▲6周6節(jié)在線課,完成孩子的編程啟蒙
▲Scratch,麻省理工學院的兒童編程工具
▲每晚在線答疑,知識就該急不可耐
▲僅限300人,共同學習更有氛圍
▲適合小學2年級以上孩子
為什么每個孩子都應(yīng)從小學編程
文 | 王木頭
(北大軟件工程碩士,少兒科普節(jié)目主播)
這段時間,兒童編程非常流行,在很多地方都有創(chuàng)客教育、STEAM教育,都會涉及到教孩子編程。我想很多家長都聽說過了,甚至自己的孩子已經(jīng)上過相關(guān)的課程了。可是兒童編程到底是什么東西,對孩子的成長具體有什么好處,恐怕家長們都還不是很清楚。
兒童編程不需要寫代碼
我想肯定也有家長自己就是程序員,對編程技能和編程思維已經(jīng)很熟練了,當說到教孩子編程的時候,很多時候他們是皺眉頭,覺得這事不靠譜。因為他們想到了自己是如何一開始學習編程的,對當時經(jīng)歷過的困難還記憶猶新,認為學習編程超過了孩子的理解能力。
其實兒童編程和成人編程是不太一樣的,至于那里不太一樣,會不會因為降低難度而讓知識縮水,后面我會慢慢來講,然后大家可以有一個自己的判斷。
我們先來看看編程是什么。
但凡說到編程,尤其是對于不太熟悉編程的人來說,想到的肯定是滿屏幕看不懂的代碼,有各種很怪的英文單詞。這個想象出來的畫面是很多家長覺得孩子不適合學編程的最大阻礙,總覺得寫字都還不熟練,學編程豈不是更加吃力。而且整個屏幕都是這樣的代碼,一定很枯燥,自己孩子肯定堅持不下來。
其實這幅畫面并不準確,在兒童編程中根本不需要學習寫代碼。因為借助麻省理工學院(MIT) 設(shè)計開發(fā)的兒童編程工具Scratch,就可以降低門檻,解決很多兒童編程的問題。
Scratch的操作界面非常簡單
大家可以仔細看一下這個圖,即使沒有學過編程你也可以一下子看懂。
關(guān)鍵是學編程思維
終于不用敲代碼了,而是通過像積木一樣的拖拽來實習編程。這又會帶來另一個擔心——會不會簡化后就淪為玩具,學不到什么真正的東西?
這個我們一點點來聊。我們就先來看看成人學編程重點是學什么。我想肯定有不少人聽過,編程學什么語言不重要,只要真正的學會了一門語言比如說JAVA,再學其他的什么C語言啊,Python啊,就會快很多。所以,學習編程語言不是目的,編程語言是實現(xiàn)某個想法的技術(shù)手段,關(guān)鍵是要具備編程思維。
所以,如果兒童編程可以很好的幫助孩子們掌握了編程思維,以后等需要的時候就可以很快的的掌握正式的的編程語言,那么目的就達到了。到底能不能呢,我們先來一起看看什么是編程思維。
我把編程思維簡單地分成了兩個主要部分,一個是建模,一個是算法優(yōu)化。
舉個例子,比如我們想要做一個程序,這個程序會自動把大象裝進冰箱里。那么建模是什么呢?就是我們要知道把大象裝進冰箱分幾步,經(jīng)過分析,知道了是分成三步,打開冰箱,把大象裝進冰箱,關(guān)上冰箱。
建模其實就是把一個復(fù)雜的問題拆分成更小的問題,保證小問題是可以用程序解決的。那么算法優(yōu)化呢,就是看看如何可以更有效地解決這些小問題。
這其實就有些像是寫文章,建模就是在構(gòu)思整個文章的大綱和思路,算法優(yōu)化呢,就是如何具體地潤色每一句的措辭。只要具備了這樣的思維,至于用什么語言寫,是漢語還是英語,是C語言是JAVA,其實問題都不大。
那么兒童編程可以培養(yǎng)編程思維嗎?不一定,這也是大家在報班學習的時候需要邁過的坑。有兩個方法會影響到編程思維的培養(yǎng),一個是編程工具,真實的編程語言和Scratch相比,我推薦Scratch,后面會解釋為什么。也會列舉一些其他兒童編程的產(chǎn)品,幫大家分析那些可以幫助訓練和提高編程思維。
另一個影響因素是,教學方式,就拿Scratch來舉例,很多學習班教的是如何使用Scratch這個軟件,而不是培養(yǎng)編程思維。就像是教人下圍棋,只是教了圍棋的規(guī)則,并沒有教圍棋相關(guān)的技巧和思考。
講到這里,可能有些家長就首先有個疑問。覺得自己的孩子未來又不需要當程序員,為什么還需要專門培養(yǎng)他們的編程思維呢?
編程思維是一種元認知能力
現(xiàn)在程序員成為了一種非常重要的工作,薪水高,職位多,好找工作。雖然這是個事實,單并不是為什么學編程的主要原因。
我想從更普遍的角度來說明下編程思維并不只是對編程有好處。
大家應(yīng)該還記得我剛才講過的編程思維最重要的兩個能力——建模和算法優(yōu)化,這兩種思維對于個人的重要程度是不相同的,尤其是對于不想成為專業(yè)程序員的人來說。
還是從剛才寫文章的例子來比喻。我可以說一說我自己,碩士從北大畢業(yè)了,肯定不是文盲了,都完成了好幾萬字的畢業(yè)論文,但是等到了工作中發(fā)現(xiàn)自己根本不會寫郵件,更不要說寫一份清晰的文檔。即使硬著頭皮寫了一份郵件,也肯定是思路混亂,讓人看了不知所云,找不到重點。
我可以肯定我郵件中的每一句話都是通順的,甚至沒有標點符號的錯誤。但是當所有的句子聚在合在一起的時候,還是不能清晰地表達出我腦子中的意思,甚至我腦子本身就是混沌的。
后來我實在是對自己這方面不滿意,在一位前輩的推薦下看了一本書,麥肯錫的《金字塔原理》,然后就豁然開朗了。
這本書主要是講,不論是商務(wù)寫作還是闡述自己的觀點,都最好遵守一個金字塔原理。也就是任何事情都可以歸納出一個中心論點,而此中心論點可由三至七個論據(jù)支持,這些一級論據(jù)本身也可以是個論點,被二級的三至七個論據(jù)支持,如此延伸,就像是個金字塔。
更關(guān)鍵的是對于論據(jù),有一個額外的要求,就是相互獨立,完全窮盡。
等我看到『相互獨立,完全窮盡』幾個字之后我一下子就開竅了。這不就是我們編程時對一件事建模的方法嗎?
編程的時候需要先采集需求,也就是用自然語言從各方面描述一個問題。比如“我想做一個小游戲,里面有只貓,我們可以控制它抓魚吃,魚會隨機從一邊游到另一邊,在這個過程中可能會被貓抓住,也可能會成功逃走。還要有定時的功能,在固定的時間內(nèi)看看誰可以抓住更多的魚。”
這樣的表達是我們平時的口語表達,語義模糊,人交流可以,編程就不行了。因為那是人和機器的溝通,任何模糊的和重疊的語句都是不被允許的。
于是為了實現(xiàn)這個小游戲,我就需要分析需求,拆分問題,看看這個游戲里面都有幾個角色,貓有什么行為,魚有什么行為,魚和貓是如何互動的等等。
也就是說,編程思維其實和麥肯錫的金字塔原理有些共通,都是拆分問題,用『相互獨立,完全窮盡』的方法保證語義的準確描述。這樣程序才能實現(xiàn)。
可如果沒有學過編程的話,即使明白了這些原理,也需要經(jīng)過大量的訓練才可以熟練掌握。
這也就是為什么說,編程思維中建模的能力和優(yōu)化算法的能力在某種程度上是不對等的。
優(yōu)化算法是一種專業(yè)技能,需要有大量的專業(yè)知識和數(shù)學知識。而建模是一種理性思維,建模能力是一種元認知能力——掌握這個方法,遇到未知問題都可以利用這種認知方式去應(yīng)對。
這才是學習編程的本質(zhì)。至于學習年齡,編程這種可以訓練元認知的課程,會比較適合小學二三年級以上的孩子。
為什么推薦Scratch
講到這里就要說一下,為什么不是所有的編程都適合給孩子學,為什么會推薦Scratch。這是因為Scratch是越過了編程思維中的有關(guān)算法的訓練,直接訓練孩子建模能力。
如果有家長了解過編程的話應(yīng)該知道,學習編程的時候一般都是先學數(shù)字的使用,例如比個大小,在數(shù)組里排序之類的。這其實都是算法問題。
可是在由麻省理工學院(MIT) 設(shè)計開發(fā)的兒童編程工具Scratch中就不會,設(shè)計它的目的就是為了讓孩子們可以擺脫這些繁瑣的技術(shù)細節(jié),直接將自己的想法進行建模并實現(xiàn),而這些復(fù)雜的技術(shù)細節(jié)只需要一條語句就可以做到。
盡管簡化的代價是無法像正式的編程語言一樣普遍適用,但卻非常適合孩子們用來設(shè)計游戲、MV、動畫和交互程序,這就已經(jīng)足夠了。
現(xiàn)在市面上有各種各樣的兒童編程工具,其中很多都是Scratch的衍生品,因為Scratch是開源的,很多機構(gòu)會做自己的定制。這些都是大同小異,可以選擇自己方便的來學習。
但是還有另外一些編程課可能就不會像Scratch這樣能很好地訓練建模思維了。其中最多的可能就是機器人課程,尤其是搭建有編程功能的機器人。
這些課程當然會對孩子的動手能力有訓練,不過在建模思維上的訓練并不會太多。更多訓練的是孩子的定量思維能力,以及遇到問題試錯改正的能力,可能更適合那些有理工氣質(zhì)的孩子們。
而Scratch,很多文學氣質(zhì)或是畫畫好的女孩子也會很感興趣,因為不需要太多的編程技術(shù),就可以做出自己的動畫繪本。
總之,在精力有限的情況下,推薦Scratch。如果是在這方面特真的別有天賦,或者是興趣極大,也推薦去嘗試其他課程。
給孩子的第一堂編程課
主講
主講人:王木頭
北京大學軟件工程碩士
博雅小學堂少兒科普節(jié)目
《王木頭講萬物簡史》主播
給孩子的第一堂編程課
課程介紹
第1課 領(lǐng)養(yǎng)一只程序貓做寵物
欣賞高手們做的程序,演示和介紹我們課程的終極目標——小游戲貓吃魚。并用拆解問題的方式把復(fù)雜問題拆分成簡單問題,打消掉太難學的顧慮。
帶小朋友探索Scratch中的運動相關(guān)的指令。
第2課 訓練貓可以唱歌和畫畫
進一步探索外觀和聲音指令,完成課程之后,可以程序中的角色制作音樂和小故事。
探索畫筆相關(guān)的指令,還有了解循環(huán)語句的嵌套使用。
第3課 把貓訓練的更聽話
探索偵測功能,人有眼耳鼻舌身5感,程序也可以從外界獲的感覺。明白選擇語句的用處。可以讓程序中的角色看起來智能一些。
探索事件的功能,可以讓程序中的角色不在循規(guī)蹈矩,面對突發(fā)事件程序可以隨機應(yīng)變。
第4課 讓貓在程序里交朋友
加入多個角色,重點理解多個角色之間如何進行互動和協(xié)作。
消息機制,如何讓多個角色直接互相可以交流。在消息機制下重新理解多個角色的互動和協(xié)作。
第5課 有記憶的貓更聰明
讓程序中的角色更充滿,不只是聽從命令,還可以有自己的記憶,講解Scratch中的變量問題。優(yōu)化打字小游戲,增加計時功能。
更強大的記憶功能——鏈表存儲,還有XY坐標定位方法。結(jié)合鏈表、坐標和畫筆的功能做一個寫字猜字的小游戲。
第6課 和貓一起做游戲
介紹克隆功能,簡單的復(fù)制很多的角色。
完成終極任務(wù),小游戲貓吃魚。
僅限300人