余宙華:北京大學(xué)信息科學(xué)碩士。曾任資深信息架構(gòu)工程師,現(xiàn)為“阿兒法營創(chuàng)意編程魔法學(xué)?!敝饕獎?chuàng)辦者。因為兒子叫瀚洋,在家長圈里被親切地冠以“洋爸”的綽號。 我曾經(jīng)在飯桌上和一個朋友發(fā)生了爭執(zhí),起因是一篇報道,它說農(nóng)村居民有一個習(xí)慣,他們會不停地生孩子,一直要到生出兒子才算完!
我覺得這樣偏向男孩兒的生育習(xí)慣一定會導(dǎo)致人口失衡。我的這位朋友則認(rèn)為生男生女的概率始終是50%,所以不管怎么安排生育,最后都是男女各一半。
我們使用各種圖形、文字、公式推演分析,總是不能說服對方。怎么辦呢?我們決定用程序來模擬一下! 三下五除二,我們編寫了一段程序。結(jié)果顯示:如果對大樣本進(jìn)行重復(fù)計算,那么人口分布中男女概率是相等的,也就是男女比例會保持不變。
但是,這樣的“偏心”策略難道不會有任何影響嗎?有的!因為我們?nèi)绻淖兂绦蜻壿嫞屓丝谙到y(tǒng)向前演化,就會發(fā)現(xiàn)系統(tǒng)出現(xiàn)不穩(wěn)定的情況。如果樣本量比較小,甚至?xí)霈F(xiàn)人口系統(tǒng)瞬間崩潰的情況,比如所有家庭突然第一胎都是男孩,然后他們不再生育,于是因為無法婚配直接后代斷絕了。
如果我們不懂編程語言,我們不會想到用程序來交流思想。 人類的思想表達(dá)必須借助工具,也就是語言。這些符號體系極為重要,因為人類的智力成果是通過它們來表達(dá)的。符號是外在經(jīng)驗的心理內(nèi)化產(chǎn)物,借助含義豐富的符號,人類可以憑借智力就進(jìn)行復(fù)雜的沙盤演繹,相當(dāng)有效地掌控外部現(xiàn)實。人類迄今為止發(fā)明了三種標(biāo)志性的語言,分別是自然語言、數(shù)學(xué)語言、程序語言。它們對應(yīng)了人類的三個文明時代,農(nóng)業(yè)與手工業(yè)時代、工業(yè)時代、信息時代。
語言的學(xué)習(xí)是孩子們基礎(chǔ)教育階段的核心。中國歷來重視文化教育,漢語教育更是博大精深。但是,我們的現(xiàn)代數(shù)學(xué)教育卻出現(xiàn)得很晚,到民國才有。沒有盡早引入現(xiàn)代數(shù)學(xué)符號,使得中國文化落后于世界一個時代,未能進(jìn)入工業(yè)時代。眾所周知,現(xiàn)代的電磁學(xué)、熱力學(xué)知識都需要使用現(xiàn)代數(shù)學(xué)符號進(jìn)行表達(dá)。
在1859年出版的由李善蘭和偉列亞力合譯的《代數(shù)學(xué)》開始嘗試介紹西方的數(shù)學(xué)符號,其中偉列亞力評論道:“微分積分為中土算書所未有,然觀當(dāng)代天算家所著各書,其理有甚近微分者,因不用代數(shù)式,故或言之甚繁推之甚難……”意思就是說,中國的數(shù)學(xué)研究已經(jīng)顯露出微積分的思想,但是因為用中文表達(dá)極度煩瑣,所以無法取得有效的發(fā)展進(jìn)步,始終處于原始萌芽狀態(tài)。
每一種符號體系的建立都是人類智慧跨越式的發(fā)展,是上了一個大臺階。借助簡潔、清晰的數(shù)學(xué)符號,小學(xué)生學(xué)習(xí)乘除法也沒有困難,而這些算術(shù)以前被認(rèn)為是非常艱深困難的。
我們曾經(jīng)錯過了現(xiàn)代數(shù)學(xué)發(fā)展的關(guān)鍵年代,今天我們不能再錯過編程語言迅猛前進(jìn)的大潮流。正如海德格爾所說:“語言并非僅僅是一種用以交流思想的工具,而且是存在的住所。”讓我們帶領(lǐng)孩子們進(jìn)入這個程序語言創(chuàng)造的住所吧! 建立起編程語言課程體系 在孩子們很小的時候引入編程語言,是否符合孩子的心智發(fā)育階段呢?對于這個問題有很多爭論。
在20世紀(jì)70年代,美國把Basic語言推廣到中小學(xué),期望編程課能夠為基礎(chǔ)教育帶來革命性的變化。但是,結(jié)果卻是不成功的。根本原因在于語法的煩瑣、程序調(diào)試?yán)щy、編程內(nèi)容乏味。
直到近幾年圖形化編程工具出現(xiàn),少兒編程教育才真正迎來春天。孩子不再糾結(jié)于應(yīng)該輸入一個“;”還是“,”了。編程教育直接進(jìn)入真正的核心,那就是時間與空間的操作。時間是操作順序、流程;空間是存放信息的結(jié)構(gòu)。
圖形化編程工具把動畫指令結(jié)合進(jìn)來,使得創(chuàng)作內(nèi)容能迅速切入孩子的興趣。同時也更加易于把其他的學(xué)科涵蓋其中,更是增添了編程的魅力。
我在幾年的編程教育中體會到,少兒編程課的體系應(yīng)該把程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)與算法、工程系統(tǒng)規(guī)劃、創(chuàng)意培養(yǎng)、多學(xué)科融合作為每一個階段的目標(biāo)。在課程遞進(jìn)過程中,整體呈現(xiàn)螺旋上升的格局。
比如,每一個階段都有程序設(shè)計的觀念引入,在最基礎(chǔ)的部分只需要掌握“順序執(zhí)行”“重復(fù)執(zhí)行”“條件分支”的分解動作就夠了,再往后慢慢引入幾種控制結(jié)構(gòu)的嵌套組合,直至循環(huán)變量間有復(fù)雜耦合關(guān)系的情況。
另外一個極其重要的方面,就是編程內(nèi)容要有“意義”。這可以說是少兒編程教育的全新課題,以前也沒有類似的教育學(xué)成果可以借鑒。之前的計算機課程都是面向成年人的,課程通常只是講授原理、方法,至于具體應(yīng)用,那就是看個人的興趣、悟性了。
但是,孩子的編程教育不能這樣做,必須在課程設(shè)計時把豐富的意義填充進(jìn)去。教師要為學(xué)生設(shè)計很多有趣的“應(yīng)用題”,這些應(yīng)用題將延伸到生活的每個方面,激發(fā)起孩子們的嚴(yán)肅思考,比如人類的經(jīng)濟生活、倫理關(guān)系。
當(dāng)然,編程語言的核心知識體系也要巧妙地編織進(jìn)去。以多學(xué)科知識為緯線,以程序設(shè)計語言為經(jīng)線,構(gòu)造一個趣味性、知識性兼具的課程體系。這樣的課程一定能夠讓孩子們樂此不疲,持續(xù)前行。說起來容易,做起來難。創(chuàng)新的少兒編程教育方法的探索,課程研究的積累,絕非數(shù)年之功可以達(dá)成。
我創(chuàng)辦阿兒法營這幾年,一直在努力研究課程建設(shè)。我愿意在這里分享阿兒法營的部分教學(xué)記錄,希望能起到拋磚引玉的作用。 教學(xué)實例:編程與倫理學(xué)(中級課程) 深秋的下午,北風(fēng)透出陣陣寒意,樹枝上已經(jīng)沒有幾片葉子了。
洋爸在阿兒法營教室里看馮友蘭的《中國哲學(xué)史》。桌上的龍井茶飄散著怡人的清香,外面不時傳來隔壁幼兒園的歡笑聲。
咚咚咚,一陣敲門聲。
洋爸打開門:嘿,羅西,快進(jìn)來!怎么了?今兒情緒不高啊!羅西是阿兒法營高級班的學(xué)員,是一個性格靦腆的小學(xué)六年級男生。
羅西低聲打招呼:老師好!
洋爸注意到孩子臉上青色的瘀傷,拍了拍他的肩膀:和同學(xué)打架了?
羅西有點委屈地說:打籃球的時候和胖熊撞了一下,被胖熊打了好幾拳,我沒還手……還沒等我回答,Tony沖了進(jìn)來,他也注意到羅西的傷:啊,被人打了?又是胖熊?狠狠揍他呀!
羅西:我媽說不能和人動手打架。
Tony:那你白白被人打啊,真傻!我老爸說在外面就要厲害點兒,不能被人欺負(fù)!
羅西:做好人真倒霉,還不如做個壞人,想打誰就打誰。老師您說呢?
洋爸心想這真是一個很難回答的問題,厚厚一本《中國哲學(xué)史》,翻來覆去地就在討論善與惡的問題。此時給孩子一個固定而僵硬的答案有什么意義呢?應(yīng)該啟發(fā)孩子去思考這些人生大問題。
洋爸沉吟半晌道:我也不知道應(yīng)該做一個善良的好人還是做一個兇惡的壞人。
羅西:??!老師你也不知道?
洋爸:嗯,這個問題不像你們想象得那么簡單。我們一起來研究一下吧。
羅西、Tony:怎么研究?
兩個小男孩兒眼睛突然發(fā)亮,讓洋爸感到孩子的求知欲如此可貴!
洋爸:當(dāng)然用我們強大的計算機??!借助程序來幫助我們思考。讓我們想象一下,在一個游戲世界里面有三個種族:第一種是善良的老好人;第二種是兇惡的大壞蛋;第三種是普通的正直人。用程序可以模擬這個世界的演化,看看每個種族會有什么結(jié)果。 Tony:真有趣,怎么做呢?
洋爸:先要思考一下,想明白就好做了。
兩個人表示同意:嗯,對對,先設(shè)計一下!
洋爸描述道:程序開始的時候,這三個種族都會有很多人,比如50個人,每個人都有自己的生命值。
T o ny 喜歡插話:就是血,對吧?
洋爸:對,程序開始的時候,所有人的生命值都是100。
Tony:建一個變量來存儲這個數(shù)字。
洋爸:對!接下來我們要想一想,這三個種族會發(fā)生什么事情。我們用程序控制這些人在舞臺上隨機亂走,當(dāng)兩個人碰到一起就發(fā)生一次“事件”。
事件有三種情況:
第一種是好人和惡人相遇了,那么好人就會被壞人欺負(fù)。結(jié)果就是好人的生命值減少了一些,壞人的生命值增加了一些。我們說發(fā)生了一次“盜竊”。 Tony:哈哈,羅西碰到胖熊,就會減血了。
羅西:去去去!
洋爸接著說:第二種情況是兩個好人相遇了,那么他們會友好地合作,雙方的血都增加。你們覺得合理嗎? 羅西:挺合理的,我猜要是倆惡人相遇就是打架斗毆了。
洋爸:說得沒錯。第三種情況是兩個惡人相遇,惡斗一場,雙方減血。這叫“戰(zhàn)爭”。 羅西:那么,遇到普通正直人會怎樣呢?
洋爸:正直人是這樣一種生物,當(dāng)別人對他好,他也對別人好,那么就會合作,雙方增血;當(dāng)別人對他惡,他也對別人惡,那么就會戰(zhàn)爭,雙方減血。 Tony:以牙還牙,以眼還眼!
洋爸:呵呵,就是這種樣子。
現(xiàn)在,總結(jié)一下我們的設(shè)計:三個種族,好人、惡人、正直人。程序開始的時候,每種人都有5 0個,所有人的血都是100。所有人都在舞臺上隨機移動,當(dāng)兩個人相遇,會發(fā)生三種事件中的一種:戰(zhàn)爭、合作、盜竊。根據(jù)相遇的情況,程序會自動修改雙方的生命值。OK,設(shè)計完成,開始編寫程序。 經(jīng)過洋爸指導(dǎo),一個小時后,兩個人都完成了程序。
洋爸:還等什么,立刻讓程序運行起來吧!
開始的時候,壞人似乎占了上風(fēng),他們的人數(shù)增加很快。老好人慢慢在減少,5分鐘后,老好人快滅絕了。
咦?他們有些驚奇。
最后,正直的人群持續(xù)不斷地慢慢增長…… 洋爸:羅西你能解釋一下原因嗎?
羅西:老好人很早就滅絕,是因為他們的血都被惡人偷走了!
Tony:對,老好人就是惡人的食物。
洋爸:那后來為什么惡人跟著滅絕了?
Tony大嗓門地喊:惡人互相戰(zhàn)爭,而且正直人也和他們戰(zhàn)爭,惡人把血都用完了。
洋爸:有理,惡人沒了食物,又到處戰(zhàn)爭,注定滅亡。最后,為什么正直人種族可以生存下去呢?
因為他們能互相合作,所以會增加生命值,Tony和羅西兩個人搶著說。
洋爸總結(jié)道:按照我們的研究,簡簡單單做一個老好人,或者做一個見人就欺負(fù)的惡人,都不是正確的做人方法。我們應(yīng)該做一個普通的正直人。
但是,要做一個普通的正直人并不容易,因為你必須能分辨哪些是善,哪些是惡。如果你分不清楚,對好人使用兇惡的態(tài)度,你自己其實已經(jīng)變成了大惡人。
你們要多讀書、多思考,在慢慢長大的過程里,逐漸學(xué)會分清黑白,明辨善惡。
兩個孩子都若有所思…… ![]() 教程序語言是表征這個世界的抽象思維符號系統(tǒng) 農(nóng)業(yè)與手工業(yè)時代,人類對上帝的隱喻就是一個農(nóng)夫;工業(yè)時代,上帝被假想為一個偉大的機械工程師;而今天,最精妙的隱喻就是——上帝是一個程序員。當(dāng)你觀察DNA上基因的序列時,你一定覺得那是偉大程序員的作品。
即使對于一個立志于在文科方面有所專長的少年,也必須知道0、1是如何構(gòu)造出整個“第二現(xiàn)實”世界的。用0和1來表達(dá)數(shù)字、英文、漢字,如果這還不稀奇,我們還可以用0和1來表達(dá)聲音、圖像、視頻,最終我們將用0和1來構(gòu)造整個世界。
在人工智能領(lǐng)域的發(fā)展中,我們甚至用0和1創(chuàng)造了人類無法企及的思維模式,比如,深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)。我們創(chuàng)作了一個“人化”的世界。我們無需掌握每一個細(xì)節(jié),但是我們要能理解它。
也許你不懂高等數(shù)學(xué),但是如果你連初等數(shù)學(xué)都一無所知,那只能說你真的不屬于這個時代。同樣,若干年后,你可以不懂卷積神經(jīng)網(wǎng)絡(luò),但是你連變量、循環(huán)、條件判斷之類都無感,那么你真的是被時代拋棄了。
行文至此,我非常感慨,從事少兒編程教育多年,太多的人把編程當(dāng)成一種吃飯的手藝,聯(lián)想到的常常是碼農(nóng)“蓬頭垢面”的形象。他們不曾明白,在今天,對程序語言的理解、掌握已經(jīng)成為一種重要的人文素質(zhì),而且在未來會更加重要!
另外,有的教師也習(xí)慣于把編程教育和S T E M 教育混同起來,或者說編程是STEM的一部分。我認(rèn)為這樣的理解是錯誤的。STEM教育是一種外延廣泛的活動,從各種涉及電子設(shè)備的小發(fā)明、小創(chuàng)造,到比較復(fù)雜大型設(shè)備(大型航模之類)都可以涵蓋其中。每一位教師和學(xué)生都可以因地制宜地開展具備個人特色的STEM教育,STEM教育不是一種學(xué)科邊界清晰的課程。
程序語言則是一種簡潔的、高純度的、形式化的知識系統(tǒng)。編程教育不僅僅是一種有教育意義的活動,這一點和STEM教育迥然不同。
程序語言既然是一種“語言”,就意味著它是表征這個世界的抽象思維符號系統(tǒng)。它的關(guān)鍵作用是塑造一種全新的世界觀、思維方式、解決問題的手段,掌握它的人可以發(fā)掘出這個世界更深、更廣的可能性。
程序語言的類比對象是自然語言、數(shù)學(xué)語言,是一種思維工具。鑒于它對于思維方式的基礎(chǔ)作用、清晰的學(xué)科內(nèi)涵,編程教育進(jìn)入中小學(xué)教育大綱已經(jīng)刻不容緩。
英國、韓國已經(jīng)完成了這一步,但愿中國不會等得太久。
讓我們暢想一下,在不遠(yuǎn)的將來,所有的中國學(xué)生能夠在課堂上學(xué)習(xí)編程,從認(rèn)識順序執(zhí)行開始,認(rèn)識一個變量開始,最終進(jìn)入層次復(fù)雜的數(shù)據(jù)結(jié)構(gòu)、循環(huán)往復(fù)的算法流程,明亮的雙眼仿佛看穿了宇宙的脈動。
這個世界的本質(zhì)既不是“物質(zhì)”,也不再是“能量”,而是“信息”! |
|