Who is this class for?

This is a senior level class in Operations Research and Information Engineering. We expect that the class will be suitable for advanced undergraduates and masters students, and for early-year PhD students eager for some practical data science experience. The class may be of interest to students in CS, IS, ECE, Statistics, Economics, and other disciplines; however, ORIE students will have enrollment priority if the class is oversubscribed.

Course requirements and grading

  • Homework (30%): bi-weekly (or so) homework assignments

  • Project (40%): one final data analysis project

  • Exams (20%): one midterm exams and a final exam

  • Participation (10%): students are expected to submit one question or comment on each lecture on piazza after each lecture.

These weights are approximate; we reserve the right to change them later.

Textbooks and readings

We will not require students to purchase any textbook; the information you need to know will be posted as lecture slides or notes. However, we heartily recommend all of the following, and will be drawing on ideas from many of these:

For a refresher on linear algebra, we recommend Appendix A of Convex Optimization by Boyd and Vandenberghe; or for a longer, but very thorough, applied treatment, try the book on Vectors, Matrices and Least Squares by the same authors.


This class will use the Julia programming language: all examples and code that we discuss in class or refer to in the homework will be written in Julia. Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical computing environments (including Matlab and scipy/numpy). It provides a sophisticated compiler, distributed parallel execution, numerical accuracy, and an extensive mathematical function library.

Students may complete assignments using either Julia or Python (or both). We will be releasing numerical portions of homeworks (and collecting completed homeworks) as Jupyter notebooks. This format makes it easy to embed plots, code and text in the same document, and to switch between Julia and Python.

If you use Julia, we recommend starting out with version Julia 0.4.6 on JuliaBox, and installing locally when version 0.5.0 is officially released in a few weeks. If you have trouble running Julia or run into errors, you can ask questions on the Julia Users Google Group; similarly, if you find a JuliaBox problem, use the JuliaBox Google Group.

If you use Python, we recommend installing it via the Anaconda software stack, which comes with the numerical and plotting libraries you'll need (scipy, numpy, and matplotlib), and using Python version 2.7.

Resources for learning Julia:

Relation to other courses