Quelle est la chose la plus cool que vous puissiez faire en moins de 10 lignes de code simple? Aidez-moi à inspirer les débutants!

Je cherche la chose la plus cool que vous puissiez faire en quelques lignes de code simple. Je suis sûr que vous pouvez écrire un set de Mandelbrot dans Haskell en 15 lignes, mais c’est difficile à suivre.

Mon objective est d’inspirer les étudiants que la programmation est cool .

Nous soaps que la programmation est cool parce que vous pouvez créer tout ce que vous imaginez – c’est la sortie créative ultime. Je veux inspirer ces débutants et leur donner access à autant de bosses d’apprentissage que possible.

Maintenant, mes raisons sont égoïstes. J’enseigne un cours d’ introduction à l’informatique à un groupe de 60 ingénieurs et demi-ingénieurs; tous les étudiants de première année. Ce sont les étudiants issus des lycées défavorisés. D’après mon expérience passée, le groupe est généralement divisé comme suit: quelques rock-stars , certains qui essaient très fort et le comprennent, les rares qui essaient très fort et à peine , et les rares qui ne s’en soucient pas. Je veux atteindre le plus grand nombre de ces groupes aussi efficacement que possible. Voici un exemple d’utilisation d’un programme informatique pour enseigner:

Voici un exemple de ce que je recherche: un script VBS 1 ligne pour que votre ordinateur vous parle:

CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it") 

Je pourrais l’utiliser pour démontrer l’ordre des opérations. Je montrerais le code, les laisserais jouer avec, puis expliquer que beaucoup de choses se passent dans cette ligne, mais l’ordinateur peut le comprendre, car il connaît les règles. Alors je leur montrerais quelque chose comme ceci:

 4(5*5) / 10 + 9(.25 + .75) 

Et vous pouvez voir que je dois d’abord faire (5 * 5). Alors je peux multiplier pour 4. Et maintenant j’ai créé l’object. La division par 10 est identique à l’appel de Speak – je ne peux pas parler avant d’avoir un object, et je ne peux pas diviser avant d’avoir 100. Ensuite, de l’autre côté, je crée d’abord un InputBox avec des instructions pour l’afficher . Lorsque j’appuie sur Entrée dans la zone de saisie, il évalue ou “renvoie” tout ce que j’ai saisi. (Indice: «oooooo» fait un drôle de son) Alors, quand je dis Speak, le côté droit est ce qu’il faut dire. Et je reçois cela de la InputBox.

Donc, quand vous faites plusieurs choses sur une ligne, comme:

 x = 14 + y; 

Vous devez être conscient de l’ordre des choses. Nous ajoutons d’abord 14 et y. Ensuite, nous mettons le résultat (ce qu’il évalue ou retourne) dans x.

C’est mon objective, d’avoir un tas de ces exemples sympas pour démontrer et enseigner la classe pendant qu’ils s’amusent. J’ai essayé cet exemple sur mon camarade de chambre et, bien que je ne puisse pas l’utiliser comme première leçon, elle a aimé et a appris quelque chose.

Certains programmes mathématiques géniaux qui créent de beaux graphiques ou des formes faciles à comprendre seraient de bonnes idées et je vais les examiner. Voici quelques exemples complexes d’actionscript mais c’est un peu trop avancé et je ne peux pas enseigner le flash. Quelles autres idées avez-vous?

J’ai eu une excellente réponse de mes enfants avec un rapide script VB pour manipuler un personnage Microsoft Agent. Pour ceux qui ne sont pas familiers avec MS Agent, il s’agit d’une série de caractères animés à l’écran qui peuvent être manipulés via une interface COM. Vous pouvez télécharger le code et les caractères sur la page de téléchargement de Microsoft Agent .

Les quelques lignes suivantes feront apparaître le personnage de Merlin à l’écran, voleront autour, cogneront à l’écran pour attirer votre attention et vous diront bonjour.

 agentName = "Merlin" agentPath = "c:\windows\msagent\chars\" & agentName & ".acs" Set agent = CreateObject("Agent.Control.2") agent.Connected = TRUE agent.Characters.Load agentName, agentPath Set character = agent.Characters.Character(agentName) character.Show character.MoveTo 500, 400 character.Play "GetAttention" character.Speak "Hello, how are you?" Wscript.Sleep 15000 character.Stop character.Play "Hide" 

