course_logo

(2/10/2014 – 10/12/2014)

Este curso de Lenguajes de programación de Dan Grossman de la universidad de Washington. El curso hace énfasis en programación funcional y usa tres lenguajes.

El estilo de clase de Grossman está buenísimo porque los videos son de el trabajando en la computadora. Esto me parece mucho mejor que el formato “Lecture”, donde el profe tiene todo cocinado y “expone”. Me parece que ver al tipo trabajando en la máquina y “pensando en voz alta” es mucho mejor, aunque es cierto que a veces es inevitable que traiga un pedazo grande de código y pase un poco rápido.

Aparte de las clases, el curso consiste en dos exámenes y un assignment por semana. Una particularidad de este curso es que además de mandar los assignments al autograder hay un peer review para corregir la legibilidad.

 

Para justificar la elección de los lenguajes que usa, Dan ofrece una taxonomía de lenguajes de programación (estáticos vs dinámicos, funcionales vs. orientados a objetos) que hace una tabla de doble entrada. Dice que deberíamos estar familiarizados con un lenguaje en cada casillero y que los estudiantes de su curso en Washington ya conocen uno estático y orientado a objetos (Java), por lo que el enseña uno de cada uno del resto de los casilleros.

 

Parte 1: Standard ML

ML es funcional y estático pero hace type inference (de una manera bastante sofisticada, no como Java). Hay un par de assignments sobre este lenguaje que fueron bastante interesantes y no muy complicados. La principal complicación era no usar la mutabilidad de los valores, algo que alguien que viene de un lenguaje orientado a objetos puede llegar a encontrar difícil. También nos da una introducción a las principales funciones del repertorio funcional: map, fold y filter.

Assignment 1: Funciones con fechas (98%) (100%)

ASSIGNMENT 2: Mas ejercicios funcionales (81%) (99%)

ASSIGNMENT 3: Un lenguaje de programacion (80%) (96%)

Mock Exam: (100%) y Exam: (93%)

Parte 2: Racket

 

Racket es un dialecto de LISP. Viene en un programa que se llama Dr. Racket que tiene todo instalado. Si bien tuve unos problemitas al correrlo en WinXP, es bastante cómodo de usar y al estar diseñado para enseñar computación tiene un par de features muy lindas (es el entorno que usan en Introduction to Systematic Programming de Greg Kinczales).

Assignment 4: Intro a Racket (75%)

Assignment 5: Implementar un lenguaje de programación (MUPL).

Este no pude terminarlo.

El último lenguaje es Ruby. Si bien seguí las clases con bastante cuidado, no me metí a hacer los assignments (uno es extender un Tetris y el otro es portar un programa de ML a Ruby). Se ven muy interesantes y espero poder hacerlos en la próxima iteración del curso.

Fin

Este curso estuvo muy interesante, los conceptos están muy bien presentados y permite ampliar considerablemente el repertorio mental para pensar sobre programas. Todavía recuerdo esa sensación al estudiar los programas de estar en una clase de yoga mental, no como los cursos de Algoritmos que son más parecidos a boxeo mental!

Ahora que estoy revisando los programas veo que me quedaron un montón de cosas para hacer para la próxima edición del curso!

Anuncios