Course Information
Table of Contents
- Time
- Location
- Instructors
- Prerequisites
- Textbook
- Schedule (Tentative)
- Attendance
- Homework
- Challenge
- Grading
Time
Tuesdays: 4:40 PM - 7:30 PM
Location
Perkins LINK 2-065 classroom 2
Instructor
Jim Posen
ECE & CS 2014
github: @jimpo
Email: jep37 AT duke DOT edu
Office Hours: TBD
Robert Duvall - Faculty Sponsor
Lecturer, CS 308
Email: rcd@cs.duke.edu
Office Hours: TBD
Prerequisites
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 github.com and git.
Textbook
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
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
Attendance
Students must attend at least eleven class sessions to pass the course
Homework
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.
Challenge
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.
Grading
A grade of satisfactory in this course requires consistent attendance and satisfactory completion of all assignments of this course.