Functional and Imperative Programming Techniques
Course objectives
General objectives: Acquire functional programming paradigm and advanced aspects of imperative programming in C. Acquire techniques of reasoning about programs, to drive both correctness proofs or program testing. Comparison among different programming language paradigms (imperative, functional, and object--oriented) to speed-up learning of new programming languages. Specific objectives: Knowledge and understanding: Advanced aspects of C language (mainly, explicit pointers and memory (de)allocation, efficiency of C programming). Basic and advanced knowledge of functional programming in Haskell (polymorphic types, laziness, higher-order functions, monads). Apply knowledge and understanding: Apply different programming methodologies (peculiar to each programming paradigm) to problem solving. Critical Judgmental skills: The comparative study of several programming languages paradigm allows students to evaluate, for example, which is the most suitable language to use to develop a given software application. Reasoning about programs techniques can drive both program development and program testing. Communication skills: Students are stimulated, especially in their final presentation to expose concisely but precisely ideas behind programs as well as program analysis. Learning ability: The comparative study of several programming languages paradigm gives students the ability to focus on fondamental aspects of programming languages (parameter passing rules, type systems, language semantics) and this greatly improve their ability to learn new programming languages. Also the ability to learn technical aspects (such as libraries, use of developer tools) will benefit from this studies.
Program - Frequency - Exams
Course program
Prerequisites
Books
Frequency
Exam mode
Bibliography
Lesson mode
- Lesson code10589652
- Academic year2025/2026
- CourseComputer Science
- CurriculumMetodologico
- Year3rd year
- Semester2nd semester
- SSDINF/01
- CFU6