I recently finished an important milestone in my educational and professional journey. I graduated from the Online Master of Science in Computer Science (OMSCS) program from Georgia Tech this May!
It has been a long journey spanning almost five years of asynchronous classes, which began after an initial rejection from the program. I was rejected because of a lack of academic computer science experience despite having worked as a Software Engineer for multiple years. Although it was tough to experience the rejection, I immediately applied to an online post-baccalaureate program at the University of Florida (UF) to take the required classes. I took 10 classes from the University of Florida that helped prepare me for the rigor of a graduate-level Computer Science program.
The undergraduate Computer Science UF program is extremely well-run but considerably more expensive compared to the M.S. program from Georgia Tech. I took some introductory classes including Programming I using Java, Programming II using C++, Linear Algebra using Matlab, Data Structures and Algorithms (DSA) using C++ and a proof-based Discrete Structures class. The Discrete Math course was one of my favorite classes and I learned about Boolean Algebra, Number Theory, Set Theory, and Induction.
In my last semester, I took a dual enrollment undergraduate and graduate course on Malware Reverse Engineering and an Operating Systems (OS) class whose topics included fundamentals for processes, memory management, and file systems along with I/O basics, networking and security. Since the C++ classes covered low-level basics with pointers and memory management, the workload for OMSCS classes was significantly easier to manage. The Malware analysis class was the hardest class that I took including OMSCS and we investigated real malware in a Windows sandbox environment using static disassembly tools such as Ghidra and also running the malware for dynamic analysis.
The workload for these classes was on par with the classes in OMSCS. In the DSA class, there were three major projects such as writing an AVL Tree and implementing different data structures with timing performance metrics for large inserts and deletions to compare to the expected Big-O notation. In addition to the projects, classes such as OS and DSA included a large number of labs such as using threads or building a client/server with sockets.
Georgia Tech Savannah - Bee mascot statue by Wizzito / CC BY
I reapplied to the OMSCS program in the Spring of 2022 and was accepted. There are six different specializations offered and I chose the Computing Systems specialization. I completed the classes in the following order.
There are plenty of other reviews on OMSCentral as this program is well established but these are my thoughts for each class.
Graduate Introduction to Operating Systems (CS 6200)
Reddit often suggests this class as a great introduction to the program and I found it to be challenging but well organized. It is essentially two isolated classes where 50% of the grade is exam-based covering the lectures and the other 50% comes from the projects that are submitted to the automatic grading test suite on gradescope. Since I had already taken an undergraduate OS class, the lecture content was not brand new but I learned a great deal from the projects. The projects include using gRPC for a Distributed File System, writing a multi-threaded client/server, and designing a web server using Inter Process Communication in C.
Artificial Intelligence (CS 6601)
After working on many low-level projects in GIOS, I decided to dive into Artificial Intelligence using Python. This class has a heavy workload and it starts off in an intense manner with the first search project. This starts at Breadth First Search and works up to bi-directional search, A* search and even tri-directional search. This was my favorite of all the six projects in the class but some of the others were focused on Decision Trees, K-means clustering, and Bayes Nets. I thought the projects were long but interesting but I disliked the format of the exams. The exams are take-home and took almost 3 full days of work to complete which made it hard to balance exam weeks with a full-time job.
Database Systems Concepts and Design (CS 6400)
I took this class the same semester as AI because the reviews mentioned a lighter workload. I learned the basics about Database Systems such as the Extended-Entity Relationship Model, Normalization, Relational Algebra and reviewed basic SQL. There is a group project that involves a front-end web application which seems unnecessary but since I'm a full-stack developer, it was not overly time-consuming. The exams in this class were hard to study for but fair and overall this class was not terribly challenging.
Intro to High Performance Computing (CS 6220)
This class focuses on scaling parallel algorithms. I took this class before I took the GA and I'm glad I had a good understanding of algorithms because it's more challenging to think about scaling in parallel! The projects are quite complex but very rewarding. They offer the opportunity to use OpenMP for scaling with shared memory systems, MPI for message passing on with multi-node cluster and CUDA for utilizing GPUs. Georgia Tech provides access to their PACE system for executing the projects in parallel on multiple nodes.
I disliked the portion of the last project where the grade was calculated against the speed of your classmates' grades but there is also a significant curve in this class. My major gripe with this class was the exams as they are almost impossible to study for and the entire class averages around 40%.
Introduction to Information Security (CS 6035)
This class is 100% project-based and consists of 7 different projects. None of the projects are super complex but they give a good introduction to Database Security, main-in-the-middle attacks, Binary Exploitation, and API Security. Many of these are in the Capture the Flag format where you need to perform the exploit to gain access to a code to submit. My favorite project in the class is a SQL injection attack and it was nice to perform this in an academic setting as opposed to performing a SQL injection on a production database which one of my coworkers did at a previous job :-).
This is one of the most controversial classes in the program as it is required for most of specializations and has a lower pass rate because it's exam-based. It's a classic weed-out class but it's often hard to enroll in the class at the beginning of the program so some people never graduate despite having completed nine other classes. Fortunately, I was able to take this class sixth. The topics in the class are important for CS fundamentals and I enjoyed covering Dynamic Programming, Divide and Conquer, Graph Theory, and NP-Completeness. The key to this class is to practice homework problems. I managed to perform well on the first exam, which reduced the pressure for the rest of the class.
After completing GA, I decided to take a class with a lighter workload over the summer. I opted for Computer Networks since I didn't take a networks class at UF. The projects are interesting but not as time-consuming as other classes and covered topics such as Spanning Trees, Distance Vectors, SDN Firewalls and BGP Measurements. The downside of the class is the lecture videos and exams which are very dry and I focused instead on reading the provided notes.
Advanced Operating Systems (CS 6210)
I almost took this class immediately after finishing GIOS but instead opted for AI. There is a large amount of lecture content covered in this class that covers the research papers in depth. It's useful to summarize the papers as academic papers are notoriously difficult to read but the sheer volume of content makes it hard to consume. Fortunately, I watched all of the lectures and took detailed notes prior to the semester, which allowed me to primarily focus on the projects. The exam format in this class is terrible because 80% of the questions are provided before the exam opens and the answers can be discussed with classmates. This led to exam weekends cramming memorization instead of learning the content material throughout the semester.
The projects topics range from a Distributed File System, Barriers and Locks, a VM CPU scheduler and Memory Coordinator with Libvrt in C, gRPC multithreading and MapReduce. The Barriers and Locks use the PACE with OpenMP and MPI for shared memory and multi-node clusters and I was glad to have the prior experience from IHPC. The MapReduce project was my favorite project in the entire program and it felt like a fitting end to the last of the "hard" classes.
Machine Learning for Trading (CS 7646)
At the beginning of the Spring 2025, I had completed 18 total classes and my wife and I were expecting a second child in the middle of the semester. I needed two classes to complete my degree and I decided to finish with two medium difficulty classes. I am interested in stock market investing but typically perform passive investing by holding index funds. This class gives interesting insights into active investing with different indicators and machine learning. The capstone project is building a Strategy Learner that would outperform a manual trading strategy.
An interesting aspect of this course is that the exams are open-note and open Large Language Model (LLM) which means you can have an LLM such as Claude or ChatGPT in the browser while taking the exam. The questions are designed so that it's not possible to easily find all of the answers through AI. That being said, I disliked the format of this course in general and the reports were quite tedious to write and the grading feedback is very slow.
Software Development Process (CS 6300)
This class covers some basic Software Development concepts such as Design Patterns, Black-box and White-box testing, UML and Agile Development. As a Software Engineer with 7 years of experience, it was not a large time investment but the projects were still worthwhile and included an Android Application and multiple small Java applications. The final project is a command line program which focuses on Test Driven Development (TDD). The downside of this class is a group project where teammates are randomly assigned.
I'm grateful for the opportunity provided by Georgia Tech to complete a top-notch Master's program at a low cost from the comfort of my home in Costa Rica! It was challenging to balance studying, working and family life but I'm glad I decided to invest the time and energy in these studies.
As with anything completed in life, I believe you get out what you put in and while many classes were very hard, it's also possible to go through this program without significantly challenging yourself. In my opinion, I took an even mix of easy and hard classes but I did get slightly burnt out towards the end. I may have avoided burnout if I was initially accepted to the program but I learned an equal amount during my undergraduate experience at UF. I had planned on taking the Compilers class in OMSCS to write a compiler from scratch. However, the time commitment according to OMSCentral is 30 hours a week and I now have two kids at home, so that's not feasible with a full-time job! I'd like to go back and possibly audit the class later.
Although I learned many important Computer Science topics in these classes, the most important insight I gained is the confidence to take complex projects and instructions and break them down into small pieces to produce useful results. Ultimately, this should be the goal of higher education and I believe both UF and Georgia Tech provided this challenge through their programs. It is also extremely important to analyze and debug results now with the rise of Artificial Intelligence. It's easy to tell an LLM to write some code or build an application but it's dangerous territory if one does not have the ability to think critically or critique the output.
After completing the program, I feel very prepared for the next step in my career as I start as a Software Engineer at Redis!