SlideShare una empresa de Scribd logo
1 de 27
Didáctica del análisis y la solución de
problemas 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?
       – 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


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


July 5 2011               Program By Design 2011       3
¿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
July 5 2011         Program By Design 2011          4
¿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
July 5 2011                    Program By Design 2011              5
¿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
¿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
     metodología bla testing bla diseño bla
     composición bla refinamiento bla
     abstracción




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

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



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
July 11, 2011
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
                                 los
July 11, 2011
¿Por qué programación funcional?
                Imperativa                            Funcional
Modelo mental Máquina von Neumann:                    Sustitución algebráica:
              Almacenar en y recuperar de cajas       3+4*5 -> 3+20 -> 23
Escritura de    setFoo(5); setBar(3); setOther(-4);   f(5,3) == rightAnswer
pruebas         doF();
                getResult().equals(rightAnswer)
                &&
                getOther() == -4 // hasn’t changed
Cambio en       Cada prueba afecta los resultados     Se pueden comentar o reordenar
pruebas         de las subsecuentes                   pruebas sin cambiar los resultados
Debugging       ¿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ósito

July 11, 2011
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
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
¿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
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
"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
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

Más contenido relacionado

Similar a Fundamentos de programación funcional

Similar a Fundamentos de programación funcional (20)

Ejercicios java
Ejercicios javaEjercicios java
Ejercicios java
 
Java
JavaJava
Java
 
Ejercicios de-programacion-en-java
Ejercicios de-programacion-en-javaEjercicios de-programacion-en-java
Ejercicios de-programacion-en-java
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Java
JavaJava
Java
 
Java
JavaJava
Java
 
Ejercicios de-programacion-en-java
Ejercicios de-programacion-en-javaEjercicios de-programacion-en-java
Ejercicios de-programacion-en-java
 
Ejercicios en java
Ejercicios en javaEjercicios en java
Ejercicios en java
 
Java
JavaJava
Java
 
Ejercicios de programacion en java
Ejercicios de programacion en javaEjercicios de programacion en java
Ejercicios de programacion en java
 
Ejercicios de-programacion-en-java
Ejercicios de-programacion-en-javaEjercicios de-programacion-en-java
Ejercicios de-programacion-en-java
 
Programacion Orientada a Objetos - UNSA (Ing. Giovanni Cabrera Málaga)
Programacion Orientada a Objetos - UNSA (Ing. Giovanni Cabrera Málaga)Programacion Orientada a Objetos - UNSA (Ing. Giovanni Cabrera Málaga)
Programacion Orientada a Objetos - UNSA (Ing. Giovanni Cabrera Málaga)
 
Plan accion julio francisco
Plan accion julio franciscoPlan accion julio francisco
Plan accion julio francisco
 
Python y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-CorrientesPython y la POO, en una clase, UNNe-Corrientes
Python y la POO, en una clase, UNNe-Corrientes
 
Clase 01 - Data Analytics.pptx
Clase 01 - Data Analytics.pptxClase 01 - Data Analytics.pptx
Clase 01 - Data Analytics.pptx
 
845 e bd01
845 e bd01845 e bd01
845 e bd01
 
Apuntes de fundamentos de programacion 2
Apuntes de fundamentos de programacion 2Apuntes de fundamentos de programacion 2
Apuntes de fundamentos de programacion 2
 
Lenguajes de programación i
Lenguajes de programación   iLenguajes de programación   i
Lenguajes de programación i
 
Tbl uni p 08.06.2013
Tbl uni p 08.06.2013Tbl uni p 08.06.2013
Tbl uni p 08.06.2013
 
Ejercicios-de-Programacion-en-Java.pdf
Ejercicios-de-Programacion-en-Java.pdfEjercicios-de-Programacion-en-Java.pdf
Ejercicios-de-Programacion-en-Java.pdf
 

Más de Juan Carreón

Más de Juan Carreón (20)

The impact ia
The impact iaThe impact ia
The impact ia
 
Bio andreas ebert (2018)
Bio andreas ebert (2018)Bio andreas ebert (2018)
Bio andreas ebert (2018)
 
Manual tierra minke
Manual tierra minkeManual tierra minke
Manual tierra minke
 
Recibo cfe
Recibo cfeRecibo cfe
Recibo cfe
 
Caseta dublin
Caseta dublinCaseta dublin
Caseta dublin
 
Aportaciones xprivada 2
Aportaciones xprivada 2Aportaciones xprivada 2
Aportaciones xprivada 2
 
Aportaciones xprivada
Aportaciones xprivadaAportaciones xprivada
Aportaciones xprivada
 
Aportaciones condominosdublin 2
Aportaciones condominosdublin 2Aportaciones condominosdublin 2
Aportaciones condominosdublin 2
 
Aportaciones condominosdublin
Aportaciones condominosdublinAportaciones condominosdublin
Aportaciones condominosdublin
 
Recibo cfe
Recibo cfeRecibo cfe
Recibo cfe
 
B4 u may_concept_bulletin
B4 u may_concept_bulletinB4 u may_concept_bulletin
B4 u may_concept_bulletin
 
2017.05
2017.052017.05
2017.05
 
Rlregimenem
RlregimenemRlregimenem
Rlregimenem
 
Scan doc0002
Scan doc0002Scan doc0002
Scan doc0002
 
Scan doc0001
Scan doc0001Scan doc0001
Scan doc0001
 
Toma de protesta
Toma de protestaToma de protesta
Toma de protesta
 
Escaneado 09 03-2017 10.02
Escaneado 09 03-2017 10.02Escaneado 09 03-2017 10.02
Escaneado 09 03-2017 10.02
 
Escaneado 24 02-2017 09.17
Escaneado 24 02-2017 09.17Escaneado 24 02-2017 09.17
Escaneado 24 02-2017 09.17
 
Minuta CPAFIUNAM jueves 16 feb
Minuta CPAFIUNAM jueves 16 febMinuta CPAFIUNAM jueves 16 feb
Minuta CPAFIUNAM jueves 16 feb
 
R3 idelogía política-mexicana
R3 idelogía política-mexicanaR3 idelogía política-mexicana
R3 idelogía política-mexicana
 

Fundamentos de programación funcional

  • 1. Didáctica del análisis y la solución de problemas mediante programación Primero gráficas, luego la sintaxis
  • 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 July 5 2011 Program By Design 2011 2
  • 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 July 5 2011 Program By Design 2011 3
  • 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 July 5 2011 Program By Design 2011 4
  • 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 July 5 2011 Program By Design 2011 5
  • 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. ¿De qué trata Fundamentos de programación, FP? July 5 2011 Program By Design 2011 7
  • 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 July 5 2011 Program By Design 2011 8
  • 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. 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 July 5 2011 Program By Design 2011 10
  • 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. 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. ¿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. ¿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. 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
  • 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. 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. 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 July 11, 2011
  • 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, funcionalmente July 11, 2011
  • 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 los July 11, 2011
  • 21. ¿Por qué programación funcional? Imperativa Funcional Modelo mental Máquina von Neumann: Sustitución algebráica: Almacenar en y recuperar de cajas 3+4*5 -> 3+20 -> 23 Escritura de setFoo(5); setBar(3); setOther(-4); f(5,3) == rightAnswer pruebas doF(); getResult().equals(rightAnswer) && getOther() == -4 // hasn’t changed Cambio en Cada prueba afecta los resultados Se pueden comentar o reordenar pruebas de las subsecuentes pruebas sin cambiar los resultados Debugging ¿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ósito July 11, 2011
  • 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. 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
  • 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. 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. "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. 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