Ever wonder if you should go back to school to get a master’s degree? Right now I’m in my second semester of Georgia Tech’s Online Master of Science in Computer Science (OMSCS). I’ve had a few people ask about my experiences so I figured it was worth my time to write them down. In this post I’ll be going back and forth, question and answer style to share my thoughts on the program.

What’s my educational background?

I went to Georgia Tech for a BS in Mechanical Engineering. I have no CS or any programming related degrees or certifications. I bought a book on Rails in my junior year and just kept plugging away. Eventually, I knew enough for someone (Gowalla) to hire me, and after Gowalla folded, I moved to Heroku and I’ve been working there ever since (5+ years).

Why do I want to go back to school?

I honestly didn’t have a good answer to this question when I first started the enrollment process. Still don’t.

Before I enrolled, I was at my parent’s house for a vacation and got bored so I decided to enroll in a Udacity course. I stuck with it for roughly a semester and it wasn’t awful. I then found out that Georgia Tech’s (GT) online master’s program uses Udacity courses as their backend, so I figured I might as well get some kind of credit for my efforts. I talked it over with my wife, applied and got in.

Why did I choose GT?

My company (Salesforce, which owns Heroku) will cover education costs up to a certain dollar amount per year. Georgia Tech’s Online program is around $7,000 which is ludicrously cheap. That’s not one semester, that’s the whole program.

I also looked at Stanford and theirs was around $150,000. If I went to GT then I could go to school for “free” with the help of Salesforce. It’s a well-known engineering school and isn’t going to require me to mortgage a kidney to go to.

I think GT has a good reputation and a solid curriculum. I read reviews and asked other people who were in the program as well. They all said it was hard, but good.

Did going to GT for an undergrad help?

No, actually, I kinda hated the school. It was a very intense program, and there is little leniency. When GT was founded, it was a military prep school and one of the required courses to take was “Drown Proofing”. In this course, they would tie your hands up, attach weights to you and throw you in a pool. It was sink or swim, literally. Many of the technical classes feel kinda like that. I learn a ton, but geez, the process is grueling.

There is a lot of learning but also a lot of grinding on problems.

Do I think a Masters degree in CS will help professionally?

I’m going to split this into two parts, first the master’s degree. Everyone I’ve talked to with a master’s has basically said it’s not worth it. They don’t become sufficiently more educated in their field (versus a BS in the same field), and most don’t feel like the degree has helped tremendously with getting a job or higher salary. Take this all with a grain of salt, it’s anect-data. If I had a CS undergrad, I don’t know if I would be in this program.

Next is the CS degree. My technical work speaks for itself and I’m very comfortable with my abilities. I don’t think that “not having a CS” degree is holding me back. Yet, I’m reaching a point in my career where when I need help with answers, I sometimes find myself with white papers instead of Stack Overflow. While I’m proficient at programming, I’m finally at a (personal) place where I actually want to science some computers.

How has the program been so far?

I’m taking one course a semester while working full time and it will take me 3.3 years to graduate. I’ve taken one course in AI for Robotics (Python), and I’m finishing up my Operating Systems (C). I like that it’s forcing me into new languages and ecosystems. I could get this without a grading deadline looming over my head, but I don’t think I would go as deep into the different languages.

On the course material: I’m being exposed to many more concepts than I would see in my day-to-day coding. My father said that he only ever used 20% of what he learned in school. The trick is that it’s impossible to know which 20% you’ll end up using. This seems true with my program. Right now, my approach is to go deep into as many things as possible and see if anything sticks or clicks.

Does prior programming experience help?

I’ve been doing Rails & Ruby for 10+ years now. I would say that this buys me being comfortable in front of a computer with a problem I know nearly nothing about. I’m comfortable finding and debugging example code I find on the internet. I know how to write a good technical question for a forum post.

Generalized debugging and problem-solving skills are very helpful, but I don’t feel that gives me a huge leg up in the assignments. What that prior experience does bring though, is context. When my OS course was talking about the internal structure of processes and threads, I had an Aha! moment. I’ve been using these things for years, but didn’t know how they worked. I think I’ll retain these lessons better than students who have no real world experience.

Does it take a lot of time?

Oh yeah. It’s not easy. Did you read the part about drown proofing? I don’t know if this is entirely GT’s fault or not. As an undergrad, being able to persist with minimal instructions against very difficult tasks served me well as a professional. But now I kinda just want the info, without the hours and hours of grinding on the last 1% of a project.

I feel part of the problem are schools in general. They equate “hard” with “good education”. If you’re struggling, then surely you’re learning, right? I believe there’s a difference between learning to grind on a hard problem and learning a concept. I would love it if the school was focused on content instead of exams, individual projects, and intentionally difficult assignments for the sake of being difficult.

