每日最新頭條.有趣資訊

孩子學編程,作為教育者該如何選擇編程語言?

我最常被老師和家長所問到的一些問題是:我應該選擇哪一種編程語言來教孩子編程呢?堅持選擇像Scratch這樣的圖形化編程語言作為開端很重要嗎?應該在什麽年齡轉換到學習代碼編程呢?還有我應該如何在Python,Java,還有JavaScript之間選擇呢?

經過將近10年,對成百上千個學生教授編程,我經常出席各種會議,或為剛接觸計算機科學的老師舉辦講習班。許多老師都是第一次嘗試在他們學校裡建立計算機科學課程,所以他們對於選擇編程語言的謹慎,是可以理解的。除了試圖找出最適合他們學生的東西外,教師講授的內容還必須在授課舒適度,以及校園、學生、家長四者之間取得平衡。

那“合適”的編程語言,真的存在嗎?

編程語言不是重點,編程中的概念才是!

就像你猜的那樣,答案自然是否定的。編程語言不是重點,但教導孩子如何利用編程去解決問題才是重點。理解如何一步一步地建立算法,從而搞定作業,再想出最佳的思路來編寫代碼,這可能才是最困難的部分。

學習相當少量的關鍵詞和特定編程語言的簡單語法很簡單——比學習一門真正的口語語言要容易得多!相比而言,為了獨立完成編程,必須了解編程中變量、列表、條件、循環,還有函數中的基本概念,然後才能知道何時,何地,如何使用它們將算法轉換為代碼。

一個學生一旦掌握了以上這些概念,並且以一種語言編程成功,這時再用另一種語言來編程就不難了。轉換編程語言並非打個響指一樣容易,但確實可以做到。

話說回來,掌握的第一種編程語言會改變將來思考和編程的方式嗎?學習當下行業裡最流行的語言重要嗎?

2018年美國熱門編程語言Top10【圖源: YoungWonks】編程語言變化不定,你終將適應。

編程語言的流行度會變,沒有人敢保證我們今天教會孩子的東西,在他們進入職場的時候還適用。我學習的第一門編程語言是Pascal(對,你可能得百度一下)。

多年以來,我使用過不同的設備來學習不同的語言——其中不乏一些晦澀難懂的。在作為教育工作者的這10年裡,我學習了Logo,Scratch,Processing,JavaScript,Arduino和Python的一大堆知識,好讓我能在課堂上大展拳腳。

6年前,我建議孩子們從學習Logo開始,一門最早應用於計算機科學教育當中的編程語言,而我相信,它就算放在今天,也依然是一個頗具影響力的選項。劃重點:如果你能教會孩子們基本的編程概念,他們也能在一門語言上花上足夠的時間,他們理論上就已具備了日後轉換語言的基本條件。

這還有一條經常提到的問題:我們總是應該優先教會孩子圖形化編程,而非代碼編程嗎?

圖形還是代碼?

差不多10年前,在一節六年級數字設計課上,我開始使用Scratch,一門也許是最流行也是對孩子最友好的圖形化編程語言。我隨後將這門編程語言拓展到所有年級。我對不久前剛發布的Scratch 3.0中新功能感到興奮——尤其是文字轉語音和文字翻譯這兩個拓展功能。

圖形化編程的出現,極大減輕了青少年對編程的挫敗感,諸如漏掉一個逗號或者忘了把右括號補上之類,反而讓他們留有更多時間來理解當中的概念。另外,Scratch對於創新的鼓勵以及在圖像創作、聲音編輯、分享和項目混製方面的功能優化,讓它在成為各年齡段孩子首選編程語言上變得理所當然。較之被稱為“編程語言”,它更希望被定位為一個繪圖工具,一個動畫製作工具,或是一個故事與遊戲創作工具,這些元素綜合起來,讓Scratch變得更友好而不唬人。

我發現在使用Scratch幾年後,學生更願意去嘗試代碼編程,因為他們覺得那意味著長大,只有“真正的編程”才會被行業采納。我還見證過語言的轉換中,有時只需要給孩子們回顧一下例如變量和循環的概念。

我的中學學生們願意為學習代碼編程付出額外的努力,通常他們會放慢速度,以保證在處理Python,JavaScript,Arduino和Processing挑戰時不犯下拚寫和語法錯誤。不過,學生一旦能夠通過剛開始時“我得看著點有沒有打錯字”階段,他們常會愛上代碼編程的靈活性和可塑性,尤其是當他們發現複製、粘貼,協作和修改在代碼編程中有多方便時,偶會發出“也沒想象中那麽糟嘛”類似的感慨。

每年夏天,我在Foothill College KCI計算機科學合作課程上,都會分別用Scratch和Python兩種語言,為教師展示同一個項目。他們愛看把兩種語言放一起比較。我們甚至會以偽代碼,或者叫流程圖作為開始,把完整算法在開始編程前先寫下來。

這是一個檢查密碼的迷你項目,它在流程圖,Scratch,和Python中,分別長這樣:

