正好這兩天在看scratch,寫點想法。
首先,業(yè)界大拿的傳送門:https://www.ted.com/talks/mitch_resnick_let_s_teach_kids_to_code?language=en#t-962452
我個人認為,少兒編程對于孩子思維能力的提高,作用有限。
編程最重要的,不是語言,而是算法和架構(gòu)。而算法性的問題,歸根結(jié)底都是數(shù)學(xué)邏輯,編程只是展現(xiàn)解決方案的手段和方式,是邏輯驅(qū)動編程而不是本末倒置。數(shù)學(xué)思維好的同學(xué),其代碼的執(zhí)行效率也是非常突出的。當(dāng)然,對計算機的體系結(jié)構(gòu)要有一定的理解。關(guān)于算法的重要性,推薦一本入門讀物《編程之美》。如果我們希望通過某個課程訓(xùn)練孩子的邏輯,我認為,數(shù)學(xué),而不是少兒編程,才是首選。
從身邊的樣本看,同事娃參加少兒編程的,大多已經(jīng)退出。純軟的課程項目,都是通過積木式編程入門,結(jié)構(gòu)設(shè)計相對簡單,難以持續(xù)調(diào)動孩子的熱情;而涉及到軟硬結(jié)合的課程,復(fù)雜性和專業(yè)程度、性價比又不如初級的嵌入式,只是在外面套上一層漂亮的封裝。如何設(shè)計一套符合孩子認知和能力的課程,同時又能滿足程序猿爸爸們的口味,看來并非簡單的事。
但編程本身是很好的實踐活動。傳統(tǒng)的課程,比如樂高和科學(xué)實驗,更強調(diào)實物的觸感、現(xiàn)象和由此衍生的想象力和常識。而編程完全是虛擬的,不受任何時空限制,沒有試錯成本,孩子可以充分發(fā)揮自己的創(chuàng)造力,創(chuàng)造任何他想看到的動畫、游戲和禮物。
如果孩子對編程(其實是通過編程實現(xiàn)某種工程性的項目,比如動畫、小游戲和機器人等)感興趣,我認為,不妨先把重心放在培養(yǎng)他對工程的興趣上,讓他獲得參與感和成就感,建立圖像、音視頻和交互、流程等方面的概念。然后,再和數(shù)學(xué)相結(jié)合,沿著自己的興趣方向有所側(cè)重的發(fā)展。
具體來說,利用好編程,我認為,可以提高孩子這幾方面的能力:
專注力與意志力
有過編程經(jīng)歷的爸爸媽媽都知道,寫程序不是一蹴而就的美差,伴隨著設(shè)計、調(diào)試、優(yōu)化,需要高度的專注力。
對孩子而言也一樣。少兒編程提供了很多積木化的組件,當(dāng)孩子產(chǎn)生想法后,他需要思考怎么利用、組合這些模塊。而當(dāng)小程序、小模塊成型后,需要驗證輸出、效果是否和設(shè)想的一致,如果不一致,偏差的原因是什么,哪里需要調(diào)整。基本功能完成后,他可以再優(yōu)化布局、優(yōu)化模塊,使之成為一件藝術(shù)品。
這個過程沒有高度的專注,是很難有效率地完成的,尤其調(diào)試和驗證是一個考驗?zāi)托牡臒X活動。當(dāng)程序如孩子所愿表達出完美的效果時,他在這個過程中也會收獲專注的慣性。
邏輯能力
這里的邏輯能力不是指智商,而是思維的條理性和縝密性。
從我有限的了解看,目前少兒編程主要是面向過程+事件驅(qū)動,也就是說孩子需要預(yù)先設(shè)計和規(guī)劃好流程,比如精確的方位移動。同時,窮舉事情發(fā)生的所有可能(比如消息和事件的處理),最終通過if/else/while/when等表達。
過程設(shè)計鍛煉孩子思維的條理性,而事件應(yīng)對和異常處理則是鍛煉思維的縝密性。剛?cè)腴T的孩子,寫程序的時候往往考慮不周,我們很容易找出一些漏洞(比如輸入與預(yù)期不一致、機器人遇到障礙物時的處理),而通過一起玩游戲、分析,可以有意識地引導(dǎo)孩子培養(yǎng)縝密的思維。
抽象與設(shè)計的能力
一個好的作品,不一定復(fù)雜,但一定有很好的設(shè)計,具體來說就是模塊化、接口、分層等。
這就像我們畫畫一樣。首先確定一個主題,然后設(shè)定布局,接著描繪輪廓,最后填充,使之豐滿。
編程也是如此。孩子首先需要提煉需求,明確工程的目的。然后分解功能,人機交互分為哪些話題模塊,計算器需要哪些運算單元等。接著,設(shè)計各模塊間的接口,調(diào)用關(guān)系。而寫程序本身,只是實現(xiàn)功能的一個具體步驟而已。
平常的課程學(xué)習(xí),多是離散的知識點,應(yīng)該很難提供這種從現(xiàn)實到抽象、又從抽象到具體到細節(jié)的思維鍛煉。我們不妨跳出編程本身,而從軟件工程的角度來看待孩子玩編程,會對孩子的收獲有一個更全面的認識。
協(xié)作的意識
除了課外實踐,在課堂上孩子相互合作的機會是不多的。而編程提供很好的契機。
當(dāng)編程入門后,慢慢地就會接觸到越來越大的程序設(shè)計題,而孩子也會從成就感里產(chǎn)生更多的想法。這時就產(chǎn)生合作的需要:挑戰(zhàn)更大的主題,把大作品分解為多個模塊,各自完成,相互配合。
大學(xué)里有很多軟件、硬件相關(guān)的比賽,比如ACM、數(shù)學(xué)建模、挑戰(zhàn)杯等賽事,無一例外強調(diào)組隊參加、團隊合作,這是強調(diào)個體的傳統(tǒng)課堂方式無法培養(yǎng)的特質(zhì),也是在孩子玩編程時我們可以有意識引導(dǎo)的一點。
one more thing
這兩年少兒編程確實比較火,但這些入門級的課程和培養(yǎng)編程大牛,在我們看來,對大多數(shù)人而言,其實關(guān)聯(lián)有限。
從我身邊的例子看,有化學(xué)轉(zhuǎn)行做AI,物理轉(zhuǎn)行做即時通信,法學(xué)轉(zhuǎn)行做前端,發(fā)展都很好,而他們無一例外有幾個特質(zhì):思維(邏輯和想象)能力很強,對計算機感興趣(不僅是職業(yè),更是熱愛,享受燒腦的盛宴),持續(xù)學(xué)習(xí)的能力(互聯(lián)網(wǎng)和技術(shù)熱點切換太快)。
這些特質(zhì),我相信更多是通過基礎(chǔ)課程的學(xué)習(xí)來獲得。畢竟,編程課本身只是提供開發(fā)環(huán)境、語言學(xué)習(xí)和一些案例入門,它只能告訴孩子怎么做,而無法從解釋為什么。
所以,我們不妨把它當(dāng)作一扇門,引導(dǎo)孩子進入工程學(xué)科的世界,初步理解現(xiàn)實世界與虛擬運行的映射,享受解決問題的成就感,驅(qū)動他去學(xué)習(xí)計算機科學(xué)背后所涉及的復(fù)雜理論。我想,這樣應(yīng)該更能享受少兒編程的樂趣。
有空再補充,歡迎指正。