Schools rely on testing to determine competency and this means deliberately omitting key facts when presenting specifications for projects. Like honestly, the assignments are hard enough without being cryptic about it. Being a student means being forced to memorize random minutiae to pass multiple choice tests with deceptive looking answers. It also means that when asking for help in the forums, you have to be super secretive for risk of accidentally helping another student. How awful is that? My biggest concern when speaking to them is that I might help them TOO much.

The reason I like programming is that there is so much interaction and help available. Ruby is a mostly great community and I really enjoy interacting with others. Schools kinda strip all of that away from the learning process.

Also when I submit programs to be graded, I get no feedback on style, cleanliness, readability, testability, or best practices. While I know my program “works”, was it a good solution? Could I improve as a developer in <lang> while I’m also learning <concept>? I know how to use Python and C, but I also feel I would get laughed at if a professional Python Dev looked at my code.

In my ideal world, projects would be well spec-d out and common industry standards like TDD would be encouraged. Multiple choice tests would be replaced by interviews/conversations to see if candidates really understood core concepts or have students build 5-minute presentations. Unfortunately, that’s not the world we live in, and that’s not what the OMSCS program is about. Again this isn’t a GT issue per-say, but they’re still a university and I don’t like this about schools in general.

What would I change about the GT program?

If you’re from GT and reading this know that I have done a lot of technical teaching and taught my own Rails course at the University of Texas. Some of this whining comes from a place of love as an educator, some of it comes from being a whiny student.

Get rid of Piazza. It’s awful. Piazza is the forum software for classes and it’s where ALL communication happens in the class. It doesn’t have markdown support and the WYSIWYG editor is so bad I often have to write my own HTML in “raw” mode. If you refresh the page you’re on, you lose your place. If you cmd+click a link to open another Piazza page in a different tab, your current tab changes. It’s just not well-built software. Piazza is trying to do too many things okay and as a result doesn’t do most of them particularly well. That being said, if you work at Piazza, if you add markdown support I will quit complaining (mostly).

Encourage more industry practices in projects. Testing, please. Testing. Tests. Testing. Please. SRSLY. It’s good that there’s an auto grader, but real world software should ship with tests. When I took the “extra” time to test my python in my AI class, I found I spent less time spinning my wheels and ultimately less time on the assignment. I learned more, and learned it faster. In my OS class, it’s tough because it’s in C, but we could test our programs with other languages like Ruby or Python. What do people who write tests in C programs for a living use to test? IDK, that should be something the school should have a better pulse on than me.

Exercises don’t always match course material. I took AI for Robotics and the final “big” group project had almost nothing to do with the course. This comes back to the “grinding” I mentioned earlier, I don’t want to program for the sake of programming, I want to program to learn a topic.

Better project specifications. Specifications are often vague. In the current OS course I’m taking, when we submit our program to be tested, there are explicit tests for things that were not even mentioned in the assignment. If you have to be vague in a specification for an assignment for it to be challenging enough, then it’s not a very good assignment.

The administration needs to put a human face to their students. Course Surveys aren’t enough. At the end of each semester GT sends out “course surveys”. I think they’re trying to make sure the content is good, and that the teachers are meeting expectations. This is fine, but way too coarse grained. I have lots of critiques for my classes where I think they can do better, but I need more nuance than a survey. I also don’t want to rank them low because they’re doing a good job, but I think they could be doing a better job. Maybe if they randomly selected a few students and did Google Hangout interviews to get some nuance and add some stories to the raw data, it could help.

Will I stick with it?

I think so. I’m frustrated by the amount of grinding required (obviously based on this post), but I do enjoy the things I’m learning. For me, it seems like the right time in my career to be going deeper into these topics. I’ve also seen threads on Twitter recently where people mention they wish they were going to school in their 30s instead of their 20s. I can say that I’m 100% positive that 32-year-old me is learning way more than a 22-year-old me would have.

Is it worth it?

Cost: 100% totally. For me, it’s a little paperwork and then it’s free. If I didn’t have that, $7K over 3 years isn’t nothing, but it’s very cheap compared to the alternatives.

Time: I’m not sure. My biggest regret is that my days are pretty much 100% full and when I get the urge to read a tech book, or maybe dabble in a new language or technology I just can’t. Either I physically have no time left, or I’m mentally exhausted from a full day of work and then a full night of school.

It’s also hard to say what the payoff will be: financially, emotionally, or with my job satisfaction. Will this path lead me to be a totally different super programmer and completely change my day-to-day life when I’m done? Who knows. If it doesn’t, is this experiment a failure? I don’t think so.

Would I recommend you apply to the program?

It’s not for everyone, which is why I wrote this. You need to decide for yourself. If you’re unsure take a Udacity course and see how you feel about it. The main difference with taking it via Udacity and via GT is in an official class you have a community where you can ask questions. Also, know that there are additional programming assignments given out in addition to what is already in the Udacity videos. Are you in a position where not having a master’s degree is holding you back? What are the pros, what are the cons? Only you can decide.