Scheda programma d'esame
ADVANCED PROGRAMMING
GIAN-LUIGI FERRARI
Academic year2016/17
CourseCOMPUTER SCIENCE AND NETWORKING
Code301AA
Credits9
PeriodSemester 1
LanguageEnglish

ModulesAreaTypeHoursTeacher(s)
PROGRAMMAZIONE AVANZATAINF/01LEZIONI72
GIAN-LUIGI FERRARI unimap
Obiettivi di apprendimento
Learning outcomes
Conoscenze

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:

  1. to provide the students with a deep understanding of high level programming concepts and metaphors and which are their costs and limitations
  2. to acquaint the students with modern principles, techniques, and best practices of sophisticated software construction
  3. to introduce the students to techniques of programming at higher abstraction levels
Knowledge

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:

  1. to provide the students with a deep understanding of high level programming concepts and metaphors and which are their costs and limitations
  2. to acquaint the students with modern principles, techniques, and best practices of sophisticated software construction
  3. to introduce the students to techniques of programming at higher abstraction levels
Assessment criteria of knowledge

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.

Skills

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.

 

Assessment criteria of skills

Programming assignments developed during the course.

Behaviors

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.

Assessment criteria of behaviors

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.

Prerequisites

The requirements for Advanced Programming are a good knowledge of (i) at least one programming language, (ii) computer organization, (iii) data structures and algorithms.

 

Prerequisites for further study

The course is intended to provide the programmimng abilities and skills required for the all the remaining courses of the study plan.

Teaching methods

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.

 

Syllabus

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

Bibliography

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

Assessment methods

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

Updated: 17/05/2017 18:04