最新消息:

教孩子程序:我们应该使用哪一个程序语言?

资讯 少儿编程 1890浏览 0评论

教孩子程序:我们应该使用哪一个程序语言?

我最常被老师和家长问到的问题是:「我们该使用哪个程序语言来教孩子?」「用积木式语言,像是 Scratch 来开始学习是必要的吗?」,「他们几岁时,适合切换到文字式的程序语言?」,「然后要如何在 PythonJava 还是 JavaScript 中选择?」

具备十年以上与教过超过百位学生写程序的经验,我经常出席各大研讨会或对刚接触信息科学的老师主持工作坊。许多老师都正尝试在他们的学校内建立计算机科学的课程,而选择哪种程序语言就是他们正在苦思的问题。除了要思考哪个对他们的学生最有用,老师还必须衡量此语言是否容易教授,并能让校内的行政单位、家长和学生都认同这是必须学习的。

说到底,是否真的有那个「对的程序语言」适合开始呢?

程序语言不重要,程序的观念才是主轴!

你可以猜想,答案是:「没有的!」因为真正重要的不是哪个语言,而是如何教学生透过程序代码去解决问题。包含如何写出一个算法 (一步一步的指令) 去解决问题,和用程序代码将最佳解决方法写出来,这才是最困难的部分。

“程序语言推陈出新 而你总要适应它”

Sheena Vaidyanathan

学习相对少的关键词和某个程序语言的语法是不难的 许多甚至比实际人类沟通的语言还容易!相比之下,要写出一个程序,必须要理解的程序观念不外乎 变量、数组(列表)、条件式、循环和函式(Functions),也就是你必须知道这些概念在什么时候,在哪里,需要被你使用在算法转换到的「程序」中。

一旦学生抓住这个大方向并可以使用某个程序语言来成功写出程序,对他来说,另一个程序语言就不会是很困难的事。转换使用其他语言不能立即上手,但是它是可以被做到的。

然而,第一个程序语言是否会影响你未来如何思考问题与写程序?是不是学习当今产业间最火红的程序语言是重要的?

程序语言推陈出新 而你总要适应它

受欢迎的程序语言会变,也无法保证我们现在教给孩子的,会是他们往后进入职场中会用到的。我的第一个程序语言是 Pascal  (是的,你现在可能正在查它是什么)

经过几年,我也在不同的机器平台上学习不同的程序语言 有些甚至不知道如何解释。而在任教的这十年中,我也学了不少像是 LogoScratchprocessingJavaScriptArduino Python 用在我的教学上。

六年前,我建议那时的孩子从 Logo 开始学习计算机科学的基础,我仍旧坚信它仍是现今学习的选择之一。这里有个重点:「如果你可以教孩子有关程序的基础概念,并让他们有足够的时间在某个程序语言上学习编写,他们应该能具备将来需要转换不同程序语言的基础能力。」

但也有另一个问题出现:「我们需要让所有的孩子都从积木式程序语言,而非文字式语言开始吗?」

「积木式」或「文字式」?

我是从使用 Scratch 开始,或许这个已是现在最受欢迎,且对孩子友善学习的积木式程序语言了。在十年前,在一个针对小学六年级的数字设计课程,我就非常喜欢使用它在任何年级中。我非常兴奋可以使用刚推出的 Scratch 3.0 新功能 特别是延伸功能,像是支持文字转语音和语言翻译等。

积木式程序语言能先降低对年纪小或初阶学习者的挫折,像是无须担忧少了一个分号或忘了加上结束的括号,有多余的时间来专注在了解观念上。除此之外,Scratch 的重点是创造力,并能简单创作图像,剪辑音乐,分享和重制(Remix)他人项目,让几乎所有年龄的人都可以上手。它的定位是一个能去创作艺术、动画、故事和游戏的工具,而不仅是一个「程序」语言而已,这也是为何 Scratch 是如此受欢迎且令人推崇。

“真正重要的不是哪个语言,而是如何教学生透过程序代码去解决问题”

Sheena Vaidyanathan

我发现使用 Scratch 几年后,学生会因为“长大了”和想在某个领域中“真正使用程序”,进而想学习文字式语言;初期他们开始学习程序语言像是 PythonJavaScriptArduino processing,经常需要时间去注意拼字和语法。但当他们过了那个“我需要逐字查看我打的字”的阶段,他们会开始欣赏文字式程序语言的弹性与强大之处,特别是他们找到程序代码在项目中,是能很简单的被复制、贴上、修改和协作。

