¿Qué cambios (si los hay) planea hacer Jelani Nelson en la forma en que se enseña CS124 en Harvard?

Seré el TF principal para el curso en la primavera (“TF” es la forma elegante de Harvard de decir TA), y para este otoño, Jelani y yo hemos estado trabajando juntos para tratar de renovar un poco el curso.

Ambos tenemos experiencia en concursos de programación: en realidad conocía a Jelani de TopCoder antes de que terminara en Harvard, así que naturalmente queríamos agregar un poco de esa experiencia a la clase, ya que es una forma realmente efectiva de aprendizaje. (¡Además, ver que su programa obtiene puntos completos en un problema es divertido!)

Por lo tanto, nuestro plan es incluir algunos problemas de programación en cada uno de los conjuntos de problemas. Creo firmemente que los algoritmos de aprendizaje requieren práctica e implementación consistentes para que todo sea sólido, por lo que estamos intercambiando las tres grandes tareas de programación para el semestre a favor de 1-2 pequeños problemas cada semana.

Dado que esto requiere un sistema completo en línea para manejar los envíos de programas, he estado trabajando en un sistema este semestre que califica automáticamente los envíos de estudiantes a conjuntos de problemas. Si estás tomando CS124 el próximo semestre y estás leyendo esto, ¡te espera algo divertido!

La superposición con el contenido antiguo será grande, pero algunos temas anteriores serán reemplazados por otros nuevos (estad atentos). También es probable en este punto, pero no definitivo, que habrá 2 exámenes de mitad de período distribuidos en el semestre en lugar de 1.

Probablemente, el cambio más grande será el siguiente: ya no habrá asignaciones de programa separadas, sino que cada conjunto de problemas tendrá al menos un problema de programación en el que, después de encontrar el algoritmo correcto y analizarlo (la parte teórica del problema ), debe implementarlo y enviarlo en línea a un servidor que lo calificará automáticamente. Cada problema tendrá algunos conjuntos diferentes de casos de prueba que valen un número variable de puntos que son progresivamente más difíciles, por ejemplo, un algoritmo n ^ 2 podría resolver el conjunto más fácil, pero necesita algo más cercano al tiempo lineal para resolver el conjunto más difícil (obtiene crédito para un conjunto de casos de prueba si y solo si su código produce la respuesta correcta en todos los casos dentro de un cierto límite de tiempo). Si está familiarizado con los jueces en línea, el concepto es similar.

(Además, gracias a Neal Wu por implementar el juez en línea, que se basa en el “Centro de Control de Concursos de Programación de la Universidad de Calgary”).