Clone wiki

2017-adpro / Home

[ Schedule ] [ Piazza ] [ Submissions ]

Advanced Programming 2017

This is a wiki for the Advanced Programming course at IT University of Copenhagen.


  • Course Schedule (<- click here to see the exercises and reading for individual weeks)

  • Handins (aka exercises, aka homework) submission: we submit via learnIT. Homework handins are not graded, which means that you pass by handing in something that shows a genuine attempt to solve the exercises. The solutions don't have to be correct. You do receive feedback. Please hand in as early as possible to allow for timely feedback (otherwise we arrive at huge congestion before the deadline).

  • Our forum: ( This term we will be using Piazza for class discussion. The system is highly catered to getting you help fast and efficiently from classmates, the TAs, and Andrzej. Rather than emailing questions to the teaching staff, post your questions on Piazza. If you have any problems or feedback for the developers, email

  • Teacher: Andrzej Wąsowski Don't email Andrzej, or TAs, unless you want to discuss matters that require protecting your privacy. Use Piazza instead. If you have difficulties creating an account on piazza, try to use "" instead of "IT University" as the university name.

  • Assistants: Adam Bjørn Schønemann, Jakob Merrild, and Oscar Felipe Cerda Toro

  • Course description (opens ITU's Course Base)

  • Lectures: Thursdays 14:00-15:50 room Aud 1

  • Labs: Thursdays 16:00-17:50 rooms 2A12-14, 2A20

  • Laptop policy: Laptops may be used only for legitimate classroom purposes, such as taking notes, downloading class information, or working on an in-class exercise, or project. E-mail, instant messaging, surfing the Internet, reading news, or playing games are not considered legitimate classroom purposes; such inappropriate laptop use is distracting to those seated around you and is unprofessional.

Exam and Mandatory Assignments

Two mandatory mini-projects in two person groups graded pass/fail. Both mini-projects must be graded pass for exam qualification. More-over you have to complete all home-works before the exam, also in two person groups (Home works are not graded, but you must hand-in your solutions to demonstrate that you worked on them; Handing in solutions prepared by other groups is not acceptable).

Homework assignments are published weekly. There will be two mini projects, one roughly mid semester, and one towards the end. If you missed the deadline for home works, or failed/missed a mini-project(s), there will be a resubmission deadline about 2 weeks before the exam

Reading List

Text Book

[Chiusano, Bjarnason 2014] Paul Chiusano. Runar Bjarnason. Functional Programming in Scala. Manning 2014 (We will use this book most; it is also available in electronic format from the publisher; An errata is available at: . This is our main textbook, you will need it to survive the course. The other material is either supplementary or freely available from ITU's network. For papers, we will tell you when you need to get them. For books, they are all supplementary, so you can use them, if you think that you need them.

Early chapters of [Chiusano, Bjarnason 2014] and [Horstmann 2012] (and of many other interesting books) are freely available from so that you can evaluate them before buying. This website also has a discount code for [Chiusano, Bjarnason 2014], apparently 40% off the list price, but I am not claiming that this is the cheapest source (I have not tried others).

Research Papers

[Claessen, Hughes 2000] Koen Claessen, John Hughes. QuickCheck: a lightweight tool for random testing of Haskell programs. ICFP 2000: 268-279 (paper available for download from ITU network; or google for a freely available green open access version)

[Wadler 1995] Philip Wadler. Monads for functional programming. In: J. Juering and E. Meijer, (eds). Advanced Functional Programming, Proceedings of the Baastad Spring School, May 1995. Springer Verlag, LNCS 925.

[Hinze, Paterson 2006] Ralf Hinze, Ross Paterson: Finger trees: a simple general-purpose data structure. J. Funct. Program. 16(2): 197-217 (2006)

[Foster et al, 2007] J. Nathan Foster, Michael B. Greenwald, Jonathan T. Moore, Benjamin C. Pierce, Alan Schmitt: Combinators for bidirectional tree transformations: A linguistic approach to the view-update problem. ACM Trans. Program. Lang. Syst. 29(3) (2007)

[Morris 2012] Tony Morris. Asymmetric lenses in Scala. Scala Days 2012*

Supplementary Books

[Horstmann 2012] Cay S. Hosrtmann. Scala for the Impatient. Addison Wesley 2012 (a simpler book on Scala in general, assumes that you are a profficient Java programmer; a good reference book, and a quick&easy introduction to the language; you can use it as a supporting source)

[Oderski et al. 2014 ] Martin Odersky. Lex Spoon. Bill Venners. Programming in Scala. 2nd edition. Artima 2012. (the main reference book on Scala; get it, if you are one of those that need the main book for a language to use it; the book is very well written and includes a lot of material about good programming in general, not just in Scala; however it is quite detached from the main objectives of our course, and much slower to read than Chiusano's or Horstmann's books)