我正在寻找最酷的事情,你可以在几行简单的代码。我相信你可以用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。你还有什么其他的想法吗?


当前回答

摘自安德鲁·库克的《Malbolge: Hello World》

让他们在Malbolge试试这个:

(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{^Lx8%$Xmrkpohm-kNi;gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O<oLm

这是世界上最困难的编程语言“Hello World”,花了两年时间才找到:)

他们可以去Lou Scheffer的Malbolge页面:)

当然,你可以去看由饭泽久(Hisashi Iizawa)撰写的《世界上排名第一的99瓶啤酒计划》(这是一个ONE LINER!),这是酒井雅彦(Masahiko Sakai)关于Malbolge的pdf文件

其他回答

斐波那契数列是学习递归的一个很酷的例子。 它表明递归写起来很简单,但执行起来代价很高。 负分项的情况可以在后面介绍。

int fiboNumber(int index)
{
  if (index <= 1)
  {
    return index;
  }
  return fiboNumber(index - 1) + fiboNumber(index - 2);
}

我最近在一篇文章“我写过的最短、最有用的程序”中提到了这一点。

总结:我在1996年写了一个3行VB6应用程序,现在我每天都在使用。一旦exe被放入“发送到”文件夹。它可以让你在资源管理器中右键单击一个文件,并将该文件的完整路径发送到剪贴板。

Public Sub Main()   
    Clipboard.SetText Command$   
End Sub  

和大多数其他评论者一样,我开始写代码是为了解决数学问题(或者为我所设计的糟糕游戏创造图像,如《夺宝奇兵大战僵尸》)。

真正让我开始学习数学和编程的是基于文本,选择自己的冒险风格的游戏……转向更多基于图像的游戏。我一开始是给图纸上色和绘制像素,直到我接触到几何……发现了如何用方程来画曲线、直线、方框等。

我的观点是,我可以真正进入处理(http://processing.org/),其中典型的程序看起来像这样:

void setup() 
{
  size(200, 200); 
  noStroke();
  rectMode(CENTER);
}

void draw() 
{   
  background(51); 
  fill(255, 204);
  rect(mouseX, height/2, mouseY/2+10, mouseY/2+10);
  fill(255, 204);
  int inverseX = width-mouseX;
  int inverseY = height-mouseY;
  rect(inverseX, height/2, (inverseY/2)+10, (inverseY/2)+10);
}

对我来说,这就是未来的“Logo”。

这里有一些简单的“hello world”示例,可以让人们快速地绘制和更改代码,并看到事情是如何崩溃的,以及会产生哪些奇怪的“意外”……一直到更高级的交互和分形创造……

我一直很喜欢河内塔。在计划

(define (hanoi x from to spare)
  (if (= x 1)
    (begin
      (display "move ")(display from)(display " to ")(display to)(display "\n"))
  (begin
    (hanoi (- x 1) from spare to)
    (hanoi 1 from to spare)
    (hanoi (- x 1) spare to from))))

示例输出

gosh> (hanoi 3 'start 'dest 'spare)
move start to dest
move start to spare
move dest to spare
move start to dest
move spare to start
move spare to dest
move start to dest
#<undef>

同样在Python中(尽管这不能像Scheme版本那样做1000张光盘)

def hanoi(x, source, dest, spare):
  if x == 1:
    print "%s to %s" % (source, dest)
  else:
    hanoi(x - 1, source, spare, dest)
    hanoi(1, source, dest, spare)
    hanoi(x - 1, spare, dest, source)

我认为在Python中使用NodeBox进行一些很酷的实验将是一个很酷的开始。它的功能是绘制从正方形到复杂路径的物体。它甚至可以接收来自Mac iSight/网络摄像头的图像,并通过缩放、旋转和应用滤镜进行操作。

不幸的是,它只适用于Mac OS X,所以我不认为教它有多大用处,但作为一个例子(如果你自己有一台Mac),用一点代码就能做到什么,这将是相当漂亮的。