Il existe de nombreuses autres commandes que vous pouvez utiliser. Consultez http://www.microsoft.com/technet/scriptcenter/funzone/agent.mspx pour plus d’informations.

EDIT 2011-09-02 J’ai récemment découvert que Microsoft Agent n’est pas installé en mode natif sur Windows 7. Cependant, il est proposé en téléchargement séparé ici . Je n’ai pas testé cela, donc je ne peux pas vérifier s’il fonctionne.

Entrez ce code dans votre barre d’adresse (dans votre navigateur) et appuyez sur Entrée. Ensuite, vous pouvez modifier tout le contenu de la page Web!

 javascript:document.body.contentEditable='true'; document.designMode='on'; void 0 

C’est le “one-liner” le plus cool que je connaisse =)

Quand j’ai écrit ceci pour la première fois.

 10 PRINT "What is your name?" 20 INPUT A$ 30 PRINT "Hello " A$ 40 GOTO 30 

Il a fait sauter les gens! L’ordinateur s’est souvenu de leur nom!

EDIT: Juste pour append à cela. Si vous pouvez convaincre un nouveau programmeur, c’est la chose la plus cool qu’il puisse faire, il deviendra un bon programmeur. Ces jours-ci, vous pouvez faire presque tout ce que vous voulez avec une seule ligne de code pour exécuter une bibliothèque que quelqu’un d’autre a écrite. Personnellement, je ne suis absolument pas satisfait de le faire et je vois peu d’avantages à l’enseigner.

PHP – le joint Sierpinski alias Triforce

OK, c’est 15 lignes de code mais le résultat est génial! C’est le genre de truc qui m’a fait paniquer quand j’étais enfant. Ceci provient du manuel PHP:

 $x = 200; $y = 200; $gd = imagecreatetruecolor($x, $y); $corners[0] = array('x' => 100, 'y' => 10); $corners[1] = array('x' => 0, 'y' => 190); $corners[2] = array('x' => 200, 'y' => 190); $red = imagecolorallocate($gd, 255, 0, 0); for ($i = 0; $i < 100000; $i++) { imagesetpixel($gd, round($x),round($y), $red); $a = rand(0, 2); $x = ($x + $corners[$a]['x']) / 2; $y = ($y + $corners[$a]['y']) / 2; } header('Content-Type: image/png'); imagepng($gd); 

joint sierpinski

Microsoft a Small Basic , un IDE pour les enfants.

 pic = Flickr.GetRandomPicture("beach") Desktop.SetWallpaper(pic) 

Il est spécifiquement conçu pour montrer à quel point la programmation est cool.

J’ai tendance à penser que les gens sont impressionnés par des choses auxquelles ils peuvent s’identifier ou qui sont pertinentes pour leur vie. J’essaierais de baser mes 10 lignes de code sur quelque chose qu’elles connaissent et comprennent. Prenez, par exemple, Twitter et son API. Pourquoi ne pas utiliser cette API pour créer quelque chose de cool? Les 10 lignes de code suivantes renverront la “timeline publique” de Twitter et l’afficheront dans une application console …

 using (var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss")) { SyndicationFeed .Load(xmlr) .GetRss20Formatter() .Feed .Items .ToList() .ForEach( x => Console.WriteLine(x.Title.Text)); } 

Mon exemple de code pourrait ne pas être le meilleur pour vos étudiants. Il est écrit en C # et utilise .NET 3.5. Donc, si vous allez leur enseigner PHP, Java ou C ++, cela ne sera pas utile. Cependant, mon point est qu’en associant vos 10 lignes de code à quelque chose de “cool, intéressant et pertinent pour les étudiants, votre échantillon devient aussi cool, intéressant et pertinent.

Bonne chance!

[Oui, je sais que j’ai manqué quelques lignes d’utilisation des instructions et de la méthode Main, mais je suppose que les 10 lignes n’ont pas besoin d’être littéralement 10 lignes]

Ceci est un serveur Telnet Python qui demandera le nom des utilisateurs et leur dit bonjour. Cela semble cool car vous communiquez avec votre programme depuis un autre ordinateur sur le réseau.

 from socket import * s=socket(AF_INET, SOCK_STREAM) s.bind(("", 3333)) s.listen(5) while 1: (c, a) = s.accept() c.send("What is your name? ") name = c.recv(100) c.send("Hello "+name) c.close() 

Je pense que c’est difficile d’être éducateur en informatique ces jours-ci. Je suis. Nous sums confrontés à une bataille de plus en plus raide. Nos étudiants sont des utilisateurs incroyablement sophistiqués et il en faut beaucoup pour les impressionner. Ils ont tellement d’outils accessibles à eux qui font des choses étonnantes.

Une calculasortingce simple en 10 lignes de code? Pourquoi? J’ai une TI-86 pour ça.

Un script qui applique des effets spéciaux à une image? C’est pour ça que Photoshop est Et Photoshop élimine tout ce que vous pouvez faire en 10 lignes.

Que diriez-vous de déchirer un CD et de convertir le fichier en MP3? Euh, j’ai déjà 50 000 chansons de BitTorrent. Ils sont déjà au format MP3. Je les joue sur mon iPhone. Qui achète des CD de toute façon?

Pour initier les utilisateurs avertis à la programmation, vous devrez trouver quelque chose qui est:

a) applicable à quelque chose qu’ils trouvent intéressant et cool, et b) fait quelque chose qu’ils ne peuvent pas déjà faire.

