Course Information

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 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

Regular class attendance is required and class participation helps.

Lecture Schedule

Study Materials

The readings for this course will mostly be in the form of handouts that are periodically distributed. All the handouts will be available online, so if you miss a class or are taking the course remotely, don't worry, everything will be posted.
  1. Functional Programming in OCAML. Reading: Real world Ocaml: online book
  2. Concurrent Programming: Reading >Concurrent Object Oriented Programming: Notes Notes (pdf)

Policies

Assessment Method: At its core, Advanced Programming is a course about programming. Accordingly, this course will primarily build around programming. This course will have programming assignments and a comprehensive final

Lectures

Notes from lectures and further readings.

  1. Introduction to Functional Programming 1 lecture (pdf)
  2. Introduction to Functional Programming 2 lecture (pdf)
  3. Introduction to Functional Programming 3 lecture (pdf)
  4. Programming in OCAML lecture (pdf)
  5. OCAML Programming Tools lecture (pdf)
  6. OCAML Programming Tools code (zip)
  7. Higher Order Functions lecture (pdf)
  8. Closure lecture (pdf)
  9. Data Types lecture (pdf)
  10. Programming Example: DFA lecture (pdf)
  11. Implementing an Interpreter lecture (pdf)
  12. Am Environment-based Interpreter lecture (pdf)
  13. Homework 1 The problem (pdf)
  14. Python: an introduction Tutorial (pdf)
  15. Python: Functions lecture (pdf)
  16. Python: Functional Programming lecture (pdf)
  17. Python: Object Oriented Programming lecture (pdf)
  18. Python: Programming Examples Python Code Examples (zip)
  19. Homework 2 The problem (pdf)
  20. Java: Concurrent Object Oriented Programming Part 1 (pdf)
  21. Java: Concurrent Object Oriented Programming Part 2 (pdf)
  22. Java: Concurrent Object Oriented Programming Part 3 (pdf)
  23. Concurrent Object Oriented Programming: FineGrain, Lazy and Lock-free synchronization policies Note (pdf)
  24. Homework 3 The problem (pdf)
  25. Introduction to the Scala programming language Scala Basics
  26. Introduction to the Scala programming language Scala Basics 2
  27. Introduction to the Scala programming language Scala Collections (1)
  28. Introduction to the Scala programming language Scala Collections (2)
  29. Introduction to the Scala programming language Polymorphism
  30. Introduction to the Scala programming language Concurrency

Archive

Advanced Programming AA 205-16 aa2015-16

FAQ

News

The lecture of October 12 will be in Room N1 from 14:00 to 16:00

Contacts

Prof. Gian Luigi Ferrari:

E-mail: giangi at di.unipi.it

www: http://pages.di.unipi.it/ferrari