3 years after I started to work at Red Hat, I realized I was getting very specialized in everything related to systems management. There was another area in this software field that I just didn’t understand, Machine Learning / AI. During my undergraduate years, I took courses on Knowledge Engineering and AI but they did not take me anywhere near competent in a professional setting. For many years, I have been mesmerized at the things DeepMind, OpenAI, Tesla (autopilot?!) and others have done. Even just “simple” Counter Strike bots seemed magic. Over time, the outlook of “this is just magic, I don’t understand” made me itchy and I had to get rid of it. It was time to dive in and learn about ML, image recognition, and the math and research behind these.
I applied, got in, and here’s the story about my first year at OMSCS.
It takes a lot of time. In a nutshell, I had to say goodbye to many weekends, performing above and beyond at work and having time in the evenings. Forget about lying down on the couch for hours. From my estimations, you should be ready to spend 2-3 years committed to this. Side projects while working full time in grad school? Grad school is your “side-project”. If you enjoy programming (I do), you won’t even miss side projects after all the coding you will do. Most courses have a strict policy of not sharing code for previous assignments, but some allow it.
I started with Advanced Operating Systems, since I already have some experience at work with different OSs and virtualization, I thought it would be a great idea to learn more deeply about these topics as my first grad-level course. It was a fantastic choice. The pace was fine, and it helped me get familiar with reading research papers and learn better about OS fundamentals. It brought me to a point where I was able to read “Linux Kernel Development” without major problems and I got to dust off my C skills. As a kind of extracurricular, I recommend doing the Eudyptula challenge if you want to go from “I know basic C” to “I can contribute to the Linux Kernel”.
On my second term, I made a choice of taking two courses at the same time. Data and Visual Analytics and Computational Photography. It was a terrible idea. Even if you have good time management skills, I found it too exhausting to do two courses plus a full time job, which means that slowly you will feel more tired mentally until the end of the term. A tired mind affects all areas of your life, at home, and at my job I was just not as “present” as I wanted to be. On the other side, I learned about feature analysis, transformations, brushed up on statistics and R. Computational Photography taught me a lot about how to work with pixels and 3D representations, and I learned how to use OpenCV to a level where I could be comfortable using it in a professional setting. Here’s what we did (source code available upon request, it’s forbidden to publicly share it):
On my last term so far I took Reinforcement Learning. Summer terms are shorter, and RL suggests a prerequisite on Machine Learning which I have not taken yet. Going back to one course a term was a big relief. At the end of the previous term I slowly turned down certain lead responsibilities at Red Hat as I was clearly not fit for it – not with the self-imposed burden of grad school. Not only RL has been my favorite class so far, but I’ve also been able to go out some Sundays and just.. live life at a pace that I could enjoy. Hell, years after watching A Beautiful Mind I finally understood what a Nash equilibrium is – and other kinds of equilibria too. The assignments were very academic, in most of them we had to read a paper and replicate the results. We also got a chance to play with OpenAI gym. It was so satisfying to train this Lunar Lander and watch it land. If you’re curious, it’s deep Q-learning + neural networks I used to train it (we were free to experiment).
Academic papers always looked daunting to me. I had very little exposure to papers when I finished my undergrad degree. I remember reading about 4 papers, maybe. After one year of reading a few papers every month, I published some summaries for the ones I read and found interesting. Check out my repo paper-notes. This advantage of grad school is not to be taken lightly. Being able to stay on top of your field by following people on Google Scholar/Arxiv is very satisfying to me and much saner than following Hacker News/Twitter/Reddit/<insert fad of the day>.
Some of the stuff learned in the courses will be applicable at your job right away. I’m not talking about the discipline, the grit, how ever you want to call it. I’m talking about specific technologies like Protocol Buffers, Keras, ggplot2, and more. The community of students is just great. If you are near other students in your class, you can always meet with them in person, but even if that isn’t possible, the Slack chat and forums will help you bond with your peers.
Graduate school -even through distance learning- is being one of the most rewarding academic experiences I’ve ever had. I hope you are ready to apply now!