Supposez que vos étudiants ont déjà access au logiciel le plus coûteux. Beaucoup d’entre eux ont la version complète d’Adobe CS5.5 (prix de détail: 2 600 $; prix réel: gratuit) et peuvent facilement obtenir n’importe quelle application qui briserait normalement le budget de votre service.

Mais la grande majorité d’entre eux n’ont aucune idée de la façon dont ces “trucs informatiques” fonctionnent réellement.

Ils sont incroyablement créatifs: ils aiment créer des choses. Ils veulent juste pouvoir faire ou faire quelque chose que leurs amis ne peuvent pas faire. Ils veulent se vanter de quelque chose.

Voici certaines choses que j’ai trouvé pour résonner avec mes étudiants:

  • HTML et CSS. De ceux-ci, ils apprennent comment fonctionnent les thèmes MySpace et peuvent les personnaliser.
  • Mashups. Ils les ont tous vus, mais ne savent pas comment les créer. Découvrez Yahoo! Pipes Il y a beaucoup de moments d’apprentissage, tels que RSS, XML, le filtrage de texte, le mappage et la visualisation. Les widgets complétés peuvent être incorporés dans des pages Web.
  • Ouvrages d’art. Regardez l’art sans contexte . La récursivité et la randomisation sont essentielles pour faire de belles images.
  • Contes Avec un environnement de programmation 3D facile à utiliser, tel qu’Alice , il est facile de créer des histoires attrayantes de haute qualité en utilisant simplement le glisser-déposer.

Aucun de ceux-ci n’implique de programmation au sens traditionnel. Mais ils exploitent de puissantes bibliothèques. Je les considère comme un type de programmation différent.

J’ai trouvé un grand favori (dans GWBASIC):

 10 input "What is your name ";N$ 20 i = int(rnd * 2) 30 if i = 0 print "Hello ";N$;". You are a " 40 if i = 1 print "Hello ";N$;". You are a " 

J’ai trouvé que les étudiants débutants avaient quelques conceptions à corriger.

  • Les ordinateurs ne lisent pas votre esprit.
  • Les ordinateurs ne font qu’une chose à la fois, même s’ils le font si rapidement qu’ils semblent tout faire en même temps.
  • Les ordinateurs ne sont que des machines stupides et ne font que ce qu’on leur dit.
  • Les ordinateurs ne reconnaissent que certaines choses et sont comme des blocs de construction.
  • Un concept clé est qu’une variable est quelque chose qui contient une valeur et son nom est différent de cette valeur.
  • La distinction entre l’heure à laquelle vous éditez le programme et l’heure à laquelle il s’exécute.

Bonne chance avec votre classe. Je suis sûr que tu vas bien faire.

PS Je suis sûr que vous comprenez que, avec le matériel et les compétences, vous enseignez également une attitude, et c’est tout aussi important.

Ce code C est peut-être obscurci, mais je l’ai trouvé très puissant

 #include  float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L|| (h-=o,T= -2),s;4 -(r=O*O)< (l=I*I)|++ _==L&&write(1,(--s%L?_ 

