Department of Information and Computing Sciences

Departement Informatica Onderwijs
Bachelor Informatica Informatiekunde Kunstmatige intelligentie Master Computing Science Game&Media Technology Artifical Intelligence Business Informatics

Onderwijs Informatica en Informatiekunde

Vak-informatie Informatica en Informatiekunde

Concepts of program design

Website:website containing additional information
Course code:INFOMCPD
Credits:7.5 ECTS
Period:period 2 (week 46 through 5, i.e., 14-11-2016 through 3-2-2017; retake week 16)
Participants:up till now 47 subscriptions
Schedule:Official schedule representation can be found in Osiris
Teachers:Dit is een oud rooster!
lab session group 1 Thu 11.00-12.4546-51 BBG-083
2-4 BBG-083
lecture   Tue 13.15-15.0046-51 BBG-083 Wouter Swierstra
2-4 BBG-083
Thu 9.00-10.4546-51 BBG-161
2-4 BBG-161
week: 16Tue 17-4-201813.30-16.30 uurroom: BBG-209retake exam
Contents:This course aims to teach students the concepts and principles of programming languages and program language design.
Literature:There is no book or lecture notes. Instead, articles, slides, and background reading will be provided during the course.
Course form:The course will consist of a mix of lectures and presentations by students.
Exam form:To complete the course students will need to:
  • give a presentation (in a group)
  • complete a small research project (in a group)
  • present this project in a poster session and/or report (in a group)
  • take a final exam
Minimum effort to qualify for 2nd chance exam:A student must obtain a final mark of at least 4 to take the resit exam.
Description:Upon completing the course, students will:
  1. Understand what constitutes the definition of a programming language (syntax, static semantics, and dynamic semantics), together with common terminology used in the description and definition of programming languages (such as calling conventions, type systems, garbage collection).
  2. Be able to formulate and design domain specific languages, either as embedded or stand-alone language, while understanding the relative merits of these two approaches.
  3. Distinguish between the concepts of concurrency and parallelism and understand the language mechanisms that modern languages use to support both these issues.
  4. Understand the concept of metaprogramming and how different languages implement this.
  5. Being able to formulate a simple language's syntax, static semantics, and dynamic semantics and understand the design choices involved.
  6. Be able to learn new languages quickly and be able to identify how new languages relate to existing concepts and languages.