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


当前回答

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

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

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

其他回答

这个bash代码将锁定您的计算机。这叫叉子炸弹。

:(){ :|:& };:

警告:不要运行它!

更多信息:http://en.wikipedia.org/wiki/Fork_bomb

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

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

有趣的是,你提到了Mandelbrot集,因为用GW-BASIC创建分形是激发我在高中(大约1993年)对编程的热爱的原因。在我们开始学习分形之前,我们写了无聊的标准差应用程序,而我仍然计划进入新闻业。

但当我看到这个冗长、难以编写的BASIC程序生成“分形地形”时,我就被迷住了,再也没有回头。它改变了我对数学、科学、计算机的看法,也改变了我的学习方式。

我希望你能找到对你的学生有同样影响的项目。

用Python将图像转换为音乐

从我的回答,我如何循环每4行每4个像素,使用Python?:

#!/usr/bin/env python
import easygui # http://easygui.sourceforge.net/
import Image   # http://www.pythonware.com/products/pil/
import numpy   # http://numpy.scipy.org/

filename = easygui.fileopenbox() # pick a file
im = Image.open(filename) # make picture
im.show() # show picture
ar = numpy.asarray(im) # get all pixels
N = 4
pixels = ar[::N,::4]  # every 4th pixel in every N-th row
notes = pixels.sum(axis=2) / 9 + 24 # compute notes [0, 52]
print "number of notes to play:", notes.size

音符可以对应不同的音调。这里我用的是等温标度:

# play the notes
import audiere # http://pyaudiere.org/
import time

d = audiere.open_device()
# Notes in equal tempered scale 
f0, a = 440, 2**(1/12.)
tones = [d.create_tone(f0*a**n) for n in range(-26, 27)] # 53

for y, row in enumerate(notes):
    print N*y # print original row number
    for t in (tones[note] for note in row):
        t.volume = 1.0 # maximum volume
        t.play()
        time.sleep(0.1) # wait around 100 milliseconds
        t.stop()

Squeak是一个激发灵感的好工具

例如:http://squeakland.jp/school/drive_a_car/html/Drivecar12.html。