Este documento presenta un resumen del proyecto Cupi2, el cual busca nuevas maneras de enseñar programación. El proyecto ha desarrollado tres cursos (APO1, APO2 y DATOS) que enseñan programación de manera incremental, desde conceptos básicos hasta estructuras de datos más avanzadas. Los cursos han tenido resultados positivos y han logrado que los estudiantes aprendan habilidades de programación a diferentes niveles de profundidad. Sin embargo, todavía hay aspectos que mejorar en los tres cursos.
1. El Proyecto Cupi2
Buscando nuevas maneras de enseñar a programar
Jorge Villalobos
Rubby Casallas
Marcela Hernández
Ingeniería de Sistemas y Computación
Universidad de los Andes
Mayo 3 2006
5. Ejes conceptuales
procesos de
modelaje y solución
software
de problemas
algorítmica
técnicas de programación
y metodologías
elementos estructuradores
y arquitecturas
tecnología y
programación
herramientas de
programación
6. Estructura de niveles
APO1:
1
2
Nivel
Eje1 Eje2 Eje3 Eje4 Eje5 Eje6 Eje7 Entrenadores Evaluación 3
Semana
C H C H C H C H C H C H C H 4
5
1 1
1
APO2:
2
3 1
2
***
6
4
7
ejercicio
5 2 ***
6
7
3
3 8
8
9
3
4
***
9
10 4
5
***
10
11
12 5
6
*** 11
DATOS:
13
14 6 12
6 ***
15
13
14
15
Generación incremental de habilidades 16
11
18
7. Cupi2: materiales de soporte
! El enfoque implica el desarrollo y mantenimiento
de una gran cantidad de materiales:
" Ejercicios y ejemplos
" Entrenadores
" Hojas de trabajo
" Talleres
" Tutoriales
" Libros
! Seminarios de inducción de profesores y
monitores
11. Publicaciones
! J. Villalobos, R. Casallas, “Teaching/Learning a First Object-
Oriented Programming Course outside the CS Curriculum”, ECOOP
10th Workshop on Pedagogies and Tools for the Teaching and
Learning of Object Oriented Concepts, Nantes, Francia, Julio 2006.
! J. Villalobos, R. Casallas, L. Osorio. "Looking for a New Approach to
Teach/Learn a First Computer-Programming Course". International
Conference on Engineering and Computer Education (ICECE),
Madrid, España, Noviembre 2005.
! J. Villalobos, R. Casallas, K. Marcos. “El Reto de Diseñar un
Primer Curso de Programación de Computadores". XIII Congreso
Iberoamericano de Educación Superior en Computación, Cali,
Colombia, Octubre 2005.
! J. Villalobos, D. Pérez, J. Castro, C. Jiménez. “Construcción de un
Laboratorio Flexible de Estructuras de Datos". XIII Congreso
Iberoamericano de Educación Superior en Computación, Cali,
Colombia, Octubre 2005.
12. Agenda
! Contexto del proyecto
! APO1
! APO2
! DATOS
! Conclusiones
! Preguntas
13. APO1
! 35 secciones (27 profesores de cátedra)
! Más de 50 monitores
! Tarde, pero por fin con libro!
! Diseño detallado de los niveles
! Problemas pequeños =>
" análisis == diseño
" arquitectura simple predefinida
" Habilidades básicas de análisis, modelado y programación
14. APO1 – Nivel 1
Problemas, soluciones y programas
! Habilidades elementales de
análisis
! Clases, objetos, métodos,
atributos
! Arquitectura básica de un
programa
! Algunos tipos simples
! Operadores y expresiones
simples
! Asignación
! Invocación de métodos
! Introducción a Java y Eclipse
! UML: diagrama de clases
15. APO1 – Nivel 2
Definición de situaciones y manejo de casos
! Expresiones lógicas,
operadores relacionales,
operadores lógicos
! Instrucciones condicionales
! Uso de constantes
! Habilidades básicas de
modelado y asignación de
responsabilidades
! Constructores, modificadores,
analizadores
! Concepto de variable
! Se refuerza el concepto de
paso de parámetros
16. APO1 – Nivel 2
Definición de situaciones y manejo de casos
Entrenadores
17. APO1 – Nivel 3
Manejo de grupos de atributos
! Contenedoras de tamaño
fijo: arreglos
! Contenedoras de tamaño
variable: vectores (clase
ArrayList)
! Instrucciones repetitivas (for,
while)
! Patrones de algoritmo para
ciclos
! Representación de grupos en
UML
! Lectura y uso de
documentación Javadoc
18. APO1 – Nivel 3
Manejo de grupos de atributos
Entrenadores
19. APO1 – Nivel 3
Manejo de grupos de atributos
Entrenadores
20. APO1 – Nivel 4
Definición y cumplimiento de responsabilidades
! Contrato, precondición y
postcondición
! Excepciones
! Técnicas de asignación de
responsabilidades (patrón
experto)
! Uso de Javadoc para
especificar un contrato
! Instrucciones try-catch, throw
! Dividir y conquistar aplicado a
requerimientos funcionales
21. APO1 – Nivel 5
Construcción de la interfaz gráfica
! Arquitectura de la interfaz de
usuario
! Ventanas, paneles, etiquetas,
zonas de texto, eventos,
botones, distribuidores gráficos
! Asignación de
responsabilidades a cada
elemento de la interfaz
! Framework swing de Java
! El método main() en Java
22. APO1 – Nivel 6
Estructuras de dos dimensiones y persistencia
! Contenedoras de dos
dimensiones: matrices
! Persistencia básica para
iniciar el estado del modelo
del mundo (Properties)
! Construcción de un
programa completo
23. APO1 – Nivel 6
Estructuras de dos dimensiones y persistencia
Entrenadores
24. Agenda
! Contexto del proyecto
! APO1
! APO2
! DATOS
! Conclusiones
! Preguntas
25. APO2
! 2do piloto del curso
! 4 secciones (RuC, MH, MS, CA)
! Borrador de diseño de los niveles
! Ejemplos completos para todos los niveles
! Entrenadores
! Problemas pequeños =>
" análisis != diseño
" diseño dado en cada ejercicio
" arquitectura simple predefinida
" primeros requerimientos no funcionales
26. APO2 – Nivel 7
Búsqueda, ordenamiento y pruebas automáticas
! Búsqueda secuencial y binaria
! Algoritmos no recursivos de
ordenamiento
! Construcción de pruebas
automáticas en JUnit y su uso en
el proceso de desarrollo
! Invariante de clase y su
documentación en Javadoc
! Instrucción assert en Java
! Componentes swing para
visualización de grupos
27. APO2 – Nivel 7
Búsqueda, ordenamiento y pruebas automáticas
Entrenadores
28. APO2 – Nivel 8
Archivos y excepciones
! Archivos secuenciales de
texto, para hacer persistir el
estado del modelo del
mundo
! Manejo y declaración de
tipos de excepciones
! Uso del depurador en
Eclipse
29. APO2 – Nivel 9
Estructuras lineales encadenadas
! Listas sencillamente y doblemente encadenadas
! Otros distribuidores gráficos: FlowLayout, GridBagLayout
! Otros componentes gráficos de swing
30. APO2 – Nivel 9
Estructuras lineales encadenadas
Entrenadores
31. APO2 – Nivel 10
Herencia e interfaces
! Herencia, clases
abstractas, redefinición
de métodos, alcance
dinámico, polimorfismo
! Interfaces como
mecanismo de
desacoplamiento
! Dibujo básico en
interfaces gráficas
! Manejo de eventos del
ratón y de menús
32. APO2 – Nivel 10
Herencia e interfaces
Entrenadores
33. APO2 – Nivel 11
Estructuras y algoritmos recursivos
! Árboles binarios, árboles
binarios ordenados, árboles
n-arios
! Desarrollo de métodos
recursivos
! Uso de árboles para
representar información
ordenada y estructuras de
decisión
34. APO2 – Nivel 12
Persistencia y distribución básicas
socket
servidor JDBC
socket
BD
35. APO2 – Nivel 12
Persistencia y distribución básicas
Entrenadores
36. Agenda
! Contexto del proyecto
! APO1
! APO2
! DATOS
! Conclusiones
! Preguntas
37. DATOS
! Piloto del curso (JV, PB)
! Borrador de diseño de los niveles
! Problemas medianos =>
" análisis != diseño
" todo gira alrededor del diseño (medir, proponer, justificar)
" arquitectura simple diseñada por el estudiante
" algorítmica de estructuras de datos no triviales
" nuevos requerimientos no funcionales
" proyectos construidos por componentes
! LED & Cupi2Collections
38. DATOS – Nivel 13
Complejidad y técnicas básicas de diseño
! Complejidad de algoritmos
! Del análisis al diseño
! Diseño bajo restricciones
! Lo representado vs. la
representación
! Taxonomía y algorítmica de
estructuras lineales
! Uso de un IDE para la
construcción de la interfaz
! Framework Collections de
Java
! Técnicas básicas de
simulación
39. DATOS – Nivel 14
Estructuras de acceso directo
! Diseño bajo
restricciones
! Lo representado vs. la
representación
! Tablas de hashing,
diccionarios, conjuntos y
mapas
! Clases genéricas y su
implementación en Java
! Manejo de applets
! Manejo y
empaquetamiento de jars
! Uso de ant
40. DATOS – Nivel 14
Estructuras de acceso directo
Entrenadores
41. ! Árboles AVL
DATOS – Nivel 15 ! Árboles de sintaxis
Estructuras recursivas ! Algoritmo de Huffman
! Arquitectura MVC y el
patrón observador
! Diseño bajo restricciones
! Algorítmica no trivial de
estructuras arborescentes
! Heaps
! Implementación de
árboles binarios
! Uso de “librerías”
almacenamiento
memoria Índices
principal AVL
42. DATOS – Nivel 15
Estructuras recursivas
Entrenadores
43. DATOS – Nivel 15
Estructuras recursivas
Entrenadores
44. DATOS – Nivel 16
Estructuras recursivas
! Árboles B y 2-3
! XML y DOM
! Desarrollo incremental
! Diseño bajo restricciones
! Componentes gráficos de
visualización de jerarquías
(JTree)
Índices
AVL
almacenamiento
memoria Índices
principal 2-3
Huffman + Xerces
XML
45. DATOS – Nivel 17
Estructuras no lineales
! Grafos dirigidos
! Diseño de estructuras de
datos para implementar un
algoritmo no trivial
! Algorítmica de búsqueda
de caminos y óptimos
(ciclos, Hamilton, Euler,
etc.)
! Algorítmica de manejo de
grafos
! Dijkstra y árboles de
recubrimiento
46. DATOS – Nivel 18
Diseño de software
WEB
servidor
servlets
miniDBC
driver
! Arquitecturas simples de múltiples capas
Componentes WEB (servlets)
!
Oráculo
! Construcción de aplicaciones por
composición de componentes
! Patrones básicos de diseño Cupi2Collections
47. Agenda
! Contexto del proyecto
! APO1
! APO2
! DATOS
! Conclusiones
! Preguntas
48. Conclusiones
! Todos los indicadores son muy positivos
! Hay todavía aspectos por mejorar en los tres
cursos
! En el ciclo básico de programación se logra
llegar mucho más adelante que antes
! Los estudiantes terminan con una visión más
amplia de la problemática de desarrollo con
habilidades a distintos niveles de profundidad
! Es una oportunidad para replantear los cursos
que siguen: ISoft, ArqSw, etc.
49. Conclusiones
! Cómo mantener estos cursos en el estado
estable?
50. Agenda
! Contexto del proyecto
! APO1
! APO2
! DATOS
! Conclusiones
! Preguntas