Didáctica del análisis y la solución deproblemas mediante programación     Primero gráficas, luego la sintaxis
¿Qué es un problema?• ¿Cuál es el significado de la vida?       – Una pregunta no tan objetiva• ¿Cuántos años tengo?      ...
¿Qué es un problema?• ¿Cuál es el equivalente Celsius de 45F?       – Otra vez, una vez que se contesta, concluye• ¿Cuál e...
¿Qué es un problema?Pregunta: tiene una sola respuestaProblema: familia enorme (o infinita) de  preguntas, compartiendo al...
¿Qué es “computación”?• ¿Biología = “ciencia del microscopio”?       • acerca de los microbios, no de lo microscopios• ¿As...
¿Qué es un curso de Fundamentos a la                   programación?  1) ¿Cómo emplear Microsoft Office, et al  2) Survey ...
¿De qué trata Fundamentos de                   programación, FP?July 5 2011             Program By Design 2011   7
¿Qué se enseña?   Bla, bla algoritmo bla variable bla función bla     tipo de datos bla objeto bla re-uso bla     metodolo...
¿Qué se escucha?              bla ; bla { bla ) bla ] bla return bla this.x = x; bla                 public static void ma...
Lenguajes de programación e IDEs:                      un mal necesario   • Necesario: para escribir programas reales     ...
¿Cómo minimizar los lenguajes e                    IDEs?   • Introducir características una a la vez   • Evitar “magia neg...
Hecho desafortunado   Java y C++, … no se atienen a esas reglas:   • Introducen muchos conceptos a la vez   • No pueden ex...
¿Qué acerca de Java y POO?Sí, los estudiantes requieren Java y POO, pero• ¿Cuándo?• ¿Por qué?Contestando primero el “por q...
¿Por qué los estudiantes requieren                 Java?   • Se emplea en muchas instituciones de     educación superior (...
Por qué ¿Cuándo los estudiantes              requieren Java?   • Al momento de cursos a mitad de la carrera,     los que l...
¿Por qué los estudiantes requieren       POO con base en clases?• Es una forma útil de organizar programas  grandes… digam...
Por qué ¿Cuándo los estudiantes requieren POO con base en clases?• Cuando escriban programas grandes… digamos,  10,000 a 1...
Si bien parece que mientras más pronto se inicie      el manejo de Java, mejor se aprenderá• No necesariamente. Java tiene...
Opciones a primero-Java   • Principales opciones: Alice, Python,     Scheme/Racket, Scratch/BYOB, Processing   • Todas: in...
Imperativo                 Funcional• “¿Qué salida y efectos       • “¿Cuál es la respuesta  colaterales se desean?”      ...
¿Por qué programación funcional?                Imperativa                            FuncionalModelo mental Máquina von N...
Puede programarse funcionalmente en           otros languajes (p.e. Java)• Enseñar “return” antes de asignación o println•...
Pero ¿por qué enseñar Racket?               ¡Nadie lo emplea!   • Lo mismo se decía de Pascal en los 1980’s   • Realmente ...
¿Qué hacer?                NO “enseñar Racket en lugar de Java”                 Curricula multi-semestre, integrada   1) E...
La Trinidad                   Curricula centrada en la solución                      de problemas (Programación           ...
"concentrarse en solucionar                       problemas"• Receta de diseño paso a paso: de la descripción verbal  de u...
Stephen Bloch, Adelphi University, Garden City, NY       John Clements, Cal Poly, San Luis Obispo, CAKathi Fisler, Worcest...
Próxima SlideShare
Cargando en…5
×

Didáctica del análisis y la solución de problemas mediante programación

958 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
958
En SlideShare
0
De insertados
0
Número de insertados
22
Acciones
Compartido
0
Descargas
5
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Didáctica del análisis y la solución de problemas mediante programación

  1. 1. Didáctica del análisis y la solución deproblemas mediante programación Primero gráficas, luego la sintaxis
  2. 2. ¿Qué es un problema?• ¿Cuál es el significado de la vida? – Una pregunta no tan objetiva• ¿Cuántos años tengo? – Pregunta objetiva, la cual requiere información de la que se carece• ¿Cuál el número primo más pequeño? – Objetiva, bien especificada, pero una vez que se resuelve, concluyeJuly 5 2011 Program By Design 2011 2
  3. 3. ¿Qué es un problema?• ¿Cuál es el equivalente Celsius de 45F? – Otra vez, una vez que se contesta, concluye• ¿Cuál es el equivalente Celsius de 87F? – Igual, aunque muy relacionada• ¿Cuál es el equivalente Celsius de ___ en Fahrenheit? – Generaliza infinitamente muchas preguntasJuly 5 2011 Program By Design 2011 3
  4. 4. ¿Qué es un problema?Pregunta: tiene una sola respuestaProblema: familia enorme (o infinita) de preguntas, compartiendo algunos aspectos y difiriendo de otrosPrograma: regla general para resolver un problema, con entrada para los aspectos que difierenCómputo: un programa operando en una entrada particular para producir un resultado particularJuly 5 2011 Program By Design 2011 4
  5. 5. ¿Qué es “computación”?• ¿Biología = “ciencia del microscopio”? • acerca de los microbios, no de lo microscopios• ¿Astronomía = “ciencia del telescopio”? • acerca de las estrellas, no de los telescopios¡No es acerca de la herramienta, es acerca de lo que se puede estudiar con la herramienta!• “computación” • tiene que ver con información y su manipulación, no las computadoras, es cercana a las matemáticasJuly 5 2011 Program By Design 2011 5
  6. 6. ¿Qué es un curso de Fundamentos a la programación? 1) ¿Cómo emplear Microsoft Office, et al 2) Survey de la profesión de los computólogos 3) Un lenguaje, IDE, OS, etc. que proporcionen a los estudiantes trabajo 4) Conceptos, hábitos, y metodologías de programación Cuatro cursos completamente diferentes, cada uno valioso por diferentes razones y para diferentes audiencias #3 útil para estudiantes por recibirse, o en búsqueda de ayudantías o trabajos de verano #4 más útil como primer curso. Llamémosle “Fundamentos de programación"…July 5 2011 Program By Design 2011 6
  7. 7. ¿De qué trata Fundamentos de programación, FP?July 5 2011 Program By Design 2011 7
  8. 8. ¿Qué se enseña? Bla, bla algoritmo bla variable bla función bla tipo de datos bla objeto bla re-uso bla metodología bla testing bla diseño bla composición bla refinamiento bla abstracciónJuly 5 2011 Program By Design 2011 8
  9. 9. ¿Qué se escucha? bla ; bla { bla ) bla ] bla return bla this.x = x; bla public static void main (String[] args) bla /* bla // bla <int> bla if ( bla JOptionPane bla class Posn(int x,y)July 5 2011 Program By Design 2011 9
  10. 10. Lenguajes de programación e IDEs: un mal necesario • Necesario: para escribir programas reales que realmente corran en computadoras reales • Mal: distraen a los estudiantes de temas importantes • En cualquier caso serán obsoletos en unos cuantos añosJuly 5 2011 Program By Design 2011 10
  11. 11. ¿Cómo minimizar los lenguajes e IDEs? • Introducir características una a la vez • Evitar “magia negra"; nunca pedir a los estudiantes escribir algo que no entiendan en el momento • Introducir características únicamente cuando sea necesario para aprender un concepto importante • Corolario: ningún aspecto que no ayude a enseñar un concepto de programación debe mencionarse en Fundamentos de programación • Corolario: se requieren reforzar subconjuntos de un lenguaje de modo de evitar que los estudiantes usen accidentalmente aspectos no comprendidos de un lenguaje • Para GUIs, robótica, redes, etc. se requiere una interface entre el código del estudiantes (mediante un subconjunto y el código de biblioteca (en un lenguaje completo)July 5 2011 Program By Design 2011 11
  12. 12. Hecho desafortunado Java y C++, … no se atienen a esas reglas: • Introducen muchos conceptos a la vez • No pueden explicarse inmediatamente -> magia negra • Tienen que introducir conceptos que podrían emplearse en algún programa, no sólo aquellos empleados en este programa • Es fácil invocar accidentalmente aspectos avanzados del lenguaje (p.e. punteros, clases internas)July 11, 2011
  13. 13. ¿Qué acerca de Java y POO?Sí, los estudiantes requieren Java y POO, pero• ¿Cuándo?• ¿Por qué?Contestando primero el “por qué”, debido a que afecta el “cuándo”.July 11, 2011
  14. 14. ¿Por qué los estudiantes requieren Java? • Se emplea en muchas instituciones de educación superior (actualmente) • Se emplea en la industria (actualmente)July 11, 2011
  15. 15. Por qué ¿Cuándo los estudiantes requieren Java? • Al momento de cursos a mitad de la carrera, los que lo presuponen, si siguen vigentes para entonces • Al momento de obtener un trabajo en la industria, si para entonces se sigue empleando en la industriaJuly 11, 2011
  16. 16. ¿Por qué los estudiantes requieren POO con base en clases?• Es una forma útil de organizar programas grandes… digamos, de 10,000 a 1,000,000 lines. (No la única manera, pero una buena.)• Se emplea en la industria… a veces. (véase “Objects Never? Well, Hardly Ever!” en CACM Sept. 2010)July 11, 2011
  17. 17. Por qué ¿Cuándo los estudiantes requieren POO con base en clases?• Cuando escriban programas grandes… digamos, 10,000 a 1,000,000 lines. Probablemente no este año.• Cuando apliquen en trabajos que requieran POO con base en clases. Probablemente no este año.• Los beneficios de POO no son evidentes en el primer año; los estudiantes sólo sufren el costo y la complejidad.• (Desafío: escribir un programa corto, OO C++/Java que no pudiera ser más corto y simple sin OO)July 11, 2011
  18. 18. Si bien parece que mientras más pronto se inicie el manejo de Java, mejor se aprenderá• No necesariamente. Java tiene más sentido si ya se sabe programar.• Mejor, primero aprender conceptos y hábitos de programación, luego un lenguaje complicado.• Escuelas que posponen Java forman mejores programadores JavaJuly 11, 2011
  19. 19. Opciones a primero-Java • Principales opciones: Alice, Python, Scheme/Racket, Scratch/BYOB, Processing • Todas: inician con una sintaxis más simple a la vez que los estudiantes dominan conceptos. Motivan mediante gráficos. • Diferencia: Alice, Python, Scratch, Processing normalmente se enseñan en forma imperativa; Racket, funcionalmenteJuly 11, 2011
  20. 20. Imperativo Funcional• “¿Qué salida y efectos • “¿Cuál es la respuesta colaterales se desean?” correcta?”• “¿Qué hago, en que orden, • “¿Qué expresión algebraica para generarlos?” genera la expresión correcta?”• Primera semana: asignación, • Primera semana: llamadas a I/O, secuencia función y definiciones• Luego: condicionales, ciclos • Luego: condicionales, recursión• Más tarde: llamadas a función y definiciones, • Más tarde: recursión asignación, I/O, secuencia, cic losJuly 11, 2011
  21. 21. ¿Por qué programación funcional? Imperativa FuncionalModelo mental Máquina von Neumann: Sustitución algebráica: Almacenar en y recuperar de cajas 3+4*5 -> 3+20 -> 23Escritura de setFoo(5); setBar(3); setOther(-4); f(5,3) == rightAnswerpruebas doF(); getResult().equals(rightAnswer) && getOther() == -4 // hasn’t changedCambio en Cada prueba afecta los resultados Se pueden comentar o reordenarpruebas de las subsecuentes pruebas sin cambiar los resultadosDebugging ¿Cuál es el valor de ésta variable ¿Cuál es el valor de ésta? en éste momento?Hábitos Grandes métodos que mezclan I/O Separa I/O y cálculo; corto, y cálculo, haciendo muchas tareas reusable, funciones de un sólo diferentes propósitoJuly 11, 2011
  22. 22. Puede programarse funcionalmente en otros languajes (p.e. Java)• Enseñar “return” antes de asignación o println• Enseñar métodos con parámetros y valores devueltos antes de sin• Enseñar composición de métodos antes de secuencias• Enseñar recursión antes de loops• … etc.• Aunque el lenguaje no lo facilita.July 11, 2011
  23. 23. Pero ¿por qué enseñar Racket? ¡Nadie lo emplea! • Lo mismo se decía de Pascal en los 1980’s • Realmente no importa enseñar Racket; interesa enseñar programación. • Enseñar lo menos posible de Racket: 5-10 reglas sintácticas en todo un semestre • Curricula mucho más importante que el lenguajeJuly 11, 2011
  24. 24. ¿Qué hacer? NO “enseñar Racket en lugar de Java” Curricula multi-semestre, integrada 1) Enseñar lo menos posible de Racket; concentrarse en la solución de problemas y en el pensamiento matemático 2) Enseñar lo menos posible de Java; concentrarse en la solución de problemas y en el pensamiento matemático 3) Enseñar aspectos del lenguaje que requieren los estudiantes en becas, servicio social, cursos subsecuentes, etc. “lo menos de Java" >> “lo menos de Racket"July 11, 2011
  25. 25. La Trinidad Curricula centrada en la solución de problemas (Programación mediante diseño) Lenguaje simple IDE didáctica (lenguajes para (DrRacket) estudiantes tipo- Scheme)July 11, 2011
  26. 26. "concentrarse en solucionar problemas"• Receta de diseño paso a paso: de la descripción verbal de un problema al código probado y corregido• Preguntas concretas y entregables en cada paso• Casos de prueba antes que la codificación; parte de la face de análisis• Data Driven Design (diseño impulsado por datos): “la forma de los datos determina la forma del código"July 11, 2011
  27. 27. Stephen Bloch, Adelphi University, Garden City, NY John Clements, Cal Poly, San Luis Obispo, CAKathi Fisler, Worcester Polytechnic Institute, Worcester, MA Matthew Flatt, University of Utah, Salt Lake City, UT Shriram Krishnamurthi, Brown University, Providence, RI Viera K. Proulx, Northeastern University, Boston, MA Supported by NSF grant #0618543 Related work by Matthias Felleisen, Robby Findler, Kathy Gray, Eli Barzilay, Emmanuel Schanzer, et al

×