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