23 Jun 2026
After discovering my passion for writing software 10 years ago, I regret that I never formally studied Computer Science (CS). But now I’m doing it!
Most of my CS knowledge is self-taught. Sure, I took a few courses here and there, but those tended to be more on the data science side of things (optimization, stats, machine learning, etc.). I’ve taken undergrad-level algorithms and data structures but that is pretty much it. Most of my CS knowledge is from my (ChemE) PhD research and subsequent work experience as a scientist and software engineer (SWE).
Two reasons:
I just love to learn new things. Now, you could argue that I don’t need to enroll in a Masters program to learn more about CS, but:
An MS in CS will help my career, especially since I don’t have a formal CS degree and still lack much of the foundational knowledge. I’d like to eventually move into a role that combines my scientific background with my SWE experience I’m gaining at McMaster-Carr.
My current plan is to complete this Masters program part-time over the next 5 years or so - at that point I will have:
After completing the program, one path I can see myself pursuing is a SWE role more focused on scientific computing, e.g. at a national lab or large research institute. I could also see myself joining a company that builds scientific platforms & tools for research organizations. I think I’d really enjoy the process of building software to empower other scientists.
I chose OMSCS (Online Masters of Science in Computer Science) at Georgia Tech for a few reasons:
Georgia Tech’s OMSCS program is not easy (and the curriculum I’ve planned for myself is arguably even more difficult than the average OMSCS experience). I welcome the rigor and am excited to be challenged.
OMSCS is also widely recognized by employers as one of the top CS programs in the country, so that could be helpful in getting my foot in the door when looking for the next step in my career.
Another thing I like about OMSCS is that it is very “choose your own adventure”. Sure, there are a few hard requirements here and there, but you are mostly able to take all the classes you are most interested in. And there are a lot! Around 60 or 70 courses available by my last count. This makes it possible for me to focus solely on courses relevant to scientific computing rather than taking a preset list of courses that may or may not be relevant for my individual goals.
I mentioned above how flexible the curriculum is - the timeline is also very flexible. Some folks take 2-3 courses per semester, including summers, and finish their required 10 courses in just over a year. Others take 1 course per semester, take summers off, and finish in 5 years. But it is up to you - this allows a variety of people to fit OMSCS into their life. Someone not working and without family obligations can finish quickly, while someone with a full-time job and/or family obligations can take it more slowly.
I plan to take it more slowly - I’m in no rush. I also feel like I’ll get more out of each course if I budget extra time to spend on each.
The other flexibility piece is, of course, the online aspect. I can work async, online at my own pace.
OMSCS is only around $10k total. Yes, you heard that right - an entire Masters program at a highly ranked institution for less than 10% of what a comparable program would cost (e.g. ~$130k at Stanford). They accomplish this by massively scaling the content to 1000s of students (which is a good fit for CS since CS projects can be done async and can often be autograded). Some courses have 50+ TAs to help when students get stuck. It is a format very unlike traditional programs, but it seems to be working! More and more students enroll every year (nearly 20,000 students currently enrolled), making it the largest online masters program in the world.
I’ve meticulously pored through the course list on the OMSCS course website and also read many course reviews at OMSCentral. I also used ChatGPT to help identify which courses might be most relevant to a career in scientific computing - it gave me some surprising recommendations I hadn’t considered previously (like taking a course on compilers).
Anyway, here is my list! I’ve divided it into high, medium, and low priority courses:
Courses I will definitely take as they align very strongly with scientific computing.
Having never taken an OS class before, this class will teach me more about what is “going on under the hood” when running programs. Provides a great intro to many of the more advanced classes on this list. GIOS is likely the first class I will take.
The bread and butter of scientific computing, this one is a no-brainer. I’ll gain the foundation needed to understand high-performance, parallelized scientific applications.
The more hardware/architecture-focused counterpart to High Performance Computing. Understanding modern computer architecture is critical for optimizing scientific software.
GPUs are often used to accelerate computationally intensive workloads, which are commmon in scientific computing.
The only course required by the program, but I’d take it regardless. Many scientific computing problems rely on efficient algorithms.
Courses I will likely take as they align well with scientific computing.
Understanding how code is translated and optimized can help me write more efficient scientific software. Compiler technology is also increasingly important in areas like HPC, GPU programming, and scientific DSLs.
Expands on the ideas in GIOS - many of these ideas are relevant for HPC. I plan to take this course if I enjoy GIOS and want some more background knowledge before taking HPC.
While less directly applicable than HPC, many modern scientific workflows rely on distributed systems for large-scale computation. If I take this, might be worth taking CN (below) first.
Courses that are still somewhat relevant and generally lighter workload than those listed above. Most could be swapped in to take a less intense course without delaying graduation, or doubled up with a course above to speed up my timeline if needed.
Implement a database from scratch - learning about database internals would be useful when working with large datasets. There is also a more general databases class (CS-6400) but it has poor reviews so I’ll probably skip that one. This course also doesn’t have stellar reviews (feels to many more like a C++ course rather than a databases course), which is why it’s lower priority. Maybe by the time I think about taking it, things will have changed?
A useful intro to the core concepts around building secure software - useful for pretty much any SWE, not just in scientific computing.
Introduction to computer networking - like IIS, useful in general. May also be useful as a foundation to (on my own time) dig in to how scientific computing clusters communicate across networks.
The only class on this list that is more on the data science side of things. I included it because while I have plenty of experience with older machine learning techniques (regression, random forest, etc.), I have only a little deep learning experience. Deep learning techniques are commonly used in scientific workflows these days, so while I don’t foresee using DL techniques myself, an understanding of DL could help me communicate with scientists who do use DL.
Not really related to scientific computing today, but quantum computers could be more widely used in the future to solve a variety of scientific problems (especially quantum simulation).
The hardware counterpart to QC.
I plan to take 2 courses per year (fall & spring) with summers off. This means I’ll likely finish sometime around 2031. I may double-up on courses if I’m in a hurry, but for now I plan to just take my time and make the most out of it.
Well, that’s my current plan! It will almost definitely change as I get into the program and learn more about different courses, find what I’m most interested in, see new courses that are offered, etc., but I think this gives me a good roadmap to follow as I embark on this new adventure. I’m excited to get started - wish me luck!