TU Delft
Year
NEDERLANDSENGLISH
Organization
Education Type
Education print this page print this page     
2010/2011 Electrical Engineering, Mathematics and Computer Science Bachelor Computer Science and Engineering
IN3560
Principles of Programming Languages
ECTS: 4
Responsible Instructor
Name E-mail
Prof.dr. E. Visser    E.Visser@tudelft.nl
Contact Hours / Week x/x/x/x
0/X/0/0
Education Period
2
Start Education
2
Exam Period
2
4
Course Language
English
Expected prior knowledge
Functional programming
Course Contents

This course will not be taught in 2010-2011.

Programmers spend a lot of time understanding and improving their tools: editors, profilers, debuggers, and so forth. Technical magazines sometimes call to mind stores that sell outdoor gear: �It�s a rough world out there, you need all the equipment and gadgetry you can get.� You, too, may have stared in admiration and longing at a particularly powerful syntax highlighter at some point in time.

Often lost in this analysis is a proper understanding of what tools and technologies can have the greatest impact. Irrespective of how you choose to write code and where you might run it, perhaps the single most important technology is the programming language itself. Languages both enable solutions and inhibit them; they save time and waste it; and most importantly, they either expand or contract our imagination. Yet how much have you thought about this, and how well do you understand the tradeoffs?

Whereas prior courses may have taught you how to program, this course teaches you how to analyze programming languages.

* What are the questions one asks when confronting a new language?
* What intellectual tools do we have for studying languages?
* What does a language designer need to know?
* How can we implement new languages?

You should have much better answers to these questions when we're done than I expect you have now.

A major difference between this course and ones with a similar title at other universities is that we will use a much better way of classifying languages. In particular, we will move past cliched and relatively useless divisions such as �functional,� �object-oriented� and �imperative.� We will instead decompose languages into building blocks, and understand these building blocks in depth. The goal is to give you a richer verbal and intellectual vocabulary so that, when you are confronted with a new language, you have a broad set of concepts, each of which you understand well, to use to dissect the language.
Study Goals
Whereas prior courses may have taught you how to program, this course teaches you how to analyze programming languages.

* What are the questions one asks when confronting a new language?
* What intellectual tools do we have for studying languages?
* What does a language designer need to know?
* How can we implement new languages?

You should have much better answers to these questions when we're done than I expect you have now.
Education Method
The course consists of interactive lectures and lab assignments.

In the lectures we will jointly write interpreters in Scheme for small programming languages and apply these interpreters to test our understanding of the semantics of the language under consideration.

Attending lectures and actively participating in lectures proves to be important for learning the material of this course.
Books
Required reading for this course is the book:

Programming Languages: Application and Interpretation
by Shriram Krishnamurthi

The book will be available as a TU Delft reader.
Assessment
All lab assignments should be finished with a grade 'sufficient'.

Lab assignments with a grade 'good' on first try earn a bonus for the exam.

Final grade is grade of the exam with bonus points from labs added.

Note that this course will use (experimental) 'digital examination' techniques as part of a grassroots project.