Modules | Area | Type | Hours | Teacher(s) | |
PROGRAMMAZIONE AVANZATA | INF/01 | LEZIONI | 72 |
|
This is a course about the practice of programming, an attempt to expose students to the development of real programs. Programming is more than just writing code. Programmers must also assess tradeoffs, choose among design alternatives, debug and test, improve performance, and maintain software written by themselves and others. At the same time, they must be concerned with compatibility, robustness, and reliability, while meeting specifications. Advanced Programming is about programming, not about a specific programming language.
The main teaching objectives of this course are:
This is a course about the practice of programming, an attempt to expose students to the development of real programs. Programming is more than just writing code. Programmers must also assess tradeoffs, choose among design alternatives, debug and test, improve performance, and maintain software written by themselves and others. At the same time, they must be concerned with compatibility, robustness, and reliability, while meeting specifications. Advanced Programming is about programming, not about a specific programming language.
The main teaching objectives of this course are:
Programming assignments developed during the course, and dicussion of a final project with oral examination. Students will make extensive use of libraries, so that it will be possible to write programs that solve real problems.
The assignment involves a programming activity and includes an optional problem It is allowed to develop the solution into teams, however the proposed solution should be discussed individually.
At the end of this course, students will acquire advanced knowledge of programming techniques and methodologies for advanced software development. In particular, students will (i) know the main programming paradigms; (ii) be able to apply advanced programming techniques in the context of modern programming languages, and in particular, those mixing object-oriented and functional paradigms; (iii) be able to apply advanced design patterns in the context of the various programming paradigms.
Programming assignments developed during the course.
Students will improve their ability to write programs that allow them to solve complex tasks. Programming assignments are individual. However working with other students on problem sets often enhances the learning process. That is why the course has a relatively liberal collaboration process. It is allowed to develop the programing assignments into teams, however the proposed solution should be submitted individually.
An important function of the course is to help students develop good programming practices, style, and skill, with as much personalized coaching and critique of individual student’s code as possible.
Programming projects will focus on learning and using techniques that are valuable for professional practice in developing and extending large scale software relatively easily.
Getting evaluations and critiques of student assignment is also part of the learning process. That is one of the reasons students have to submit their programming assignments individually. The proposed solution is instead discussed individually.
The requirements for Advanced Programming are a good knowledge of (i) at least one programming language, (ii) computer organization, (iii) data structures and algorithms.
The course is intended to provide the programmimng abilities and skills required for the all the remaining courses of the study plan.
There are three lectures per week. The topics and programming assignments will be
announced in the schedule posted and revised on the course web site. Actually the class time is a mixture of lecture and discussion. There will be several programming projects (four programming assignment in the semester), and a final exam; their due dates are given in the course schedule which will be maintained on the course web page. Changes to the schedule will be announced in lecture and via the announcements and updated on the course web page.
Programming Languages concepts in the Ocaml language
Python fundamentals
Concurrent Object Oriented Programming in Java
Design and implementation of Concurrennt API in Java
Reactive programming in Scala
Real World OCaml: Functional Programming for the Masses
Book by Anil Madhavapeddy, Jason Hickey, and Yaron Minsky
Dive Into Python 3
Book by Mark Pilgrim
The Art of Multiprocessor Programming
Book by Maurice Herlihy and Nir Shavit
Reactive Programming with Scala and Akka
Book by Prasanna Kumar Sathyanarayanan and Suraj Atreya
Test and discussion of the programming assignments developed during the course, code analysis and design evaluation, and discussion of a final project with oral examination