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:- to provide the students with a deep understanding of high level programming concepts and metaphors and which are their costs and limitations
- to acquaint the students with modern principles, techniques, and best practices of sophisticated software construction
- to introduce the students to techniques of programming at higher abstraction levels
Regular class attendance is required and class participation helps.
Lecture Schedule
- Monday: 09:00 -- 11:00 Room C1.
- Thesday: 11:00 -- 13:00 Room N1.
- Wednesday: 16:00 -- 18:00 Room N1 ;
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.- Functional Programming in OCAML. Reading: Real world Ocaml: online book
- 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.
- Introduction to Functional Programming lecture (pdf)
- Variable and Functions lecture (pdf)
- Lists and Patterns lecture (pdf)
- Programming examples lecture (pdf)
- Higher order functions: map and filter lecture (pdf)
- Records, Tuple and Variants lecture (pdf)
- Algebraic Data Types lecture (pdf)
- Implementing an interpreter in OCAML lecture (pdf)
- OCAML Compilation Tool Chain lecture (pdf)
- OCAML-runtime lecture (pdf)
- OCAML Compilation Tool Chain code (zip)
- Scoping rules lecture (pdf)
- Implementing scoping rules lecture (pdf)
- OCAML Interpreters code (zip)
- Object Oriented Programming: Java review (1) lecture (pdf)
- Object Oriented Programming: Java review (2) lecture (pdf)
- Concurrent Object Oriented Programming (1) lecture (pdf)
- Concurrent Object Oriented Programming (2) lecture (pdf)
- Concurrent Object Oriented Programming (3) lecture (pdf)
- Concurrent Object Oriented Programming (4) lecture (pdf)
- Concurrent Object Oriented Programming (5) lecture (pdf)
- Concurrent Object Oriented Programming (6) lecture (pdf)
- Python Tutorial lecture (pdf)
- Python Programming: Tag Cloud lecture (pdf)
FAQ
News
- Problem Assignment 1 Homework
- Problem Assignment 2 Homework
- Problem Assignment 3 Homework
- Note: To apply for the final of January 2016, students have to complete and submit all the homework assignments within the deadline of January 10, 2016.
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