教儿童编程:我们应该使用什么语言?

硅谷密探 2019-04-19 17:53:17

更多精彩,敬请关注硅谷洞察官方网站(http://www.svinsight.com)

我从老师和家长得到的一个最常见的问题是:我们应该用什么语言来教孩子编程?一直从Scratch这种基于块的语言入门很重要吗?孩子们应该在什么年龄过渡到基于文本的语言?并且如何在Python、Java或者JavaScript之间进行抉择呢?

我在近十年已经给数百名学生教授了编程课程,我经常出席会议或者为刚接触计算机科学的教师办讲习班。很多老师是第一次尝试在他们的学校建立一个CS项目,所以不难理解为什么他们担心选择哪种编程语言。除了尝试找到对学生最有利的编程语言之外,教师还必须在教师擅长的教学内容与管理者、家长和学生应该学习的内容之间取得平衡。

那么,有没有一种“正确”的编程语言可以入门呢?

编程的语言不重要,重要的是编程的思想!

正如你所想,答案是否定的(没有“正确”的入门编程语言)!因为,重要的不是编程语言,而是如何教学生用代码解决问题。理解如何创造一个算法(一步一步的指令)来处理任务,并想出用代码编写该程序的最好方法,可能是最困难的部分。

原因是,学习一种特定编程语言的极少关键字和简单语法很容易,比学习一种实际的、口语的人类语言要容易得多!

相反,为了独立编程,必须了解编程中的基本概念,如变量、列表、条件、循环和函数等,而且知道在何时、何处以及如何使用它们用来将你的算法转为程序代码。如果一个学生一旦掌握了那些基本概念并使用一种程序语言成功编程了一段时间,那么用另一种语言编程就没有那么困难了。

然而,学习的第一种编程语言是否会改变你在未来思考和编程的方式呢?学习当今业界最流行的语言很重要吗?

编程语言此消彼长,你终会适应。

编程语言受欢迎的程度正在改变,我们不能保证现在教孩子们的编程语言在他们进入就业市场时仍然被使用。

我的第一个编程语言是Pascal(是的,你可能需要现在查一下它了)但是多年来,我学会了在不同机器上用不同的编程语言——一些晦涩难懂的就不提了。

在近十年作为一名教育工作者,我学习了足够的Logo、Scratch、Provessing、JavaScript、Arduino和Python,以便在我的课堂上将它们用作编程教学语言。6年前,我建议孩子们从Logo这种最早的CS教育语言开始学习,而且我现在仍然认为它是一个强有力的选择。

下面是最重要的部分:如果你能教孩子最基本的编程概念,而且他们花费了足够的时间用一种语言编程,那么他们应该已经培养了一种可以在未来有需要时更换编程语言的基础技能。

还有一个经常出现的问题:我们需要所有的孩子从基于块的编程语言开始,而不是基于文本的编程语言开始吗?

基于块,还是基于文本?

大概10年前,在为六年级学生开设的数字设计课上,我开始使用Scratch,这可能是最流行的、对孩子最友好的基于块的语言,而且我仍然喜欢在各个年级继续使用它。同时,我很兴奋能够使用Scratch3.0刚刚发布的新功能,尤其是支持文本转语言和语言翻译的扩展。

基于块的编程消除了许多年轻程序员们的许多挫折,比如缺少逗号或忘记以括号结尾,从而留下更多的时间来集中注意力理解概念。

此外,Scratch专注于创造性和易于创造图形、编辑声音、共享和混合项目,使其成为适合所有年龄的一种完美的第一编程语言。它的定位是一种创造艺术、动画、故事和游戏的工具,而不是一种“编程”语言,这种品牌理念让Scratch更受欢迎、不那么吓人。

重要的不是语言,而是如何教学生使用代码解决问题。

我发现,在使用Scratch几年之后,学生想去学基于文本的编程,因为他们认为“成年人”和在业界“真正的”编程是相关联的。我也看到,有时只是编程语言上的轻微改变,就需要复习回顾像变量和循环之类的概念。

但是,我的中学学生更愿意在学习基于文本的编程语言上付出额外的努力;在他们挑战Python, JavaScript, Arduino 和Processing等时,他们经常会为了仔细拼写和仔细使用语法而放慢速度。一旦学生能够通过最初的“所思即所得(我真正能看到我所打字的内容)”部分时,他们会欣赏基于文本编程的灵活与强大,尤其是当他们在创建项目时,发现复制、粘贴、修改和协作文本代码要容易得多的时候。

每年夏天我在Foothill College KCI Computer Science Crash的crash course上课的时候,我会给老师提供Scratch和Python,同时用两种语言展示同一项目。

他们喜欢看到这两种语言的相似之处,而且如果我们一开始从“伪代码”或者流程图开始(在写任何代码前写下算法的方式),他们会更加喜欢。

在Scratch和Python中,下面是一个看起来像流程图的一个包含检查密码的小项目。

Password checker flowchart diagram

密码检查程序流程图

用Python写的密码检查器

没有接触过基于块的编程的老师和学生可以容易地在我的课上学会Python,说明在正确的项目中,也可以从基于文本的编程语言开始。

是什么让任何编程语言都能成为教孩子编程的好语言?选择一门语言有什么标准吗?

虽然知道编程教学更多的是关于概念的教学,不需要在选择完美的第一语言上担心,这可能是一件好事,但问题仍然存在:一门语言应该具备什么,才能使它成为教孩子编程的好选择?

虽然编程语言经常有很多的评估方法,例如运行速度、应用、可用库、业界支持等,这些是我考虑的一些重要的标准。

它有一个强大的社区吗?

我总是提到Scratch和Python的原因是,他们可以在课堂上接触到很多使用这些语言的教育者。他们背后有如此巨大的社区是因为这些语言总是免费、开放、欢迎来自世界各地的广大用户。

拥有一个大的社区意味着你可以找到更多的资源,例如项目、课程计划、教程、视频和书籍,可以用于在课程上教授这门语言。你也很有可能进入一个教育会议,或者找到一个能给你许多建议的会议。

学起来容易吗?

有许多可供选择的基于文本的语言,一些语言在业界比其他的更受欢迎,一些语言具有特定的特性,使其更适合创建特定的项目。

虽然很多高中生学习Java最终目的可能不是为了AP Computer Science课程,但是它不一定是入门时最简单的语言。

Python要简单得多,由于它非常简单,所以在教育界中很受欢迎。在计算机选修课上使用Python三年之后,我经常对Python完成事情花费的时间之短、中学生学习Python编程的速度之快而感到惊讶。受到Python在教授孩子编程方面出色表现的启发,我花时间写了一本关于Python的书。

它背后的设计理念是什么?是为这个年龄段设计的吗?

提供适龄的工具很重要,编程语言能根据目标年龄组隐藏或展示特性也同样重要。

Scratch的创造理念来自使用代码进行创造性表达,有意地简化了一些在编程语言中期待看到的结构。

Scratch Jr.为还在学习阅读的孩子而设计,没有变量或条件,因为这对于他们这种年龄来说可能会让他们十分困惑。

Python提供了许多支持各种项目的扩展,但是这些扩展是作为模板提供的,需要显式地添加它们,所以你不需要见到它们,除非你需要它们的时候。

年级高的学生学习复杂程序的语言必须支持调试,这是一项基本技能。

如果教授“面向对象”编程很重要,那么用使用Java也不是一个坏的选择。

安装容易吗?能跨平台运行吗?

有很多事情需要记住,尤其是处于学生在家编程很重要的情况下。

有一些只在特定的环境下工作,例如苹果的Swift编程语言。

如果学生使用Chromebooks编程,那么一个稳定、基于浏览器的工具是很重要的。

另一个需要考虑的问题是:该语言是真的免费,所以每个学生可以在家使用,还是只有付费才能使用隐藏扩展?

与社区共享项目有多容易?

Scratch背后的基本理念是社区,让孩子们相互分享和学习。这个社区也对老师很有用。然而,分享也需要规划:例如希望学生在何时和多大程度上分享、评论、重用和重新利用他人的项目。

虽然JavaScript作为第一种基于文本的编程语言可能不被接受,而且不如Python简单,但是它只在Web上运行是它具有的一个优势。展示项目就像把它们发布到学校的Web服务器上一样简单。

当选择一门语言的时候,有很多其他的考虑。

什么样的项目是可能的?不同的语言对于不同的项目有不同的支持和扩展。例如,Processing和P5.js让媒体项目和创建艺术和动画变得更容易。

Python让编写复杂数据分析甚至机器学习项目成为可能。

教师可能也需要强大的课堂工具来管理作业和评分,尤其是小组项目。最常见的问题之一是:“这种语言现在流行吗?”因为,编程语言受欢迎程度肯定会影响学生报名上课时编程语言的选择。所以不难理解家长们想让教育工作者教授在工作方面具有市场的编程语言。

然而,培养良好的编程习惯胜过教授流行语言。

虽然我们可以强调寻找“完美”的编程语言作为入门,但不要忘记最终的目标是让学生探索基本的编程概念。他们可能永远不会选择在你的课下编程,而且你教的语言可能会随着他们年龄的增长而过时。

但重要的是,编程教学将帮助学生理解计算机如何解决问题,获得批判性思维的技能,并有希望了解编写代码是多么有趣。

本页共67段,4308个字符,10946 Byte(字节)