Information

Class MeetingsWed 5:10-7pm in CIWW 109
RecitationsThu 6:10-7pm in CIWW 109
First LectureSep 5, 2018
Last LectureDec 12, 2018
Midterm ExamOct 24, 2018, 5:10-7pm in CIWW 109
Final ExamDec 19, 2018, 5:10-7pm in CIWW 109
InstructorThomas Wies, Office 60FA 403, Office Hours Tue 4:00-5:00pm, or by appointment
RecitationsZvonimir Pavlinovic, Office 60FA 418, Office Hours Fri 10:30am-12:00pm, or by appointment
GradersNikita Bhargava and Hu Jiayuan

Overview

Design and use of mainstream programming languages: naming, scoping, type models, control structures, procedural abstractions, modularization. Implementation issues and runtime organization. We will study languages such as C, C++, Java, Scala, Scheme, and OCaml. The course work includes extensive programming exercises in various languages.

Prerequisites: Undergraduate courses in data structures and algorithms or equivalent, as well as familiarity and programming experience in a high-level language like C, C++, Java, or a similar language.

Topics

Throughout the semester, we will investigate the following topics in detail among others:

  • Syntax
  • Names, Scopes, and Bindings
  • Control Flow
  • Subprograms and Control Abstraction
  • Functional Programming
  • Types
  • Object-Oriented Programming
  • Generic Programming
  • Exceptions
  • Concurrency

Details

Piazza

We will use Piazza for course-related discussions and announcements. I encourage you to ask questions when you are struggling to understand a concept - you can even do so anonymously.

Grading

Homework assignments (30%), midterm exam (30%), final exam (40%).

Late Submission Policy

Late submissions of homework solutions and projects will be graded with a 10% penalty per day of late submission. Solutions will not be graded if they are submitted later than one week after the specified deadline.

Academic Integrity

Please review the departmental academic integrity policy. In this course, you may discuss assignments with other students, but the work you turn in must be your own. Do not copy another student's work. You should help other students on specific technical issues but you must acknowledge such interactions. Copying code or other work without giving appropriate acknowledgment is a serious offense with consequences ranging from no credit to potential expulsion.

Recommended Textbooks

There will be no required textbook for this course. However, the following textbooks are recommended for further study:

Syllabus

The syllabus can be subject to change, so please refresh frequently.

Week Date Topics Materials Further Reading
1 09/05
  • Introduction; Syntax and Semantics
PLP, Ch. 1-2
1 09/06
  • Recitation
2 09/12
  • Names, Binding, Scoping
  • Scala Basics
  • PLP, Ch. 3
  • Programming in Scala (PiS), Ch. 2
2 09/13
  • Recitation
3 09/19
  • Imperative Programming
  • Basic Control Flow Mechanisms
  • PLP, Ch. 6.1-6.5
  • Programming in Scala (PiS), Ch. 2
3 09/20
  • Recitation
4 09/26
  • Subroutines
  • Parameter Passing Variants
  • PLP, Ch. 3.6, 6.6, and 8.1-8.3
4 09/27
  • Recitation
5 10/03
  • Functional Programming
  • Lambda Calculus
  • Scheme Intro
5 10/04
  • Recitation
6 10/10
  • Scheme
  • Computing with lists
  • Higher-order functions
  • PLP, Ch. 11.3, 11.6
  • Scheme intro
  • Scheme pattern matching
  • 6 10/11
    • Recitation
    7 10/17
    • Types
    • OCaml Intro
  • PLP, Ch. 7.1, 7.2, 11.4
  • OCaml tutorials
  • OCaml manual
  • 7 10/18
    • Recitation
    8 10/24
    • Midterm Exam
    8 10/25
    • No recitation
    9 10/31
    • OCaml
    • Type inference
    • Algebraic datatypes
    9 11/01
    • Recitation
    10 11/07
    • Modules and Program Structure
    • OCaml Module System
  • PLP, Ch. 3.3.4, 3.3.5, 3.8
  • OCaml modules intro
  • OCaml functors intro
  • 10 11/08
    • Recitation
    11 11/14
    • Scala
    • Object-Oriented Programming
    • Subtyping and Dynamic Method Dispatch
    11 11/15
    • Recitation
    11/21
    • No class (Thanksgiving)
    11/22
    • No recitation (Thanksgiving)
    12 11/28
    • Generic Programming
    • Scala and Java Generics
    • C++ Templates
    12 11/29
    • Recitation
    13 12/05
    • Memory Management
    • Garbage Collection
    • Ownership Types
    13 12/06
    • Recitation
    14 12/12
    • Concurrent Programming
    14 12/13
    • Recitation
    15 12/19
    • Final Exam