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 lecture (pdf)
  2. Variable and Functions lecture (pdf)
  3. Lists and Patterns lecture (pdf)
  4. Programming examples lecture (pdf)
  5. Higher order functions: map and filter lecture (pdf)
  6. Records, Tuple and Variants lecture (pdf)
  7. Algebraic Data Types lecture (pdf)
  8. Implementing an interpreter in OCAML lecture (pdf)
  9. OCAML Compilation Tool Chain lecture (pdf)
  10. OCAML-runtime lecture (pdf)
  11. OCAML Compilation Tool Chain code (zip)
  12. Scoping rules lecture (pdf)
  13. Implementing scoping rules lecture (pdf)
  14. OCAML Interpreters code (zip)
  15. Object Oriented Programming: Java review (1) lecture (pdf)
  16. Object Oriented Programming: Java review (2) lecture (pdf)
  17. Concurrent Object Oriented Programming (1) lecture (pdf)
  18. Concurrent Object Oriented Programming (2) lecture (pdf)
  19. Concurrent Object Oriented Programming (3) lecture (pdf)
  20. Concurrent Object Oriented Programming (4) lecture (pdf)
  21. Concurrent Object Oriented Programming (5) lecture (pdf)
  22. Concurrent Object Oriented Programming (6) lecture (pdf)
  23. Python Tutorial lecture (pdf)
  24. Python Programming: Tag Cloud lecture (pdf)

FAQ

News

Contacts

Prof. Gian Luigi Ferrari:

E-mail: giangi at di.unipi.it

www: http://www.di.unipi.it/~giangi

Prof. Antonio Cisternino:

E-mail: cisterni at di.unipi.it

www: http://www.di.unipi.it/~cisterni