El proyecto ProgramByDesign (anteriormente TeachScheme! ) es una iniciativa de divulgación del grupo de investigación PLT . El objetivo es capacitar a profesores universitarios, profesores de secundaria y posiblemente incluso profesores de secundaria en programación y computación .
Matthias Felleisen y PLT comenzaron a trabajar en este proyecto en enero de 1995, un día después del Simposio sobre los principios de los lenguajes de programación (POPL), en respuesta a las observaciones de Felleisen sobre sus alumnos de primer año de la Universidad Rice y el plan de estudios de álgebra de las escuelas públicas locales. Su objetivo era utilizar la programación funcional para hacer que las matemáticas cobraran vida y ayudar a introducir conocimientos de diseño en el plan de estudios introductorio de 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 de 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:
Durante diez años, se llevaron a cabo varias docenas de talleres de capacitación de una semana de duración para unos 550 docentes. En 2005, el proyecto TeachScheme! organizó un taller de aniversario en el que dos docenas de docentes presentaron su trabajo a los estudiantes.
En 2010, PLT cambió el nombre de su principal lenguaje de programación, PLT Scheme , a Racket , y DrScheme a DrRacket . Un poco más tarde, cambió el nombre de TeachScheme! a ProgramByDesign .
El punto de partida de ProgramByDesign es la observación de que los alumnos actúan como ordenadores en los cursos de aritmética de primaria y de preálgebra y álgebra de secundaria y bachillerato . Los profesores los programan con reglas y les plantean problemas específicos mediante ejercicios. La clave es que los alumnos ejecuten programas puramente funcionales.
Si los estudiantes pueden convertirse en profesores 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 y vivaces e incluso juegos de computadora.
He aquí un ejemplo:
( requiere 2htdp/universo ) ( requiere 2htdp/imagen ) ;; crear una imagen a partir del tiempo actual ( define ( create-image t ) ( place-image APPLE 50 ( * 1/10 t t ) SPACE )) ;; nombres para imágenes básicas ( definir MANZANA ( círculo 3 "sólido" "rojo" )) ( definir ESPACIO ( escena vacía 100 100 )) ( animar crear imagen )
Este breve programa simula una manzana que cae desde arriba hacia abajo sobre un pequeño lienzo blanco. Consta de tres partes:
Un profesor puede explicar la función crear-imagen tan fácilmente como cualquier otra función ordinaria en un curso de álgebra. Por ejemplo, uno puede dibujar primero una tabla con dos filas y n 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 está un poco más abajo.
Finalmente, la línea animada aplica la función dada, create-image, a una velocidad de 28 ticks por segundo a 0, 1, 2, 3, etc. Las imágenes resultantes se muestran en el monitor de la computadora al mismo ritmo. Así es como se hacen las películas.
Los conocimientos previos necesarios para este ejemplo son poco más que conocimientos sobre cómo hacer películas, sobre el álgebra de imágenes en DrRacket (que es como la de los números) y un mínimo de preálgebra. 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 del jardín [consulte los libros de Prentice Hall para los grados 8 y 9].
El proyecto ProgramByDesign propone que tanto los cursos tradicionales de matemáticas como los de ciencias podrían beneficiarse de la integración de esta forma de programación. A diferencia de los bloques tradicionales de BASIC o Visual Basic de dichos libros, un programa de Racket consta de tantas líneas como las matemáticas. De este modo, moverse entre las matemáticas y el programa es sencillo. Mejor aún, el significado de ambos es el mismo. El programa 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, utilizando álgebra simple.
En el plan de estudios introductorio a la programación, el proyecto ProgramByDesign hace hincapié en que los cursos deben centrarse en el papel del diseño sistemático. Incluso si los estudiantes nunca vuelven a programar, deberían ver lo útil que 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. De este modo, un curso introductorio 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 pronto obsoletos), sino como un lugar donde pueden aprender algo de amplia aplicación.
El elemento clave del diseño del plan de estudios de 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:
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 una comprensión clara del problema, la definición de criterios para el éxito, el análisis de los recursos y circunstancias disponibles, el desarrollo de una solución propuesta y su comparación con los criterios, en ese orden.
Por ejemplo, un periodista se beneficia de un proceso similar: determinar los conceptos principales de una historia; crear un titular; alinear ejemplos y datos específicos; organizar el artículo sobre la historia de los hechos y cómo se desarrolló la historia; escribir; y verificar los hechos.
La dimensión de los datos se puede resumir con 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á una condición de tres vías (ya sea explícita u oculta en un envío polimórfico). Si el tipo de datos de entrada o salida tiene tres campos, un conjunto 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 más casos autorreferenciales, isomorfos al tipo de datos. La técnica de la recursión , en lugar de ser misteriosa y aterradora, es simplemente 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 centrarse en la parte creativa de la tarea.
How to Design Programs (HTDP) es el libro de texto escrito por el núcleo del grupo ProgramByDesign. [1] Se está preparando una tercera edición. [2]
El nombre TeachScheme! parece implicar que esta receta de diseño requiere Scheme (ahora Racket ) y que sólo se puede enseñar con Scheme. Ninguna de las dos conclusiones es cierta. Los miembros de PLT y sus alumnos han aplicado con éxito la receta de diseño en lenguaje ensamblador , C , Java , ML , Python y otros lenguajes de programación, y en 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. Esta idea errónea es una de las razones de las acciones de cambio de nombre tomadas en 2010.
Para empezar, el proyecto ProgramByDesign ha producido tres elementos esenciales:
La elección de Racket refleja su convicción de que es un buen lenguaje para que un equipo pequeño con pocos fondos (en comparación con Java) pueda validar sus conjeturas. El grupo PLT siempre ha intentado garantizar que las ideas sigan siendo transferibles a otros contextos.
En los últimos años, el equipo también ha creado una segunda parte o fase del plan de estudios, que demuestra cómo las mismas ideas de recetas de diseño se aplican a un lenguaje de programación orientado a objetos complejo , como Java . Las recetas se aplican inicialmente en un paradigma funcional, luego se introducen conceptos orientados a objetos como el polimorfismo y la herencia, y luego se introducen los métodos imperativos que son idiomáticos en Java convencional.
Una parte del equipo cuenta con una subvención de la National Science Foundation para realizar pruebas de campo en universidades y escuelas secundarias. Se llevaron a cabo talleres de desarrollo profesional en el verano de 2007, 2008, 2009 y 2010. Esta parte del proyecto se llama ReachJava; el libro que lo acompaña se titula provisionalmente "Cómo diseñar clases".
En 2006, PLT, de la Universidad Northeastern y Citizen Schools de Boston, realizaron esfuerzos conjuntos para llegar a los estudiantes del centro de la ciudad con programas extraescolares. Citizen Schools es una organización nacional que conecta voluntarios con sitios de programas extraescolares y los ayuda a comenzar con planes de estudio preestablecidos. El objetivo de la iniciativa 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 de este programa en los cursos de matemáticas ha animado a Microsoft y Google a financiar un esfuerzo de ampliación nacional, desarrollando materiales para la capacitación de maestros y creando sitios en Texas, California y otras ciudades voluntarias.