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

  • *nix Shell
    A brief overview on how to be productive in a shell enviornment.
  • Version control
    An introduction to distributed version control systems. Be productive and organized without having to worry about losing your current state of work.
  • Testing
    An introduction to unit testing, regression testing, and test-driven development. All code written in this class should be accompanied by tests.
  • Computer architecture
    Overview of CPU architecture, as well as IEEE 754 floating point.
  • 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.
  • Data Structures and Algorithms
    The data structures you use can make or break your code. We will provide an introduction to efficient data structures and algorithms that will improve the efficiency of your code.
  • 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.
    • Debugging tools
      Once a unittest finds a problem with your code, how do you find the cause of the error? We will give a brief overview of debuggers that can efficiently find the issue.
    • Documentation generation
      Comments and documentation make life easier for those using and improving upon your code.
  • Bonus Topics
    Depending on the composition of students and their background, we will include other topics of interest as time allows.

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.

Course Structure

ORIE 6125 has an unusual structure. Lectures will be held on Mondays and Wednesdays for roughly the first half of the course, and I will hold office hours on Fridays during the scheduled lecture time. There will be 2-3 assignments to complete during this time. The focus of the course will then turn to the course project, and lecture frequency will decrease steadily over the remainder of the semester. I will keep you updated on the lecture schedule as the semester progresses.

The course is pass/fail, meaning that all assignments must be completed at a sufficiently high level and submitted on time. The project must also be completed in terms of code functionality and all the other necessary components.