兒童學(xué)編程一定要經(jīng)過(guò)圖形化編程這個(gè)階段嗎?

2017
2011
2017-9-6 17:03 原創(chuàng) · 圖片5

在我之前的日志《聊聊讓孩子學(xué)編程的那些事兒》中,我曾經(jīng)提到一個(gè)觀點(diǎn),就是以Scratch為代表的圖形化編程軟件不是學(xué)編程的必經(jīng)之路,如果有條件的話,最好能盡快進(jìn)入真正寫(xiě)代碼(coding)的階段,我家Vita哥哥也是跳過(guò)了Scratch,直接開(kāi)始用蘋(píng)果的Swift Playgrounds學(xué)coding了。后來(lái)有一些朋友問(wèn)我類(lèi)似的問(wèn)題,包括一位做網(wǎng)絡(luò)工程師的朋友(網(wǎng)絡(luò)工程師不是程序員,但他也懂編程),所以我想還是詳細(xì)整理一下我的觀點(diǎn)。

先說(shuō)說(shuō)Scratch

Scratch(官方網(wǎng)站)是由MIT(麻省理工學(xué)院)開(kāi)發(fā)的一套圖形化編程工具,它被看作是用于青少年編程教學(xué)的一個(gè)標(biāo)志性案例。Scratch基本上是長(zhǎng)這樣的:

所以Scratch是個(gè)啥呢?它大體上包括一個(gè)角色編輯器,一個(gè)背景編輯器,還有一個(gè)腳本編輯器。其中腳本編輯器就是我們“編程”的地方,里面把各種命令一塊塊積木一樣排列起來(lái),就形成了一個(gè)程序。

現(xiàn)在有很多兒童編程班都是用Scratch來(lái)上課,Scratch在美國(guó)以及其他國(guó)家也非常流行,我也用Scratch給別的孩子講過(guò)編程課,感覺(jué)也挺好玩的。Scratch主要有這樣一些優(yōu)點(diǎn):

  • 完全圖形化界面,內(nèi)置了很多角色和背景,孩子學(xué)完基本的命令之后就可以快速開(kāi)發(fā)出一個(gè)好玩的小游戲,特別有成就感。
  • 幾乎可以全部用鼠標(biāo)或者觸屏操作,基本不需要鍵盤(pán),對(duì)于不會(huì)打字的孩子很友好。
  • 有中文版,中文版里面那些命令也是中文的,對(duì)于不太懂英文的孩子很友好。
  • 具有充分的擴(kuò)展性,可以控制一些外部設(shè)備(比如單片機(jī)、樂(lè)高機(jī)器人),也被移植到很多嵌入式設(shè)備上。

再看看Swift Playgrounds

Swift Playgrounds是蘋(píng)果公司官方開(kāi)發(fā)的一款學(xué)習(xí)編程的App(僅限iPad,不支持iPhone),目的是培養(yǎng)青少年開(kāi)發(fā)者,當(dāng)然還有一個(gè)目的是推廣他們新推出的Swift編程語(yǔ)言。和Scratch不同,Swift是一種正經(jīng)的編程語(yǔ)言,和C++、Java、Python等主流編程語(yǔ)言屬于同一級(jí)別的,蘋(píng)果推出Swift的目的是為了替代一直以來(lái)用于iOS和Mac軟件開(kāi)發(fā)的Objective C語(yǔ)言,如果你要學(xué)習(xí)在iOS平臺(tái)上開(kāi)發(fā)App,那么Swift就是首選的編程語(yǔ)言。

Swift Playgrounds是長(zhǎng)這樣的:

看得出來(lái),Swift Playgrounds是真正在寫(xiě)代碼,和真正的程序員寫(xiě)代碼的方式是一模一樣的,不過(guò)跟Scratch相比,Swift Playgrounds顯然更多地用到了鍵盤(pán)打字,而且不可能用中文來(lái)寫(xiě)程序。

很明顯,寫(xiě)代碼對(duì)孩子來(lái)說(shuō)門(mén)檻更高,為啥我還要直接上hard難度呢?

首先,單純從這兩種形式上比較,我不認(rèn)為Scratch的圖形化編程相比直接coding來(lái)說(shuō)有多intuitive,相反,花花綠綠的各種塊塊讓我覺(jué)得好亂,抓不到重點(diǎn)。關(guān)鍵是,那些命令只是套了一個(gè)圖形的框,里面的描述不還是文字么,感覺(jué)有點(diǎn)像脫褲子放屁。其實(shí)Scratch之所以門(mén)檻低,我覺(jué)得主要不是在所謂的圖形化上,而是在于可以用中文可以少打字上。既然現(xiàn)在的小朋友都很早就學(xué)英文了,我覺(jué)得這不算什么問(wèn)題吧;至于打字,其實(shí)Swift Playgrounds有很多快速輔助提示,真正需要用鍵盤(pán)打的東西也并不多。

