OMSCS Survival Notes

This page is an archive of my notes from when I was contemplating whether I could, in fact, do this degree, and if so, which courses to pursue. My research resulted in a several page word document full of notes. I decided to host that information as a public service. If you’re pursuing the OMSCS, giving this a quick read might be worth your time. If you’re not, it definitely isn’t, but congratulations on finding it! This page is consistently my most viewed page and the site’s most common entry point. Apparently “OMSCS Survival” is googled a lot :)

Update 2018/07/06: Some of this information is obsolete, even just a couple months after my original research. In particular, the OMSCS and OMSA DVA classes have been merged into a single course that resembles the OMSA version. Rumor is that it will use Python instead of R, which I am thrilled about.

The best advice I can give you is to search the OMSCS subreddit and Google+ pages to find the latest and greatest information about courses. Dr. David Joyner posted the following the OMSCS subreddit today, so further changes are coming:

Right now, there are 10 new courses under development that are past the stage where we would have announced them in the past, but we’re not sure if they’ll launch in Spring 2019, Summer 2019, Fall 2019, etc., and we don’t want to announce until we know. In general numbers, though, I’d predict a couple new courses per semester the next couple years.

As I wrote previously, I recently accepted an offer of admission to the Georgia Tech Online Masters of Science in Computer Science. 48 hours after the initial rush of being accepted into a top 10 CS masters program, the thrill has worn off, and I’m faced with the reality of planning and preparing. There are many discussions of the program’s high attrition rate on the OMSCS subreddit, and they have me a bit on edge. This post is a first effort at gathering the info necessary to assemble a self-study plan, so that I do everything I can to maximize my likelihood of successfully completing a top 10 CS masters degree.

The degree requires completion of 30 units, and each course is 3 units. The specialization that I would prefer given my long-term career interests is the Machine Learning specialization. To continue the program, the OMSCS program requires newly admitted students to complete two foundational courses in the first 12 months following matriculation. This is obviously a critical hurdle to pass.

Machine Learning Spec

The machine learning specialization consists of the following courses. Passing five of these six is required, and with the revamp of DVA I may complete all six.

Number Title Req’d? Name Language
CS 8803-GA Graduate Algorithms Yes GA (CCA) None?
CS 7641 Machine Learning Yes ML Java? & Python
CS 7642 Reinforcement Learning and Decision Making 3 of 4 RL Any/Python
CS 7646 Machine Learning for Trading 3 of 4 ML4T Python
CSE 6242 Data and Visual Analytics 3 of 4 DVA Python?
CSE 6250 Big Data for Health 3 of 4 BD4H Java/Python

Five Elective Courses

The original version of this post “crossed out” various courses on the basis of my notes at the bottom of the post. Given the popularity of this page and the fluid nature of OMSCS coursework, I’ve decided to remove such explicit condemnations of courses. I feel that leaving that in would do a disservice to the program. The insights and opinions that led me to reach conclusions about my own planned course of study are still available in my notes below though. I invite readers of this page to do their research and draw their own conclusions about the best courses for them to pursue. I wish you all the best of luck!

In keeping with the machine learning theme, I also want to pursue coursework that fall under the larger “artificial intelligence” umbrella. Because of possible synergies between the high-performance computing courses and ML (think deep neural networks), I’d like to pursue IHPC and HPCA. And, since the coursework in my undergrad CS minor stopped just short of operating systems, IOS would be helpful to fill out my CS knowledge.

To make up for a lack of software engineering coursework during my non-CS undergraduate degree, I may want to pursue graduate level software engineering courses. A final consideration is that it may be prudent to select courses that allow me to pursue my interests while still minimizing the total programming languages used in the degree.

Number Title Name Language
CSE 6220 Intro to High-Performance Computing IHPC C/C++
CS 6250 Computer Networks CN Python
CS 6290 High Performance Computer Architecture HPCA C/C++
CS 6291 Embedded Software ES? Python
CS 6300 Software Development Process SDP Java
CS 6310 Software Architecture and Design SAD Java
CS 6400 Database Systems Concepts and Design DSCD? PHP/Python/Java
CS 6475 Computational Photography CP Python
CS 6476 Computer Vision CV Python
CS 6601 Artificial Intelligence AI Python
CSE 7637 Knowledge-Based AI KBAI Java/Python
CS 8803-O01 Artificial Intelligence for Robotics AI4R Python
CS 8803-O02 Introduction to Operating Systems IOS C

