Teaching Material

Education is important. In working with high school students and college undergraduates, I have developed a number of teaching materials on a variety of topics ranging from computer science and mathematics to physics and chemistry. These are by no means comprehensive, but can serve as helpful review guides and/or topic outlines for current students.

If you find any errors with any of the teaching modules, please let me know through email at myao at caltech dot edu.


  1. Getting Started
  2. Fields and Methods
  3. Variables, Conditionals, and Loops
  4. Arrays and Matrices
  5. Lists: ArrayLists and LinkedLists
  6. Abstraction
  7. Exercise 1: Conway’s Game of Life
  8. Exercise 2: Storing User Data
  9. Exception Handling
  10. Abstract Data Types
  11. Recursion
  12. AP Computer Science A Practice FRQs
  13. Stacks and Queues
  14. Binary Search
  15. Sorting Algorithms, Part 1
  16. Sorting Algorithms, Part 2

Computing Systems

Note: These topics assume that you’re familiar with introductory programming. I strongly recommend going over the Java topics above first before starting with this material.

For learning x86 assembly (lessons 3 through 5 below), which is often a component of learning about computing systems and also benefits from using a Linux machine, I wrote a tutorial on how to easily code in x86 without SSHing or using a virtual machine here. It allows you to code in your own online web-browser using an online IDE called repl.it, which is substantially easier to use.

  1. Introduction
  2. Bitwise Operations
  3. Integer Types
  4. x86 64-Bit Assembly, Part 1: Computer Architecture
  5. x86 64-Bit Assembly, Part 2: Registers and Instructions
  6. x86 64-Bit Assembly, Part 3: Reading and Writing Assembly
  7. Pointers in C
  8. structs and .h Header Files
  9. malloc()


  1. Limits and Continuity
  2. Existence Theorems: IVT and EVT
  3. Introduction to Derivatives and the Mean Value Theorem
  4. Evaluating Derivatives
  5. Higher Order Derivatives
  6. The Chain Rule
  7. Derivatives of Trigonometric Functions
  8. Derivatives of Exponential and Logarithmic Functions
  9. Implicit Differentiation
  10. Putting It All Together: Part One
  11. Derivatives of Inverse Functions and Inverse Trig Functions
  12. L’Hopital’s Rule
  13. Derivatives: A Wrap Up (AP FRQs)
  14. Introduction to Integration
  15. Basics of Evaluating Integrals
  16. $u$-Substitution
  17. Integration Practice Problems, Part 1
  18. Accumulation Functions and the Fundamental Theorems of Calculus
  19. Integration by Parts
  20. Integrals of Rational Functions
  21. Solids of Revolution
  22. Arc Length
  23. Improper Integrals

Physics (with Calculus)

  1. Newton’s Laws and Kinematics
  2. Mechanical Equilibrium
  3. Friction
  4. Pulleys
  5. Mechanical Equilibrium Practice
  6. Springs and Harmonic Oscillation
  7. Damped Oscillations
  8. Spring Energy and Kinetic Energy
  9. Pendulums
  10. Momentum and Collisions
  11. Newton’s Laws Revisited - Rotational Motion
  12. Mechanical Equilibrium Revisited - Rotational Motion
  13. Moment of Inertia and Rotational Energy
  14. Conservation of Angular Momentum
  15. Electrostatics: Coulomb’s Law and Gauss’s Law

Introduction to Statistical Learning

These notes are based on a publicly available course offered by Professor Konstantin Zuev at Caltech on statistical learning.

  1. Learning Problems and Statistical Decision Theory
  2. Methods in Regression Problems
  3. Methods in Classification Problems and the Bias-Variance Trade-Off
  4. Linear Algebra of Linear Regression