在我每年暑假授课的 Foothill 大学 KGI Computer Science Crash 速成课程,我会提供在同一个项目下,Scratch Python 这两个语言是如何撰写的。学生们喜欢交叉比对观察这两者的同异,我们也可以从伪码(pseudocode或是流程图(Flowchart开始看 这是一个在实际写程序前列出算法的方法。下方就是使用像是流程图(Flowchart),以及 Scratch Python 来完成一个用来确定密码输入的小型项目。

 

教孩子程序:我们应该使用哪一个程序语言?

密码确认的流程图

 

教孩子程序:我们应该使用哪一个程序语言?

一样的密码确认功能,在 Scratch

 

教孩子程序:我们应该使用哪一个程序语言?

一样的密码确认功能,在 Python

没有学过积木式语言的老师和学生,都能在我的班上学会 Python。证明运用适当的项目,从文字式语言学习也是可以的。

此语言是适合教孩子写程序的语言该如何判断?有任何准则来选择语言吗?

虽然我们知道教程序应着重在观念,且不需太担心应该选择哪个语言,但问题仍在:「到底要怎么知道这个语言是适合让孩子学习的?」。即便一个程序语言有很多面向的评估,像是应用的广度、函式库的支持性、产业的使用度 我仍有些重要考虑的准则。

是否有强大的教学社群?

我一直提及 Scratch Python 的原因之一是它们能促使在教室里的这群老师去运用。这两个语言背后有着很强大的社群支持,是基于完全免费、开放并欢迎全世界各地的使用者来使用。拥有一个强大的社群表示你可以找到很多资源,像是针对教室内的教学上提供项目、教学计划、学习教材、影片和书籍。这就像是你走入一个教育论坛去找到一个议程来引领你。

“培养好的写程序习惯是学习一个热门程序的不二法门”

Sheena Vaidyanathan

是否够容易学习?

市面上有许多文字式语言可以选择 有些在现在的产业中很受欢迎,有些语言则有特殊的特性在创造特定项目。当许多中学学生都在APCS(编按:这里是指美国的高中先修计算机科学课程,与目前台湾的大学程序设计先修检测(APCS)不尽相同。)课程中使用Java,它不见得是最容易开始学习的。Python 至今仍是较容易学习且在教育圈越来越盛行,就是因为它真的很简单。我在计算机信息选修课使用了Python进行教学三年后,我仍旧因为它只用几行程序就能实作出什么,以及Python的确让我中学学生很快上手而惊艳。看到 Python在教导孩子写程序上的成效,我甚至花了时间撰写了一本关于它的书。

这背后有什么设计哲学?是为了这个年龄族群设计的吗?

提供适龄学习是很重要的,且程序语言能根据不同目标年龄族群来隐藏(保留)或是呈现其功能。 Scratch,在使用上的核心哲学就是创造力的表达,所以刻意简化一些在实际程序语言应该有的结构。 Scratch Jr. 版本则是设计给正在培养阅读能力的孩子,因此没有包含变量(Variable)或像条件式Conditionals)这些会让此年纪的他们较难理解的观念。 Python 提供额外功能来支持不同类型的项目,但这些都是需要学会模块使用后才会增加,所以你一开始不会知道,直到你需要使用到这个观念。对于更高年纪的学生使用语言在复杂的程序中,绝对需要一个基础的技能,就是「除错(debugging)」。若教“面向对象” 的程序是必要的,那使用Java 或许不是个不恰当的选择。

它是否够简易安装,且是否能在跨平台上运作

有些事需要谨记在心里,特别如果是学生会持续在家写程序。有些程序语言只能在特定的环境下才能执行,像是苹果计算机(Apple)所使用的 Swift 程序语言(编按:仅能在苹果相关计算机中执行)。若学生是使用 Chromebooks,则需要一个稳定,以浏览器为主的工具。

另外需要考虑:「这个语言是否是免费,让学生即使在家也可使用;或是它有一些隐藏功能是需要付费才能使用?」

是否便于在社群中分享?

Scratch 其中一个基础概念就是社群,以及让孩子相互分享与学习。这个社群也对老师非常有帮助。然后,分享也需要有些规划:「孩子何时与需要分享、提供评论、重制和重新赋予他人作品新的意义。」当 JavaScript 这个文字式语言可能不见得像 Python 来得如此容易学习而有些相形失色外,它却有能在网页上快速执行的优势。写一个项目就只是把它放到学校的网页服务器般简单。

其实在选择程序语言有很多考虑点。是要做什么类型的项目?不同的语言对不同类型的项目有不一样的支持与扩充特性。举例来说,Processing P5.js 主要适合用在多媒体相关和创造艺术与动画Python 则是适合处理复杂的数据分析甚至机器学习相关项目。老师在课程中,可能也会想要能便于管理作业与分数的工具,特别有分组项目时。

经常提到的问题是:「“这个语言在现在是否受到欢迎?”」受欢迎的程度某方面是鼓励学生来学这门课的因素,而我也理解家长们会希望老师以当今工作中需求的技能来作为教授。然而,培养好的写程序习惯是学习一个热门程序的不二法门。

当我们正苦恼如何找到“最佳”的程序语言来开始学习时,我们别忘记最终的目标是要让学生去探索程序的基础概念。他们将来离开你的课后有可能不再会写程序,而且你教的语言可能在未来也不再是主流。所以教程序最重要的是将来会帮助学生理解计算机是如何解决问题,培养批判性思考的技能(编按:批判性思考也就是 Critical Thinking,意思是对于事物充满好奇、诘问、分析与总结等解决问题的步骤与能力)—希望能让他们了解用程序来做出一个东西是多么有趣。

 

文翻译自作者 Sheena Vaidyanathan @sheena1010 Teaching Coding toKids: What Programming Language Should We Use?

并由Joannie Huang翻译分享在其博客上。

原文链接

https://www.edsurge.com/news/2019-03-11-teaching-coding-to-kids-what-programming-language-should-we-use

Sheena Vaidyanathan (@sheena1010) EdSurge 专栏作家并在加州 LosAltos School District教授中学学生计算机科学相关课程。

转自公众号:
易心Microbit编程

您必须 登录 才能发表评论!