密碼檢查器流程圖

用Scratch展示的密碼檢查器

用Python展示的密碼檢查器

我課堂中的老師和學生在沒接觸過圖形化編程的前提下,都能輕鬆學習Python,這說明好項目在前,從代碼編程開始學習同樣行得通。

是什麽讓一門編程語言,變成適合孩子學習的編程語言?選擇一門語言的標準是什麽?

雖然知道教授編程,更多是關於它的概念,你也知道不需要再為作出完美的第一次選擇而慌亂,但問題依然沒有得到解答:什麽因素讓一門編程語言成為孩子學習編程的好選擇呢?通常由以下幾點來衡量:速度,應用,可用的庫,行業支持。下面我再來說說我認為重要的幾個標準。

它有強大的教育者社區嗎?

我頻繁提到Scratch和Python的其中一個原因是他們都有附屬的線上教育者社區。他們擁有如此龐大社區,背後的原因是他們總是以免費的形式,開放的姿態,接納來自世界每個角落的用戶。擁有龐大的社區,意味著你能找到更多資源,諸如項目、教案、教程、視頻和書籍一系列為課堂而設的材料。

學起來好上手嗎?

有許多代碼式編程語言可供選擇,一些在當今的科技行業中更吃香,一些有特別的功能方便他們創造特定的項目。雖然說許多高中生最終不得不為通過計算機科學進階入學考試(AP Computer Science A)而學習Java,但這一定不是最簡單的語言。Python目前看起來更簡單,並且憑借著它簡潔直白的邏輯,在教育界中越來越受歡迎。在我將Python用作計算機科學選修課語言3年後,我依舊會被它完成工作的效率,以及中學生用它編寫代碼的速度所震驚。受到Python在教育孩子編程方面的啟發,我花時間寫了一本關於它的書。

它背後的設計理念是什麽?它是為這個年齡段的用戶所設計的嗎?

為用戶設計適合其年齡的工具很重要,編程語言可以根據它不同年齡段的用戶展示或者隱藏相應的功能。Scratch,扎根在培養孩子的創造力表達上,刻意將一些功能性代碼以封裝的形式呈現出來。ScratchJr.是為還在識字的孩子而設計的,所以它沒有變量和條件這些對這個年齡段孩子來說太難理解的功能。Python為不同類型的項目提供擴展支持,但這些額外的擴展都需要你親手把它們添加進來,這樣它們就不會在你不需要的時候出來干擾視線。為更大的學生所用語言一定要含括對debugging的支持,基本操作了。如果講授“面向對象”編程是重點環節,那使用Java教學就是一個好選擇。

容易安裝嗎?能跨平台運行嗎?

這些都是要記在心裡的東西,尤其當學生需要回家編程時顯得更為重要。一些語言只能在特定環境中工作,譬如Apple的Swift編程語言。如果學生在Chromebook上編程,那麽有一個穩定的,基於瀏覽器的工具就更加關鍵。需要考慮的另一個問題:這個語言能讓學生回到家中也免費使用嗎?還是有一些隱藏的擴展需要付費方才解鎖?

能否輕鬆地在社區中分享項目?

Scratch背後其中一個基本元素就是社區,讓孩子們互相分享,相互學習。這個社區對教師們來說也同樣重要。不過,分享也要有計劃:何時分享,允許學生分享多少內容,評論和修改他人的作品等。也許把JavaScript作為第一門代碼式編程語言進行學習會讓你大皺眉頭,雖在易用性和上手難度上都不如Python,但它的優勢在於它是屬於網絡的腳本語言,只要把項目發布到校園網伺服器上就能展示給大家看,方便又快捷。

撐起Scratch的一個重要基本元素——社區

選擇編程語言時要考慮的方面還有很多。這個項目能用到什麽語言?不同的語言可能支持不同類型的項目。舉例來說,Processing和P5.js讓製作動畫變得更輕鬆;Python把複雜的數據分析甚至是機器學習變為可能。老師們也可能更傾向一個強大的課堂工具,便於管理作業和批改成績,尤其對小組項目而言。

一個最經常被問到的問題是:“這門編程語言現在流行嗎?”流行度對於學生選擇學習一門編程語言來說有很深影響,也不難理解家長希望孩子能掌握對未來職業有利的技能那種心情。無論如何,教授良好的編程習慣勝過教授流行編程語言。

雖然我們可以強調要找到“完美”的編程語言,但我們不要忘記,最終的目標是讓學生探索基本的編程概念。他們或許在你的課後就不再插手編程,你教的語言在他們長大後也可能變得過時,重要的是,教授編程將會幫助學生理解計算機是如何解決問題,收獲批判性思維技能,並希望他們有朝一日洞察到,用代碼創造東西的樂趣。

本文來自於投稿,不代表芥末堆觀點,原文於2019年3月11日發表於EdSurge,作者:Sheena Vaidyanathan,翻譯:Ken。

獲得更多的PTT最新消息
按讚加入粉絲團