In about two months from now, I will graduate from Georgia Tech’s Online Masters in Computer Science (OMSCS) program. I’ve been reflecting on the path that led me to join the program and this post captures some of those thoughts. As I started writing this post, it became a more general overview about my career, so if you’re reading just for the raw reasons, scroll down to the bottom.
Not knowing what I didn’t know
It was 2008 and I was in 11th grade. I had boldly signed up for my first Computer Science class, an intro class that was basically Java 101. I remember excitedly copying my first “Hello World” program character-by-character into the jGRASP editor on my high school’s Windows XP machine. I remember breathlessly memorizing the magic phrase “public static void main(String args)”. I remember learning about arrays and lists but not linked lists, which were too advanced and probably not something I would ever need to use.
In 12th grade, it was all about GridWorld. Making those Bugs navigate around a grid avoiding Critters was my magnum opus. Java Swing was all the rage and I stayed up writing a HangMan game to impress my teacher. The “5” I got on my AP CS exam validated what I suspected: I had mastered “Computer Science”.
Within the first few weeks of 11th grade, I knew that I wanted to study Computer Science for the rest of my life. This decision wasn’t because I knew how to write slick Swing apps or because I had already memorized much of the Java Collections API. It wasn’t even based on influence from my parents or peers. It was solely because of the enthusiasm, energy and passion that my teacher (Mr. Lau) showed for the subject. Almost every class, he would extoll the “power” and “awesomeness” (his exact words) of programming. He had an ability to make even the most mundane assignment seem cool and interesting. His energy was contagious and I was hooked, I wanted to learn as much I could for the rest of my life. The problem was I had no idea what I didn’t know.
Learning some of what I didn’t know
I graduated high school comfortably ignorant about majoring in Computer Science at Virginia Tech. The next three years wholly changed my perspective. I was challenged beyond my expectations. I was surrounded by people who had been programming since before I had even used a computer. I was quickly exposed to how abstract and surface-level my current mastery of the subject was. So I tried to consume as much knowledge as I could.
I joined the programming team, I took on a research side project, I volunteered with CS department’s community service organization, I started a mobile app development club and built Android apps, I took all the CS classes a year ahead of schedule. I was consuming the full fire hose of information available to me and I was loving it.
Thanks to college credits from high school, I was preparing to graduate from Virginia Tech after just three years. Naturally, I began thinking about my next steps. I wanted to continue gaining knowledge and growing my skills but I was very confused about the best way to do so. I knew I enjoyed learning and that I still had a lot more to learn.
Learning more of what I didn’t know
In the last few months at Virginia Tech, I hatched the perfect plan to figure out my next step. I would apply to a bunch of graduate schools for (Computer Science) and I would also apply to a bunch of jobs. I could put off my decision until I heard back from all them, giving me ample time to seek advice, do more research and enjoy the remaining few months of college!
In hindsight, this was a terrible idea. As offers (and denials) from both companies and graduate schools trickled in, I quickly got overwhelmed. Everyone around me had a different opinion on what I should do and they weren’t afraid to voice it.
At the end, I decided that I would take a full-time job offer at Opower. Several factors motivated this decision, but the most important one was that it provided me the best opportunity to apply what I had learned in college and expose gaps in my knowledge.
Working full-time was another wake-up call, not unlike the one I received when I first started college. I was surrounded by senior engineers who mentored me and helped me grow as an individual and as a professional Software Engineer. Writing well-tested, maintainable, performant, production-ready software was a hugely important skill that I was sorely missing. The first few months of code reviews were brutal and relentless but also crucial for my own development. I fully embraced the opportunity and was once again learning rapidly (and getting paid for it!).
Learning to learn forever
After two successful years at Opower, I had learned just enough about enterprise software to be dangerous. I thoroughly enjoyed my job: the work, my coworkers and the environment. But, there was one small complaint: the scope of what I was learning was very narrow. I was quickly becoming an expert, but on Opower-specific tools and technology. I had nagging voice that always wondered “What if I had decided to do a Masters instead”? (I called this the grass-is-greener-bot in my head).
By graduating in three years, I had forgone the opportunity to take some really interesting electives at Virginia Tech. While I had good foundational knowledge, I lacked the breadth of understanding on a wide range of topics. Things like Computer Networks, Security, Machine Learning and AI were still very abstract and foreign to me. I also had not approached Computer Science as a research topic and I had no idea where to even start. Reading highly-technical research papers was downright 😱.
On top of this, I felt myself growing complacent at my comfy job. After a few years of professional experience, I didn’t feel very challenged and felt that my growth was becoming asymptotic. I wanted to develop a lifelong habit of continuously learning and growing my skills.
Around this time, I had heard rumors about the OMSCS program at Georgia Tech. I has tried a few Massively Open Online Courses (MOOC) but each time, I felt myself losing motivation to complete the course. I enjoyed the classes themselves, but without projects and peers, I was more likely to quit a course midway. As I did more research about the program, I realized it checked a lot of boxes for me and I am thoroughly glad that I saw it through to completion.
To summarize, my main reasons for joining OMSCS were:
- Interesting, challenging and well-organized courses on topics I never got to study in undergrad
- Projects, tests and peers that kept me motivated to keep going
- Part-time, so I could continue working and build a habit of continuously learning
- Affordable (<$8k for the full program)
Interestingly, I’ve spent more time getting my Master’s degree (3 years, 6 months) than I did getting my Bachelor’s degree (3 years). In that time, I got married, adopted a dog, bought a house, moved across the country, switched jobs twice, traveled to different seven countries and (in two months) will be graduating with a Master’s degree in Computer Science!