I’m going back to school. This year I decided to take advantage of a program at work and continue my formal education by enrolling in Georgia Tech’s Online Masters in Computer Science program. Without ever having to step foot in Atlanta – though I hope to go for graduation in 4-ish years – I will be able to take 30 credits of graduate level computer science courses entirely online. The flexibility is fantastic for a busy person with kids and a full time job, but did I get more than I bargained for?
Georgia Tech has led the way in online education, at least the kind more similar to a traditional university program, for several years now. Gone now is the stigma of an online education like the early days of Phoenix online. As the internet has grown and made multimedia and remote participation easier, online programs have gotten closer and closer to the traditional on-campus experience, especially for graduate programs. On a weekly basis I have the opportunity to view recorded lectures, attend live remote office hours, participate in class discussions on forums and Slack, and submit programming assignments where I receive immediate test run feedback. This makes remote participation possible, though still by no means is the program easy.
I forgot how intensive even a single computer science course can be, especially one with programming assignments and in depth material. It’s incredible how much things have changed as the internet has grown. It’s not like the internet was new when I was in undergrad, but it has changed several things about the experience considerably. First, there is a considerable amount of material online that can be used to research course offerings, professors, and course loads. Utilizing these resources, I chose to begin my first semester with Introduction to Operating Systems, a course around the median for difficulty and effort. I also figured it as among the topics closest to what I had studied in school, and I generally remembered OS courses being interesting, especially when it came to programming threads and process communication.
I figured the course would be something like the Coursera courses I’d been taking over the last year or so. When I decided to move to Amazon’s Supply Chain Optimization Tech organization and join a team utilizing Machine Learning, I took the popular ML course from Standford on Coursera which included lectures, quizzes, and programming assignments. I figured the full graduate course would be something similar, if perhaps a little more in depth. I had also taken several management courses online, but these involved less homework and I mostly did them slowly over a few weeks when I had bits and pieces of time between other things. I thought the online program would give me similar flexibility in deadlines and let me chose when I would spend the time on assignments.
Some of this turned out to be true, but much of it surpassed what I expected. The course lectures tend to be longer, or at least have more hours to watch each week, though are generally similar. The biggest difference is in the stricter timelines and amount of work per programming assignment. I’m only about a month in, but I’ve probably spent as much time in a single week on average in this course as I did in the entire ML course. The programming assignment I just completed involved four parts and required a decent amount of C programming knowledge, much of which I had to dredge up from the bottom of my memory. Thank goodness for the three years I spend in the financial industry writing low level optimized C++ code as this translated over much more than any of my more recent Java and web programming. I had to remember how to program without classes, allocating and freeing memory, opaque pointers and PIMPL, all while also practicing what I had learned in the class on threading and mutexes. It was a lot.
To make matters more difficult, my two week vacation came in the middle of this. I was able to get ahead on the lectures so that I didn’t need to worry about them while traveling, but the programming assignment wasn’t released until partway through my trip, so I was immediately behind on it. I was able to squeeze in enough time on the weekend, at night, and while commuting, but it definitely felt like making a sacrifice. On the weekend in particular, it felt like I was ignoring my family in order to get it done. I’m really hoping it was a one-time thing where the combination of running a week behind and coming back up to speed wit programming combined to make the load higher and that subsequent projects will be a bit less time intensive.
Beside that struggle, the course has been a great way for me to build my academic Computer Science knowledge back up, learn new things, and build a stronger foundation for myself all while being flexible enough to do with a ton of other things going on in life. The forums and Slack channel make it easy to ask questions to clarify understanding and get help from others when needed. While there are strict policies on sharing code and solutions, there are always plenty of students willing to offer advice or share online resources that they found useful which can be enough to get past those times I truly get stuck. It’s much easier than trying to track down students in other dorms from class for help.
While it doesn’t look like I’m going to have a chance to get up to any hijinks on the quad or join the swim team like Rodney Dangerfield when he went back to school, I’m still enjoying the chance to get back into an academic setting and prioritize learning, especially on my own time and mostly on a schedule up to me. Getting back to basics – or at least advanced foundations – of computer science has been as enjoyable and fascinating as I expected and with over a decade of professional experience now, there’s more to build on and also to build a foundation under. I always had a rough understanding of how underlying systems like an OS work, but getting hands on experience in building projects to enhance this learning and going far deeper than I did in undergrad has really helped me gain a better appreciation for building highly performant code and solutions. While AWS and serverless technologies may be abstracting this further and further away from daily work – which is great because it allows us to spend more time on providing actual customer value – it’s very helpful to understand exactly how things are working under the hood to know how to make the right tradeoffs and decisions.
It wasn’t an easy decision to “go back to school” with a pretty busy life. However, I realized there was never going to be a better time when things magically got less busy, and at least this program would give me the chance to fit it into my schedule. It hasn’t been easy, but I don’t think anyone should expect a graduate degree program to be easy. At least the resources available have become more useful since I was last in school, and the program allows flexibility enough for me to find ways to fit it into a pretty busy schedule. If you’ve been considering advancing your education but also live a busy life, now might finally be the time.