Et voici le résultat ... En seulement 3 lignes ... Une sorte de fractale Hello World ...

 WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!! !dWW!ddddllllrrrrrrrooooooo WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo WloW!!!ddddllrrrrrrrrooooo WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl r!dlooWWWoW!dllrrrrrrroooo WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo l! rdo!l!r!dlrrrrrrrrooo WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW lW!ddlrrrrrrrroo WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd ! rlW!ddllrrrrrrrro Worrrrrrrllllllddd!oooWWWoloWWWWoodr drrWdlllrrrrrrrr Worrrlllllllldddd!WolWrr!!dWWWlrrldr ro!dlllrrrrrrrr Wrrllllllllddddd!WWolWr oWoo r!dllllrrrrrrr Wlllllllldddd!!odrrdW o lWddllllrrrrrrr Wlddddd!!!!!WWordlWrd oW!ddllllrrrrrrr olddddd!!!!!WWordlWrd oW!ddllllrrrrrrr Wlllllllldddd!!odrrdW o lWddllllrrrrrrr Wrrllllllllddddd!WWolWr oWoo r!dllllrrrrrrr Worrrlllllllldddd!WolWrr!!dWWWlrrldr ro!dlllrrrrrrrr Worrrrrrrllllllddd!oooWWWoloWWWWoodr droWdlllrrrrrrrr WWorrrrrrrrrrrrllld!!!!!dddd!!!!WWrd ! rlW!ddllrrrrrrrro WWoorrrrrrrrrrrrrrrlllddddddddd!!!!oolWW lW!ddlrrrrrrrroo WWWoorrrrrrrrrrrrrrrrrlllllddddddd!!Wdo l! rdo!l!r!dlrrrrrrrrooo WWWWoorrrrrrrrrrrrrrrrrrrlllllllddddWldolrrlo!Wl r!dlooWWWoW!dllrrrrrrroooo WWWWooorrrrrrrrrrrrrrrrrrrrllllllllldd!!!!WWWoo WloW!!!ddddllrrrrrrrrooooo WWWWWoooorrrrrrrrrrrrrrrrrrrrrlllllllllddd!!!o!!! WdWW!ddddllllrrrrrrrooooooo WWWWWWooooorrrrrrrrrrrrrrrrrrrrrllllllllldddd!WorddddoW!ddllllllrrrrrrooooooooo WWWWWWWoooooorrrrrrrrrrrrrrrrrrrrrrlllllllldddd!orro!o!dllllllrrrrrrooooooooooo WWWWWWWWoooooooorrrrrrrrrrrrrrrrrrrrrrllllllldd!oWW!!dllllllrrrrroooooooooooooo WWWWWWWWWWooooooooorrrrrrrrrrrrrrrrrrrrrrrllllld!!ddllllrrrrrrooooooooooooooooo WWWWWWWWWWWoooooooooooorrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrooooooooooooooooooooo WWWWWWWWWWWWWooooooooooooooooorrrrrrrrrrrrrrrrrrrrroooooooooooooooooooooooooooo WWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo WWWWWWWWWWWWWWWWooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo WWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo WWWWWWWWWWWWWWWWWWWWWoooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 

Que diriez-vous de montrer que vous pouvez utiliser n’importe quel navigateur Web et saisir du code JavaScript dans la barre d’adresse et obtenir le code à exécuter?

EDIT: Aller à une page avec beaucoup d’images et essayez ceci dans la barre d’adresse:

 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 

Vous pouvez créer une application qui sélectionne un nombre aléatoire. Et vous devez le deviner. Si vous vous trompez, cela signifie: plus haut ou plus bas. Et si vous l’avez deviné, un bon message.

C’est cool de jouer pour les étudiants.

Version Python simple sans vérification d’erreur correcte:

 import random while input('Want to play higher/lower? ').lower().startswith('y'): n = random.randint(1, 100) g = int(input('Guess: ')) while g != n: print(' %ser!' % (g > n and 'low' or 'high')) g = int(input('Guess: ')) print(' Correct! Congratulations!') 

