The learning activities in this course will rely heavily on graduate-level programming projects. The topics covered include: 1) Python programming (basic structures -- tuples, lists, sets, dictionaries, Pythonic programming style, e.g., list comprehensions, common packages -- numpy, scipy, matplotlib, pandas, Jupyter/IPython notebooks, OOP design and polymorphism and how to make effective use of it). 2) Probability and statistics (basic distributions, expectations and Monte Carlo approximations, importance sampling, change of variables / Jacobian, ANOVA / confidence intervals). 3) Matrix representations and fundamental linear algebra operations (e.g., quadratic form and multivariate Gaussians, trace, inverse, SVD, matrix derivatives). 4) Basic algorithms and data structures (sorting and array search, graphs and trees). 5) Discrete math (basic combinatorics, basic discrete optimization, e.g., weighted set cover). 6) Continuous optimization (gradient descent and variants, convexity). 7) [Optional if time] Constrained optimization (linear programming, mixed integer linear programming) with a focus on problem formulation.