來源:中小學(xué)為師在線 2018-06-12 15:28:17
有人說,未來的世界每個(gè)人都要會(huì)編程,就像每個(gè)現(xiàn)代人都會(huì)寫字說話一樣。也有人說,大眾是愚昧的,會(huì)編程的人群不可能有很大比例。我也不知道未來什么樣,但是我知道另外兩件事情。一是,程序設(shè)計(jì)的邏輯與日常和工作中的推理沒有區(qū)別,遵循和表達(dá)流程,在程序設(shè)計(jì)和現(xiàn)實(shí)世界中也是一樣的。會(huì)編程序的人,更容易相信邏輯,而不是單純的愿望。二是,曾經(jīng),人們認(rèn)為普羅大眾都能說會(huì)寫--估且不論說寫的水平如何--是不可能的。中國掃除文盲也并沒有多久,只是大家沉浸在現(xiàn)代化里面一二十年就忘記了原本的樣子。多數(shù)人不識(shí)字因而不能讀寫家信,集市有專門的人才負(fù)責(zé)這項(xiàng)工作,這也不過是一百年前的事。如果你認(rèn)為一百年很久遠(yuǎn),那么,我的小學(xué)語文老師就講過,為自己的姨輩掃盲,在鍋臺(tái)、墻壁、門窗上都貼上字,什么東西上就貼什么字,她因此得了標(biāo)兵。這應(yīng)該是發(fā)生在建國以后的事情。如今,幾乎沒有人不識(shí)字,盡管傳聞漢語有多么難學(xué)。
劉慈欣先生說,未來的時(shí)候,不是撓手機(jī)就能活下來的時(shí)代。鄧小平同志說,計(jì)算機(jī)要從娃娃抓起。我覺得都挺有道理。
0. 我的入門
我學(xué)習(xí)編程入門是在高中的時(shí)候,1992年左右,使用的機(jī)是蘋果II、長(zhǎng)城6502,單色顯示器,一個(gè)或兩個(gè)軟驅(qū),高密的是好的,一般是低密的。
教材是 蘋果-Ⅱ BASIC程序設(shè)計(jì) / 張世英編,北京 : 北京師范大學(xué)出版社, 1985,500多頁的小冊(cè)子。
當(dāng)時(shí)最喜歡的有兩項(xiàng)。一個(gè)是玩現(xiàn)成的游戲,插進(jìn)軟件,似乎要怎么怎么運(yùn)行,然后有一堆綠色的方塊在屏幕上扭來動(dòng)去,有時(shí)嘟一聲。同學(xué)中的前輩告訴我,那是兩個(gè)武士在持劍格斗。我完全看不出來,而且確實(shí)比魂斗羅之類的效果要差很多。另一個(gè)更喜歡一些,就是把書上的BASIC代碼錄入進(jìn)去,然后修改,畫出不同的圖形,計(jì)算不同的結(jié)果。因?yàn)槟芸吹礁嗫煽氐囊蛩,所以編程比看不懂的游戲更有意思吧?br />
1. 失敗的嘗試
二貓同學(xué)在大約五六歲的時(shí)候,我嘗試了兩次教她編程,不怎么成功。
第一次的教材是《與孩子一起學(xué)編程》,作者[美] 桑德Warren Sande / Carter Sande,人民郵電出版社, 2010-11。
從第一章或第三章開始。最初的實(shí)驗(yàn)是編個(gè)程序,能算出 1+2 這樣。為避免你誤會(huì)我的意思,以為是自動(dòng)生成考卷之類的,具體地說,代碼就是 print 1+2這么一行。如果想算 3+5,那就手動(dòng)再改一下代碼。
對(duì)于二貓來講,體驗(yàn)是神奇的。因?yàn)槌怂,居然還有這么個(gè)東西也能算加法,而且計(jì)算結(jié)果和她的一樣。所以,她一直希望,"再算一個(gè)幾加幾"。
然后我嘗試教她循環(huán),這就是失敗的開始。在循環(huán)中,需要要循環(huán)變量,需要有對(duì)求和連加的抽象表達(dá)。我忘記了,連 print 這樣一個(gè)單詞她以前都沒有見過。這些全都是新的信息,風(fēng)暴一樣灌進(jìn)來。她甚至還沒有學(xué)過連加和乘法。
后來我們說,今天就到這里吧。印象里,她沒有特別強(qiáng)烈地要求繼續(xù),相信已經(jīng)有些挫敗感了。雖然說,挫敗感是只有一定程度投入才能產(chǎn)生的反應(yīng),但是我不敢繼續(xù)嘗試了。
另一次編程學(xué)習(xí)的嘗試,是在 ipad mini 里裝了個(gè) logo。logo又稱海龜做圖,基于極坐標(biāo)或平面直角坐標(biāo)系,移動(dòng)海龜光標(biāo),指揮它畫圖。我用 logo 給二貓畫了個(gè)直線,畫了個(gè)三角形,畫了個(gè)多邊形,逼近了圈,她試了試改其中的幾行,覺得不錯(cuò),挺神奇。正準(zhǔn)備用極坐標(biāo)畫個(gè)萬花規(guī)圖形,發(fā)現(xiàn)二貓開始禮貌地表達(dá)興趣。
萬花規(guī)作圖,需要極坐標(biāo)方程,需要一堆代碼。更重要的,二貓告訴我,其實(shí)從畫三角形開始,一圈是360度,每個(gè)角應(yīng)該多少度,甚至走多少步在平面直角坐標(biāo)系上的含義,這些都是全新的知識(shí)。直角坐標(biāo)系的概念,直到最近2017年初她讀可怕的數(shù)學(xué)系列,才學(xué)到了,自覺用在了 scratch 中,極坐標(biāo)可能仍然沒有概念呢。
后來二貓幾次主動(dòng)提出希望再玩 python,我沒有想好怎么教學(xué),還是沒帶她玩。
如果沒有學(xué)過加減法,如果沒有學(xué)過角度,那么 python 和 logo 就沒法開始。那么,是不是沒有這些基礎(chǔ),就任何程序也不能編呢?到底具備什么樣的基礎(chǔ)才能開始學(xué)習(xí)編程和邏輯。
約十年前,李記者、典同學(xué)、我曾經(jīng)討論過很多輪,需要具備什么樣基礎(chǔ)或者特性的人,才能成長(zhǎng)為優(yōu)秀的程序員。其中,我提到過一個(gè)游戲《不可思議的機(jī)器》,設(shè)計(jì)路線讓小老鼠躲開貓的追擊。有針、彈簧墊、氣球這樣的道具,它們?cè)谝欢ǔ绦蚍抡娴奈锢硪嫔辖换。由玩家觸發(fā)開始以后,道具一頓亂跳,最后貓失敗老鼠跑掉。這個(gè)游戲有編程的基本思想,計(jì)劃、條件、隱含的循環(huán)。但是,這個(gè)游戲并不需要任何數(shù)學(xué)基礎(chǔ)。所以,不需要數(shù)學(xué)基礎(chǔ)的編程,應(yīng)該是可能的。
《不可思議的機(jī)器》并不適合兒童編程教學(xué)。一方面是因?yàn)殡y度偏好,另一方面離程序設(shè)計(jì)最終功利的目的太過遙遠(yuǎn),從游戲里不太容易直接看出與編程思想的對(duì)應(yīng),我擔(dān)心這樣的技能向真實(shí)編程移植可能相當(dāng)困難。
2. 點(diǎn)燈機(jī)器人 (Lightbot Hour'14, Lightbot Hour)
最初我在網(wǎng)上某篇文章里看到 lightbot 介紹,討論的就是兒童編程。這篇文章一時(shí)沒有找到,類似于[《編程機(jī)器人》:胸中有塊壘,大腦漲智慧 - 觸樂]。
lightbot看名字的暗示,程序員應(yīng)該1小時(shí)左右通關(guān)吧。實(shí)際上,我的體會(huì),比那還要難一些。
我和二貓是在 ipad mini 上玩的這個(gè)游戲,剛剛注意到,還有 flash 版本可以在PC機(jī)上玩,在 bing 上搜索 點(diǎn)燈機(jī)器人,有不少。
玩家為一個(gè)機(jī)器人制定行動(dòng)計(jì)劃,操作它在方塊場(chǎng)地行走,目的是把所有的燈都點(diǎn)亮。我玩的兩個(gè)版本都是8+6+6關(guān)。
2.1 其中第一部分8關(guān),只使用基本操作,包括 左轉(zhuǎn)、右轉(zhuǎn)、前進(jìn)、跳、點(diǎn)燈/滅燈。其中點(diǎn)燈和滅燈是同一個(gè)動(dòng)作,如果把燈的狀態(tài)由滅/亮改為亮/滅。這符合演繹思想的基本路線,由幾個(gè)基本元素,經(jīng)過幾個(gè)基本規(guī)則的組合,構(gòu)造出更復(fù)雜的行動(dòng)--行動(dòng)的結(jié)果,正是意圖的目標(biāo)。這是分解,考察如何把意圖分解為若干步驟。python 和 logo 的問題在于,涉及過多的基礎(chǔ)知識(shí),因此入門所需要的元素也就很多。lightbot限制動(dòng)作只有上述5個(gè),是這個(gè)游戲定義的,所以不需要基礎(chǔ)知識(shí)。從現(xiàn)實(shí)來的隱喻--機(jī)器人會(huì)走、會(huì)點(diǎn)燈,單純所以容易掌握。就轉(zhuǎn)向而言,只提供左轉(zhuǎn)、右轉(zhuǎn),限制了機(jī)器人轉(zhuǎn)向的可能只有2種,而不會(huì)是360種,所以不需要使用 轉(zhuǎn)向(左|右) 這樣帶參函數(shù)或動(dòng)賓 (動(dòng)補(bǔ)?) 的復(fù)雜結(jié)構(gòu),可以枚舉為 左轉(zhuǎn)、右轉(zhuǎn)。
在這一部分中,玩家能夠掌握 1.順序執(zhí)行的概念,2.在每個(gè)步驟中可以選用若干語句 (向前、左轉(zhuǎn)、右轉(zhuǎn)、跳、點(diǎn)燈/滅燈) ,3.這些語句只有在特定的上下文中才具有意義,比如在不是臺(tái)階的地方不能跳,臺(tái)階處不能向前,燈是開關(guān)量。
這些都是某些人在學(xué)習(xí)程序設(shè)計(jì)中遇到的障礙,并不是像某些一學(xué)就會(huì)的程序員認(rèn)為的那樣是顯而易見的。由原本生活所帶來的各種刻板印象支配我們對(duì)新學(xué)習(xí)的知識(shí)的猜測(cè)路線,信息和手冊(cè)往往又并不充分,所以猜錯(cuò)幾次非常正常。由于程序設(shè)計(jì)與現(xiàn)實(shí)的差異,不容商議地必須完全正確,不少人錯(cuò)到不知道如何繼續(xù),挫敗感很強(qiáng)。所以,設(shè)計(jì) 少量元素+簡(jiǎn)單規(guī)則,推演出更豐富的結(jié)果,很適合用于了解熟悉構(gòu)造性的思路。而且,又剛好不是像某些人認(rèn)為的平面幾何那么難 (初中卻學(xué)得不錯(cuò)?),所以更佳。雖然我猜,lightbot 就等價(jià)于弱的平面幾何,在抽象代數(shù)的意義上上。這是良藥何需苦口的典型范例。
2.2 第二部分6關(guān),需要使用子程序 (或稱過程?)。逼近或誘導(dǎo)玩家使用子程序的原因是,原來的主程序中,能夠放置行動(dòng)卡片的槽位有限。如果用"笨"辦法,那么步驟數(shù)量多于槽位,游戲不能成功。比如向前走4步點(diǎn)4盞燈,按基本操作,就是 走1步、點(diǎn)燈、走1步、點(diǎn)燈、走1步、點(diǎn)燈、走1步、點(diǎn)燈,需要8個(gè)槽位;按子程序的辦法,可以是 主程序中為 P1、P1、P1、P1,4個(gè)槽位,P1中是走1步、點(diǎn)燈,2個(gè)槽位。游戲在這一關(guān)里設(shè)定為,主程序只有4個(gè)槽位,按基本操作的8個(gè)步驟就過不了關(guān)。
在第二部分的開頭,有圖示和文字指導(dǎo),表示P1可以像基本操作一樣作為卡片放在主程序中,并把P1展開表示是步驟的一部分。
在 lightbot 中,P1子程序入口和出口都不帶參數(shù)。我認(rèn)為這是對(duì)一般編程的合理簡(jiǎn)化,利于掌握。
2.3 第三部分6關(guān),涉及遞歸,P1可以調(diào)用P1。在 lightbot,很令我意外的,沒有循環(huán),只能使用遞歸完成迭代。典同學(xué)會(huì)說,這才是合理的思維方式吧。同樣由于槽位的限制,如果不使用遞歸,就不可能完成任務(wù),所以誘導(dǎo)玩家掌握遞歸思想。
沒有遞歸跳出條件,當(dāng)所有燈都點(diǎn)亮以后,游戲就通過此關(guān)。由于不需要遞歸的跳出條件,也就沒有變量和循環(huán)變量存在的必要。
游戲通關(guān)以后可以申請(qǐng)電子證書,看起來花樣繁復(fù),很值得一顯擺的樣子。可以指定把你的名字印在上面,不過似乎不支持漢字。
3. Robot School
單位黨支部組織生活,會(huì)后的路上同事們和蹭車的我學(xué)術(shù)交流。朱老師告訴我還有個(gè)游戲也很好,Robot School,也是在 ipad mini 上玩的。
相關(guān)推薦:
小升初試題、期中期末題、小學(xué)奧數(shù)題
盡在奧數(shù)網(wǎng)公眾號(hào)
歡迎使用手機(jī)、平板等移動(dòng)設(shè)備訪問幼教網(wǎng),幼兒教育我們一路陪伴同行!>>點(diǎn)擊查看