Preguntas frecuentes sobre el final de PLP
Esta página reúne algunas preguntas frecuentes sobre el final de Paradigmas de Programación (FCEyN, UBA).
Corresponden exclusivamente a las fechas de final en las que yo (Pablo Barenbaum) sea el profesor a cargo de tomar el final.
¿Cómo es la modalidad del examen?
El final puede ser oral o escrito, dependiendo del número de inscriptxs.
En caso de que sea escrito, el examen es a libro abierto.
El examen escrito normalmente consta de 4 o 5 ejercicios y tiene una duración de 3 horas.
¿A partir de qué número de inscriptos el final es escrito?
Dependerá del caso. No me parecería bueno que se especule en torno a eso.
¿Los ejercicios son teóricos o prácticos?
El examen es teórico–práctico, es decir, puede incluir tanto preguntas conceptuales
como resolución de problemas.
No interesa que repitan definiciones de memoria, pero hay conceptos que son tan
fundamentales para la materia que se espera que sean bien conocidos.
En general, la mayor parte de los ejercicios son prácticos (en alguna medida similares a
ejercicios de parcial y de las prácticas), pero a veces integran varios temas de la
materia o aspiran a evaluar que los temas teóricos estén claros.
Si cursaste la materia hace un tiempo, es recomendable que rehagas las prácticas
a conciencia.
¿Qué temas entran en el examen?
Entran todos los temas vistos en la materia.
En relación a los temas que tienen que ver con programación,
en general interesan las características del lenguaje de programación que son
propias y fundamentales del paradigma,
en tanto que no interesan las características accidentales o muy específicas
de la herramienta
(como uso de typeclasses en Haskell o metapredicados en Prolog).
Si cursaste la versión de la materia correspondiente al plan de estudios de 2023
("plan nuevo"):
- Programación funcional en Haskell y esquemas de recursión.
- Razonamiento ecuacional e inducción estructural.
- Deducción natural para lógica proposicional y de primer orden.
- Cálculo-λ, sistemas de tipos y semántica operacional.
- Unificación e inferencia de tipos.
- Programación lógica en Prolog.
- Métodos de resolución general y SLD.
- (Rudimentos de) programación orientada a objetos en SmallTalk.
Si cursaste la versión de la materia correspondiente al plan de estudios de 1993
("plan viejo"):
- Programación funcional en Haskell y esquemas de recursión.
- Cálculo-λ, sistemas de tipos y semántica operacional.
- Subtipado.
- Unificación e inferencia de tipos.
- Programación lógica en Prolog.
- Métodos de resolución general y SLD.
- Programación orientada a objetos con prototipos en JavaScript.
- Cálculo-ς.
¿Cómo se determina la calificación?
Los ejercicios no tienen puntaje numérico. Cada ejercicio se califica como "Bien", "Regular" o "Mal".
La evaluación de un examen tiene una cuota muy grande de subjetividad.
El criterio no es mecánico, y la calificación no tiene que ver solamente
con una medida cuantitativa (cantidad de ejercicios resueltos correctamente) sino
también cualitativa (conocimientos y habilidades que se demuestran, capacidad
de extrapolar dichas habilidades, calidad de la entrega, claridad
conceptual, prolijidad en la exposición, etc.).
Para aprobar el examen con 4 no alcanza con tener bien resueltos el 40% de los ejercicios.
Para aprobar con un 10 no se exige la ausencia total de errores.
En general, es posible perdonar bugs o confusiones menores,
pero no errores conceptuales u omisiones graves.
¿Hay algún modelo de examen disponible?
Como regla general, no publico los exámenes finales que tomo.
En general no es una buena idea hacer overfitting con modelos de final conocidos.
Mi recomendación es estudiar de los apuntes y la bibliografía, hacer
ejercicios de los distintos temas de la materia y consultar las dudas
a docentes y compañerxs.
La bibliografía recomendada suele incluir buenos ejercicios.
Recomiendo también no fiarse de algunos modelos de examen que circulan,
porque muchos de ellos están mal transcriptos, con enunciados incorrectos
o incompletos.
¿Qué bibliografía puedo consultar?
La elección de bibliografía es algo muy personal.
No hay un único libro que cubra íntegramente los temas que se ven en la materia.
Algunas fuentes:
- Programación funcional: capítulos 1–4 del libro de Bird [1], artículo de Hutton [2].
- Razonamiento ecuacional: capítulo 6 del libro de Bird [1].
- Deducción natural: capítulos 2 y 6 del libro de Sørensen y Urzyczyn [3].
- Cálculo-λ: capítulos 5 y 9 del libro de Pierce [4].
- Curry–Howard: capítulos 3 y 4 del del libro de Sørensen y Urzyczyn [3].
- Inferencia de tipos: capítulo 22 del libro de Pierce [4].
- Unificación: sección 4.6 del libro de Baader y Nipkow [5].
- Prolog: capítulos 2–4 del libro de Bramer [6].
- Resolución: capítulos 1 y 2 del libro de Lloyd [7].
- Programación orientada a objetos en SmallTalk: capítulos 1–4 del "libro azul" (Goldberg y Robson) [8].
- Cálculo-ς: capítulos 1, 2 y 6 del libro de Abadi y Cardelli [9].
Referencias
- [1] Richard Bird. Thinking functionally with Haskell. Cambridge University Press, 2015.
- [2] Graham Hutton. A tutorial on the universality and expressiveness of fold. J. Functional Programming 9 (4): 355-372, julio de 1999.
- [3] Morten Sørensen y Paweł Urzyczyn. Lectures on the Curry-Howard Isomorphism. Elsevier, 2006.
- [4] Benjamin C. Pierce. Types and Programming Languages. The MIT Press, 2002.
- [5] Franz Baader y Tobias Nipkow. Term Rewriting and All That. Cambridge University Press, 1998.
- [6] Max Bramer. Logic Programming with Prolog. Springer, 2005.
- [7] John Wylie Lloyd. Foundations of Logic Programming, Second Edition. Springer-Verlag, 1993.
- [8] Adele Goldberg y David Robson. Smalltalk-80: the language and its implementation. Addison-Wesley, 1983.
- [9] Martín Abadi y Luca Cardelli. A Theory of Objects. Springer, 1996.
Otras observaciones generales
- El objetivo de esta página es poder dar una respuesta más completa.
El objetivo no es evitar que me hagan preguntas.
Todas las preguntas son bienvenidas. Acepto mensajes por e-mail o
Telegram, sin garantía de disponibilidad para responder a tiempo.
- No te tomes tu calificación en forma personal.
Una nota no dice nada sobre tu rendimiento futuro.
El peor de los casos puede ser desaprobar, y no es un caso tan malo.
- La frase mens sana in corpore sano está un poco trillada pero es totalmente válida en cualquier actividad que requiera rendimiento intelectual.
Además de estudiar, es necesario darse tiempo para hacer ejercicio físico, cuidar la alimentación, socializar, tener momentos de ocio y mantener una rutina de sueño suficiente y ordenado.