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
2000-2001
KnowNow
herramientas para el web
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
2004-2006
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
mythical man month
facts & fallacies of software engineering
refactoring
unos
demos
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?