Taller de Lenguajes de Programación I (CI-3661)

Cronograma

Haskell (cinco o seis sesiones)

Prolog (cuatro o cinco sesiones)

Otros lenguajes

Ediciones previas de este curso incluyeron el uso de lenguajes como Racket o Ruby, para explorar algunos conceptos seleccionados como despacho doble, despacho múltiple, roles y comportamientos.

La inclusión de lenguajes adicionales depende de la cantidad de feriados nacionales que afecten las clases de laboratorio: no se incluirán lenguajes adicionales cuando sólo hay 10 sesiones de clase en el calendario; se incluirán dos sesiones sobre lenguajes adicionales si hay 11 o 12 sesiones de clase.

Herramientas de Programación

Usaremos al menos los lenguajes de programación Haskell y Prolog para desarrollar las soluciones a los proyectos propuestos en clase.

Haskell

Trabajaremos con GHC, el entorno interactivo del Glasgow Haskell Compiler y su librería base. Adicionalmente, la herramienta de gestión de dependencias y aplicaciones stack. La versión particular de GHC será indicada durante la primera sesión.

Siga las instrucciones en la página de descargas para instalar GHC y stack.

Prolog

Trabajaremos con SWI Prolog, el entorno interactivo y compilador.

Para instalarlo:

Todos los archivos que formen parte de su proyecto deben estar completa y correctamente documentados siguiendo las mejores prácticas y reglas de estilo para el lenguaje.

La evaluación de los proyectos se efectuará utilizando SWI Prolog. Si Ud. utiliza cualquier otra implantación del lenguaje (GNU Prolog, por mencionar alguno), asegúrese que solamente usa predicados del estándar ISO y que esos están presentes en SWI Prolog. Hay algunos predicados que no es conveniente emplear mientras se aprende el lenguaje: en particular, está prohibido usar el predicado «implicación» (->/2)

La evaluación de sus proyectos tomará en cuenta el uso correcto del estilo lógico, el aprovechamiento de los predicados estándar del lenguaje (no reimplantar cosas que existen), y la eficiencia algorítmica. No basta «que funcione»; tiene que ser eficiente.

Evaluación

La evaluación consiste en varios proyectos para explorar los estilos de programación. En general, la distribución de la evaluación es:

Las Tareas son individuales, están conformadas por preguntas cortas para confirmar su comprension sobre las técnicas del lenguaje, incluyen mínimo trabajo de programación, aunque pedirá correr cosas a mano.

Los proyectos son en equipo, están divididos en dos o tres partes, generalmente independientes, y requieren esfuerzo de programación y análisis considerable.

Equipos y Proyectos

Los equipos de trabajo son de dos (2) personas. Para la segunda sesión debo haber recibido de ustedes un mensaje de correo con la constitución de los equipos; caso contrario los asignaré al azar.

Copiar el proyecto de otro compañero será sancionado con el aplazamiento del proyecto, y el desenlace de la materia dependerá de la opinión del Profesor que coordine la asignatura. Independientemente de eso recibirán una amonestación en la Coordinación de la carrera que puede llevar a la expulsión de la Universidad.

Si encuentran en biblioteca, hemeroteca o Internet un artículo, fragmento o aplicación que resuelva total o parcialmente sus proyectos, es válido utilizarlo siempre y cuando cumpla con dos condiciones simultáneamente:

Resolver problemas apoyándose en soluciones de otros es perfectamente válido, siempre y cuando se tenga el coraje académico de reconocerlo.

Bibliografía

Todos los lenguajes empleados incluyen documentación de referencia suficiente, que está disponible tanto en línea, como en su computador como parte del proceso de instalación.

Sin embargo, algunas personas prefieren tutoriales o libros con los cuales reforzar los conocimientos adquiridos en clase.

Haskell

No se alarme por las fechas de algunos de estos documentos. Muchas de las ideas fundamentales de programación funcional no han cambiado en fondo, simplemente en forma, en muchos años. Del mismo modo, las dificultades para aprenderlas siguen siendo las mismas.

Tutoriales introductorios.

Libros

Una reacción absolutamente normal y muy frecuente al enfrentarse a la programación funcional por primera vez, es sentirse frustrado, inútil, e impotente, porque no funciona nada de lo que creías saber. Hace falta cambiar la manera de pensar acerca de los problemas de programación. Es posible encontrar solaz revisando el material en «Problem Solving in Haskell»

Prolog

Tutoriales

Libros

¿Cómo practico?

La única manera de dominar el tópico es practicando desde el primer día. Sin práctica, es muy difícil lograr tareas y exámenes convincentes de un día para otro. Procure intentar los experimentos hechos en clase, y modificar los programas ejemplo en búsqueda de ideas originales.

Para el cronograma actual, se recomienda:

Material de Apoyo de Clases

Siendo este un curso práctico, todas las clases transcurren escribiendo programas y explorando lo que ocurre al aplicarles pequeñas transformaciones (live coding). Eso tiene como consecuencia, por un lado, que no haya láminas para seguir el curso, y por otro lado, que en cada clase suele haber una dosis importante de improvisación y adecuación: es posible que en clase se improvise un programa, modificaciones a programas existentes, o derivaciones surgidas de preguntas o sugerencias espotáneas.

Aquí puede encontrar una colección de los programas que usualmente muestro en clases (ni todos, ni siempre), agrupados según el lenguaje. Es perfectamente posible que en clase no muestre ninguno de estos programas, o muestre otros programas que no van a estar disponibles. Vaya a clase y tome notas.

Ediciones Anteriores