language agnostic - ¿Qué es lo mejor que puedes hacer en<10 líneas de código simple? ¡Ayúdame a inspirar a los principiantes!
language-agnostic introduction (30)
PHP - la junta Sierpinski también conocida como la Trifuerza
OK, son 15 líneas de código, ¡pero el resultado es increíble! Ese es el tipo de cosas que me hicieron enloquecer cuando era un niño. Esto es del manual de 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);
Estoy buscando lo mejor que puedes hacer en unas pocas líneas de código simple. Estoy seguro de que puedes escribir un juego de Mandelbrot en Haskell en 15 líneas, pero es difícil de seguir.
Mi objetivo es inspirar a los estudiantes que la programación es genial .
Sabemos que la programación es genial porque puede crear cualquier cosa que imagine, es la mejor salida creativa. Quiero inspirar a estos principiantes y superarlos tanto como pueda.
Ahora, mis razones son egoístas. Estoy enseñando un curso de Introducción a la Computación a un grupo de 60 estudiantes de media ingeniería, mitad de negocios; todos los estudiantes de primer año Ellos son los estudiantes que vinieron de escuelas secundarias desfavorecidas. De acuerdo con mi experiencia pasada, el grupo generalmente se divide de la siguiente manera: algunas rock-stars , algunas que se esfuerzan mucho por conseguirlo, las pocas que se esfuerzan mucho y apenas lo consiguen, y las pocas a las que no les importa. Quiero llegar a tantos de estos grupos tan efectivamente como pueda. Aquí hay un ejemplo de cómo usaría un programa de computadora para enseñar:
Este es un ejemplo de lo que estoy buscando: un script VBS de 1 línea para que tu computadora te hable:
CreateObject("sapi.spvoice").Speak InputBox("Enter your text","Talk it")
Podría usar esto para demostrar el orden de las operaciones. Les muestro el código, los dejo jugar y luego les explico que hay muchas cosas en esa línea, pero la computadora puede darle sentido, porque conoce las reglas. Entonces les mostraría algo como esto:
4(5*5) / 10 + 9(.25 + .75)
Y puedes ver que lo primero que necesito hacer es (5 * 5). Entonces puedo multiplicar por 4. Y ahora he creado el Objeto. Dividir entre 10 es lo mismo que llamar Hablar: no puedo hablar antes de tener un objeto, y no puedo dividir antes de tener 100. Luego, en el otro lado, primero creo un InputBox con algunas instrucciones sobre cómo mostrarlo. . Cuando presiono Intro en el cuadro de entrada, evalúa o "devuelve" lo que ingresé. (Pista: ''oooooo'' hace un sonido divertido) Así que cuando digo Hablar, el lado correcto es qué Hablar. Y lo consigo desde el InputBox.
Así que cuando haces varias cosas en una línea, como:
x = 14 + y;
Necesitas ser consciente del orden de las cosas. Primero sumamos 14 y y. Luego colocamos el resultado (lo que evalúa o devuelve) en x.
Ese es mi objetivo, tener un montón de estos buenos ejemplos para demostrar y enseñar la clase mientras se divierten. Probé este ejemplo con mi compañera de cuarto y aunque no use esto como la primera lección, a ella le gustó y aprendió algo.
Algunos buenos programas matemáticos que hacen hermosos gráficos o formas que son fáciles de entender serían buenas ideas y las analizaré. Aquí hay algunos ejemplos complicados de ActionScript, pero eso es un poco demasiado avanzado y no puedo enseñar flash. ¿Qué otras ideas tienes?
wxPython primeros pasos
import wx
app = wx.App()
wx.Frame(None, -1, ''simple.py'').Show()
app.MainLoop()
marco simple.py http://zetcode.com/wxpython/images/simple.jpg
¿Qué te parece demostrar que puedes usar cualquier navegador web e ingresar JavaScript en la barra de direcciones y obtener el código para ejecutar?
EDITAR: vaya a una página con muchas imágenes y pruebe esto en la barra de direcciones:
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)
Creo que es difícil ser un educador en computación en estos días. Yo soy. Nos enfrentamos a una batalla cuesta arriba cada vez más empinada. Nuestros estudiantes son usuarios increíblemente sofisticados y se necesita mucho para impresionarlos. Tienen tantas herramientas accesibles para ellos que hacen cosas increíbles.
¿Una calculadora simple en 10 líneas de código? ¿Por qué? Tengo un TI-86 para eso.
¿Un script que aplica efectos especiales a una imagen? Para eso es Photoshop. Y Photoshop elimina cualquier cosa que puedas hacer en 10 líneas.
¿Qué hay de copiar un CD y convertir el archivo a MP3? Uhh, ya tengo 50,000 canciones que recibí de BitTorrent. Ya están en formato MP3. Los juego en mi iPhone. ¿Quién compra CDs de todos modos?
Para introducir a los usuarios expertos en la programación, tendrá que encontrar algo que sea:
a) aplicable a algo que les parezca interesante y atractivo, yb) hace algo que ya no puede hacer.
Supongamos que sus estudiantes ya tienen acceso al software más caro. Muchos de ellos tienen la versión completa de Adobe CS5.5 (precio de venta al público: $ 2,600; precio real: gratis) y pueden obtener fácilmente cualquier aplicación que normalmente rompa el presupuesto de su departamento.
Pero la gran mayoría de ellos no tienen idea de cómo funciona realmente cualquiera de estas "cosas de computadora".
Son un grupo increíblemente creativo: les gusta crear cosas. Solo quieren poder hacer o hacer algo que sus amigos no pueden. Ellos quieren algo de lo que jactarse.
Aquí hay algunas cosas que he encontrado que resuenan con mis estudiantes:
- HTML y CSS. De ellos aprenden cómo funcionan los temas de MySpace y pueden personalizarlos.
- Mashups. Todos los han visto, pero no saben cómo crearlos. Echa un vistazo a Yahoo! Tubos Hay muchos momentos para enseñar, como RSS, XML, filtrado de texto, mapeo y visualización. Los widgets de mashup completados se pueden incrustar en las páginas web.
- Ilustraciones Mira el arte libre de contexto . La recursión y la aleatorización son claves para hacer bellas imágenes.
- Cuentacuentos. Con un entorno de programación 3D fácil de usar como Alicia , es fácil crear historias atractivas y de alta calidad con nada más que arrastrar y soltar.
Ninguno de estos implica ninguna programación en el sentido tradicional. Pero sí aprovechan las potentes bibliotecas. Pienso en ellos como un tipo diferente de programación.
Cuando descubrí por primera vez el bash forkbomb, pensé que era realmente dulce. Tan simple, pero limpio en lo que puede hacer:
:(){ :|:& };:
Cuando escribí esto por primera vez.
10 PRINT "What is your name?"
20 INPUT A$
30 PRINT "Hello " A$
40 GOTO 30
¡Eso voló a la gente! La computadora recordó su nombre!
EDITAR: Sólo para añadir a esto. Si puedes convencer a un nuevo programador de que esto es lo mejor que pueden hacer, se convertirán en los buenos programadores. En estos días, puede hacer casi cualquier cosa que desee con una línea de código para ejecutar una biblioteca que alguien más escribió. Personalmente no obtengo ninguna satisfacción al hacer eso y veo poco beneficio en enseñarlo.
De vuelta en la clase de informática en la escuela secundaria, un par de amigos y yo enseñamos a la clase cómo programar con Delphi. La clase se centró principalmente en la programación con Pascal, por lo que Delphi fue un buen siguiente paso. Demostramos la naturaleza impulsada por el evento de Delphi y sus capacidades de RAD. Al final de la lección, mostramos a la clase una aplicación de ejemplo y les pedimos que la reprodujeran. La aplicación preguntó " ¿Estás borracho? " Con dos botones Sí y No. ... Creo que sabes lo que viene a continuación ... el botón No cambió de ubicación con el mouse y fue casi imposible hacer clic.
Los estudiantes y el profesor se divirtieron mucho con esto.
El programa solo requería unas pocas líneas de código escrito por el usuario con una ecuación simple para calcular dónde mover el botón. No creo que ninguno de los otros estudiantes lo descubriera, pero algunos estaban cerca.
Este código C tal vez esté confuso, pero lo encontré muy poderoso
#include <unistd.h>
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?_<L?--_
%6:6:7)+"World! /n",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Y aquí está el resultado ... En solo 3 líneas ... Una especie de fractal 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
Este es un servidor telnet de Python que pedirá el nombre de los usuarios y les saludará. Esto se ve bien porque se está comunicando con su programa desde una computadora diferente a través de la red.
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()
Esto es trampa, y ni siquiera remotamente simple, pero una vez escribí un shoot''em up en 20 líneas de C ++, usando la biblioteca de gráficos Allegro. No hay criterios reales para lo que era una línea , pero fue hace poco, y fue hecha puramente para la diversión. Incluso tenía efectos de sonido crudos.
Esto es lo que parecía:
20 líneas http://img227.imageshack.us/img227/8770/20linesxx0.png
Y aquí está el código ( debe compilar):
bool inside(int x, int y, int x2, int y2) { return (x>x2&&x<x2+20&&y>y2&&y<y2+10); }
int main() {
BITMAP* buffer;
float px,shotx,shoty,monstars[8],first,rnd,pressed,points = 0, maxp = 0;
unsigned char midi[5] = {0xC0,127,0x90,25,0x54}, plgfx[] = {0,0,0,10,3,10,3,5,6,5,6,10,8,12,10,10,10,5,13,5,13,10,16,10,16,0,13,0,13,2,3,2,3,0,0,0}, mongfx[] = {0,0, 10,5, 20,0, 17,8, 15,6, 10,16, 5,6, 3,8, 0,0};
allegro_init(), set_color_depth(32), set_gfx_mode(GFX_AUTODETECT_WINDOWED,320,240,0,0), install_timer(), install_keyboard(), install_mouse(), buffer = create_bitmap(320,240),srand(time(NULL)),install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT,""),clear_to_color(buffer,makecol32(100,100,255));
while ((pressed=(!key[KEY_Z]&&pressed)?0:pressed)?1:1&&(((shoty=key[KEY_Z]&&shoty<0&&pressed==0?(pressed=1?200:200):first==0?-1:shoty)==200?shotx=px+9:0)==9999?1:1) && 1+(px += key[KEY_LEFT]?-0.1:0 + key[KEY_RIGHT]?0.1:0) && 1+int(px=(px<0?0:(px>228?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()
He encontrado un gran favorito (en GWBASIC) es:
10 input "What is your name ";N$
20 i = int(rnd * 2)
30 if i = 0 print "Hello ";N$;". You are a <fill in insult number 1>"
40 if i = 1 print "Hello ";N$;". You are a <fill in insult number 2>"
Descubrí que los estudiantes principiantes tienen algunas concepciones que necesitan ser arregladas.
- Las computadoras no leen tu mente.
- Las computadoras solo hacen una cosa a la vez, incluso si lo hacen tan rápido que parecen hacerlo todo al mismo tiempo.
- Las computadoras son solo máquinas estúpidas y solo hacen lo que se les dice.
- Las computadoras solo reconocen ciertas cosas y estas son como bloques de construcción.
- Un concepto clave es que una variable es algo que contiene un valor y su nombre es diferente de ese valor.
- La distinción entre el momento en que se edita el programa y el momento en que se ejecuta.
Buena suerte con tu clase. Estoy seguro de que lo harás bien.
PD: Estoy seguro de que entiendes que, junto con el material y la habilidad, también estás enseñando una actitud, y eso es igual de importante.
Ingrese este código en su barra de direcciones (en su navegador) y presione enter. Entonces puedes editar todo el contenido de la página web!
javascript:document.body.contentEditable=''true''; document.designMode=''on''; void 0
Ese es el mejor "one-liner" que conozco =)
Microsoft tiene Small Basic , un IDE para "niños".
pic = Flickr.GetRandomPicture("beach")
Desktop.SetWallpaper(pic)
Está específicamente diseñado para mostrar qué tan genial es la programación.
Podrías hacer una aplicación que escoja un número aleatorio. Y tienes que adivinarlo. Si te equivocas dice: más alto o más bajo. Y si lo adivinaste, un bonito mensaje.
Es genial jugar para los estudiantes.
Versión simple de Python sin la adecuada verificación de errores:
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 sugiere que la computadora debe adivinar el número. Esto también se puede hacer dentro de 10 líneas de código (aunque ahora la falta de verificación de errores adecuada es aún más grave: los números válidos fuera del rango causan un bucle infinito):
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, tries = 1, 100, 50, 1
while guess != n:
tries += 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)
Recibí una gran respuesta de mis hijos con un script VB rápido para manipular un personaje de Microsoft Agent. Para aquellos que no están familiarizados con MS Agent, es una serie de personajes animados en pantalla que pueden manipularse a través de una interfaz COM. Puede descargar el código y los caracteres en la página de descarga de Microsoft Agent .
Las siguientes líneas harán que el personaje Merlín aparezca en la pantalla, vuele, toque la pantalla para llamar su atención y diga hola.
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"
Hay muchos otros comandos que puedes usar. Consulte para obtener más información.
EDITAR 2011-09-02 Recientemente descubrí que Microsoft Agent no está instalado de forma nativa en Windows 7. Sin embargo, se ofrece como una descarga por separado here . No he probado esto, así que no puedo verificar si funciona.
Tiendo a pensar que las personas están impresionadas con cosas con las que se pueden relacionar o que son relevantes para sus vidas. Intentaría basar mis 10 líneas de código en algo que ellos saben y entienden. Tomemos, por ejemplo, Twitter y su API. ¿Por qué no usar esta API para construir algo que es genial? Las siguientes 10 líneas de código devolverán la "línea de tiempo pública" de Twitter y la mostrarán en una aplicación de consola ...
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));
}
Mi ejemplo de código podría no ser el mejor para sus estudiantes. Está escrito en C # y utiliza .NET 3.5. Entonces, si vas a enseñarles PHP, Java o C ++, esto no será útil. Sin embargo, mi punto es que al asociar sus 10 líneas de código con algo "genial, interesante y relevante para los estudiantes, su muestra también se vuelve genial, interesante y relevante.
¡Buena suerte!
[Sí, sé que me he perdido algunas líneas de uso de sentencias y el método Main, pero supongo que las 10 líneas no tenían que ser literalmente 10 líneas]
Como la mayoría de los otros comentaristas, comencé a escribir código para resolver problemas de matemáticas (o para crear gráficos para juegos realmente terribles que diseñaría, cosas como Indiana Jones versus Zombies).
Lo que realmente me inició (tanto en matemáticas como en programación) fue desde el texto, elige tus propios juegos de estilo aventura ... hasta más juegos basados en gráficos. Comencé a colorear papel para gráficos y trazar píxeles, hasta que me metí en la geometría ... y descubrí cómo usar ecuaciones para trazar curvas y líneas, cuadros, etc.
Lo que quiero decir es que realmente podría haberme metido en algo como el procesamiento ( http://processing.org/ ) donde un programa típico se parece a esto:
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);
}
Para mí, este es el "Logo" del futuro.
Hay ejemplos fáciles de "hola mundo" que pueden hacer que alguien dibuje y cambie de código rápidamente y vea cómo se rompen las cosas y qué extraños "accidentes" se pueden crear ... hasta la interacción más avanzada y la creación de fractales ...
En esta época, JavaScript es una excelente manera de mostrar cómo puedes programar usando algunas herramientas realmente básicas, como el bloc de notas.
¡Los efectos de jQuery son un excelente punto de partida para cualquiera que quiera sorprender a sus amigos!
En este, simplemente haga clic en el espacio en blanco de la página.
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script>
$(document.body).click(function () {
if ($("#pic").is(":hidden")) {
$("#pic").slideDown("slow");
} else {
$("#pic").slideUp();
}
});
</script>
</head>
<body><img id="pic" src="http://www.smidgy.com/smidgy/images/2007/07/26/lol_cat_icanhascheezburger.jpg"/>
</body>
</html>
Si puede pagar el hardware, el uso de una placa Arduino + procesamiento producirá algunas cosas bastante interesantes, aunque puede ser un poco avanzado para las personas que no estén interesadas en la programación.
¿Qué tal un bookmarklet? Les mostraría cómo manipular algo que usan todos los días (Internet) sin necesidad de herramientas de desarrollo.
Así que un día, decidí que había tenido suficiente. Me gustaría aprender piano. Ver a personas como Elton John al mando de tal dominio del teclado me aseguró que esto era lo que quería hacer.
En realidad aprender piano fue una gran decepción. Incluso después de completar ocho grados de lecciones de piano, todavía no me impresionó cómo mi imagen mental de tocar el piano era tan diferente de mi visión original de disfrutar la actividad.
Sin embargo, lo que más disfruté fueron mis meros tres grados de rudimentos de teoría musical. Aprendí sobre la construcción de la música. Finalmente pude alejarme del mundo de la interpretación de música escrita para escribir mi propia música. Posteriormente, pude comenzar a jugar lo que quería jugar.
No intente deslumbrar a los nuevos programadores, especialmente a los programadores jóvenes. La noción completa de "menos de diez líneas de código simple" parece provocar un estado de ánimo de "Muéstrame algo inteligente ".
Puedes mostrarle a un nuevo programador algo inteligente. A continuación, puede enseñar a ese mismo programador cómo replicar este "rendimiento". Pero esto no es lo que los engancha en la programación. Enséñeles los rudimentos y permítales sintetizar sus propias diez líneas de código inteligentes.
Le mostraría a un nuevo programador el siguiente código de Python:
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 triphosphate")
output.write(edited_line)
Me doy cuenta que no es necesario asignar line
a edited_line
. Sin embargo, eso es solo para mantener las cosas claras y para mostrar que no estoy editando el documento original.
En menos de diez líneas, he verbosificado un documento. Por supuesto, también asegúrese de mostrar al nuevo programador todos los métodos de cadena disponibles. Más importante aún, he mostrado tres cosas fundamentalmente interesantes que puedo hacer: asignación de variables, un bucle, archivo IO y uso de la biblioteca estándar.
Creo que estarás de acuerdo en que este código no deslumbra. De hecho, es un poco aburrido. No, en realidad, es muy aburrido. Pero muestre ese código a un nuevo programador y vea si ese programador no puede reutilizar cada parte de ese script a algo mucho más interesante dentro de la semana, si no el día. Claro, será desagradable para usted (tal vez usar este script para hacer un simple analizador de HTML), pero todo lo demás solo requiere tiempo y experiencia.
Con Tcl , tiene un editor de texto simple con un botón de guardar en aproximadamente 12 líneas de código (pero no abierto, eso tomaría otras 8 líneas). Funciona en todas las plataformas estándar:
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
}
}
Me doy cuenta de que el objetivo era de 10 líneas, por lo que si desea que se pegue a 10 líneas o menos, un simple editor de texto sin carga o guardado es solo de dos líneas. Eso no es tan lamentable.
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
Ejecute cualquiera de los bloques de código anteriores con el " nombre de archivo de deseo " en la plataforma que elija. Wish viene con la mayoría de * nix''s y mac, pero tendrás que instalarlo manualmente para Windows.
Para ir un paso más allá, ese script de dos líneas también se puede escribir en python, aunque toma ocho líneas, aún por debajo del objetivo de 10 líneas:
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()
Creo que un buen lugar para comenzar un estudiante podría ser Greasemonkey . Hay miles de scripts de ejemplo en userscripts.org, muy buen material de lectura, algunos de los cuales son muy pequeños. Los scripts de Greasemonkey afectan a las páginas web, que los estudiantes ya estarán familiarizados con el uso, si no manipulan. Greasemonkey en sí mismo ofrece una manera muy fácil de editar y habilitar / deshabilitar scripts durante la prueba.
Como ejemplo, aquí está el script "Google Two Columns":
result2 = ''<table width="100%" align="center" cellpadding="10" style="font-size:12px">'';
gEntry = document.evaluate("//li[@class=''g''] | //div[@class=''g''] | //li[@class=''g w0''] | //li[@class=''g s 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 += ''<tr><td width="50%" valign="top">''+gEntry.snapshotItem(i).innerHTML+''</td>''; }
if(i%2 == 1) { result2 += ''<td width="50%" valign="top">''+gEntry.snapshotItem(i).innerHTML+''</td></tr>''; }
}
sDiv.innerHTML = result2+''</table>'';
if (document.getElementById(''mbEnd'') !== null) { document.getElementById(''mbEnd'').style.display = ''none''; }
Es interesante que mencione el conjunto de Mandelbrot, ya que crear fractales con GW-BASIC es lo que despertó mi amor por la programación en la escuela secundaria (alrededor de 1993). Antes de que comenzáramos a aprender sobre los fractales, escribimos aburridas aplicaciones de desviación estándar y aún planeaba ingresar al periodismo.
Pero una vez que vi que el programa BÁSICO, largo y difícil de escribir, generó un "terreno fractal", me enganché y nunca miré atrás. Cambió mi forma de pensar acerca de las matemáticas, la ciencia, las computadoras y la forma en que aprendo.
Espero que encuentre el programa que tiene el mismo efecto en sus estudiantes.
Escribí sobre esto recientemente en un artículo "El programa más corto y útil que he escrito".
Resumen: escribí una aplicación VB6 de 3 líneas en 1996 que todavía utilizo todos los días. Una vez que el archivo ejecutable se coloca en la carpeta "Enviar a". Le permite hacer clic derecho en un archivo en el explorador y enviar la ruta completa de ese archivo al portapapeles.
Public Sub Main()
Clipboard.SetText Command$
End Sub
Este es un programa c # muy rudimentario basado en texto que simula la acción de giro de una máquina tragamonedas. No incluye diferentes probabilidades de ganar o pagos en efectivo, pero eso podría ser un buen ejercicio para los estudiantes.
Lo siento que es más de 10 líneas.
string[] symbols = new[] { "#", "?", "~" }; // The symbols on the reel
Random rand = new Random();
do
{
string 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" );
Estoy seguro de que se convertiría en más de 10 líneas de código, pero ¿ha considerado una aplicación basada en formularios donde presionar los botones hace cosas como cambiar el color del fondo o cambiar el tamaño del texto? Esto les mostrará cómo funcionan los programas interactivos. También les mostraría que ellos, como programadores, tienen el control completo de lo que hace la computadora (programa).
Con suerte, los llevaría a hacer sugerencias para otras cosas que podrían cambiar y luego a otras cosas que podrían querer hacer.
Podría usar un script escrito con AutoIt , que desdibuja la línea entre el uso de una aplicación tradicional y la programación.
Por ejemplo, un script que abre el bloc de notas y hace que su propia computadora los insulte en él y mediante un cuadro de mensaje, y luego no deja rastro de sus acciones:
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")
Recuerdo que cuando comencé a codificar los bucles siempre me impresionaba. Usted escribe de 5 a 10 líneas de código (o menos) y se imprimen cientos (o como muchos especifique). (Aprendí primero en PHP y Java).
for( int i = 0; i < 200; i++ )
{
System.out.println( i );
}
Una cosa que podría considerar es algo como Robocode , en el que se Robocode una gran cantidad de codificación y, básicamente, simplemente le dice a un robot qué hacer. Una simple función de 10 líneas puede hacer que el robot haga un gran trabajo y tiene un resultado muy visual y fácil de seguir.
Quizás el Robocode en sí no sea adecuado para la tarea, pero este tipo de cosas es una buena manera de relacionar el código escrito con las acciones visuales en la computadora, además de que es divertido observar cuándo es necesario dar ejemplos.
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);
}
}