在年轻初学者的编程语言中,哪些功能很重要?

时间:2010-03-25 19:10:02

标签: language-features

我正在与7和8级孩子的当地机器人竞赛中的一些导师交谈。机器人正在使用PBASIC和视差基本印章。其中一个主要问题是短期项目需要构建机器人,教他们在PBASIC中编程并让他们对机器人进行编程。一个星期内,一个星期内只需2个小时左右。 PBASIC有点不错,因为它内置了完成所有功能的功能,但信息过载是可能的。

我的想法是简单是关键。

当你有孩子努力去抓住时:

if X>10 then <DOSOMETHING>

向他们投掷“适当的”面向对象编程没有多大意义。

培养对编程兴趣所需的基本要素是什么?

修改: 我喜欢在PC上解释为学习工具的概念。由于目标平台可能在某种程度上受资源限制,我希望定位适合嵌入式工作的语言。 (Python甚至Lua都需要比目标更多的资源。我实际上有点像Lua。)我认为这是BASIC的少数优点之一,它已经在30多年的4K系统上运行。如果有一些“友好”工具,如Ch。

,C可能不是一个糟糕的选择

14 个答案:

答案 0 :(得分:11)

最重要的不是很多锅炉板来制作最简单的程序。

如果你开始使用一堆

 import Supercalifragilistic from <expialidocious>
 public void inherited security model=<apartment>      
    public : main .....

告诉他们他们“不要担心他们不应该理解” - 你要推迟最聪明和最愚蠢的人。

关于python的好处是打印“hello world”是打印“hello world”

答案 1 :(得分:7)

有趣,快速的结果。抓住孩子的注意力。

大多数脚本语言提供的解释性shell(命令行)让学生只输入1或2个内容是一件大事。

蟒:

>>> 1+1
2
愤怒,即时反馈,孩子认为“电脑正在回话”。孩子们喜欢这样。还记得 Eliza 吗?

如果他们在安装IDE时陷入困境,创建一个项目,请播放,有时候切线会让你远离主题。

BASIC也很好。

在网上寻找一些像“SIMPLE”的东西:http://www.simplecodeworks.com/website.html

答案 2 :(得分:5)

  

当你有孩子努力去抓住时:

     

if X>10 then <DOSOMETHING>

也许这是他们不应该做编程的标志?

  

培养对编程兴趣所需的基本要素是什么?

无需付出任何努力就能看到成功。创建在几分钟内运行的东西。许多编程语言都可以提供它,包括可怕的C ++。

为了避免与#includes复杂化,多个源文件,模块化和编译,为什么不在别处看看呢?尝试编写一些Excel宏或使用任何其他软件和一些基本的内置脚本语言来自动执行某些任务?

另一个想法可能是玩网页。这不完全是编程,但至少很容易实现某些东西,并以自豪的方式向他人展示。

答案 3 :(得分:5)

A team of researchers,从赖斯开始,然后蔓延到布朗,芝加哥,东北,西北和犹他州,已经研究了这个问题大约15年。我无法总结这些发现,但这里有一些最重要的发现:

  • 不规则的语法可能成为进入的障碍。

  • 语言应分为同心子集,您应选择适合学生知识水平的子集。例如,他们最小的子集称为“初学者”语言。

  • 编译器的错误信息应与学生的知识水平相匹配。如果您使用的是子集,则不同的子集可能会针对同一错误提供不同的消息。

  • 初学者发现很难学习阶段区别:类型检查和运行时的单独阶段,具有不同类型的错误。出于这个原因,初学者使用在运行时检查类型的语言(即动态类型语言)做得更好。

  • 初学者发现很难推断可变变量和可变对象。相比之下,如果你教授纯函数式编程,你可以利用学生的高中和中学代数经验。

  • 初学者更多地参与交互式编程环境,而不是旧的edit-compile-link-go模式。

  • 初学者通过泼溅和互动参与其中。如果您的语言标准库为创建和显示图像提供内置支持,那就太好了。如果在交互式编程环境中支持这些图像,而不是需要单独的播放器或查看器,那就更好了。如果您的标准库可以支持移动图像或其他类型的动画,那就更好了。

    有趣的是,他们只用2D图像就能获得非常好的效果。尽管我们都被3D计算机图形的例子所包围,但学生们似乎非常投入到只使用二维图像的工作中。

这些结果主要是由大学生获得的,并且已在20多所大学中被复制。然而,研究小组还与高中和中学生做了一些工作。关于这项工作的第一篇论文刚刚出版,所以我不太了解新的发现,也无法总结它们。