Erik suggère que l’ ordinateur devine le nombre. Cela peut se faire aussi dans les 10 lignes de code (bien que l’absence de vérification des erreurs soit encore plus grave: des nombres valides en dehors de la plage provoquent une boucle infinie):

 while input('Want to let the pc play higher/lower? ').lower().startswith('y'): n = int(input('Give a number between 1 and 100: ')) lo, hi, guess, sortinges = 1, 100, 50, 1 while guess != n: sortinges += 1 lo, hi = (guess + 1, hi) if guess < n else (lo, guess - 1) guess = (lo + hi) // 2 print('Computer guessed number in %d tries' % tries) 

De retour en cours d’informatique au lycée, moi-même et quelques amis avons enseigné à la classe comment programmer avec Delphi. La classe était principalement axée sur la programmation avec Pascal, Delphi était donc une bonne étape. Nous avons démontré la nature pilotée par les événements de Delphi et ses capacités RAD. À la fin de la leçon, nous avons montré à la classe un exemple d’application et lui avons demandé de le reproduire. L’application a demandé ” Êtes-vous ivre? ” Avec deux boutons Oui et Non . … Je pense que vous savez ce qui va arriver … le bouton No a changé de position sur la souris et il était presque impossible de cliquer dessus.

Les étudiants et l’enseignant en ont bien profité.

Le programme ne nécessitait que quelques lignes de code écrit par l’utilisateur avec une équation simple pour calculer où déplacer le bouton. Je ne pense pas que les autres étudiants aient compris, mais quelques-uns étaient proches.

Quand j’ai découvert la bombe bash, j’ai trouvé que c’était vraiment sympa. Tellement simple, mais propre à ce qu’il peut faire:

 :(){ :|:& };: 

C’est de la sortingche, et même pas très simple, mais j’ai déjà écrit un shoot’em en 20 lignes de C ++, en utilisant la bibliothèque graphique Allegro. Pas de vrai critère pour savoir ce qu’était une ligne , mais c’était il ya peu, et c’était pour le plaisir. Il y avait même des effets sonores grossiers.

Voici à quoi ça ressemblait:

20 lignes http://img227.imageshack.us/img227/8770/20linesxx0.png

Et voici le code ( devrait comstackr):

 bool inside(int x, int y, int x2, int y2) { return (x>x2&&xy2&&y228?228:px))) && !key[KEY_ESC]) { rectfill(buffer,0,0,244,240,makecol32(0,0,0)); for(int i=0;i<8;i++) if (inside(shotx,shoty,i*32,monstars[i])) midi_out(midi,5); for (int i=0; i<8; monstars[i] += first++>8?(monstars[i]==-100?0:0.02):-100, points = monstars[i]>240?points-1:points, monstars[i]=monstars[i]>240?-100:monstars[i], points = inside(shotx,shoty,i*32,monstars[i])?points+1:points, (monstars[i] = inside(shotx,shoty,i*32,monstars[i])?shoty=-1?-100:-100:monstars[i]), maxp = maxp>points?maxp:points, i++) for (int j=1; j<9; j++) line(buffer,i*32+mongfx[j*2 - 2],monstars[i]+mongfx[j*2-1],i*32+mongfx[j*2],monstars[i]+mongfx[j*2+1],makecol32(255,0,0)); if (int(first)%2000 == 0 && int(rnd=float(rand()%8))) monstars[int(rnd)] = monstars[int(rnd)]==-100?-20:monstars[int(rnd)]; // randomowe pojawianie potworkow if (shoty>0) rectfill(buffer,shotx,shoty-=0.1,shotx+2,shoty+2,makecol32(0,255,255)); // rysowanie strzalu for (int i=1; i<18; i++) line(buffer,px+plgfx[i*2 - 2],200-plgfx[i*2-1],px+plgfx[i*2],200-plgfx[i*2+1],makecol32(255,255,0)); textprintf_ex(buffer,font,250,10,makecol32(255,255,255),makecol32(100,100,255),"$: %i ",int(points)*10); textprintf_ex(buffer,font,250,20,makecol32(255,255,255),makecol32(100,100,255),"$$ %i ",int(maxp)*10); blit(buffer, screen, 0, 0, 0, 0, 320,240); } } END_OF_MAIN() 

In this day and age, JavaScript is an excellent way to show how you can program using some really basic tools eg notepad.

jQuery effects are great starting point for anyone wanting to wow their friends!

In this one, just click the white space of the page.

         

One thing you might consider is something like Robocode , in which a lot of coding is abstracted away and you basically just tell a robot what to do. A simple 10-line function can make the robot do a great deal, and has a very visual and easy-to-follow result.

Perhaps Robocode itself isn’t suited to the task, but this kind of thing is a good way to relate written code to visual actions on the computer, plus it’s fun to watch for when you need to give examples.

 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); } } 