其次,真正的coding就是學(xué)習(xí)一門(mén)語(yǔ)言(programming language),它也有詞匯、語(yǔ)義和語(yǔ)法。語(yǔ)言是編程的一個(gè)重要部分,在描述一些復(fù)雜邏輯時(shí),編程語(yǔ)言能夠比圖形具有更強(qiáng)的描述力,特別是對(duì)數(shù)據(jù)結(jié)構(gòu)的描述,以及對(duì)于類(lèi)和對(duì)象的描述。我的網(wǎng)絡(luò)工程師朋友跟我說(shuō),他覺(jué)得編程就是一種思維方式,用什么形式去編程沒(méi)有那么重要,我不太贊同。思維方式固然是編程的重要部分,但語(yǔ)言是表達(dá)思維的載體,這句話不僅限于編程,我們?nèi)粘J褂玫恼Z(yǔ)言,也是表達(dá)思維的載體,你說(shuō)學(xué)會(huì)好好說(shuō)話重要不重要?我覺(jué)得很重要。

直接用編程語(yǔ)言編程,孩子必須得注意詞匯和語(yǔ)法的正確性。下面這張圖上,最后一句是有語(yǔ)法錯(cuò)誤的(這個(gè)函數(shù)沒(méi)定義),編譯器給出了一個(gè)紅點(diǎn)提示。此外,孩子還得注意大括號(hào)的左右匹配(特別費(fèi)神,哈哈),以及在適當(dāng)?shù)牡胤郊涌崭窈蛽Q行。這些東西在圖形化編程工具里面是不會(huì)遇到的,但我覺(jué)得這也是literacy的一個(gè)重要能力(不僅限于編程)。

引用著名計(jì)算機(jī)科學(xué)家、技術(shù)作家Paul Graham的一個(gè)觀點(diǎn):“編程語(yǔ)言是用來(lái)思考程序的,而不是用來(lái)表達(dá)一個(gè)你已經(jīng)想好的程序的。”這句話的意思是說(shuō),編程語(yǔ)言是思考的工具,而不是一種單純的表達(dá)形式,你不能指望用中文(或者英文)在腦子里思考一個(gè)程序,然后用編程語(yǔ)言把它表達(dá)出來(lái)。

相關(guān)圖片

也正是因?yàn)檫@一點(diǎn),我認(rèn)為從學(xué)習(xí)編程的早期就強(qiáng)調(diào)(或者說(shuō)至少不回避)編程的語(yǔ)言屬性是很重要的。各位家長(zhǎng)都不排斥讓孩子從小學(xué)外語(yǔ),那么也不應(yīng)該覺(jué)得讓孩子學(xué)編程語(yǔ)言就有多難,因?yàn)樗鼈儽举|(zhì)上是一回事。

另一個(gè)我堅(jiān)信孩子可以直接coding的原因是,我小時(shí)候也是差不多這么大開(kāi)始接觸編程的,那個(gè)時(shí)候哪里有圖形化的編程,連Windows都木有呢,都是Apple II兼容機(jī)上用BASIC語(yǔ)言寫(xiě)程序玩。那時(shí)候也不會(huì)英語(yǔ),什么if...then...else這種英文單詞也不會(huì)念的,就硬生生把拼寫(xiě)背下來(lái)了,現(xiàn)在想想也是很拼的。其實(shí)我家Vita哥哥也沒(méi)正經(jīng)學(xué)過(guò)英文,phonics也不會(huì),也是硬生生把單詞背出來(lái)了而已,跟我當(dāng)年是一個(gè)套路……

總結(jié)一下,我覺(jué)得Scratch這種圖形化編程,就好像自行車(chē)上的輔助輪,輔助輪可以給你一種很快就能上手的感覺(jué)(而且多半是假象),但它跟真正騎自行車(chē)還是有太多的差別。我不反對(duì)用Scratch,我認(rèn)為它是一種很好的教學(xué)工具,但我認(rèn)為在可能的情況下,讓孩子早點(diǎn)接觸真正的編程語(yǔ)言,也是非常值得考慮的一種選擇。


回應(yīng)5 舉報(bào)
贊13
收藏78
8年前
寫(xiě)的很好,說(shuō)到童年回憶引起共鳴了,不過(guò)我高中就沒(méi)再接觸編程了,只剩下競(jìng)賽的同學(xué)們還在努力耕耘。
8年前
florrie 寫(xiě)的很好,說(shuō)到童年回憶引起共鳴了,不過(guò)我高中就沒(méi)再接觸編程了,只剩下競(jìng)賽的同...
看來(lái)是同道中人??
7年前
我十歲就直接寫(xiě)c++了
7年前
原子彈714 我十歲就直接寫(xiě)c++了
燙燙燙屯屯屯
發(fā)布

推薦閱讀

周花卷
周花卷
2017
2011