答案 4 :(得分:2)

之前已经说过,但是......尝试Scratch。这对孩子们来说是一个令人难以置信的学习工具。它以实践和语言无关的方式教授编程概念的基础知识。经过一番讨论后,他们可以开始学习特定语言对他们已经理解的概念的实现。

答案 5 :(得分:2)

初学者容易学习的语言的共同主题 - 特别是儿童接受的是,进入障碍和即时反馈很少。如果“你好世界”看起来不像print "Hello, world!",那么人们就会更加难以接受。我想到了以下这些特征:

  • 解释或逐步编译JIT(看起来像是用户的解释器)
  • 没有样板
  • 不尝试强制执行特定的编程风格(例如,Java要求所有内容都在类定义中,或者Haskell强制执行纯函数式设计)
  • 动态类型
  • 隐性胁迫(可能)
  • A REPL

答案 6 :(得分:1)

将问题(阅读程序)分解为一小部分(模块),这些部分完成了一件事并且做得很好。

答案 7 :(得分:1)

你必须让他们停止像用户一样思考并开始像程序员一样思考。他们需要一步一步。问他们需要考虑什么才能找出自己的问题,然后把它们写成步骤。如果可以的话,你可以在同一个主体中打破每一步。完成后,您将拥有英语程序,使编程变得更加简单。

我是和一个无法得到它的朋友做到的,现在他可以。他曾经看过我做过的事情并且感到困惑,我会说他做了比这更复杂的事情。

答案 8 :(得分:1)

我与其他程序员之间持续存在的一个论点是,一个人的第一语言是否应该要求显式类型语言。许多人认为学习一种要求你明确声明类型信息的语言是教会你打字的一种语言。相反,可以说动态语言可能会提供较低要求的学习曲线。我认为这是两种方式。

答案 9 :(得分:0)

我的建议:从一个简单的计算机工作模型开始。我特别感谢stack machines作为教学计算的好工具。

答案 10 :(得分:0)

请记住,初学者同时学习两门学科:计算机如何工作和涉及的抽象逻辑(计算机科学的基础),以及如何编写符合其预期逻辑的程序(学习特定语言的语法和习语) 。你必须以交织的方式解决这两个问题,以便学生迅速发挥作用。这也是experienced programmers通常可以快速获取新语言的原因。

值得注意的是,Python源自一个名为ABC的语言的项目,该语言针对的是初学者。例如,所需的冒号不是strictly required,但发现它可以提高可读性:

if some_condition:
  do_this()

答案 11 :(得分:0)

我有3个字:Karel the Robot。 它是一种非常简单的“语言”,旨在教会人们编程的基础:

在网上查找。你可以看看这个,虽然我从未尝试过: http://karel.sourceforge.net/

答案 12 :(得分:0)

虽然这与编程机器人无关,但我认为网络编程是开始与年龄相仿的孩子的好地方。这就是我在那个确切年龄开始的方式。如果他们使用网络,它很容易转化为孩子们理解的东西。从HTML开始,使用Javascript,他们很快就会想要执行需要服务器端脚本或某种类型的功能,并且事情会从那里开始。

然而,对于那些已经对机器人技术感兴趣的孩子,我实际上会选择与已经描述过的语言不同的语言。如果你想在像机器人这样的领域工作,你不需要被说服努力尝试。你需要受到挑战。

答案 13 :(得分:0)

几年前,我在Ignite看到了一个演示!来自该项目的人之一的西雅图,现在被称为Kodu,被设想为儿童的编程语言。他花时间谈论在一个旨在教授基础知识的编程环境中可以简单地抛出哪些共同语言特性。

许多珍贵的命令式构造,比如C风格的for循环,只是简单地忽略了一种简单的对象消息传递方法。当你想到“对象”和“消息”时,面向对象的编程并不难理解;困难的部分是你处理的程序员,而不是孩子,关心,如继承和合同,以及彻底的抽象。我有这个东西(名词),现在用它(动词),这样(快速的副词),当事物(看到/碰到)某事(有某些属性)(这是你的if)。事件确实是条件,具有所有条件的力量,但是由运行时来确定这些事件何时发生。

这种事件和消息传递驱动的方法可能会比程序编程更好地转化为机器人,所以它可能是查看问题的好方法。尽量不要考虑用C或Pascal或其他东西编程你需要知道什么;想想你想要做些什么。