So one day, I decided that I’d had enough. I would learn piano. Seeing people like Elton John command such mastery of the keyboard assured me that this was what I wanted to do.

Actually learning piano was a huge letdown. Even after completing eight grades of piano lessons, I was still not impressed with how my mental image of playing piano was so different from my original vision of enjoying the activity.

However, what I thoroughly enjoyed was my mere three grades of rudiments of music theory. I learned about the construction of music. I was finally able to step from the world of performing written music to writing my own music. Subsequently, I was able to start playing what I wanted to play.


Don’t try to dazzle new programmers, especially young programmers. The whole notion of “less than ten lines of simple code” seems to elicit a mood of “Show me something clever “.

You can show a new programmer something clever. You can then teach that same programmer how to replicate this “performance”. But this is not what gets them hooked on programming. Teach them the rudiments, and let them synthesize their own clever ten lines of code.

I would show a new programmer the following Python code:

 input = open("input.txt", "r") output = open("output.txt", "w") for line in input: edited_line = line edited_line = edited_line.replace("EDTA", "ethylenediaminetetraacetic acid") edited_line = edited_line.replace("ATP", "adenosine sortingphosphate") output.write(edited_line) 

I realize that I don’t need to assign line to edited_line . However, that’s just to keep things clear, and to show that I’m not editing the original document.

In less than ten lines, I’ve verbosified a document. Of course, also be sure to show the new programmer all the ssortingng methods that are available. More importantly, I’ve showed three fundamentally interesting things I can do: variable assignment, a loop, file IO, and use of the standard library.

I think you’ll agree that this code doesn’t dazzle. In fact, it’s a little boring. No – actually, it’s very boring. But show that code to a new programmer and see if that programmer can’t repurpose every part of that script to something much more interesting within the week, if not the day. Sure, it’ll be distasteful to you (maybe using this script to make a simple HTML parser), but everything else just takes time and experience.

Like most of the other commenters, I started out writing code to solve math problems (or to create graphics for really terrible games that I would design — things like Indiana Jones versus Zombies).

What really started me (on both math and programming) was going from text based, choose your own adventure style games…to more graphics-based games. I started out coloring graph paper and plotting pixels, until I got into geometry…and discovered how to use equations to plot curves and lines, boxes, etc.

My point is, I could have really gotten into something like processing ( http://processing.org/ ) where a typical program looks something like this:

 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); } 

To me, this is the “Logo” of the future.

There are easy “hello world” examples that can quickly get someone drawing and changing code and seeing how things break and what weird “accidents” can be created…all the way to more advanced interaction and fractal creation…

You could use a script written with AutoIt , which blurs the line between using a traditional application and programming.

Eg a script which opens notepad and makes their own computer insult them in it and via a message box, and then leaves no trace of its actions:

 Run("notepad.exe") WinWaitActive("Untitled - Notepad") Send("You smell of human.") Sleep(10000) MsgBox(0, "Humans smell bad", "Yuck!") WinClose("Untitled - Notepad") WinWaitActive("Notepad", "Do you want to save") Send("!n") 

I remember when I first started coding loops always impressed me. You write 5 – 10 lines of code (or less) and hundreds (or however many you specify) lines print out. (I learned first in PHP and Java).

 for( int i = 0; i < 200; i++ ) { System.out.println( i ); } 

I think a good place for a student to get started could be Greasemonkey . There are thousands of example scripts on userscripts.org, very good reading material, some of which are very small. Greasemonkey scripts affect web-pages, which the students will already be familiar with using, if not manipulating. Greasemonkey itself offers a very easy way to edit and enable/disable scripts while testing.

