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

27
Didáctica del análisis y la solución de problemas mediante programación Primero gráficas, luego la sintaxis

Upload: juan-carreon

Post on 27-Jun-2015

588 views

Category:

Documents


5 download

TRANSCRIPT

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

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

Primero gráficas, luego la sintaxis

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

July 5 2011 Program By Design 2011 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, concluye

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

July 5 2011 Program By Design 2011 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 preguntas

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

July 5 2011 Program By Design 2011 4

¿Qué es un problema?

Pregunta: tiene una sola respuesta

Problema: familia enorme (o infinita) de preguntas, compartiendo algunos aspectos y difiriendo de otros

Programa: regla general para resolver un problema, con entrada para los aspectos que difieren

Cómputo: un programa operando en una entrada particular para producir un resultado particular

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

July 5 2011 Program By Design 2011 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áticas

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

July 5 2011 Program By Design 2011 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"…

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

July 5 2011 Program By Design 2011 7

¿De qué trata Fundamentos de programación, FP?

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

July 5 2011 Program By Design 2011 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ón

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

July 5 2011 Program By Design 2011 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)

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

July 5 2011 Program By Design 2011 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ños

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

July 5 2011 Program By Design 2011 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)

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

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

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

¿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

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

¿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

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

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 industria

July 11, 2011

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

¿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

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

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

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

July 11, 2011

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 Java

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

July 11, 2011

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, funcionalmente

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

Imperativo

• “¿Qué salida y efectos colaterales se desean?”

• “¿Qué hago, en que orden, para generarlos?”

• Primera semana: asignación, I/O, secuencia

• Luego: condicionales, ciclos

• Más tarde: llamadas a función y definiciones, recursión

Funcional

• “¿Cuál es la respuesta correcta?”

• “¿Qué expresión algebraica genera la expresión correcta?”

• Primera semana: llamadas a función y definiciones

• Luego: condicionales, recursión

• Más tarde: asignación, I/O, secuencia, ciclos

July 11, 2011

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

¿Por qué programación funcional?

July 11, 2011

Imperativa Funcional

Modelo mental Máquina von Neumann:Almacenar en y recuperar de cajas

Sustitución algebráica:3+4*5 -> 3+20 -> 23

Escritura de pruebas

setFoo(5); setBar(3); setOther(-4);doF();getResult().equals(rightAnswer) &&getOther() == -4 // hasn’t changed

f(5,3) == rightAnswer

Cambio en pruebas

Cada prueba afecta los resultados de las subsecuentes

Se pueden comentar o reordenar pruebas sin cambiar los resultados

Debugging ¿Cuál es el valor de ésta variable en éste momento?

¿Cuál es el valor de ésta?

Hábitos Grandes métodos que mezclan I/O y cálculo, haciendo muchas tareas diferentes

Separa I/O y cálculo; corto, reusable, funciones de un sólo propósito

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

Puede programarse funcionalmente enotros 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

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

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 lenguaje

July 11, 2011

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

July 11, 2011

¿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"

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

July 11, 2011

La TrinidadCurricula centrada en la solución

de problemas (Programación mediante diseño)

Lenguaje simple(lenguajes para

estudiantes tipo-Scheme)

IDE didáctica(DrRacket)

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

July 11, 2011

"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"

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

Stephen Bloch, Adelphi University, Garden City, NY

John Clements, Cal Poly, San Luis Obispo, CA

Kathi 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