El proyecto ProgramByDesign (anteriormente TeachScheme! ) Es un esfuerzo de divulgación del grupo de investigación PLT . El objetivo es capacitar al profesorado universitario, a los profesores de secundaria y, posiblemente, incluso a los profesores de secundaria, en programación e informática .
Historia
Matthias Felleisen y PLT comenzaron el esfuerzo en enero de 1995, un día después del Simposio sobre Principios de Lenguajes de Programación (POPL), en respuesta a las observaciones de sus estudiantes de primer año de Rice University y el plan de estudios de álgebra de las escuelas públicas locales. Su objetivo era utilizar la programación funcional para dar vida a las matemáticas y ayudar a inyectar conocimientos de diseño en el plan de estudios de introducción a la informática .
El esfuerzo comenzó utilizando un lenguaje de programación llamado PLT Scheme, que era una versión del lenguaje Scheme , que es un dialecto más nuevo de un lenguaje más antiguo, Lisp .
El grupo recaudó fondos de varias fundaciones privadas , el Departamento de Educación de los Estados Unidos y la Fundación Nacional de Ciencias para crear:
- Software apropiado para principiantes en programación funcional
- Material didáctico: planes de estudio, notas de clase, ejercicios, miniproyectos
- Campamentos de formación de profesores
Durante diez años, organizó varias docenas de talleres de capacitación de una semana para unos 550 maestros. En 2005, el programa TeachScheme! El proyecto llevó a cabo un taller de aniversario en el que dos docenas de profesores presentaron su trabajo con los estudiantes.
En 2010, PLT cambió el nombre de su principal lenguaje de programación de PLT Scheme a Racket y DrScheme a DrRacket . Un poco más tarde, cambió su nombre a TeachScheme. a ProgramByDesign .
Programación funcional, computación y álgebra
El punto de partida de ProgramByDesign es la observación de que los estudiantes actúan como computadoras en los cursos de aritmética de la escuela primaria y en los cursos de pre-álgebra y álgebra de la escuela media y secundaria . Los profesores los programan con reglas y ejecutan problemas específicos a través de ejercicios. La clave es que los estudiantes ejecuten programas puramente funcionales.
Si los estudiantes pueden convertirse en maestros que crean programas funcionales y los ejecutan en computadoras, este contenido puede reforzarse y mostrar a los estudiantes cómo escribir matemáticas y programas funcionales crea escenas animadas e incluso juegos de computadora.
Aquí hay un ejemplo:
( requiere 2htdp / universo ) ( requiere 2htdp / imagen );; crear una imagen a partir del tiempo actual ( definir ( crear-imagen t ) ( colocar-imagen APPLE 50 ( * 1/10 t t ) ESPACIO ));; los nombres de las imágenes básicas ( definen APPLE ( círculo 3 "sólido" "rojo" )) ( definir ESPACIO ( vacío escena 100 100 ))( crear imagen animada )
Este breve programa simula una manzana que cae de arriba a abajo de un pequeño lienzo blanco. Consta de tres partes:
- Una definición de función para crear imagen, que es una función de una línea en matemáticas, asumiendo que se ha introducido un álgebra de imágenes con imagen de lugar, círculo y escena vacía.
- Dos abreviaturas, donde los nombres se equiparan con algún valor, como en "sea x 5" en un texto de álgebra
- Una línea para ejecutar el programa
Un profesor puede explicar la creación de imágenes tan fácilmente como cualquier función ordinaria en un curso de álgebra. Por ejemplo, primero se puede dibujar una tabla con dos filas yn columnas donde cada columna contiene t en la parte superior y una imagen apropiada en la parte inferior. Es decir, si los números aumentan de izquierda a derecha, entonces en cada imagen el punto rojo es un poco más bajo.
Finalmente, la línea animada aplica la función dada, create-image, a una velocidad de 28 tics por segundo a 0, 1, 2, 3, y así sucesivamente. Las imágenes resultantes se muestran en el monitor de la computadora al mismo ritmo. Así es como se hacen las películas.
El trasfondo necesario para este ejemplo es poco más que conocimientos sobre cómo hacer películas, sobre el álgebra de imágenes en DrRacket (que es como el de los números) y preálgebra mínima. Sin embargo, el proyecto ProgramByDesign afirma que los niños se divertirían más con estas funciones en vivo que con expresiones algebraicas que cuentan el número de baldosas de jardín [consulte los libros de Prentice Hall para los grados 8-9].
El proyecto ProgramByDesign propone que tanto los cursos tradicionales de matemáticas como de ciencias podrían beneficiarse de la integración de esta forma de programación. En contraste con los bloques BASIC o Visual Basic tradicionales en tales libros, un programa Racket consta de tantas líneas como las matemáticas. Por tanto, moverse entre las matemáticas y el programa es sencillo. Mejor aún, el significado de los dos es el mismo. El paso a paso algebraico de DrRacket puede ilustrar cómo Racket evalúa el programa como si fuera un estudiante de sexto o séptimo grado, paso a paso, usando álgebra simple.
Programación funcional, computación y diseño en programación 101
Para el plan de estudios de introducción a la programación, el proyecto ProgramByDesign enfatiza que los cursos deben enfocarse en el papel del diseño sistemático. Incluso si los estudiantes nunca vuelven a programar, deberían ver cuán útil es un enfoque sistemático para la resolución de problemas. Esto debería ayudarlos, ya sea que se conviertan en programadores, médicos, periodistas o fotógrafos. Por lo tanto, un curso de introducción a la programación no se percibiría como un lugar donde los estudiantes aprenden sobre la sintaxis de los lenguajes de programación actualmente de moda (y que pronto quedarán obsoletos), sino un lugar donde pueden aprender algo ampliamente aplicable.
El elemento de diseño clave del plan de estudios ProgramByDesign es la receta de diseño . Tiene dos dimensiones: la dimensión del proceso y la dimensión de los datos.
A lo largo de la dimensión del proceso, los estudiantes aprenden que hay seis pasos para diseñar un programa (simple), antes de que puedan ejecutarlo y otros puedan usarlo:
- Analizar problemas con el objetivo de describir las clases de datos que entran y salen del programa;
- Reformular el planteamiento del problema como un planteamiento conciso de propósito
- Crear ejemplos que ilustren la declaración de propósito y que sirvan como criterio para el éxito;
- Organizar datos, también llamados plantilla o inventario.
- Codificación
- Crear un conjunto de pruebas a partir de ejemplos para garantizar que el programa funcione correctamente con entradas pequeñas.
Al igual que en el desarrollo basado en pruebas , los casos de prueba se escriben antes de la codificación, como parte del análisis de requisitos, en lugar de hacerlo después como parte de las pruebas.
Casi cualquier esfuerzo humano puede beneficiarse de comprender claramente el problema, definir criterios para el éxito, analizar los recursos disponibles y los datos, desarrollar una solución propuesta y compararla con los criterios, en ese orden.
Por ejemplo, un periodista se beneficia de un proceso similar: descifrar los conceptos principales de una historia; crear un titular; alineando ejemplos y datos específicos; organizar el artículo sobre la historia de los hechos y cómo se desarrolló la historia; escritura; y verificación de hechos.
La dimensión de los datos se puede resumir en la máxima: la forma de los datos determina la forma del código y las pruebas. Por ejemplo, si el tipo de datos de entrada o salida tiene tres variantes, un conjunto de pruebas debe tener al menos un caso de prueba de cada variante, y el código del programa probablemente contendrá un condicional de tres vías (ya sea explícito u oculto en un despacho polimórfico). Si el tipo de datos de entrada o salida tiene tres campos, una serie de pruebas tendrá que especificar valores para esos tres campos, y el código del programa tendrá que hacer referencia a esos tres campos. Si el tipo de datos de entrada o salida tiene un caso base simple y una o más variantes autorreferenciales, el conjunto de pruebas debe incluir un caso base y uno o más casos no base, y el código del programa probablemente tendrá un caso base y uno. o casos más autorreferenciales, isomorfos al tipo de datos. La técnica de la recursividad , en lugar de ser misteriosa y aterradora, consiste simplemente en aplicar métodos ya aprendidos a un tipo de datos autorreferencial.
Organizar los datos es la tarea de traducir las descripciones de los datos en un esqueleto de programa. Cada forma de descripción determina una forma específica de organización del programa. La transformación es casi mecánica y ayuda a los estudiantes a concentrarse en la parte creativa de la tarea.
Cómo diseñar programas (HTDP) es el libro de texto escrito por el núcleo del grupo ProgramByDesign. [1] Se está preparando una tercera edición. [2]
Elección del lenguaje de programación
¡El nombre TeachScheme! parece implicar que esta receta de diseño requiere Scheme (ahora Racket ) y solo se puede enseñar con Scheme. Ninguna de las dos conclusiones es cierta. Los miembros de PLT y sus aprendices han aplicado con éxito la receta de diseño en lenguaje ensamblador , C , Java , ML , Python y otros lenguajes de programación, y con cursos de geometría, biología y poesía. La idea fundamental de ProgramByDesign es enfatizar la programación como una actividad de diseño. Este concepto erróneo es una de las razones de las acciones de cambio de nombre tomadas en 2010.
Para comenzar, el proyecto ProgramByDesign ha producido tres elementos esenciales:
- Una serie de lenguajes de enseñanza sucesivamente más poderosos y permisivos, que son dialectos de Racket, que coinciden con la receta de diseño pero con informes de errores que coinciden con el nivel del estudiante (por ejemplo, muchas cosas que son legales en Racket estándar, pero que un estudiante principiante no hace. no es necesario, están marcados como errores en el nivel de estudiante principiante)
- Un entorno de programación pedagógico, fácil de descargar y para principiantes, un entorno de desarrollo integrado llamado DrRacket, que refuerza estos niveles de lenguaje
- Un plan de estudios, codificado principalmente en el libro Cómo diseñar programas, [1] cuya tercera edición está en proceso. [2]
Su elección de Racket refleja su creencia de que Racket es un buen lenguaje para que un equipo pequeño con pocos fondos (en relación con Java) valide sus conjeturas. El grupo PLT siempre ha tratado de garantizar que las ideas sigan siendo portables a otros contextos.
Para Java
En los últimos años, el equipo también ha creado una segunda parte o fase del plan de estudios. Demuestra cómo las mismas ideas de recetas de diseño se aplican a un complejo lenguaje de programación orientado a objetos, como Java . Las recetas se aplican inicialmente en un paradigma funcional, luego introducen conceptos orientados a objetos como polimorfismo y herencia, y luego introducen los métodos imperativos que son idiomáticos en la corriente principal de Java.
Una parte del equipo tiene una subvención de la National Science Foundation para realizar pruebas de campo en universidades y escuelas secundarias. Los talleres de desarrollo profesional se llevaron a cabo en el verano de 2007, 2008, 2009 y 2010. Esta parte del proyecto se denomina ReachJava; el libro adjunto se titula provisionalmente "Cómo diseñar clases".
Oreja
En 2006, PLT en Northeastern University y Citizen Schools de Boston hicieron esfuerzos conjuntos para llegar a los estudiantes del centro de la ciudad con programas extracurriculares. Citizen Schools es una organización a nivel nacional que une a los voluntarios con sitios de programas extracurriculares y les ayuda a comenzar con planes de estudio con guión. El objetivo del esfuerzo es traducir el material a un plan de estudios de sexto grado. Las primeras pruebas fueron un gran éxito en Boston. [3] [4] El efecto en los cursos de matemáticas de este programa ha animado a Microsoft y Google a financiar un esfuerzo de ampliación nacional, desarrollando materiales para capacitar a maestros y creando sitios en Texas, California y otras ciudades voluntarias.
Referencias
- ^ a b Felleisen, Matthias ; Findler, Robert Bruce ; Flatt, Matthew ; Krishnamurthi, Shriram (6 de enero de 2018). "Cómo diseñar programas" . MIT Press . Consultado el 8 de enero de 2019 .
- ^ a b Felleisen, Matthias . "Cómo diseñar programas, tercera edición" . Felleisen.org . Consultado el 8 de enero de 2019 .
- ^ "El programa Bootstrap saca a los estudiantes de secundaria de Roxbury, Dorchester" . Boston.com . 2011-05-03 . Consultado el 29 de septiembre de 2011 .
- ^ Krishnamurthi, Shriram (marzo de 2009). "El compilador de esquemas de Moby para teléfonos inteligentes" . Universidad de Brown, Departamento de Ciencias de la Computación . Consultado el 8 de enero de 2019 .
enlaces externos
- Página web oficial
- Raqueta
- Cómo diseñar programas
- Oreja