As an example, here is the “Google Two Columns” script:

 result2 = ''; gEntry = document.evaluate("//li[@class='g'] | //div[@class='g'] | //li[@class='g w0'] | //li[@class='gs 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 += ''; } if(i%2 == 1) { result2 += ''; } } sDiv.innerHTML = result2+'
'+gEntry.snapshotItem(i).innerHTML+''+gEntry.snapshotItem(i).innerHTML+'
'; if (document.getElementById('mbEnd') !== null) { document.getElementById('mbEnd').style.display = 'none'; }

This is a very rudimentary text-based c# program that simulates the spinning action of a slot machine. It doesn’t include different odds of winning or cash payouts, but that could be a nice exercise for the students.

Sorry that it is more than 10 lines.

 ssortingng[] symbols = new[] { "#", "?", "~" }; // The symbols on the reel Random rand = new Random(); do { ssortingng a="",b="",c=""; for( int i = 0; i < 20; i++ ) { Thread.Sleep( 50 + 25 * i ); // slow down more the longer the loop runs if( i < 10 ) a = symbols[rand.Next( 0, symbols.Length )]; if( i < 15 ) b = symbols[rand.Next( 0, symbols.Length )]; c = symbols[rand.Next( 0, symbols.Length )]; Console.Clear(); Console.WriteLine( "Spin: " + a + b + c ); } if( a == b && b == c ) Console.WriteLine( "You win. Press enter to play again or type \"exit\" to exit" ); else Console.WriteLine( "You lose. Press enter to play again or type \"exit\" to exit" ); } while( Console.ReadLine() != "exit" ); 

With Tcl you have a simple text editor with a save button in about 12 lines of code (but no open, that would take another 8 lines). It works across all standard platforms:

 pack [frame .toolbar] -side top -fill x pack [button .save -text save -command save] -in .toolbar -side left pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side right -fill y pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true proc save {} { set filename [tk_getSaveFile] if {$filename ne ""} { set f [open $filename w] puts $f [.text get 1.0 end-1c] close $f } } 

I realize the goal was 10 lines, so if you want the to stick to 10 lines or less, a simple text editor without load or save is only two lines. That’s not too shabby.

 pack [scrollbar .vsb -orient vertical -command [list .text yview]] -side left -fill y pack [text .text -wrap word -yscrollcommand [list .vsb set]] -side left -fill both -expand true 

Execute either of the above blocks of code with “wish filename ” on the platform of your choice. Wish comes with most *nix’s and the mac but you’ll have to install it manually for windows.

To go a step further, that two line script can also be written in python, though it takes eight lines, still under the 10 line goal:

 from Tkinter import * root=Tk() text = Text(wrap="word") sb = Scrollbar(orient="vertical", command=text.yview) text.configure(yscrollcommand=sb.set) sb.pack(side="right", fill="y") text.pack(side="left", fill="both", expand=True) root.mainloop() 

How about a bookmarklet? It would show them how to manipulate something that they use every day (the Internet) without requiring any development tools.

If you can afford the hardware, using an Arduino board + processing will produce some pretty cool things, though it may be a little advanced for people that may not be interestd at all in programming.

I wrote about this recently in an article “The Shortest, most useful program I have ever written.”

Summary: I wrote a 3 line VB6 app back in 1996 that I still use every single day. Once the exe is dropped in the “Send-to” folder. It lets you right click on a file in explorer and send the full path of that file to the clipboard.

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

It’s interesting that you mention the Mandelbrot set, as creating fractals with GW-BASIC is what sparked my love of programming back in high school (around 1993). Before we started learning about fractals, we wrote boring standard deviation applications and I still planned to go into journalism.

But once I saw that long, difficult-to-write BASIC program generate “fractal terrain,” I was hooked and I never looked back. It changed the way I thought about math, science, computers, and the way I learn.

I hope you find the program that has the same affect on your students.

wxPython First Steps

 import wx app = wx.App() wx.Frame(None, -1, 'simple.py').Show() app.MainLoop() 

simple.py frame http://zetcode.com/wxpython/images/simple.jpg

I’m sure it’d turn into more than 10 lines of code, but have you considered a form based app where pressing the buttons does things like changing the colour of the background or changes the size of the text? This would show them how interactive programs work. It would also show them that they, as programmer, are in complete control of what the computer (program) does.

Hopefully it would lead them to make suggestions for other things they could change and then onto other things they might want to do.