忘了芭蕾舞和樂器,我們來教孩子編程吧!
代碼的黃金時代要來了!
代碼很可能將會成為未來世界的通用語。幼兒園的孩子就可以開始學習編程的基本概念,因為如學自然語言一樣,越早開始越容易。
J. Paul Gibson因為工作中遭遇的挫敗而開始教青少年編程。他是愛爾蘭國立大學的一名計算機科學家。1998年的時候他被大學新生的無能所震驚。「我發現十八九歲的大學生居然難以理解我自己12歲時就掌握的基本編程概念。」Gibson回憶道。他自己是在一台ZX81(1981年英國公司Sinclair發布的家用計算機)上自學的編程。「我意識到,他們在進大學上我的課之前從來沒有接觸過任何編程。所以我想,可能我們面臨的問題之一是學編程開始得太遲了。」 Gibson的中學生編程課出名以後,都柏林地區的一些小學也開始聯繫他授課。
2000年的時候,Gibson已經在用遊戲設計問題教八九歲的孩子初級Java了。在那個年齡段孩子身上取得的成功讓他好奇:最小可以小到幾歲開始編程?
Gibson在教育心理學中讀到,在孩子能識字之前教別的沒有用。但當他攻入五六歲孩子的課堂進行實驗性教學時,這些孩子不可思議地輕鬆掌握了他教的內容。
通過一個定製的Java小應用程序,他教會幼兒園的孩子寫出「三棋殺三子」(早期的井字棋遊戲),孩子們以小組為單位一步一步定出規則。利用彩色小球和繩子,他教孩子們創造圖論演算法——計算機科學中關鍵的一個部分。 Gibson(現在在法國任教)在一篇2012年發表的論文中寫道:「我們相信,我們的教學成果表明你可以在小孩學會讀寫之前就教他們計算機科學。」
計算機科學家保羅·吉布森為了教孩子們演算法的概念而設計的分類遊戲。
「5至11歲之間的孩子在學習演算法和計算上表現出的突出潛質讓我覺得如果等到他們十幾歲了再學這些基礎知識就太可惜了。」 這一說法對於很多教育學者來說依然太激進了。雖然教兒童和青少年編程越來越成為一股潮流,比爾蓋茨和籃球明星克里斯波什(NBA邁阿密熱火隊的大前鋒)之類的人都在倡導,但極少人認為幼兒園的孩子能學會操縱計算機。
人們普遍認為小孩子的智能水平還無法理解編程這樣晦澀艱深的話題。但這種消極的想法和Gibson及其他先鋒教師的親身經歷相違背,也不符合語言習得理論。大量研究表明大腦越年輕越容易吸收語言,所以在孩子越小的時候開始學外語越好。這也是為什麼很多望子成龍的西方國家家長呼籲在幼兒園就開設深入的中文課——他們希望,在這個亞洲崛起的時代,讓自己的孩子在學習一門核心亞洲語言是贏在起跑線上。
那些家長沒有想到的是,讓他們孩子輕鬆掌握中文的大腦神經機制也能讓孩子快速學會計算機語言。幼兒園的孩子無法成為C++高手,但他們肯定可以開始培養將來讓他們馳騁編程界的技能。代碼很有可能將會成為未來世界的通用語,而不是單一的一們語言(中文或者英文)。
在80年代早期和中期,Logo編程語言帶著它標誌性的小海龜游標風靡美國小學。孩子們運用簡單的Logo指令創作出複雜的線條圖形,當時的期望是希望藉此他們將能熟練操作逐漸進入普通家庭的蘋果II電腦。可惜這一宏偉目標並未實現。主要的問題不是Logo語言本身,而是當時沉悶的教學方法。很多老師只是每周把學生摁到電腦前一個小時就完事大吉了。
對於Logo期待的落空正好趕上多媒體設備的流行。計算機於是從探索的對象淪為圖書館的搜書工具。賓夕法尼亞大學的教育學教授並是學習技術研究領域的先驅Yasmin Kafai說道:「光碟驅動出現了,然後是萬維網,所以你不需要知道指令就可以和電腦交互。」
雖然計算機成了大學專業里的大熱門,但編程可已經從小學消失了幾十年。一個文化上的共識似乎形成一種理念:孩子應該學一些模糊的「計算機技能」,但編程嘛——嗯,那是給大人準備的。
然而在過去五年里,不少突破性的活動開始證明這一認識的荒謬。除了Gibson的井字遊戲和圖論課程,還有Scalable遊戲設計——科羅拉多大學設計的課程,用於教小孩編寫自己的「青蛙過河」遊戲(一款經典的街機遊戲)。在P.S. 185,位於哈萊姆(紐約歷史最悠久的黑人區)的早教中心,4歲的孩子就開始使用一種叫Cherp的語言製作能執行家務的機器人。還有在愛沙尼亞有一項名為Proge Tiiger的計劃,致力於教一年級小孩基礎編程。
這些課程有一個共同點:他們不是專註在教孩子記住某一具體工具的用法,而是讓他們熟悉所有編程過程中都會接觸到的基本概念:序列,條件,調試。例如,Scalable遊戲設計的老師在指導孩子們編寫第一個青蛙過河時首先督促他們想清楚:遊戲里有哪幾個主體?(青蛙,和致命交通工具)他們之間會產生哪些互動?孩子們漸漸學會制定規則和條件,最終形成一個有邏輯、可運行的整體。
Scalable遊戲設計課程教一年級的孩子做出來的電子遊戲。
年幼的孩子可以完成如此複雜的任務並不值得驚奇,我們不是已經知道他們在學習語言上的天賦了嗎?五歲兒童能在學西班牙語或漢語時打敗比他年長的人,因為年輕的大腦更容易形成「程序性」記憶 —— 一種深深烙印在我們神經中的記憶,調動時只是一個條件反射無需意識參與。
證據顯示,大腦成長的過程中,程序性記憶會逐漸讓位於「陳述性」記憶,這是我們用來積累事件的記憶。陳述性記憶的一個缺點就是,它要求精神集中大腦用力——當你坐在飛機上企圖想起一個動詞變位的時候,這可就不好使了。如果你在程序性記憶最靈敏的時候學習了動詞變位,他們就自然地成為你的習慣,那一切就輕鬆多了。
似乎還沒有人研究具體我們是怎麼學習編程語言的,但我們有理由相信學生在程序性記憶依然鮮活的時候學習它會事半功倍。
Michael Ullman是喬治城大學醫學中心大腦與語言實驗室的主任(在心理語言學和認知神經學領域影響巨大)說道:「我猜測,孩子和大人學習計算機語言用到的通用記憶系統和他們學自然語言是一樣的。」 在音樂方面有一個關鍵的數據點可以支持這一觀點:偉大的小提琴家不是在二十幾歲才開始學拉琴的,他們通常始於三四歲,那正是程序性記憶最敏感的時候。
音樂難道不也是一種代碼形式嗎? —— 一系列必須按順序處理才能取悅人耳的抽象符號?
最理想的情況是,幼兒園的孩子每天既學外語也學編程。但如果學校只能二選一,那麼編程無疑是更明智的選擇。最明顯的論據是經濟上的:對軟體開發員的需求遠遠大於供應,並且預計到2020年這一需求會增長30%——超過其他所有職業平均需求量的兩倍還多。
然而,教編程不僅是為了給Facebook和Google這樣的公司培養程序員大軍。正如小時候說多門語言對後來的智力發展有益一個道理,儘早學接觸編程能提高教育學者說的「計算思維」—— 運用抽象思維解決問題的能力。即使對於那些永遠對編程提不起熱情的人,那些有志於取得文學而非軟體工程學位的學生,理解代碼依然意義重大。
正如媒體理論家Douglas Rushkoff所言,忽略編程就像不學開車而依賴別人載。在近五十年內,我們打交道的大多數不會是不會英語的亞洲人,而是機器。所以,讓我們來教孩子如何控制機器吧,別讓他們被機器控制。