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.