圖片來源:unsplash
關(guān)于編程,市面上的各種少兒編程課,總是要先制造焦慮:“AI 即將大范圍代替人類工作啦,你要是不懂得和計算機(jī)打交道的語言,怎么在未來世界立足呢?”
爸爸媽媽們一聽焦慮了,趕緊給孩子報班。各種圖形化編程、機(jī)器人編程,孩子們玩得很開心,家長看著也挺滿意。
但也有善反思的家長會發(fā)現(xiàn):好多編程課,和教孩子畫出賞心悅目圖畫的美術(shù)課一個路數(shù),關(guān)鍵是要有漂亮的結(jié)果能讓家長發(fā)朋友圈,孩子到底從中學(xué)到了什么卻很難說清楚,教育機(jī)構(gòu)鼓吹的“編程思維”又是怎么一回事也很難體會出來。
一方面,我覺得教育機(jī)構(gòu)所謂的“編程思維”沒啥稀奇的,甚至根本不需要上編程課,在生活中就可以學(xué)到;另一方面,我寫了二十多年程序、深感編程對我的思維有很多積極影響,也覺得孩子有機(jī)會學(xué)編程實在是一件很好的事。所以今天,我想和大家分享下家長在不焦慮不盲從的同時,如何能讓孩子從少兒編程中汲取養(yǎng)分和快樂。
今天的分享會分三部分:
首先是我從教女兒,以及女兒學(xué)校二十來個孩子 Scratch 編程課的體驗中,觀察到的:孩子們從編程中學(xué)到了什么?
然后是我研究了部分商業(yè)機(jī)構(gòu)的課程,對此的思考:糟糕的編程課是什么樣的?
最后是我的一些建議:孩子到底要不要學(xué)編程、怎么學(xué)?
我的觀察:孩子可以從編程中學(xué)到什么
先來說說孩子們從編程中可以學(xué)到什么。多數(shù)編程教育機(jī)構(gòu)的宣傳,都是說“編程思維”。我猜原因有兩個:一是這個詞比較容易唬住不懂編程的家長,二是它比較容易教,練幾次“如果...那么...否則..."/"重復(fù)執(zhí)行...直到..."等條件控制語句,就可以宣稱孩子掌握了編程思維了。
但其實,孩子能從編程中提升的技能,遠(yuǎn)在編程之外。
一、探索的習(xí)慣
首先,是探索的習(xí)慣。
可能很多家長提到編程的第一反應(yīng)是:我不會哎,要不要找老師來教呢?但請看看這些學(xué)編程的工具:
這是 code.org 里”我的世界“主題的編程一小時。把中央的代碼積木拖動到右邊工作區(qū),拼接成完整指令,指揮 Steve 完成一關(guān)又一關(guān)的任務(wù)。
這是 lightbot 游戲。簡單的幾個指令,指揮燈泡小人行走及點亮燈泡??粗唵?,但很多編程概念都包含在內(nèi)了,甚至連重載(overloading)都有。
這是和 lightbot 同一家公司出品的另一款編程游戲 spritebox (http://spritebox.com/ )內(nèi)容更復(fù)雜一些。但對孩子來說,跟隨著一步步引導(dǎo),從開始最簡單的執(zhí)行一句命令,到后面相當(dāng)復(fù)雜的多層循環(huán)和條件判斷的嵌套,就像玩游戲一樣,一關(guān)關(guān)闖下來就都會了。
如果下次你再聽到有人把“如果...那么..."/"重復(fù)執(zhí)行...直到..."當(dāng)成編程思維推銷課程的時候,請記?。哼@些內(nèi)容,靠上面幾個游戲,讓孩子自己摸索,一定都能學(xué)會。
讓我們再來看 Scratch。
Scratch 的界面要復(fù)雜不少,功能也多得多。其實 Scratch 自帶非常好的教程,點擊菜單中的“提示”就能看到,就是下圖中右側(cè)的內(nèi)容。很可惜教程是英文版的,所以孩子也許還是需要一點大人的幫助。
我之前給孩子們上 Scratch 課,發(fā)現(xiàn)孩子們最喜歡做的事情,就是東改改西換換,換用一些別的代碼塊或者設(shè)置一些超大/超小的數(shù)字看效果。
比如我們做一個游戲,其中星星出現(xiàn)的時候要閃爍三下好讓玩家留意到,我給出的程序和效果是這樣的:
孩子們會做什么呢?他們會把大小變化設(shè)成1或1000,會把等待時間設(shè)成 100 秒或 0.01 秒,還會把重復(fù)執(zhí)行設(shè)置成幾十億次。所以他們會做出這樣的代碼:
小朋友們覺得這樣的極速閃爍非常好玩,一群孩子都笑翻了,紛紛跑到自己的電腦上去嘗試。有敏銳的孩子會問為什么能同時看到大小兩個星星,知識面廣的孩子就回答說是視覺殘留。
類似的場景,在課堂上還有很多。往往在孩子的一個“咦,這是什么,我來試試看”的疑問背后,可以引發(fā)出一長串的問題:為什么會這樣呢?和你的預(yù)期一致嗎?如果換成那個又會是什么樣的效果呢?這個功能可以用來做什么?
Scratch是一個再安全不過的環(huán)境,最壞情況無非就是把程序重啟重新開始,所以可以放心讓孩子大膽嘗試。美妙的是,每拼接一塊積木,都可以點擊運行馬上看到效果,這反饋-修正的過程是非常迅速的,所以孩子能很順暢的自行探索。
所以,我想表達(dá)的第一點就是:lightbot 等編程游戲,和 Scratch 圖形化編程工具,都是再好不過的讓孩子盡情探索的玩具?!拔襾碓囋嚳础钡目陬^禪,是這些玩具能帶給孩子的最寶貴的財富。
二、通過切身的體驗學(xué)數(shù)學(xué)
計算機(jī)界的最高獎項是圖靈獎,2003年的圖靈獎得主 Alan Kay 有一個非常棒的 TED 演講 A powerful idea about ideas 。在這個演講中,你可以看到 9 歲的普通孩子孩子通過玩 OLPC 電腦上的軟件,得出了“加速度”的概念。
Scratch 是 MIT 的 Meida Lab 創(chuàng)造的,在 Scratch 之前 Media Lab 還有 Logo 語言。你知道嗎, Papert 發(fā)明 Logo 語言,其實并不是為了教孩子編程,而是為了給孩子一種適合他們的學(xué)習(xí)方法,用電腦來幫助孩子更好的學(xué)習(xí)。
Papert 在他的 Mind-Storms 這本書的序言 The Gears of My Childhood 中寫到,他幼年時喜歡玩各種各樣的齒輪,后來學(xué)數(shù)學(xué)輕而易舉,他才發(fā)現(xiàn)玩齒輪的體驗幫了他好大的忙,例如他會把二元一次方程想象成玩兩個齒輪求齒的數(shù)量。他在書中是這么說的:
Logo 和 Scratch,其實是虛擬世界的齒輪,能幫助孩子們建構(gòu)式的學(xué)習(xí)很豐富的數(shù)學(xué)知識。
舉幾個例子:
指揮小貓向前向后走,把星星變大再變小,這些代碼可以教孩子正負(fù)數(shù)的概念
等待 1/0.5/0.25 秒,從中可以學(xué)習(xí)時間的概念,分?jǐn)?shù)和小數(shù)的概念
Scratch里角色的顏色變化一共分200級,把顏色設(shè)為210其實等同于把顏色設(shè)為10,類似的還有造型變化、亮度變化等等,不知不覺的,孩子就掌握了整除、余數(shù)、取模等等。
我最喜歡帶孩子玩的是畫圖形。下面這張圖是我給孩子們的第一堂用代碼畫畫課的練習(xí)紙。指揮畫筆重復(fù)執(zhí)行往前走、旋轉(zhuǎn)一定角度的命令,畫出各種各樣的圖形。孩子們從中學(xué)到了什么?笛卡爾坐標(biāo)系,角度,旋轉(zhuǎn)一周是360度,3*120=4*90=6*60……才一年級的孩子乘法都沒學(xué)呢,這些對他們來說卻很容易理解他們也很樂意去學(xué)。
這就是我想說的第二點:通過編程,孩子們能獲得很多關(guān)于數(shù)學(xué)的切身的體驗,而這些經(jīng)驗有助于今后他們更輕松的學(xué)習(xí)數(shù)學(xué)。關(guān)于這一點,Tony Yet 寫過一篇闡述 Papert 教育理念的文章蠻值得一讀的,推薦給大家。
三、工程化解決問題的能力
孩子們在依葫蘆畫瓢的開發(fā)了幾個游戲后,總會想實現(xiàn)自己的創(chuàng)意,創(chuàng)作出自己的游戲。
這時候,你就可以引導(dǎo)他描述問題,把大問題一點點拆解成小任務(wù),設(shè)計一條分步驟實現(xiàn)任務(wù)的路徑,然后一點點的去實現(xiàn)它,不斷調(diào)試根據(jù)結(jié)果一點點調(diào)整直到最終完成。
編程天然就是 PBL 式學(xué)習(xí),在這個過程中,孩子的模塊化思考、抽象思考、簡化問題、尋找替代方案等等能力,都會得到鍛煉。這種方式和別的物理世界的項目例如做木工活兒比起來,成本低廉還極其安全,所以不妨多練練。
不過這些能力對低年級的孩子來說還太難了一些,可以讓他們先從看別人的項目、理解別人的代碼開始做起。我的公眾號里“讀碼探秘”欄目就是在做這方面的試驗。
四、邏輯,算法
最后來講講邏輯與算法。編程,把我們很多思考問題、執(zhí)行任務(wù)的過程顯性的表示了出來。最基礎(chǔ)的,有執(zhí)行中的順序、條件、循環(huán),邏輯上的與,或,非。讓思維變得可見,本身就已經(jīng)對思考能力會有促進(jìn)。
算法中有些非常有趣的東西。舉一個最簡單的例子:這是我?guī)е齻€孩子做平面版的“我的世界”,下面這一排是裝備欄,最左邊的那格是玩家手里當(dāng)前的裝備,是一把鏟子。那一課的任務(wù)是要點擊裝備欄中任意一格,就把當(dāng)前裝備和這一格的內(nèi)容交換。
一開始孩子們寫的代碼很簡單:把a(bǔ)設(shè)成b,再把b設(shè)成a,不就行了嗎
運行下一看,怎么兩個都變成鏟子了?冥思苦想想不出來。我用實物演示:左手一把尺子右手一支筆,要交換左右手的內(nèi)容,手又太小無法同時握住兩樣,就必須先把一樣?xùn)|西臨時放到桌上。這桌子,就是一個臨時變量c。
一點點引導(dǎo),他們終于得出了下面這個正確方式,學(xué)會了一個新算法:交換a和b的數(shù)值,需要一個臨時變量c。把c設(shè)成a,再把a(bǔ)設(shè)成b,最后把b設(shè)成c,這樣才行。我深深記得孩子們當(dāng)時眼睛被點亮的樣子。
這還只是最簡單的算法。計算機(jī)世界有大量極其有趣的內(nèi)容,都是很值得去了解的。
但為什么我會把邏輯、算法排在最后一位呢?因為去學(xué)這些算法、進(jìn)行這樣的思維訓(xùn)練,不一定需要通過編程。我們的生活中處處都有素材。
我女兒丟三落四總是忘了帶課本和作業(yè)回家,我讓她畫了一張流程圖,用到了順序執(zhí)行、if else和 foreach。
我們可以用回溯法來走迷宮,用二分法來查字典,有了決策樹連晚上吃什么的爭論都會少很多。
有一定的編程訓(xùn)練,有助于養(yǎng)成這樣的習(xí)慣:對生活中的萬事萬物都問一句“它背后的算法是什么、有沒有更好的實現(xiàn)方法”。
如果有相關(guān)計算機(jī)知識,也能更好的對生活中常見的事物給出具體的、有意思的解釋,例如:商品的條形碼是怎么回事?為什么會是三個角是黑塊?為什么中間擋住了一塊還是能夠掃碼掃得出來?
但這些能力提升的關(guān)鍵,在于思考,而不在于具體的編程。這個不插電編程的網(wǎng)站上有非常豐富的資源 , 國內(nèi)有清華大學(xué)的終身學(xué)習(xí)實驗室在做類似的嘗試,我也正在設(shè)計一門三階段的不插電編程教程,后續(xù)會在公眾號放出。
小結(jié)一下,以上是第一部分,我的觀察——孩子們可以從編程中學(xué)到什么:
最重要的,養(yǎng)成探索的習(xí)慣。
其次,是通過編程可以建構(gòu)式的學(xué)習(xí)很多別的領(lǐng)域特別是數(shù)學(xué)的知識
第三,是培養(yǎng)工程化解決問題的能力
最后,是用編程語言讓思維可見,學(xué)習(xí)邏輯與算法
我的思考:糟糕的編程課是怎樣的?
有了上面這些觀察,我們就可以推導(dǎo)出一門編程課是好還是壞。我要特別說一說糟糕的編程課是怎樣的,期望能給正在為孩子挑選編程課的家長一些幫助。
一、不求理解、不能讓孩子做到舉一反三的
商業(yè)機(jī)構(gòu)的通?。嘿I單的是家長,所以課程首先要讓家長看到成果,至于孩子們學(xué)到了什么,尤其是那些隱性能力的提升,反而是次要的了。所以市面上太多的課,都是這樣的:
跟著我做哦
第一步
第二步
第三步
完成啦, OH Yeah!
孩子只是照著做,一點都沒理解。但家長不知道呀,看見孩子做出了漂亮的作品,覺得好厲害好高興。
有些家長可能會覺得,不光是我,孩子也高興,那還不夠嗎?
有時候還真不能光以孩子高不高興來做判斷。我之前教過個孩子,每次一上課就來偷我的答案紙,偷去照著把程序全拼好,YEAH 任務(wù)完成啦,他就特有成就感。其實變換下題目問他,一點沒理解,還是啥都不會。短期來看這樣的成就感是可以提升興趣的,但長期來說實在沒多大好處。
二、花哨,只求酷炫效果,買櫝還珠的
類似的,那些很花哨、只求酷炫效果的,也不是好的編程課。很多機(jī)器人課程是重災(zāi)區(qū)。有些機(jī)器人課產(chǎn)品,提供了大量復(fù)雜組件和預(yù)先編好程序的模塊,只是為了能夠讓孩子方便的搭建出某些特定功能的機(jī)器人。它至多只涉及到一點點邏輯和算法,相關(guān)的原理以及在生活中別的應(yīng)用場景則完全不涉及。孩子們上完課,也只是會用這一種玩具搭這一種機(jī)器人而已。
三、不能讓孩子自主探索和創(chuàng)造的
舉個國內(nèi)編程課程的作業(yè)的例子:讓角色從A走到B,說一句“哎呀”,然后倒下。請完成這一段動畫。
作為對比,大家可以看一下scratch 官網(wǎng)提供的教材,第一單元的作業(yè):給定10種積木塊,請以任意方式使用它們,并把你的成果展示給大家看。
我們可以到網(wǎng)站欣賞下孩子們的作品,五花八門什么都有:
后者完全開放,前者卻是有標(biāo)準(zhǔn)答案的填空題。孰優(yōu)孰劣相信大家都能判斷。
四、不符合孩子發(fā)展規(guī)律、超出孩子能力范圍的
給大家說幾個反例:
例子一. 我在最初給孩子們上課時,用了英文版界面,想著孩子們在學(xué)編程的同時還能學(xué)英語,多好呀??墒呛⒆有枰ê芏囝~外的精力在記憶英語單詞上,自主探索的行為也少了很多。換成中文后就順暢多了。
例子二:我的朋友,試圖直接教一年級的女兒 python 和 java script,碰壁,最終還是回到 Scratch。因為孩子打字速度慢,完成代碼需要的時間太長了,注意力根本不可能集中那么久。
成人們總急不可待的希望孩子們立馬變得很厲害。但是對孩子來說,學(xué)習(xí)的興趣遠(yuǎn)比某一個時刻學(xué)到的知識要更有價值。如果超前、用不合適的方法教孩子一些內(nèi)容,孩子接受不了,反而對學(xué)習(xí)編程失去了興趣,那就得不償失了。這方面我自己的編程課也常犯錯,還是需要不斷提醒自己。
總結(jié)一下第二部分:我的思考——糟糕的編程課是怎樣的:
不求理解、不能讓孩子做到舉一反三的
花哨,只求酷炫效果的
不能讓孩子自主探索和創(chuàng)造的
不符合孩子發(fā)展規(guī)律、超出孩子能力范圍的
我的建議:要不要讓孩子學(xué)編程、怎么學(xué)?
最后以幾條建議作為本次分享的總結(jié)
學(xué)編程遠(yuǎn)不只是學(xué)編程思維,編程思維也遠(yuǎn)不只是從編程中學(xué)。孩子們可以通過編程學(xué)數(shù)學(xué),也可以在日常生活中也可以練編程思維。當(dāng)我們說編程時,視角可以更廣一些。
如果你不介意讓孩子玩電子產(chǎn)品,那么ipad上裝一個 lightbot 或 spritebox,電腦上裝個 scratch,陪孩子熟悉后讓孩子自己摸索,就足夠好了。
如果孩子實在興趣濃厚想讓你為TA報個班,請仔細(xì)考察該機(jī)構(gòu)是否存在我上面說的四個問題。
如果孩子極濃的興趣有極好的編程天賦,那今天的分享并不適合,另有機(jī)會再和大家交流這個話題。
本文轉(zhuǎn)自微信公眾號“南瓜博士”,作者Elfe。文章為作者獨立觀點,不代表芥末堆立場。
2、芥末堆不接受通過公關(guān)費、車馬費等任何形式發(fā)布失實文章,只呈現(xiàn)有價值的內(nèi)容給讀者;
3、如果你也從事教育,并希望被芥末堆報道,請您 填寫信息告訴我們。