checklist
water present, oed running, projector works, kseg running and empty, 3dsier in correct state, 3dsier open in Emacs, js-calc opened in Firefox
soy Javier Sitaker
voy a hablar de programación
primero
gracias por su paciencia
con mi español
demasiados temas:
¿por que programar?
mi historia
como programar (generalmente)
libros que les recomiendo
unos demos
¿por que programar?
nuevo método de pensar
medio de comunicación
herramientas útiles
nuevo método de pensar
Perlis:
You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program.
Perlis:
Crees que sabes cuando puedes aprender; estás más seguro cuando puedes escribir; aún más cuando puedes enseñar; pero estás completamente seguro cuando puedes programar.
SICM
Sussman en SICM:
When we started we expected that using this approach to formulate mechanics would be easy. We quickly learned that many things we thought we understood we did not in fact understand. Our requirement that our mathematical notations be explicit and precise enough that they can be interpreted automatically, as by a computer, is very effective in uncovering puns and flaws in reasoning. The resulting struggle to make the mathematics precise, yet clear and computationally effective, lasted far longer than we anticipated. We learned a great deal about both mechanics and computation by this process.
Sussman en SICM:
Cuando empezamos, previmos que usar este enfoque para formular mecánica fuera fácil. Rapidamente aprendemos que muchas cosas que creímos que comprendimos, en realidad, no comprendimos. Tuvimos un requisito, que nuestras notaciones matemáticas sean tan explicitas y tan precisas que pueden ser interpretadas automaticamente, como por una computadora. Este requisito es muy eficaz para descubrir juegos de palabras y defectos de razonamiento. La lucha que resulta, para hacer las matemáticas precisas, pero claras y computacionalmente efectivas, duró mucho más largo tiempo de lo que anticipamos. Aprendimos mucho de las dos, mecánica y cómputo, a través de este proceso.
nueva clase de mecánica
desde 2001
a MIT
en el web
http://mitpress. mit.edu/SICM/
en general
cuando explico
descubro ambigüedades
oyentes preguntan
no todas las ambigüedades
porque no son estúpidos
también
cuando programo
descubro ambigüedades
computadora se queja
todas
porque es estúpido
un programa
idea
sin ambigüedades
en idioma precisa
nada mas
idea
¿por que programar?
medio de comunicación
por ejemplo
esto no es PowerPoint
ni Impress
ni Keynote
es JavaScript
(y HTML)
pues
podemos programar
para mostrar
ideas
más claramente
otro ejemplo:
geometría
¿por que programar?
herramientas útiles
todo el mundo ya sabe
pues
no voy a decir mucho
muchas cosas que se hacen por máquinas
o por personas
pueden hacerse por software
mucho más facilmente
por ejemplo
buscar información en el web
dibujar gráficos de datos
recordar cuando sus amigos están libres
para una fiesta
facilitar comunicación generalmente
leer texto
almacenar informes
controlar máquinas herramientas
buscar traducciones de palabras
estos
son claves
para el desarrollo
de la patria
software tiene
dos ventajas
mucho mas fácil copiarlo
mucho mas fácil modificarlo
pues
mejora más rápido
ahora
es crucial
mejorar nuestros métodos
compartir conocimiento
pues
necesitan mejor software
por que programar:
¡nuevo método de pensar!
¡medio de comunicación!
¡herramientas útiles!
la historia de mis empleos
(porque las personas preguntan)
con lenguajes
(porque las personas preguntan)
1996-1997

apoyo para equipo
sql sh make Tcl
1997

¡uy!
y2k apaños
1997-2000

análisis de imágenes cientificas
PostScript
2000-2001
KnowNow
herramientas para el web
JavaScript
2001
Alpiri (¡uy!)
gestión de conocimiento
JavaScript sql
2001-2002
trabajo bajo contrato
análisis de datos de negocios
2002-2004
gestión de redes inalámbricas
sql lisp
2004-2006

Bar
JavaScript
Pero también
basic prolog scheme apl forth asm
y cientos de otros programas pequeños
wowbarbts
cursmail, mi lector de correos
pequeño simulador físico
optimización de circuitos
lazy graph reduction
como programar
solo 10 principios los más importantes
1
no parese por nada
2
trabaje incrementalmente
mantenga que el código funciona
3
no se repite
4
escribe menos código
5
no trabaje sólo
6
bote cosas
no tenga miedo
7
escribe programas para humanos
no para la máquina
8
escribe pruebas antes
la solución después
9
use estructuras de datos simples
cuando pueda
complejos cuando necesita
10
averíase rápido
1
no parese por nada
si el sístema operativo no funciona
arreglalo
(más fácil y útil si es libre)
o busca un workaround
si no puede hallar la biblioteca
escribe su propia biblioteca
2
trabaje incrementalmente
mantenga que el código funciona
hay dos tipos de programas grandes
esos que empezaron
como pequeños programas que funcionan
y esos que todavia no funcionan
si halla un defecto
es mucho más fácil arreglarlo
si lo hice hace 5 minutos
que si lo hice hace 5 días
3
no se repite
es un principio difícil a explicar
cuando se repite
cuando el código tiene partes grandes
que son parecidas
es difícil comprender el código
porque necesita hallar las diferencias
en un mar del mismo
también
para cambiar el código
necesita hallar todas las copias
y cambiarlas
4
escribe menos código
más fácil de leer
menos defectos
más fácil escribir más
5
no trabaje sólo
hallar defectos es mucho más fácil
cuando otra persona los escribe
también
a veces
la idea correcta
salva días de trabajo
6
bote cosas
no tenga miedo
si nunca pare
va a escribir mucha basura
pero aprender lo que necesita
pues
despues de escribir esta basura
bote la basura
y escribe la cosa correcta
mucho más fácil si trabaje incrementalmente
necesita botar menos
si no bota la basura
la basura será su pena
Brooks: Plan to throw one away. You will, anyway.
7
escribe programas para humanos
no para la máquina
8
escribe pruebas antes
la solución después
9
use estructuras de datos simples
cuando pueda
complejos cuando necesita
10
averíase rápido
no parese por nada
trabaje incrementalmente: mantenga que el código funciona
no se repite
escribe menos código
no trabaje sólo
bote cosas, no tenga miedo
escribe programas para humanos, no para la máquina
escribe pruebas antes, la solución después
use estructuras de datos simples, cuando pueda, complejas cuando necesita
averíase rápido
libros que les recomiendo
sicp
the practice of programming
(versión castellana)
code complete
producing open source software
libre
producingoss.com
mythical man month
facts & fallacies of software engineering
refactoring
unos demos
calculadora de RPN en DHTML
JavaScript
tal vez
3 noches de trabajo
400 líneas de código
¿6 páginas?
lector para OED
Oxford English Dictionary
más grande diccionario en el mundo
16000 páginas
tal vez
5 horas de trabajo
200-300 líneas de código
¿5 páginas?
3-d fractal
8 noches de trabajo
500-800 líneas de código
muy feo
porque entonces no sabía mucho
¿13 páginas?
voy a modificarlo un poco
¡despiértense!
¿preguntas?