Schedule

Due events are indicated in red in the column on the right. All due events with a given date are due on 11:59pm that day.

Wk Tuesday Thursday Labs Events
1(35) Lecture 1: 2022-09-01
  • Class introduction/organization
  • History of Bell Labs, Unix and Linux
  • Command line introduction
Sign-up:

Select one of the offered pair-programming lab session days according to your schedule

PP1: (2022-09-02)

Setup private class repository, tmux

Note:

Handouts are typeset in green and deadlines in red. All deadlines are due 11:59 pm.

  1. HW1 release
    (2022-09-01)
2(36) Lecture 2: 2022-09-06
  • Manual pages and help for Linux commands
  • Unix philosophy
  • Regular expressions and grep
  • File attributes and permissions
  • Short and unbiased journey into text editors
Lecture 3: 2022-09-08
  • Shell customization
  • I/O redirection
  • Process management
  • Environment variables and shell scripting
PP2: (2022-09-09)

Git workflow and bash scripting


  1. Select your preferred lab sections in my.harvard
    (2022-09-06)
3(37) Lecture 4: 2022-09-13
  • Introduction to version control systems (VCS)
  • Centralized and distributed VCS
  • Design and inner workings of Git
  • Git blobs, trees and commits
Lecture 5: 2022-09-15
  • Git status of working tree and index
  • Git remote repositories
  • Git branches
PP3: (2022-09-16)

Git branches and merge conflicts


  1. HW2 release
    (2022-09-13)
  2. HW1 due
    (2022-09-13)
  3. PP1 due
    (2022-09-16)
4(38) Lecture 6: 2022-09-20
  • Introduction to Python
  • Nested environments and closures
  • Decorators
Lecture 7: 2022-09-22
  • Object Oriented Programming (OOP)
  • Classes in Python
  • Inheritance and polymorphism
  • Quiz 1
PP4: (2022-09-23)

Fully connected neural networks and Python closures


  1. Project M1A due
    (2022-09-22)
  2. PP2 due
    (2022-09-23)
  3. C/C++ primer class
    09/19 - 09/23
5(39) Lecture 8: 2022-09-27
  • Duck typing
  • The Python data model
  • Special methods (dunder methods)
  • Aside: software licenses and open source
Lecture 9: 2022-09-29
  • Python class methods, static methods, instance methods
  • Python class attributes and instance attributes
  • Python modules
  • Python packages and PyPI
PP5: (2022-09-30)

Python classes and dunder methods


  1. HW3 release
    (2022-09-27)
  2. HW2 due
    (2022-09-27)
  3. PP3 due
    (2022-09-30)
  4. C/C++ primer class
    09/26 - 09/30
6(40) Lecture 10: 2022-10-04
  • Preliminary automatic differentiation (AD)
  • Derivatives and the Jacobian
  • Newton's method
  • Numerical approximation of derivatives (finite-difference method)
Lecture 11: 2022-10-06
  • Review of chain rule
  • Evaluation trace of a function and computational graph
  • Forward mode AD
PP6: (2022-10-07)

Forward mode automatic differentiation


  1. Project M1B due
    (2022-10-04)
  2. PP4 due
    (2022-10-07)
7(41) Lecture 12: 2022-10-11
  • Forward mode in higher dimensions
  • Dual numbers and complex numbers
Lecture 13: 2022-10-13
  • Implementation of forward mode AD: operator overloading
  • Reverse mode AD
  • Some examples AD applications and extensions
  • Quiz 2
PP7: (2022-10-14)

Forward mode AD, Jacobian, seed vector


  1. HW4 release
    (2022-10-11)
  2. HW3 due
    (2022-10-11)
  3. PP5 due
    (2022-10-14)
8(42) Lecture 14: 2022-10-18
  • Continuous integration (CI)
  • Testing Python code (pytest and unittest)
Lecture 15: 2022-10-20
PP8: (2022-10-21)

Python virtual environments and deploying Python packages


  1. Project M1 due
    (2022-10-20)
  2. PP6 due
    (2022-10-21)
9(43) Lecture 16: 2022-10-25
  • Python virtual environments
  • Introduction to docker (OCI) containers and Dockerfiles
  • Building your own containers and integration in CI workflows
Lecture 17: 2022-10-27
  • Abstract data types
  • Linked lists
  • Iterators
PP9: (2022-10-28)

Iterators, binary trees


  1. HW5 release
    (2022-10-25)
  2. HW4 due
    (2022-10-25)
  3. PP7 due
    (2022-10-28)
10(44) Lecture 18: 2022-11-01
  • Trees and binary trees
  • Binary search trees (BST)
  • Priority queues and heaps
Lecture 19: 2022-11-03
  • Python generators
  • Python coroutines
  • Introduction to Python internals
PP10: (2022-11-04)

Python generators


  1. Project M2A due
    (2022-11-01)
  2. PP8 due
    (2022-11-04)
11(45) Lecture 20: 2022-11-08
  • Code objects and Python bytecode
  • The Python interpreter and the evaluation loop
  • Memory allocation in Python
  • Performance of pure Python lists and NumPy arrays
Lecture 21: 2022-11-10
  • Data models and databases
  • Structured query language (SQL)
  • SQLite in Python
  • Quiz 3
PP11: (2022-11-11)

Databases


  1. HW6 release
    (2022-11-08)
  2. HW5 due
    (2022-11-08)
  3. Project M2B due
    (2022-11-10)
  4. PP9 due
    (2022-11-11)
12(46) Lecture 22: 2022-11-15
  • Databases
  • In-class exercise with SQL and Python SQLite
Lecture 23: 2022-11-17
  • Databases
  • In-class exercise with SQL and Python SQLite
  • Table joins
  • Pandas
PP12: (2022-11-18)

Finish in-class database exercises


  1. PP10 due
    (2022-11-18)
13(47) Lecture 24: 2022-11-22
  • Debugging in Python
  • Generating profiles for performance analysis
  • Bytecode instructions and performance
Thanksgiving break: 2022-11-24
  1. Project M2 due
    (2022-11-22)
  2. PP11 due
    (2022-11-25)
14(48) Lecture 25: 2022-11-29
  • Project work
Lecture 26: 2022-12-01
  • Project work
  • Quiz 4

  1. PP12 due
    (2022-12-02)
  2. HW6 due
    (2022-11-29)
15(49) Reading period: 2022-12-06 Exam period: 2022-12-08
  1. Project final milestone due
    (2022-12-10)
16(50) Exam period: 2022-12-13 Exam period: 2022-12-15