Background/Prereq Advice and Difficulty Notes

A very useful resource for course preparation is this post on the OMSCS subreddit by a user called Leenak. Leenak’s suggestions for each of my planned courses are tabulated below. Also included are the average work and average difficulty as reported by other students, and sourced from, an independent website linked to a database of student reviews. The rankings were transcribed 3/22/18 and may have since changed. Also listed is the programming language utilized.

Name Leenak’s Advice Avg Work Avg Diff
ES? Learn C?, learn computer architecture - -
SDP Java, How to create ‘anything’ in Android or Developing Android Apps 8.971 2.397
DSCD “Intro to relational databases” on Udacity 10.291 2.446
CN Learn Python, learn Linux basics 7.813 2.527
ML4T Learn python, do the “Intro to Machine Learning” course on Udacity 10.482 2.650
CP Learn Python 11.824 2.803
DVA - 12.532 2.833
AI4R Learn Python & linear algebra, Udacity “Intro to AI” 11.419 3.084
KBAI Java or Python can be utilized, “Intro to AI” on Udacity may be a good option 13.104 3.207
SAD Take SDP or have had some similar SE course 15.901 3.444
IOS Learn C, learn Linux basics 18.568 3.603
HPCA Learn C/C++ & Linux, “Intro to Parallel programming” on Udacity, computer architecture course on MIT OCW/Coursera 12.472 3.889
RL Take Machine Learning, learn Java 20.426 3.944
CV Learn python, do a linear algebra refresher 19.611 4.056
AI - 23.016 4.262
ML Thrun’s “Intro to Machine Learning” on Udacity, Java, “Intro to Descriptive Statistics” and “Intro to Inferential Statistics” on Udacity 20.733 4.274
IHPC Learn C & Linux, “Intro to Parallel Programming” on Udacity 20.129 4.613
GA (CCA) Theoretical algorithm classes on “Intro to Algorithms” on Udacity. The book “Mathematical Thinking.” Know how to do proofs. 22.571 4.667
BD4H “Intro to Hadoop and MapReduce” on Udacity, Mongodb courses at, “Intro to Machine Learning” on Udacity, Learn Java or Python 35.034 4.793

Robert Pena’s DAG

Robert Pena, an OMSCS student, posted this graph to the Georgia Tech OMSCS Google+ page in 2015. His planned course of study is similar to mine, with the exception of apparently pursuing a double-specialization in both ML and computing systems. I have colored in the nodes representing the courses applicable to me in red.

A tree structure of course dependencies
A tree structure containing course dependencies, courtesy of Ronny Pena.

An Excellent Reddit Post

Originally posted here by the ever-astute onetyone.

I graduated this Spring with a ML/CP&R specialization. Here’s my retrospective of the ideal sequence of classes I should have taken. Please note that this is list is completely based on fantasy and may not be practical by any measure (due to factors such as non-availability, potential for failing miserably to meet the foundational requirements, sanity prevailing etc.). Read at your own risk (and excuse my poor English).

GA Without doubt, this is THE foundational course for ML specialization and for a good reason. First, it will put you in the right mindset and prep you for the upcoming rigor of the program. Secondly, the concepts learned in this course are useful for the rest of the course.

AI4R AI4R probably has the best introduction to Probability and Linear Algebra which, along with algorithms, form the basis of everything you learn in the following courses. There’s a bit of Python for the uninitiated, but the course does a good job offering sufficient intro to succeed in AI4R and AI until you do a deeper dive in ML4T.

AI Offers everything to catch up on the classic AI from the 60s onward to 90s and 00s. Has a much more rigorous treatment of Probability when you’re glad you did AI4R first and search algorithms which is child’s play after GA. The other tough topic is Propositional Logic (some of which you may have learnt if you also did KBAI, but easy to follow even if you didn’t)

ML4T Unholy(!) matrimony of Python (pandas, numpy), Finance, ML and RL. This is probably one of the most important classes in the program in terms of gratification-effort ratio. Offers a solid Python practice and introduction to ML and RL algorithms.

DVA Offers valuable practical data science perspective such as cleaning raw data, visualizations and report making as well as more Machine learning practice. After this class you will be chewing through Kaggle datasets one after the other. Dealing with R can be a love/hate experience but in the worst case you’ll learn to appreciate Pandas more.

ML Finally the big one. Heavy emphasis on synthesis of Machine learning, Reinforcement Learning algorithms and Learning theory. With your solid background of algorithms (GA), probability, linear algebra and logic (AI4R, AI), your basic understanding of Machine Learning algorithms (ML4T, DVA) and your mad data and reporting skillz (DVA) you are all set for success.

