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


当前回答

我记得我发现简单的循环很神奇。每次我学习一门新语言,我通常会把这样的东西放在一起:

<?php
$numberOfBottles = 99;
print("<h1>$numberOfBottles Bottles of Beer on the Wall</h1>");
print("$numberOfBottles bottles of beer on the wall,<br />");
print("$numberOfBottles bottles of beer!<br />");
print("Take one down, pass it around,<br />");
for($numberOfBottles--; $numberOfBottles>1; $numberOfBottles--)
{
    print("$numberOfBottles bottles of beer on the wall!<br />");
    print("<br />");
    print("$numberOfBottles  bottles of beer on the wall,<br />");
    print("$numberOfBottles  bottles of beer!<br />");
    print("Take one down, pass it around,<br />");
}
print("One last bottle of beer on the wall!");
?>

也许一些while或foreach循环的变化也会很容易。

其他回答

试着让你的学生编一个神奇的8号球。一个基本的回答“是”或“否”的8球程序可能只需要不到10行代码,并且它可以以任何方式递增:

First, make it simple: input something like "s" for shake into a CLI; 8ball answers "yes" or "no" Next, input a question, display the question along with the answer Then expand the possible answers.... Loads of options, the students who are quick to catch on can have some fun ("Look, the computer says dirty words!!"), while you help the others Implement a timer, so you can't ask the same question again right away, in case you don't like the answer Group possible answers into variants of "yes", "no" and "hazy" or something; first RNG decides type of answer, second RNG decides the specific answer Reconfigure the timer; you can ask again right away if the answer is hazy Make a frame of *'s around the text And so on....

一个神奇的8球是大多数人都能联系到的东西,它只使用最简单的工具介绍了基本的字符串,浮点数/整数,IO, CLI,布尔和RNG。它很简单,(有点)有趣,而且很容易扩展。根据您的方法,您可以使用类8ball()、类YesAnswer()等立即使编程面向对象。

祝你好运;-)

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

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

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

使用游戏!不是编程游戏,而是编程比赛。想想谷歌AI挑战,把它简化。

让我举个例子。我曾经和我的朋友进行过一次小竞赛:我们中的一个人建立了一个模拟框架,其他人编写了一个AI,范围从简单到高度分析,我们进行了100次测试,看看哪个AI表现最好。

该框架?基本I/O:模拟控制由每个竞争AI生成一个子进程执行,每一轮模拟将数据写入标准输入管道,并读取输出。这样,我们就可以用任何我们想要的语言来编写我们的ai,只需要遵循一个非常简单的协议。

规则非常简单,但事情很有挑战性:我们有两个村庄,A村和B村,它们在居住在那里的家庭中平均分配资金。A有800个硬币,B有500个。每一轮,所有人工智能都被要求选择一个村庄居住(将“a”或“B”打印到stdout),然后返回每个村庄在此期间的总数(通过读取stdin中的数字)。我们的目标是在100轮比赛后获得最多的钱。

我们创造的一些ai拥有非常复杂的机制去尝试并猜测该去哪个村庄定居—-尽管它们并不是很好,因为获胜的策略总是选择上一轮给每个家庭最少钱的村庄(假设大多数人会在下一轮搬到另一个村庄)。

我认为这很吸引人,鼓励研究,是一种健康的竞争方式。有成千上万的游戏可以玩,它只需要基本的编程知识(标准I/O!)让玩家进行互动。

我认为任何可以做一些有用的事情的shell脚本都是向人们展示编程力量的好方法。在我看来,能够在一个小脚本上花费10-20分钟来自动化另一项任务并节省无数小时是非常令人印象深刻的。

例如,我曾经写过一个简单的Perl脚本,将一个目录中的mp3文件转换为另一种格式,然后将它们刻录到cd上。你用mp3目录的路径调用这个脚本,它就刻录了cd。至少当时我印象深刻。

Logo总是一个很好的起点。

Brian Harvey的UCBLogo页面上有这样一个简短的例子:

Here is a short but complete program in Berkeley Logo: to choices :menu [:sofar []] if emptyp :menu [print :sofar stop] foreach first :menu [(choices butfirst :menu sentence :sofar ?)] end And here's how you use it. You type choices [[small medium large] [vanilla [ultra chocolate] lychee [rum raisin] ginger] [cone cup]] and Logo replies small vanilla cone small vanilla cup small ultra chocolate cone small ultra chocolate cup small lychee cone small lychee cup small rum raisin cone small rum raisin cup small ginger cone small ginger cup medium vanilla cone medium vanilla cup medium ultra chocolate cone medium ultra chocolate cup medium lychee cone medium lychee cup medium rum raisin cone medium rum raisin cup medium ginger cone medium ginger cup large vanilla cone large vanilla cup large ultra chocolate cone large ultra chocolate cup large lychee cone large lychee cup large rum raisin cone large rum raisin cup large ginger cone large ginger cup The program doesn't have anything about the size of the menu built in. You can use any number of categories, and any number of possibilities in each category. Let's see you do that in four lines of Java!