Course Information

Table of Contents


Tuesdays: 4:40 PM - 7:30 PM


Perkins LINK 2-065 classroom 2


Jim Posen

ECE & CS 2014
github: @jimpo
Email: jep37 AT duke DOT edu
Office Hours: TBD

Robert Duvall - Faculty Sponsor

Robert Duvall

Lecturer, CS 308
Office Hours: TBD


To be successful in this course, students should know at least one programming language, and be familiar with fundamental programming principles, with the material covered in CS 101, as well as and git.


Rather than following a textbook, I will post reading and online tutorials for various languages that better fit what we are learning. The following book, however, is recommended and covers a few more languages than we will.

Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages - Bruce Tate
Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages - Bruce Tate

Schedule (Tentative)

Week 1 (8/27/13) - Intro + Tools (Faculty Sponsor Present)
Week 2 (9/3/13) - Lisp basics in Racket
Week 3 (9/10/13) - Lisp philosophy in Racket
Week 4 (9/17/13) - Macros and more in Racket
Week 5 (9/24/13) - Functional programming in Haskell
Week 6 (10/1/13) - Higher order constructs in Haskell
Week 7 (10/8/13) - Logical programming in Prolog
Week 8 (10/15/13) - Fall Break
Week 9 (10/22/13) - Scripting in Ruby
Week 10 (10/29/13) - Object oriented programming in Ruby
Week 11 (11/5/13) - Metaprogramming in Ruby
Week 12 (11/12/13) - Multiparadigm programming in Scala
Week 13 (11/19/13) - Concurrency in Scala
Week 14 (11/26/13) - Scala
Week 15 (12/3/13) - Challenge


Students must attend at least eleven class sessions to pass the course


In order to follow the course, students are assigned readings each week covering the language we will be discussing. Readings will be released on under the assignments page each week.

There will also be homework assignments with weekly problems. Homework assignments will be made available and should be submitted on GitHub. Your solutions can be checked using the autograder (instructions for using the auto grader will be added once the course begins). Homework assignments are due at 11:59 PM on the due date. Assignments submitted up to 24 hours late are penalized 25%, and submissions up to 48 hours late are penalized 50%. Assignments received later than 48 hours get zero credit, since we need to post solutions in a timely manner.


We will give you time at the end of the semester to think about designing a DSL in a language of your choice. This is meant to be an exercise in language design to ensure you have understood the tradeoffs of different properties of programming languages.


A grade of satisfactory in this course requires consistent attendance and satisfactory completion of all assignments of this course.