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


当前回答

用C程序计算圆周率的值:

#include <stdlib.h>  
#include <stdio.h>  

long a=10000,b,c=2800,d,e,f[2801],g;  

int main()  
{  
    for(;b-c;)  
        f[b++]=a/5;  
    for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)  
        for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);  
}  

输出:

31415926535897932384626433832795028841971693993751058209749445923078164062862089
98628034825342117067982148086513282306647093844609550582231725359408128481117450
28410270193852110555964462294895493038196442881097566593344612847564823378678316
52712019091456485669234603486104543266482133936072602491412737245870066063155881
74881520920962829254091715364367892590360011330530548820466521384146951941511609
43305727036575959195309218611738193261179310511854807446237996274956735188575272
48912279381830119491298336733624406566430860213949463952247371907021798609437027
70539217176293176752384674818467669405132000568127145263560827785771342757789609
17363717872146844090122495343014654958537105079227968925892354201995611212902196
0864034418159813629774771309960518707211349999998372978049951059731732816096318

其他回答

如何展示你可以在任何网页浏览器中输入JavaScript到地址栏,然后让代码执行?

编辑:去一个有很多图片的页面,在地址栏试试这个:

javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i<DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++ }setInterval('A()',5); void(0)

在WPF中,你可以用几行XAML代码写一个功能完整的缩略图视图:

<ListBox ItemsSource={Binding MyItems}
         ScrollViewer.HorizontalScrollBarVisibility="Hidden">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Image Source={Binding FullPath} Width="50" />
        </DataTemplate>
    </ListBox.ItemTemplate>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate><WrapPanel /></ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

这里假设您有一个MyItems集合,其中包含指向图像文件的FullPath属性。

魔术来自ItemTemplate,它将每个列表框项转换为图像,ItemsPanelTemplate将默认的垂直堆栈面板更改为换行面板。

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

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

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

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

我没有这方面的代码,但是它可以在10行或更少的时间内被抽象出来。使鼠标画一个方框。不管你怎么移动它。当你点击(左)框消失,当你点击(右)框改变颜色。

学生们想要一些实用的东西,一些他们可以修改和定制的东西,一些表明这“不是典型的无聊课程”的东西。

Xen的mini-os内核现在可以做到这一点,但它需要额外的抽象来满足您的需求。

您还可以尝试绘制一个manderbolt (julia)集,同时从环境噪声获得二次平面的参数(如果机器有麦克风和声卡)..他们的声音会产生分形。同样,要在10行(在他们编辑的实际函数中)完成这一点很棘手,但并非不可能。

在现实世界中,您将使用现有的库。所以我认为,在main()(或任何你使用的语言)中使用10行代码更实用。我们让存在的东西为我们工作,而写不存在或不为我们工作的东西。你不妨一开始就介绍这个概念。

同时,行吗?Int main(void){无符号Int i;(我= 0;I < 10;我+ +);返回0;也许,10次函数调用将是一个更现实的目标?这不是一场模糊的代码竞赛。

好运!

你可能会考虑像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);
 }
}