我正在寻找最酷的事情,你可以在几行简单的代码。我相信你可以用Haskell用15行写一个Mandelbrot集,但是很难理解。

我的目标是启发学生编程很酷。

我们知道编程很酷,因为你可以创造任何你想象到的东西——它是最终的创意出口。我想激励这些初学者,让他们尽可能多地克服早期学习的困难。

Now, my reasons are selfish. I'm teaching an Intro to Computing course to a group of 60 half-engineering, half business majors; all freshmen. They are the students who came from underprivileged High schools. From my past experience, the group is generally split as follows: a few rock-stars, some who try very hard and kind of get it, the few who try very hard and barely get it, and the few who don't care. I want to reach as many of these groups as effectively as I can. Here's an example of how I'd use a computer program to teach:

Here's an example of what I'm looking for: a 1-line VBS script to get your computer to talk to you: CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it") I could use this to demonstrate order of operations. I'd show the code, let them play with it, then explain that There's a lot going on in that line, but the computer can make sense of it, because it knows the rules. Then I'd show them something like this: 4(5*5) / 10 + 9(.25 + .75) And you can see that first I need to do is (5*5). Then I can multiply for 4. And now I've created the Object. Dividing by 10 is the same as calling Speak - I can't Speak before I have an object, and I can't divide before I have 100. Then on the other side I first create an InputBox with some instructions for how to display it. When I hit enter on the input box it evaluates or "returns" whatever I entered. (Hint: 'oooooo' makes a funny sound) So when I say Speak, the right side is what to Speak. And I get that from the InputBox. So when you do several things on a line, like: x = 14 + y; You need to be aware of the order of things. First we add 14 and y. Then we put the result (what it evaluates to, or returns) into x.

这就是我的目标,有一堆很酷的例子来演示,并在他们玩得开心的时候教他们。我在我室友身上尝试了这个例子,虽然我可能不会把它作为第一课,但她喜欢它,并学到了一些东西。

一些很酷的数学程序,可以做出漂亮的图形或容易理解的形状,这是很好的想法,我将研究这些。这里有一些复杂的actionscript示例,但这有点太高级了,我不能教flash。你还有什么其他的想法吗?


当前回答

Choose any language (or framework) where drawing a dot, line, box or circle to the screen is trivial. Designing games is where a lot of programmers first find their passion, and graphical output is fundamental to this. Choose a language which lets them easily show off their work to friends. If they need to get their friends to install runtime frameworks and follow complicated instructions to show off, then they won't be getting the necessary kudos and comments they need. Don't underestimate the value of a peer saying "Hey, that's cool!"

也许考虑到这两个标准,Javascript和Processing.js或Flash可能是一个很好的起点,尽管Flash显然有要求..呃…闪光。

切题思想:Flash实际上是一种非常好的教授OOP的方法,因为当你真正看到对象和类时,更容易掌握它们的概念!

其他回答

嗯,我记得用QBasic制作雪花和火焰时,一个朋友过来教我如何做一个旋转的3D立方体,完全让我震惊。

然后我把火调到立方体上,那真是美好的时光。

我得看看能不能找到那些旧剧本,它们不是很长。

你可以让你的学生去codeplex IronPython silverlight示例站点,其中包括一个< 10行的修改画布和与鼠标交互的演示。你可以在这里找到silverlight的例子

仅仅看到在web浏览器中编写的代码,然后执行修改一个小的WPF可能会让一些人陶醉。

你可能会考虑像Robocode这样的东西,其中大量的代码被抽象出来,你基本上只是告诉机器人做什么。一个简单的10行函数可以让机器人做很多事情,并且有一个非常直观和易于遵循的结果。

也许Robocode本身并不适合这项任务,但这种东西是一种将编写的代码与计算机上的可视操作联系起来的好方法,而且当你需要给出示例时,它很有趣。

public class MyFirstJuniorRobot extends JuniorRobot {
 public void run() {
  setColors(green, black, blue);
  // Seesaw forever
  while (true) {
   ahead(100); // Move ahead 100
   turnGunRight(360); // Spin gun around
   back(100); // Move back 100
   turnGunRight(360); // Spin gun around
  }
 }
 public void onScannedRobot() {
  turnGunTo(scannedAngle);
  fire(1);
 }
 public void onHitByBullet() {
  turnAheadLeft(100, 90 - hitByBulletBearing);
 }
}

我认为油脂猴子是学生开始学习的好地方。在userscripts.org上有成千上万的示例脚本,是非常好的阅读材料,其中一些非常小。Greasemonkey脚本会影响网页,而学生们即使不会操纵网页,也会对这些网页很熟悉。Greasemonkey本身提供了一种非常简单的方法来在测试时编辑和启用/禁用脚本。

例如,下面是"谷歌Two Columns"脚本:

result2 = '<table width="100%" align="center" cellpadding="10" style="font-size:12px">';
gEntry = document.evaluate("//li[@class='g'] | //div[@class='g'] | //li[@class='g w0'] | //li[@class='g s w0']",document,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
for (var i = 0; i < gEntry.snapshotLength; i++) {
  if (i==0) { var sDiv = gEntry.snapshotItem(i).parentNode.parentNode; }
  if(i%2 == 0) { result2 += '<tr><td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td>'; }
  if(i%2 == 1) { result2 += '<td width="50%" valign="top">'+gEntry.snapshotItem(i).innerHTML+'</td></tr>'; }
}
sDiv.innerHTML = result2+'</table>';

if (document.getElementById('mbEnd') !== null) { document.getElementById('mbEnd').style.display = 'none'; }

我给有学习障碍的11-12岁学生上过课。我们使用Hypercard,他们发现他们可以记录物体(图像,盒子等)的位置,因为他们移动它,并播放它(动画)。虽然这不是编码,但他们想做的是:删除其中一个动作,而不重新记录它。我告诉他们,他们必须去查看代码并修改它。

你可以看出谁有计算机/编程的诀窍,当他们更喜欢用代码来做的时候,因为他们有更多的控制权。

在Excel中做一个复杂的宏,然后学习代码在做什么,这可能是通往VBA的门户。

根据年龄群体或兴趣水平的不同,直接进入代码可能很难,但最终是重要的。