前陣子知乎上有個熱門話題,在2020世界機器人大賽總決賽上,一群幼兒園的小朋友走上了領獎臺。
機器人教育如火如荼,各種線上編程的廣告隨處可見。但是幼兒園就開始學編程打比賽真的能讓孩子真正理解編程嗎?知乎一位網友,自己是計算專業畢業的,結合自己學習編程的經歷,聊了聊自家小孩是怎麼學編程…
順便文末說說你怎麼看,你會讓孩子幼兒園就開始學編程嗎?
文 | 小尾巴狼 來源 | 知乎
我和我老公都是計算機專業的,我們的孩子編程是肯定要學的(同樣是特長,一臺鋼琴好幾萬,一臺電腦才多少錢,老師還是免費的),但不會在幼兒園階段學。不止我們家是這樣打算的,據我觀察了解,我們身邊的大學同學,沒有一個是在孩子三年級以前就讓孩子學編程的。
1
我自己學編程的經歷
我們大一剛進校,就開了一門C++程序設計的課,老師一上來只簡單介紹了一下面向對象程序設計,然後就開始教怎麼編程。
一學期下來,這門課我是聽得雲裡霧裡,但老師講的那些語法指令、各種排序方法、什麼迭代遞歸遍歷等等我還是都記住了,期末考試還考了90分。然而只有我自己知道,我對編程依然是一竅不通,只能機械地做題,放到生活中完全不能解決實際問題。
為了自學,我在網上找了麻省理工學院的編程公開課來看。課程一開始人家的老師就表示:我們這門課的主旨是在培養編程思維,程式語言只是幫助我們形成這種思維的工具。
這句話讓我瞬間知道了自己的問題之所在,也是現在很多少兒編程教育的癥結:本末倒置。
編程本質上一種解決問題的手段,程式語言只是工具。要解決問題,最重要的是你要先有一個解決問題的思路,然後在通過手裡的工具去實現。而我們在學習過程中,關注更多的反而是如何使用工具。
2
知識儲備、思維訓練,
遠比一上來就學編程重要
現在很多機構宣傳的都是:編程有助於培養邏輯思維。然而事實卻是,孩子的邏輯思維要達到一定的水平,才能真正懂得怎麼去編程。
對於大多數5、6歲的孩子來說,邏輯思維還處於啟蒙階段,因為…所以、雖然…但是、不但…而且、與其…不如、要麼…要麼、不是…就是、如果…那麼、只有…才、無論…都、即使…也,這些邏輯至少搞清楚了,才談得上把這些邏輯關係轉換成程序語言吧。
那麼能不能通過學習編程去形成或是提高各種思維能力呢?當然能。
我們班當時就有幾個貧困地區來的同學,上大學前連電腦都沒摸過。同樣的老師教,我只會照著書編程,人家就可以從大段大段的代碼中悟出理論,從而形成自己的編程思維。但幼兒園的孩子有這個本事嗎?
或許你見過這種傳統玩具,九連環。
這個玩具看似複雜,但只要是懂編程的人,一上手就能馬上反應過來:它的核心就是編程中最經典、最基礎的算法之一——遞歸算法。
你讓那些學過所謂編程的幼兒園小朋友來玩九連環,他們能不能通過玩九連環這個實際操作,上升到理論層面,悟出「這原來是個遞歸算法」,我深表懷疑。
就算直接告訴他們用遞歸的方法來解九連環,我覺得他們都不一定能理解。還有這種類似的通過預設程序來操控機器人繞過障礙的玩具,經常看到小孩在玩,價格還不菲。
(類似於這樣)
這種遊戲你一眼就能看到障礙物在哪裡,要怎麼避開,提前設計好路線。如果你用個盒子把所有路線罩住,讓孩子再來編個程,讓機器人盲走試試。
面對這樣一個全新的任務,能不能想到把這個任務拆解成一個個的小問題(中途遇到障礙怎麼解決、走到三岔路口怎麼選擇、走錯路了怎麼辦……),然後再逐一解決每一個小問題。這種提出問題並解決問題的能力,我覺得也超出了普通幼兒園孩子的能力。
說了這麼多,其實我想表達的中心思想就是:對幼兒園階段的孩子來說,基礎知識的儲備、思維層面上的訓練,比一上來就學習各種編程規則更加重要。
3
如何為孩子的編程做準備
我們身邊那些大學同學,在孩子的教育過程中雖然不太緊張編程,但普遍非常緊張孩子的數學和英語,這兩門功課才是編程的基礎。
程序設計語言可以等孩子高年級了,找個暑假集中培訓一下,但數學和英語的基礎必須從小打牢。數學不用說了,是整個計算機這門學科的基礎,計算機學到頭其實就是在學數學,我老公讀博的時候基本上就是揪著傅立葉變換、黎曼數學、泰勒方程做文章。
還有英語,主流的編程環境都是英文的,我身邊很多程式設計師同學都非常排斥中文版scratch,覺得這是在影響孩子編程的語感(是的,程序設計語言也是要講語感的)。
除此之外,還有編程思維的訓練。
如果爸爸媽媽們有讓孩子學習編程的打算,自己在這方面又比較小白,個人建議還是要適當學習了解一下,因為思維這個東西主要還是靠潛移默化的影響,只有你了解了這種思維的精髓,才能更好地去影響孩子。
推薦一本我自己看過覺得不錯、準備今後介紹給孩子看的書。
這本書算是一本編程科普書,著重講思維,又融合了一些計算機原理、數據結構方面的知識,整本書的編排還是很有邏輯的,而且淺顯易懂、字大圖多,很輕鬆就翻完了。
(《寫給所有人的編程思維》,吉姆·克裡斯蒂安 著)
我女兒現在5歲半,生活中我倆很喜歡玩桌遊,玩桌遊就是一種非常好的培養孩子編程思維的方式。桌遊的遊戲規則無非就是隨機、判斷、循環、計算等等,一步一步地組合起來,相當在孩子腦海中畫了一張程序流程圖。
以飛行棋為例:
飛行棋的規則就是:第一回合每人扔三次,點數必須要扔到6才能起飛。起飛以後,點數扔到幾就走幾步。
而這個規則用編程思維拆分出來就是。
1. 玩家1扔骰子,生成一個隨機數。(孩子扔骰子,扔到一個3)
2. 判斷扔到的數是否等於6。(不等於)
3. 再循環一次。(孩子繼續扔,扔到6)。
4. 判斷扔到的數是否等於6。(等於)
5. 玩家1的棋子起飛。循環結束,進入下一條指令。
6. 隨機數生成。(孩子扔骰子,扔到5)
7. 起飛的棋子前進5步。
8. 玩家1的回合結束,返回大循環。
9. 玩家2開始扔骰子。
……
整個過程,孩子邊玩我邊說,她的每一個動作我都幫她轉換成一個可執行的指令,我覺得比直接學習編程對孩子更有意義。
除此之外,編程的本質是解決問題,所以父母在遇到一些問題的時候,可以把自己解決問題的整個過程:如何想的、如何做的,用孩子能懂的語言,條理清晰地展示給孩子。
比如前幾天,我和老公帶女兒坐BRT。上車的時候,我突然想到一個問題:BRT司機是怎麼做到每次進站,都能正好把車門對準屏蔽門的?
(類似於這樣)
女兒表示想不出來答案。於是我開始跟她爸討論。
我說:會不會有個類似倒車雷達的東西,快接近站臺的時候顯示一種顏色,比如黃色,司機看到後開始踩剎車減速。然後越來越近,當顯示的顏色變成比如綠色的時候,司機就把剎車踩死,讓車剛好停在綠色區域內,車門就正好對準屏蔽門了。
女兒聽了連連點頭,表示我說得對。
老公說:要驗證這個想法,進站的時候直接看司機的儀錶盤就知道了。如果有提示,肯定會顯示在儀錶盤上。
於是女兒擠到前面去觀察了半天,最後遺憾地告訴我們:司機的儀錶盤上並沒有看到類似倒車雷達那種能變顏色的提示。
我的猜想宣告失敗,老公說:我猜會不會像停車劃線那樣,站臺上有什麼標線,提示司機要把車停到標線上。
下車後,女兒在站臺上跑來跑去,發現地上確實畫了一些奇怪的線。
第二天,我專門帶她去車站驗證爸爸的猜想。我們連續觀察了5輛BRT,發現確實司機每次都會把車頭停在標線的位置,這樣車門就正好對準屏蔽門。
我女兒對這個發現非常興奮,然後馬上進行了類推:地鐵進站是不是也採用的這種方式?我們哪天再去地鐵站看看?
這種提出問題、做出假設分析、再去驗證假設的過程,既是一種很好的親子互動,也是在教孩子遇到問題時,如何去解決這些問題。
最後有幾個共性問題想再說明一下。
首先是關於「小學三年級以前不學編程」的疑問。
這其實並不是什麼規則或是建議,只是我身邊某個特定圈子裡的現象而已,有的是覺得孩子1、2年級功課更重要、有的是想越過scratch直接上c++或者python……孩子的成長有快有慢、能力有高有低,並沒有什麼一刀切的規則。
其次,雖然幼兒園孩子學編程性價比不高,但養育孩子也不是事事都講性價比的。在經濟和時間都寬裕的情況下,如果孩子就是對編程對機器人很感興趣,或是從編程裡面能獲得樂趣,學學也無妨。
如果學,家長可以幫孩子加強基礎方面的訓練,讓孩子能夠更快更好地領悟到編程的本質。
如果不學,也完全沒有必要焦慮。磨刀不誤砍柴工,現在小學數學的難度已經很大了,能把課堂上的知識點吃透,就是最好的邏輯訓練,就是為編程打下的最堅實的基礎。
最後是關於為什麼要學編程的疑問。
如果把特長的培養作為一項教育投資,我個人認為編程屬於低投入低風險型的。相比藝體類的特長,學習編程所需的費用和精力,普通家庭一般都能承受、學習的過程和孩子本身的課業兼容性也更大。
學習的結果,好的可以通過競賽直通清北,一般的可以作為選擇計算機專業、進入IT行業的鋪墊,再不濟也能多一項工作、生活中經常能用到的專業技能。
原標題:《我是計算機專業的, 身邊同行沒有一個是在三年級前讓孩子學編程的…》
閱讀原文