孩子学编程,作为教育者该如何选择编程语言?
本文來自微信公眾號:芥末堆看教育(ID:jiemoedu),作者:少兒編程之家,編輯:吉吉
我最常被老師和家長所問到的一些問題是:我應(yīng)該選擇哪一種編程語言來教孩子編程呢?堅(jiān)持選擇像 Scratch 這樣的圖形化編程語言作為開端很重要嗎?應(yīng)該在什么年齡轉(zhuǎn)換到學(xué)習(xí)代碼編程呢?還有我應(yīng)該如何在 Python,Java,還有 JavaScript 之間選擇呢?
經(jīng)過將近 10 年,對成百上千個(gè)學(xué)生教授編程,我經(jīng)常出席各種會議,或?yàn)閯偨佑|計(jì)算機(jī)科學(xué)的老師舉辦講習(xí)班。許多老師都是第一次嘗試在他們學(xué)校里建立計(jì)算機(jī)科學(xué)課程,所以他們對于選擇編程語言的謹(jǐn)慎,是可以理解的。除了試圖找出最適合他們學(xué)生的東西外,教師講授的內(nèi)容還必須在授課舒適度,以及校園、學(xué)生、家長四者之間取得平衡。
那“合適”的編程語言,真的存在嗎?
編程語言不是重點(diǎn),編程中的概念才是!
就像你猜的那樣,答案自然是否定的。編程語言不是重點(diǎn),但教導(dǎo)孩子如何利用編程去解決問題才是重點(diǎn)。理解如何一步一步地建立算法,從而搞定作業(yè),再想出最佳的思路來編寫代碼,這可能才是最困難的部分。
學(xué)習(xí)相當(dāng)少量的關(guān)鍵詞和特定編程語言的簡單語法很簡單——比學(xué)習(xí)一門真正的口語語言要容易得多!相比而言,為了獨(dú)立完成編程,必須了解編程中變量、列表、條件、循環(huán),還有函數(shù)中的基本概念,然后才能知道何時(shí),何地,如何使用它們將算法轉(zhuǎn)換為代碼。
一個(gè)學(xué)生一旦掌握了以上這些概念,并且以一種語言編程成功,這時(shí)再用另一種語言來編程就不難了。轉(zhuǎn)換編程語言并非打個(gè)響指一樣容易,但確實(shí)可以做到。
話說回來,掌握的第一種編程語言會改變將來思考和編程的方式嗎?學(xué)習(xí)當(dāng)下行業(yè)里最流行的語言重要嗎?
2018 年美國熱門編程語言 Top10【圖源: YoungWonks】
編程語言變化不定,你終將適應(yīng)
編程語言的流行度會變,沒有人敢保證我們今天教會孩子的東西,在他們進(jìn)入職場的時(shí)候還適用。我學(xué)習(xí)的第一門編程語言是 Pascal(對,你可能得百度一下)。
多年以來,我使用過不同的設(shè)備來學(xué)習(xí)不同的語言——其中不乏一些晦澀難懂的。在作為教育工作者的這 10 年里,我學(xué)習(xí)了 Logo,Scratch,Processing,JavaScript,Arduino 和 Python 的一大堆知識,好讓我能在課堂上大展拳腳。
6 年前,我建議孩子們從學(xué)習(xí) Logo 開始,一門最早應(yīng)用于計(jì)算機(jī)科學(xué)教育當(dāng)中的編程語言,而我相信,它就算放在今天,也依然是一個(gè)頗具影響力的選項(xiàng)。劃重點(diǎn):如果你能教會孩子們基本的編程概念,他們也能在一門語言上花上足夠的時(shí)間,他們理論上就已具備了日后轉(zhuǎn)換語言的基本條件。
這還有一條經(jīng)常提到的問題:我們總是應(yīng)該優(yōu)先教會孩子圖形化編程,而非代碼編程嗎?
圖形還是代碼?
差不多 10 年前,在一節(jié)六年級數(shù)字設(shè)計(jì)課上,我開始使用 Scratch,一門也許是最流行也是對孩子最友好的圖形化編程語言。我隨后將這門編程語言拓展到所有年級。我對不久前剛發(fā)布的 Scratch 3.0 中新功能感到興奮——尤其是文字轉(zhuǎn)語音和文字翻譯這兩個(gè)拓展功能。
圖形化編程的出現(xiàn),極大減輕了青少年對編程的挫敗感,諸如漏掉一個(gè)逗號或者忘了把右括號補(bǔ)上之類,反而讓他們留有更多時(shí)間來理解當(dāng)中的概念。另外,Scratch 對于創(chuàng)新的鼓勵(lì)以及在圖像創(chuàng)作、聲音編輯、分享和項(xiàng)目混制方面的功能優(yōu)化,讓它在成為各年齡段孩子首選編程語言上變得理所當(dāng)然。較之被稱為“編程語言”,它更希望被定位為一個(gè)繪圖工具,一個(gè)動畫制作工具,或是一個(gè)故事與游戲創(chuàng)作工具,這些元素綜合起來,讓 Scratch 變得更友好而不唬人。
我發(fā)現(xiàn)在使用 Scratch 幾年后,學(xué)生更愿意去嘗試代碼編程,因?yàn)樗麄冇X得那意味著長大,只有“真正的編程”才會被行業(yè)采納。我還見證過語言的轉(zhuǎn)換中,有時(shí)只需要給孩子們回顧一下例如變量和循環(huán)的概念。
我的中學(xué)學(xué)生們愿意為學(xué)習(xí)代碼編程付出額外的努力,通常他們會放慢速度,以保證在處理 Python,JavaScript,Arduino 和 Processing 挑戰(zhàn)時(shí)不犯下拼寫和語法錯(cuò)誤。不過,學(xué)生一旦能夠通過剛開始時(shí)“我得看著點(diǎn)有沒有打錯(cuò)字”階段,他們常會愛上代碼編程的靈活性和可塑性,尤其是當(dāng)他們發(fā)現(xiàn)復(fù)制、粘貼,協(xié)作和修改在代碼編程中有多方便時(shí),偶會發(fā)出“也沒想象中那么糟嘛”類似的感慨。
每年夏天,我在 Foothill College KCI 計(jì)算機(jī)科學(xué)合作課程上,都會分別用 Scratch 和 Python 兩種語言,為教師展示同一個(gè)項(xiàng)目。他們愛看把兩種語言放一起比較。我們甚至?xí)詡未a,或者叫流程圖作為開始,把完整算法在開始編程前先寫下來。
這是一個(gè)檢查密碼的迷你項(xiàng)目,它在流程圖,Scratch,和 Python 中,分別長這樣:
密碼檢查器流程圖
用 Scratch 展示的密碼檢查器
用 Python 展示的密碼檢查器
我課堂中的老師和學(xué)生在沒接觸過圖形化編程的前提下,都能輕松學(xué)習(xí) Python,這說明好項(xiàng)目在前,從代碼編程開始學(xué)習(xí)同樣行得通。
是什么讓一門編程語言,變成適合孩子學(xué)習(xí)的編程語言?選擇一門語言的標(biāo)準(zhǔn)是什么?
雖然知道教授編程,更多是關(guān)于它的概念,你也知道不需要再為作出完美的第一次選擇而慌亂,但問題依然沒有得到解答:什么因素讓一門編程語言成為孩子學(xué)習(xí)編程的好選擇呢?通常由以下幾點(diǎn)來衡量:速度,應(yīng)用,可用的庫,行業(yè)支持。下面我再來說說我認(rèn)為重要的幾個(gè)標(biāo)準(zhǔn)。
它有強(qiáng)大的教育者社區(qū)嗎?
我頻繁提到 Scratch 和 Python 的其中一個(gè)原因是他們都有附屬的線上教育者社區(qū)。他們擁有如此龐大社區(qū),背后的原因是他們總是以免費(fèi)的形式,開放的姿態(tài),接納來自世界每個(gè)角落的用戶。擁有龐大的社區(qū),意味著你能找到更多資源,諸如項(xiàng)目、教案、教程、視頻和書籍一系列為課堂而設(shè)的材料。
學(xué)起來好上手嗎?
有許多代碼式編程語言可供選擇,一些在當(dāng)今的科技行業(yè)中更吃香,一些有特別的功能方便他們創(chuàng)造特定的項(xiàng)目。雖然說許多高中生最終不得不為通過計(jì)算機(jī)科學(xué)進(jìn)階入學(xué)考試(AP Computer Science A)而學(xué)習(xí) Java,但這一定不是最簡單的語言。Python 目前看起來更簡單,并且憑借著它簡潔直白的邏輯,在教育界中越來越受歡迎。在我將 Python 用作計(jì)算機(jī)科學(xué)選修課語言 3 年后,我依舊會被它完成工作的效率,以及中學(xué)生用它編寫代碼的速度所震驚。受到 Python 在教育孩子編程方面的啟發(fā),我花時(shí)間寫了一本關(guān)于它的書。
它背后的設(shè)計(jì)理念是什么?它是為這個(gè)年齡段的用戶所設(shè)計(jì)的嗎?
為用戶設(shè)計(jì)適合其年齡的工具很重要,編程語言可以根據(jù)它不同年齡段的用戶展示或者隱藏相應(yīng)的功能。Scratch,扎根在培養(yǎng)孩子的創(chuàng)造力表達(dá)上,刻意將一些功能性代碼以封裝的形式呈現(xiàn)出來。ScratchJr. 是為還在識字的孩子而設(shè)計(jì)的,所以它沒有變量和條件這些對這個(gè)年齡段孩子來說太難理解的功能。Python 為不同類型的項(xiàng)目提供擴(kuò)展支持,但這些額外的擴(kuò)展都需要你親手把它們添加進(jìn)來,這樣它們就不會在你不需要的時(shí)候出來干擾視線。為更大的學(xué)生所用語言一定要含括對 debugging 的支持,基本操作了。如果講授“面向?qū)ο?rdquo;編程是重點(diǎn)環(huán)節(jié),那使用 Java 教學(xué)就是一個(gè)好選擇。
容易安裝嗎?能跨平臺運(yùn)行嗎?
這些都是要記在心里的東西,尤其當(dāng)學(xué)生需要回家編程時(shí)顯得更為重要。一些語言只能在特定環(huán)境中工作,譬如 Apple 的 Swift 編程語言。如果學(xué)生在 Chromebook 上編程,那么有一個(gè)穩(wěn)定的,基于瀏覽器的工具就更加關(guān)鍵。需要考慮的另一個(gè)問題:這個(gè)語言能讓學(xué)生回到家中也免費(fèi)使用嗎?還是有一些隱藏的擴(kuò)展需要付費(fèi)方才解鎖?
能否輕松地在社區(qū)中分享項(xiàng)目?
Scratch 背后其中一個(gè)基本元素就是社區(qū),讓孩子們互相分享,相互學(xué)習(xí)。這個(gè)社區(qū)對教師們來說也同樣重要。不過,分享也要有計(jì)劃:何時(shí)分享,允許學(xué)生分享多少內(nèi)容,評論和修改他人的作品等。也許把 JavaScript 作為第一門代碼式編程語言進(jìn)行學(xué)習(xí)會讓你大皺眉頭,雖在易用性和上手難度上都不如 Python,但它的優(yōu)勢在于它是屬于網(wǎng)絡(luò)的腳本語言,只要把項(xiàng)目發(fā)布到校園網(wǎng)服務(wù)器上就能展示給大家看,方便又快捷。
撐起 Scratch 的一個(gè)重要基本元素——社區(qū)
選擇編程語言時(shí)要考慮的方面還有很多。這個(gè)項(xiàng)目能用到什么語言?不同的語言可能支持不同類型的項(xiàng)目。舉例來說,Processing 和 P5.js 讓制作動畫變得更輕松;Python 把復(fù)雜的數(shù)據(jù)分析甚至是機(jī)器學(xué)習(xí)變?yōu)榭赡堋@蠋焸円部赡芨鼉A向一個(gè)強(qiáng)大的課堂工具,便于管理作業(yè)和批改成績,尤其對小組項(xiàng)目而言。
一個(gè)最經(jīng)常被問到的問題是:“這門編程語言現(xiàn)在流行嗎?”流行度對于學(xué)生選擇學(xué)習(xí)一門編程語言來說有很深影響,也不難理解家長希望孩子能掌握對未來職業(yè)有利的技能那種心情。無論如何,教授良好的編程習(xí)慣勝過教授流行編程語言。
雖然我們可以強(qiáng)調(diào)要找到“完美”的編程語言,但我們不要忘記,最終的目標(biāo)是讓學(xué)生探索基本的編程概念。他們或許在你的課后就不再插手編程,你教的語言在他們長大后也可能變得過時(shí),重要的是,教授編程將會幫助學(xué)生理解計(jì)算機(jī)是如何解決問題,收獲批判性思維技能,并希望他們有朝一日洞察到,用代碼創(chuàng)造東西的樂趣。
總結(jié)
以上是生活随笔為你收集整理的孩子学编程,作为教育者该如何选择编程语言?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比特币日内大涨800美元! 重回5000
- 下一篇: 剑桥大学新研究,用AI算法“监听”手机打