No, the Master's will not hold you back. I received an MSc last year in Computer Science, and I no longer eat ramen unless I want to.
I'm not sure where the rumor began that Master's in CS makes you overqualified. In April, when I switched jobs, I was interviewed by four large companies looking specifically for people with Master's. In fact, I was one of only two candidates at one of the jobs, and the recruiter made it apparent to me that they were having difficulty finding people who had Master's degrees to fill these higher-education positions. Plenty of BS programmers, but not enough people with team capabilities.
A fact of life is that we may not learn everything in school. I didn't. That's okay! It's also true that some of the things you use at work will be covered in classes. For example, I learned how to use servlets in class. Six months down the road, I looked at some software we were using at my old job, and lo and behold, same technology. I ended up making some improvements to that software and even presented that information at a conference.
It's ultimately up to you whether you want to work a bit for experience before or after your Master's. I would say, looking back, the Master's prepared me much more for the real world than just the Bachelor's.
Master's Degrees, like most investments, are investments. Time and money are placed in, and a commodity is produced. In this case, the commodity may not be apparent, as you haven't received your MSc. You don't just learn
programming++ at a Master's level. You learn how to apply programming to research, or the real world, depending on your ultimate career path.
Here's a rough rundown of what each level is. Note that this is for COMPUTER SCIENCE. Other fields may differ drastically from this in what type of content is taught. For example, Physiology Masters are probably not going to be taught project management.
At the Bachelor's level, students traditionally start by learning the basic concepts of software development and theory. For example, machine language and compilers. Eventually, students get mastery of perhaps a single language. In my case, this was Java, so I'll use that as an example.
For Java, we learn a pretty decent amount of practical use for grunt work programming. Your bread and butter skills, for example. In the working world, we would probably label this Software Developer I. Entry-level. You can fill in, but so can a lot of other people. You'll have a hard time getting to show you're out of the pack at this level, because there's only so many ways to create a
for-loop and "good enough" will usually do.
One of the things that's not focused at the Bachelor's level is working as part of a development team.
At the Master's level, students have the opportunity to learn much more focused topics of study. Off the top of my head, here are some examples that would be reasonable continuing from a BS with little prior background.
- enterprise web and application development (building large self-supporting frameworks, industry)
- cryptography (cracking or developing encryption, practical both for industry and research)
- neural networks (pattern finding and analysis, mostly research at the moment)
- artificial intelligence (it's really tough to describe what this field is, even for me, but it's both industry and research at this point)
In addition, there are several parallel fields that you also have associated topics of study you can migrate to, for example Information Systems Engineering, or Bioinformatics.
Additionally, concepts are provided in preparation for a management role. The software development cycle, for example, is taught as one of our core courses, and shows us how we enter the design phase and work through to the development and testing phase. Whereas in college, classes were expected to complete one or two-week assignments, most of my graduate classes focused on delivering an entire product at the end of the semester.
Regardless of what you study, there is likely an industry or research institution that will be interested in what you learn. A fresh graduate would very easily qualify for a Software Developer II role, a mid-level developer.
Another major benefit of graduate level courses is the establishment of a development team as an entity. Whereas in undergrad most of our tasks are solo endeavors, by Master's we may have to collaborate with other people, or use other people's code. Code reuse is nice at this level, and so is working with people with different backgrounds. No longer are we in the universe where we can't copy people's code (we still have rules about that, like attribution, but now we can use APIs and libraries to simplify our lives!)
As I am not a PhD, nor do I plan to get one, most of this is from familiarity rather than experience. Doctorates will, similar to a Master's dedicate most of their time to study a specific subset of computer science. My adviser in college studied neural networks, for example. Most doctorates gear towards research and/or teaching at this level. Much of it is based on theory and concept rather than software development at this point. Similar to how basic college calculus versus PhD math are on completely different levels.
Possible Caveat to the PhD
I have heard of these rumors of higher education being a disadvantage. In my opinion, a PhD with no hands-on software development lead in the software development cycle is probably going to be a hard buy in industry that needs a software developer lead. That's hearsay for me as I haven't met any PhDs in CS outside of university, so take with a grain of salt.
Software Developer Roles in the Industry
I mentioned software developer roles above, but only up to Level II. Traditionally, I have only seen levels go up to III, but at a recent interview for work, I met an SDIV. These roles can be roughly defined as brackets for years of experience.
- SD I: 0 to 2 years experience, likely to have a Bachelor's. Entry-level and most likely the bottom rung of programming and testing. May be tasked to work with an SD II for most work. (This used to be me.)
- SD II: 2 to 5 years experience, or equivalent, may have a Master's. Likely to work independently as part of an overall project (i.e. you get assigned a task, usually broad, such as "Implement a user interface to handle XYZ." This is me at the moment).
- SD III: 5 to 15 years experience, most likely have a Master's. Significant experience with the software development cycle. Likely to be a project manager or be assigned to a high-level development or testing team (i.e. in framework management). This would be someone like my Project Manager boss.
- SD IV: 15+ years experience. This person is well-qualified to be a project lead, or may lead multiple projects. This would be someone who is probably could teach a graduate class on the subject and not need to consult a book. You'll rarely encounter these people, since coding languages go out of phase or are brand new. Someone really has to have been an early adopter of the language to get this amount of experience.