The chapters from Michael Scott's Programming Language Pragmatics (5th ed.) corresponding to the topics covered in class, are also mentioned (wherever applicable).
The slides are uploaded on a per-topic basis, and one set may be covered in multiple lectures.
Stony Brook University single sign-on (i.e., SBU NetID) is needed to access the slides
The likely topics covered in this course are listed here.
Aug.25. Introduction to the course and an overview of a few programming paradigms (Scott: Ch. 1) [ slides | slides ]
Aug.27. Introduction to Lambda calculus (Scott: Ch. 3, Ch. 11) [ slides (1-8) ]
Sep.01. Labor Day (Holiday)
Sep.03. Introduction to Lambda calculus (Scott: Ch. 3, Ch. 11) [ slides (10-27) ]
Sep.08. Scopes, bindings, and shadowing (Scott: Ch. 3, Ch. 11) [ slides (28-40) | OCaml Installation Guide ]
Sep.10. Introduction to OCaml: Bindings, simple functions, and operators (Scott: Ch. 11) [ slides (41-51) ]
Sep.15. Introduction to OCaml: pattern matching (Scott: Ch. 11) [ slides (52-58) ]
Sep.17. Introduction to OCaml: pattern matching, bindings, and higher-order functions (Scott: Ch. 11) [ slides (59-70) ]
Sep.22. Data Types and Type Systems: invariants, denotational and structural semantics, duck typing (Scott: Ch. 7) [ slides (1-11) ]
Sep.22. Data Types and Type Systems: type safety, type checking, and type equivalence (Scott: Ch. 7) [ slides (12-25) | Python 101: self-study ]
Sep.29. Midterm I
Oct.01. Type conversions, compatibility, and coercion. Composite and recursive data types (Scott: Ch. 7, Ch. 8) [ slides (25-30) | slides (1-25) ]
Oct.05. Algebraic data types (Scott: Ch. 8) [ slides (26-44) ]
Oct.08. Introduction to subtype and parametric polymorphism: the type hierarchy, inheritance, static and dynamic dispatch (Scott: Ch. 7, Ch. 10) [ slides (1-12) ]
Oct.15. Subtype polymorphism, multiple inheritance, and the diamond problem; interfaces, i.e., declarative polymorphism (Scott: Ch. 7, Ch. 10) [ slides (13-24) ]
Oct.20. Parametric polymorphism, code sharing v. specialization, type erasure (Scott: Ch. 7, Ch. 10) [ slides (25-37) ]
Oct.22. No Lecture
Oct.27. Midterm II
Oct.29. Bounded parameters and algebraic data types (Scott: Ch. 7, Ch. 10) [ slides (38-47) ]
Nov.03. Polymorphic methods and bounded parameters, reification, compile-time versus runtime types, and variance (Scott: Ch. 7, Ch. 10) [ slides (48-73) ]
Nov.05. Higher-order polymorphism and Java streams: operational abstraction (the iterator/iterable design) [ slides (1-9) ]
Nov.10. Evaluations (normal-order, applicative-order, and lazy) [ slides (10-22) ]
Nov.12. Anonymous classes, functional objects and lambda expressions in Java, lazy evaluation in streams [ slides (23-35) ]
Nov.17. Parameter passing and program semantics: pass by value, passing references by value, pass by name and lazy evaluations [ slides (1 - 13) ]
Nov.19. Parameter passing and program semantics: lazy evaluation and thunks, pass by reference [ slides (13 - 26) ]
Nov.24. Object-oriented programming with dynamic typing [ slides ]
!! Thanksgiving Holiday !!
Dec.01. Overview of object-oriented programming with Python [ slides ]
Dec.03. A deeper dive into dynamically typed object-oriented programming: scopes, namespaces, attributes, and inheritance [ slides ]
(Please skip the portion on properties and getters/setters. This is not a part of the syllabus.)
Dec.08. Final Exam Review (in-class)