Syllabus¶
This course is offers a broad overview of computational techniques and skills that are useful in performing research in operations research and related fields.
Topics¶
- Version control
An introduction to distributed version control systems.
- Testing
An introduction to unit testing, regression testing, and test-driven development. All code in this class should be accompanied by tests.
- Creating web APIs
Web browsers can be used as a sophisticated front-end to code you write. We will go over the basics of creating a web application to interface with your code.
- Working with databases
A database is used to store and retrieve information. This can be used to cache expensive operations, store the results of experiments, and of course provide a convenient way to access data sets.
- Tooling
There are many existing tools to help you be productive. We introduce a number of them.
- Working with remote systems
An introduction to working on remote servers effectively.
- Build systems
Build systems automate the process of assembling software and related materials.
- Working with long-running processes
Many problems we want to solve can take a very long time to solve on even modern computers. It is useful to be able to pause and restart these processes without needing to re-do existing work.
Programming languages¶
This course is not an introduction to programming. I will assume you have familiarity in at least one programming language, such as
- C
- C++
- Python
- Java
- Matlab
- R
- Go
- Haskell
Most examples in class will be in Python or C++, although knowing these languages will not be necessary. Ultimately you can use any language that works on all major platforms. On a related note, this course will have a heavy focus on GNU/Linux. You are again welcome to use any operating system you like, but certain assignments will need to ultimately be run on a Linux server. Installing a virtual machine for this course is perfectly acceptable.