RL OK, why are we even doing this class at this point? Even though there is a heavy overlap with ML, this course offers a wondrous journey though academic papers and advanced concepts and can be a rewarding experience.

Comments from OMSCS Social Pages

The following blunt, poorly-formatted comments were very helpful in helping me decide on my course of study. I hope they are helpful to you as well. As I’ve commented elsewhere in this post, GA Tech OMSCS consists of a very dynamic set of courses, and things may have changed since March of 2018 when I originally did this research. Please do your own research on the OMSCS subreddit and Google+ pages, as I can’t update this page frequently enough to keep up with OMSCS.

  • Given the foundational course requirement, the best strategy seems to take two easy courses, one per semester, during the first year. This advice is frequently offered on the OMSCS subreddit.
  • Avoid CCA as first course.
  • ML appears to be difficult as well.
  • ML4T seems to be a gentler introduction to machine learning, and should probably be taken before ML.
  • RL seems to be an elaboration of the final third of ML, so it seems to make sense to take it after ML.
  • CP sounds like an easy course, similar to ML4T, and seems like a good candidate for a first course, although it would be somewhat redundant with CV. CV is a bigger course CP.
  • KBAI is “gentle as a back rub from a baby bird.” Good first course material.
  • DVA uses R, which I want to avoid in favor of Python.
  • This is a great resource overall.
  • CS 8803-GA (Graduate Algorithms) replaced CS 6505 (Computability, Complexity, and Algorithms) in Fall 2017. I’m assuming that the coursework (and therefore reviews and advice) carry over. This may need to be investigated further.
  • IHPC (Intro to High-Performance Computing, CSE 6220) and HPCA (High Performance Computing Architecture, CS 6290) sound interesting but the former requires C and the latter C/C++. It may behoove me to limit the number of programming languages I need to learn over the course of the program. HPC is highly-rated, however.
  • SDP and SAP require Java.
  • SDP is recommended for people who are new to “Industry”. Seems this might be specific to software developers.
  • “On the last day of registration, the wait lists are cleared and it becomes a free for all (you can add and drop any class if you see a free space).” - source
  • “I recommend taking GA as your first course (at least before ML, RL, AI, CV) if* you can get in. It’s not that hard and it will set you on the right mindset about the rest of the courses. You also cover a ton of prerequisites for the other classes. I recommend following up with AI, then ML, RL, CV etc. If you are weak in Python, do ML4T/AI4R as warmup before AI to pick up Python. Another underrated warmup course is CP - especially if you also want to do CV.” - source
  • DSCD (or “DB”) is supposed to be a rotten course, but I will need a DB course, perhaps taken as a MOOC, prior to BD4H.
  • Good advice reg DB, CN, CP, AI4R here. Specifically, DB is important but take it elsewhere, and before BD4H. CN can be avoided entirely, CP is redundant if CV is also taken, and taking all three AI courses is redundant (drop the very applied, self-driving car oriented AI4R).
  • Recommended order for ML, ML4T and AI, KBAI
  • A good breakdown courtesy of Chuck Cottrill:
    “My first course was AOS (hard, lots of work).
    ML4T, IIS, DBS were good. KBAI is great, but you might want to take another course first.
    Good first: [IIS, SDP, DBS, SAD, ML4T, DVA, CP, IHI, HCI]
    Good next: [KBAI, AI4R, EdTech, HPCA, ESO, NS]
    Harder [HPC, BD4H, AOS, CV, AI, ML, RL, Compilers]”
  • IHPC regarded as best course in the program, offered in spring only link
  • “CPSS, IHI, CN, IIS, SDP = 6-9 hours/week (est)
    DBS, ML4T, HCI, NS, CPDA, ESO = 10-11 hours/week (est)
    SWAT, CP, AI4R, HPCA, DVA, ET = 12-13 hours/week (est)
    KBAI, SAD, EOS, AOS, IOS = 13-18 hours/week (est)
    HPC, CV, ML, RL, GA, AI = 19-23 hours/week (est)
    Compilers BDHI = 28-33 hours/week (est)
    YMMV (Your Mileage/Experience May Vary)” - course time commitment breakdown by Chuck Cottrill.
    In the comments he elaborates: “My personal experience is that these estimates are from 20%-50% low, so you need to adjust for your own subjective experience.”