Programming is a ubiquitous field in computer science: being able to produce and understand computer code using state-of-the-art technologies is of fundamental importance to both contribute and manage each software development task.
The course has both methodological and application-oriented objectives, to provide both theoretical understanding and practical skills for effectively programming in diverse computing domains.
From the methodological point of view, the course aims at allowing students to - better understand computing domains - select the most appropriate programming paradigms for each domain - assess and improve code robustness against bugs - improve code factorization and structuring skills - fully exploit specialized hardware computing capabilities
From the application point of view, the course gives practical skills in - application development using state-of-the-art object-oriented and scripting languages - low-level programming for special purpose devices and embedded systems - high-level programming for service oriented architectures
- advanced using of languages for object oriented programming, generic programming and meta programming; - using of languages for data-driven programming; - software development for mobile devices (eg. Android) and embedded systems.
A) Advanced programming paradigms - functional and data-driven programming - data and process abstraction; object oriented, parametric and generic programming - reflection, reification, decorators, metaclasses and annotation - concurrent, distributed, event-driven and GPU programming B) Low level programming C) Mobile, component based and aspect-oriented programming
Examples are discussed and excercises are given during lab sessions, using Python, Java, C and C++ programming languages.