Information

Class MeetingsTue 4:55-6:55pm in Silv 408
RecitationsFri 5:55-6:45pm, two parallel sessions (60FA 150 and online)
First LectureSep 6, 2022
Last LectureDec 13, 2022
Midterm ExamNov 1, 2022
Final ExamWed, Dec 21, 2022 4-6pm
InstructorThomas Wies, Office 60FA 403, Office Hours Wed 4:00-5:00pm, or by appointment
RecitationsElaine Li, Office Hours Fri 1-2pm in room 60FA 442
Nisarg Patel, Office Hours Mon 11am-12pm in room 60FA 418
GradersVaibhav Mavi, Rajat Narlawar, Adithya Viswanathan, Office Hours Wed 2-3pm (online)

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 various languages with a primary focus on the multi-paradigm languages Scala and OCaml. The course work includes extensive programming exercises in these 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, Python 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
  • Memory Management
  • Concurrency

Details

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/06
  • Introduction; Syntax and Semantics
PLP, Ch. 1-2
1 09/09
  • Recitation
2 09/13
  • Names, Binding, Scoping
  • PLP, Ch. 3
2 09/16
  • Recitation
3 09/20
  • Imperative Programming
  • Basic Control Flow Mechanisms
  • Scala Intro
  • PLP, Ch. 6.1-6.5
  • Programming in Scala (PiS), Ch. 2
3 09/23
  • Recitation
4 09/27
  • Subroutines
  • Parameter Passing Variants
  • PLP, Ch. 3.6, 6.6, and 8.1-8.3
4 09/30
  • Recitation
5 10/04
  • Functional Programming
  • OCaml Intro
  • Computing with lists
5 10/07
  • Recitation
6 10/11
  • No class! Monday schedule
6 10/14
  • Recitation
7 10/18
  • Algebraic datatypes and pattern matching
  • Higher-order functions
  • PLP, Ch. 11.4, 11.6
  • 7 10/21
    • Recitation
    8 10/25
    • Foundations of Functional Programming
    • Lambda Calculus
  • PLP, 11.7
  • TaPL, Ch. 5
  • 8 10/28
    • Recitation
    9 11/01
    • Midterm Exam
    9 11/04
    • Recitation
    10 11/08
    • Types and type inference
    • PLP, Ch. 7.1, 7.2, 11.4
    10 11/11
    • Recitation
    11 11/15
    • Modules and Program Structure
    • OCaml Module System
    11 11/18
    • Recitation
    12 11/22
    • Object-Oriented Programming
    • Subtyping and Dynamic Method Dispatch
    • Scala revisited
    • PLP, ch. 9, 3.6.3
    • OSV Ch. 4
    12 11/25
    • Recitation
    13 11/29
    • Generic Programming
    • Scala Generics
    • PLP, Ch. 8.4
    • OSV, Ch. 19
    13 12/02
    • Recitation
    14 12/06
    • Memory Management
    • Garbage Collection
    • Reference Counting
    • Ownership Types
    14 12/09
    • Recitation
    15 12/13
    • Concurrent Programming
    16 12/20
    • Final Exam