資訊內容
游戲+數學+程序員=小學生也懂的Scratch : 編程是什么?難不難?
在進入正式的課程前,我想首先來回答很多人,特別是很多家長和孩子們,都關心的兩個問題,那就是:
-
編程究竟是什么?
-
編程到底難不難?
先來談談第一個問題。
編程究竟是什么?
在今天,“編程”已經成為了一個很多人都耳熟能詳的名詞了,或者你以前也接觸過,或者你僅僅是聽說過,并正準備通過Scratch來學習怎樣編程。但無論如何,在進入到我們的正式的Scratch課程之前,稍微的關心一下,什么是編程,是不無裨益的。
當然,要想非常理論化的說清楚這個概念,既不容易,也不是我們這個課程的目標,更為重要的是,我向來覺得,編程和中國人之間,是天然親和的。
因為,在我們從小所接受的那種系統化的教育 ,尤其是數學的教育中,所經過的種種訓練,和習得的種種技巧,本身就有著一種非常強烈的,強調機械化和程式化的傾向,這一點,和西方數學強調以演繹為核心的思路截然不同,雖然近些年來,也一直因其相對顯得刻板,為一些人詬病,將其視為是導致中國缺乏頂級創造力的原因之一(當然,我并不承認這點),但這確確實實是中國式教育的特質所在。
而且,更為重要的是,在這樣耳濡目染下出來的中國人,幾乎就可以無障礙的一步就跨進編程的世界中。
拿加法的學習來做例子。
我們先是在一年級,通過大量的反復的練習,死記硬背住了10以內所有的個位數和數的加法的結果(別懷疑,實際上你能不假思索的說出7+8=15,所依靠的就是死記硬背住所得來的“知識”,而不是什么邏輯);
之后,我們開始被教會使用“豎式”,來進行更為復雜的多位的運算,而全部的運算技巧,總起來,就是下面的這三句“口訣”:
每位對齊,從個位算起,逢10進1
而一些所謂的“速算”,則很多是在這個口訣上的一些修補和改變,比如,讓你從高位算起,等等,但無論如何,其本質仍然是口訣,而當我們依據這些口訣,反復的進行著訓練時,我們其實就已經開始了一次次非常完美的構建在頭腦和筆頭上的編程實踐!
對的,你沒有看錯,這就是編程,你以前把他們叫做口訣,叫做套路,叫做規則,......,那么,從今天開始,你則可以開始,大聲的把通過這些“知識 + 口訣”的方式,來解決問題的過程,叫做編程了。
你還是不信?好的,那么,不妨我們來根據這個規則,寫個程序試試。
要稍微說一點的是,上面的這個演示,在個位數加法方面,我沒有采用“記憶”的模式來實現,而是設計了一個看上去更加“演繹”一些的方法(或者叫更加愚蠢更合適?)即:
所謂a + b,就是在按序排列的整數列表中,找到a后,再往后數b個數,所對應的那個數
這貌似更加符合自然數中,關于加法的本來定義,但實際卻并不高效。更為高效的,其實還是我們所熟悉的那種“記憶模式”,即:可以通過一張包含從0到9,每個數字和數字之間的加法和的“巨大”的“表格”,來代替我們在傳統教學中,所要求學生熟練記住的那部分“知識”,然后,加法則演化成為了在這一表格中的一種檢索過程,這在實際的編程中,其是是一個非常常見的提高效率的策略,我們在后續的Scratch,甚至其他編程的學習實踐中,也會經常的碰到,即:
以空間換時間,用存儲來替代運算
此外,還有一點也要在這里聲明下,在以二進制為核心的計算機體系中,我們實際上是不會用這個方式來實現加法的,因此,這就僅僅是一個“正確”的演示,但卻足以說明,我們從一年級開始,花了不少時間和精力,來學習加法,本質上并不僅僅是在習得一個技能,也是在不斷的熟悉如何用一種非常機械化的方式,來按部就班的解決問題的方法。
不免稍微吐槽一下,現在的某些教育,天天在想著,如何讓小孩子更快的度過這個階段,因為覺得這個實在不夠“素質”,不夠“編程思維”,但究竟什么是“編程思維”?“編程思維”又僅僅是體現在上幾門計算機編程課,甚至是上一些看上去高大上的課程上么?我倒覺得未必,有時候,“編程思維”,可能就隱藏在這一次次的看似簡單的訓練之中。
編程到底難不難?
那么,編程究竟難不難呢?這里的答案,就恐怕并不能讓所有的“初學者”們感到滿意了,因為:
編程真的很難!
那么,編程又難在哪兒呢?
大家聽到最多的答案,可能會說是“算法”,也因為很多算法,確實的和數學密切相關,以至于很多人甚至會模糊編程和數學的界限,覺得編程 = 數學,將編程的難,等同于了數學的難。
數學之于編程,當然非常重要,要不然,我也不會把這一系列的課程,統一定名為:《游戲+數學+程序員=小學生也懂的Scratch》了。
但編程的難,卻不僅僅體現在了數學上,之所以選用數學,純粹是因為一些簡單的編程,所涉及到的相關數學背景知識,也比較簡單直接而已。事實上,如果我們要將背景知識這一項,也加進去,那么編程的難,幾乎會是全方位的:開發一個包含碰撞的游戲時,我們能會遇到“力學”的難;開發一個光的演示程序時,又可能會遇到“光學”的難,等等等等。
因此,我覺得,有必要在這里,對這個“難”,稍微的作下限制,并以此作為相關后續課程的基礎。在我看來,很多時候,編程本身的難,和我們學習任何一種語言,不管是古文,還是英語時,所感受到的難,是非常一致的,他主要體現在:
編程,自有其自身的范式和給定的軟硬件限定條件,因此,編程難就難在,我們經常要像一個戰士一樣,和這些范式以及限定條件進行戰斗!
這也導致了,在很多情況下,對于某些問題的表達和實現,哪怕你在“邏輯”上知道,應該怎么做,但在現實編程過程中,可能還是會覺得無從下手,有些,甚至需要通過一些“非常高級”的技巧去解決。
這實際上,也正是我的這一個系列的編程課程,所試圖真正需要向大家傳達的東西,即希望通過這樣的課程,讓所有學習者了解:
-
作為一種語言的Scratch,是怎樣來表達問題的,即他的編程范式是什么
-
當我們在開發中,遇到因為環境的限制所導致的問題時,我們是在當前環境所允許的前提下,挖掘出相應的解決方案的
現在來說這些,好像有點“虛幻”,就以市場上,如汗牛充棟般的Scratch教程中,幾乎都會在一開始所給出的一個程序為例吧。
這個程序很簡單,就是讓大家在舞臺(至于什么是舞臺等等概念,后面的課程會詳細講,這里就不展開了)上,放上一個角色,并且,循例的喊出:“你好,世界!”(當然,也可能是其他)
這有什么問題嗎?對于這樣的一個場景來說,當然沒問題。但是,如果你現在不是這樣的想法,而是希望像一般的文字冒險類的AVG游戲,或者一些MTV一樣,直接在舞臺上的某個區域,輸出你想要顯示的文字(比如,一些過場的文字),不想看起來很“Low”的,顯示什么氣泡,那我們又應該怎么做呢?
找遍Scratch所缺省提供的積木,我們只能非常遺憾的說一聲:
這個缺省真的沒有!
如果把這作為一個缺省環境所導致的限制,那么,在我們將這一功能構建出來的過程中,所需要的,就根本不是什么數學,不是什么算法,當然也不是什么物理,等等,而純粹,就是一種:
基于當前環境所提供元素下的一種組合和創造
比如像這樣:
這個當然不像想起來那么容易,而在后面的課程中,我們也會一而再再而三的遇到這些東西。但這就是編程,既是他的難度所在,也是他的樂趣所在。
最后,作為結語,我想引文史學家Douglas Bush曾說過的一句話,即:
在所有的課程中,現代教育的一個主要“罪行”是不要求學生們付出艱辛的努力。
在強調減負和快樂學習的今天,對于這樣的一句話,我深以為然。
課后習題
1、為什么在我們設計的加法中,按序的整數列表只包含0 ~ 18?
2、在引入方程化問題解決方案之前,盈虧問題一直是小學應用題的一個重點,也是難點。那么,你能嘗試整理出關于盈虧問題的機械化解決方案么?
3、嘗試第一次使用Scratch3(自己安裝桌面版本或者是直接使用在線模式均可),編程的任務當然就是:在舞臺上,顯示一個角色,然后,在單擊“開始”后,那個角色可以說出:“你好,Scratch”
想了解這3個問題的答案和更多的相關背景知識?關注并「私信」我,私信的內容是:s0,我已經準備好了,您還在等什么?
聲明:本文章由網友投稿作為教育分享用途,如有侵權原作者可通過郵件及時和我們聯系刪除
