share
Stack OverflowShould developers go to grad school?
[+33] [21] Mike Heinz
[2008-09-09 16:08:51]
[ career-development jobs ]
[ http://stackoverflow.com/questions/52254] [DELETED]

In one of the early SO podcasts, my evil twin (Obvious Troll) asked if he should go to grad school - and the answer was a resounding "meh".

Now, since then, I've made my decision - but I still want to know: Do you think it's worthwhile for a "software engineer" to get a masters in Software Engineering?


Update:

To extend the question - what if the engineer is older? If his undergraduate degree was, for example over 20 years old? Are certifications and week long seminars sufficient to learn new technology?

There's a lot of shared material here with: beta.stackoverflow.com/questions/25620/… - tonylo
[+27] [2008-10-31 15:54:59] Cervo [ACCEPTED]

I thought about this issue a lot. I got my bachelors in CS in May 2002 and now am thinking about a masters in CS (well in fact I applied somewhere for next semester and am waiting for a response...). I am bored of being pigeon holed into mostly SQL Server work in my career because of companies and recruiters who only want to hire you based on what you did at your last job.

So the question becomes why do you want to go to grad school (for a masters)? I have poked around and found a variety of reasons:

  1. career advancement [better job, more money, higher in the corporate ladder]
  2. career change (construction worker to computer science)
    • since you are a developer already it doesn't apply. But often this is considered the single best reason for a masters.
  3. learn more about computer science (and or test the waters for a PHD)

After reading this article I would add 4. upgrade your outdated skills

There are other reasons, like wanting to avoid the real world when graduating college, etc. that I won't mention at all. But I think the most common reasons I have seen for seeking a masters are 1-3.

Career goals:

When I look for jobs (2002-2003, 2005, 2006, and a couple times throughout that) Most jobs I saw had Masters + 1 Year experience or Bachelors and 5 years experience. Once you get a bachelors and 5 years of experience you are set. The problem is the experience that they want is usually in the job offered.... A general rule is that a masters counts as 5 years of progressive experience. So if you have a masters you can probably talk your way into some jobs that say 5 years experience even if they don't say or masters and 1 year. Going straight from college to masters with no experience will still yield to a hard search for a job because people are often leery about hiring someone with no experience whether a bachelors or a masters. And now due to your masters they have to pay you more. So a masters and no experience will not always be an advantage over a bachelors and no experience. But it may allow you to land a more interesting job for your first job if you are in the right area.

EXCEPTION MBA. I think if you want more money/to climb higher in the corporate ladder an MBA can help. If you are an MBA and can speak in technology (presumably you can since you are a developer) companies will probably be all over you.

To learn about deeper things of computer science that you did not explore as an undergraduate:
You can learn it all from books, but they are long and many are quite dry. I have a giant stack of books that if I read and understood completely I would be a computer science guru (the dragon book, parallel algorithms, artificial intelligence, information theory, etc..) but I just am not self motivated enough to do it. So the pressure of a class would help me here. I think this is a valid reason and it is one of mine. As far as testing the waters for a PhD this is pretty obvious and it may in part be a reason that I am doing grad school (but I'm not sure the super specialization required for PhD research is for me). Maybe a career in research might be more fun and interesting than one in corporate America. The honest truth is that you don't use most of your computer science undergraduate degree in most jobs (in fact high school algebra and basic programming abilities are often more than enough), let alone a graduate degree. It doesn't take much to slap together yet another database application talking to a web server. There are exceptions (like game development, artificial intelligence type applications, etc.) but out of the total proportion of jobs, most I see are related to database applications with web interfaces (in java/php/c#/c/c++/etc.).

To upgrade your skills to the latest and greatest:
I would say don't bother. There are some masters degrees (usually in smaller colleges) that have classes in web app development and Java (from a learn the libraries and some frameworks perspective as opposed to a learn the general programming concepts and only as much of the library as needed) just like there are some undergrad programs with classes like these. But the serious programs are more theoretical. Meaning that class on Unix is not how to use Unix, the shell, etc. it is a class on the design of the Unix operating system. That class on networking won't help you to set up your home network or a corporate network, but it will teach you all the limit theorems and stuff about data flow as well as the various network layers and protocols and how they work.

In general most of the computer science curriculum is about the same as it was before. There are a few new theoretic developments but most of them you have to dive into on your own. Also the new stuff is often new twists on older things. The core AI, core compilers, core operating system, core algorithms curriculum seems to be about the same as when I looked at it in 2002 and as an undergrad in the undergrad courses most of the material was invented way before 2002 or even 1990. Some books that have been around for a while have new editions but by and large most of the content is the same as their previous editions. In smaller sub-fields there are more developments but from what I can tell the core curriculum of most serious masters programs sticks to more general concepts. Most of the compiler class is on Parsing, Code Generation, Lexing, Grammars, etc. and none of that is new. JITs (just in time compiler) will be touched on but are not a major part of the course. The algorithm courses also seem mostly the same (P vs NP, divide and conquer, etc.). And the mathematical foundations of most of the CS stuff are often even older than the CS stuff itself. So the reality is that the core theory is mostly the same. The reality is that the core pieces of the computer are mostly the same except with higher speed and now more cores. Even software engineering (at least as taught in my two colleges) seems similar (although agile methods are catching on now...but many of the books on them are quite readable). Keeping up cohesion within a module, reducing coupling among different modules, etc., my book from 1985 in software engineering had those core principles and I guarantee they weren't invented in 1985.....

So if you want to upgrade your skills, there is a good chance that a) grad school won't help you (i highly doubt you'll find a ruby on rails, php, or c# asp.net class) b) if it does help you because while in classes you research on your own to get the practical skills wouldn't it have been easier and cheaper (grad school is darn expensive) just to have gotten the practical skills without college taking up all your time?

***I will say that Paul Graham mentioned that studying hard problems is like weight lifting but with your mind. Just like you may not need to bench press 350 lbs in the course of a day, when lifting that 30 lb object it sure is easier if you can lift 350 lbs instead of just 50 lbs. So in this case a masters may make your job even easier and improve your problem solving/programming skills overall. But only if you actually do the work.


(1) Since people are still reading this, I thought I'd do an update. I have been in Grad School for my Masters since January 2009. I haven't found much that applies to a software engineering job at all (short of Algorithms) and the projects in the distributed systems class (RMI/CORBA/EJB). Most of the knowledge is theoretical and as a developer you would just get a library to do function x. A lot of it is just a little more detail on the same stuff covered in undergrad. There are some new electives (information retrieval, data mining, etc.) but still not relevant to most jobs... - Cervo
(1) One useful thing (not every class does this) are the more "advanced" classes which are based on Research Papers. Basically this shows you where to go to find the latest/"greatest" in discoveries. Some examples: map reduce, live migration of virtual machines (amazon needs to read this for EC2...), Google File System (GFS), etc... Basically the papers are where you can find many of the latest discoveries that haven't yet made it into textbooks. The problem is how to filter out the good from the bad... - Cervo
Excellent answer! I think you should merge your other answers with this one, giving all the views of the matter. Also because people mostly read only the first answer (specially if it is a big one like this). - Abhinav Sarkar
1
[+19] [2008-09-09 16:47:39] Ray Vega

As always, it depends.

If you are content and challenged enough with building yet another shopping cart commerce site or yet another business application then "no" don't bother with pursuing an advance degree in CS.

However, if you want to work on and solve more complex technology and lower level problems like distributed computing, AI, algorithm design, compiler design, voice recognition, etc [1] then "yes". You will be in the position of designing and developing new technologies and not be the one consuming and learning it through seminars, training classes, etc.

The founders of Google are prime example of grad students solving (or at least vastly improving) the problem of "search". Doing that would be much harder without some kind of exposure to and experience in advance topics in computing that you would not necessarily get at your average programmer job.

[1] http://en.wikipedia.org/wiki/List_of_basic_computer_science_topics

I think I understand the point being made here, but it kind of gets lost in all of the quotation marks. - MojoFilter
@mojofilter- I was thinking the same thing after reading it myself. I tend to get a little "quote crazy". Thanks for "pointing that out". :-) I've now cleaned it up. - Ray Vega
Right on, brother. - MojoFilter
I would point out that a decent bachelors degree is fine for working in most of those fields you outlined. And solving new problems is generally PhD and post-grad stuff. A masters is a step to getting a PhD, or an extra 10k on your heck ;) - tloach
(1) I think that a large part of designing/developing new technologies requires a PhD. There will always be some companies doing it where someone with less than a PhD can work on this stuff. But for many of the university jobs and to get grants to research a PhD is required. - Cervo
(1) Unless of course you do the job on your own as a hobby. But the major research is driven by research departments and universities where a PhD is the standard membership card. - Cervo
or start ups. Some of them do cutting edge research. Probably hard to get in on unless you know the founder. - Cervo
2
[+11] [2008-09-09 16:55:25] Kief

Are certifications and week long seminars sufficient to learn new technology?

Grad school is the last place to go to learn new technologies, it's also not the place to go to learn programming, or software design/architecture.

I can't say much about Software Engineering courses, but I did an MS in Computer Science. It provided a great grounding in the fundamentals (the mathematics and theory, how the hardware works down to the bits, etc.), but I learned the practical stuff, including most of the specific technologies I use in real life, outside the classroom.

Grad school is fine to give you a foundation on which you can build the skills you need, but I wouldn't recommend it to someone who is already working in the field. The main use case I would recommend grad school for (in any subject) is for a career change. It should give you the basic toolset you need for a new career, and the piece of paper that should enable you to land the first job you might have a hard time getting otherwise.


(1) Another reason might be that you think your undergrad was lacking in some aspect - Midhat
I would also say that most of the core computer science fundamentals are well over 20 years old. There are new books with new pictures and newer cultural references but the overall material is about the same. - Cervo
3
[+4] [2008-10-31 16:28:54] Cervo

Joel also has some advice on college. This applies to undergraduate as well, but I think this applies to college education in general. It contains some references to graduate education (like a vow never to go to computer science grad school). But it has good advice on what you should hope to learn from college.

http://www.joelonsoftware.com/articles/CollegeAdvice.html

The other thing that I should mention is that in the colleges I looked at there was only an MS in computer science with various concentrations, including a concentration on software engineering. In general they involved a few courses on Software Engineering (or whatever the concentration is), the core requirements for the masters from the comp. sci. department (generally a course on algorithms/operating systems/some type of hardware or machine language course, and some extra courses that had to be taken outside the area of specialization). So you would still be exposed to subjects you are less interested in in addition to software engineering as part of the process of getting a degree. If you found a course on only software engineering with a practical thrust than Joel's criticism of grad school may not apply. But for most of them my guess is it does.


4
[+3] [2008-09-09 16:18:15] Sara Chipps

depends on what your goals are.

If you want to be a CTO of a fortune 500, then yes it would help.

However, if you are like myself, and want to die a developer (but the best developer on the planet), and only work for small companies and startups for the rest of your life then it isn't a priority and there are other things that are more important.


(1) I would think if you want to be a CTO it would help but not with a degree in CS but rather a degree in Business like an MBA. - Cervo
5
[+3] [2008-09-09 16:19:45] Adam Lerman

It seems like there is sometimes a cap on how far we can go with our programming degrees. I am taking advantage of my companies tuition reimbursement to go to grad school and get an MBA as recommended to me by my managers and advisers. The MBA will mean more to the company here if I want to be promoted faster.


6
[+2] [2008-09-09 16:23:58] Unsliced

The answer is an overwhelming "definitely maybe".

  • Are you going to learn anything from it? No, really, 10 years industry experience and you'll probably know more than your lecturers about the stuff that's actually important.
  • Are you going to have more, different, better job opportunities?
  • Is it a pre-requisite for anything that you want to do but currently cannot?

My experience of Masters courses in IT are that they come in two flavours.

The first is an advanced course, a genuine Masters level designed more to be a set of taster classes for researchers trying to see which group to do their PhD in. The second is a short blast to allow for non-CS students to transition to CS in a year (or two) rather than doing a full undergrad degree.

If your first degree is not in CS or SE and your job history leaves prospective employers doubting your development creds then a Masters is a possibility, but in many ways the development industry weighs experience a lot heavier than paper qualifications.

If you crave learning for its own sake and are currently a developer, I would hesitate before suggesting a Masters course in computing. I'm with the idea of doing law (or economics, or accounting, or maths, or physics - or something interesting, with parallels) because many university courses just aren't as good as real life experience.

If you're looking at it as a springboard into a CompSci PhD then ... well, you're mad. Believe me, think long and hard about that road ...

And don't get me started on MBAs ...

Edit: if you're a software developer with 20 years industrial experience I want you teaching the Masters course, not sitting in the back row sleeping through the lectures .


It should be noted though that if you want to be teaching the Master's courses, you usually need to have a Master's degree of your own to be a lecturer at a major university. Some community colleges might let you teach with a Bachelor's but for the most part a graduate degree is expected. - Rob Z
7
[+2] [2008-09-09 16:30:46] bpapa

If you just want to be the average developer I don't see much of a reason to. I'd imagine most developers these days are doing stuff for the web, and a Master's degree doesn't give much of a leg up on the competition there.

However if you're a bit more of a niche kind of guy - you want to revolutionize Computer Graphics, staying in school is a good idea. You want to move out of development and into an executive role, an MBA may help (although I'd imagine a lot of CTOs don't have MBAs).


8
[+2] [2008-09-14 02:16:26] DGentry

I went back to school for a Masters degree in computer science. My undergraduate work had been in Electrical Engineering, and I felt I was missing some of the groundings of modern software engineering. The Masters degree has been very helpful in that respect.

Has the presence of an MS on my resume directly helped my career? No. Once you've been out of school for a few years the specific university you attended and degrees you've earned fade in significance compared to your job experience.

Are certifications and week long seminars sufficient to learn new technology?

Training programs, books, and online articles are a better way to learn new tools and methodologies than grad school is. A Masters degree in computer science is going to cover the fundamentals: compilers, database theory, logic programming, etc and not ASP.NET or agile development. Grad school is not a substitute for continuing, self-directed education.


9
[+2] [2008-09-14 02:41:04] Eugene Yokota

Do it. Go when you can.

You've always wanted to know exactly how (fill in the blank) works. Now you get to spend a semester listening to lectures, asking questions, and writing homework codes. IMHO, going to the grad school is one of the best things that can happen to a professional developer.

For example, I now understand exactly how the Internet works because I wrote one last semester. You start with the Link layer, then the Network layer (IP), move up to Transport layer (TCP), and you write an app on top. The traffic was simulated by 20 processes. Would I think of writing that on a Unix environment myself? Probably not.


10
[+2] [2008-10-23 07:25:45] David The Man

I usually say, that as a general rule, education is always good. But you should also only do it if you really want to, and you think you have the motivation for doing it.

For me personally, I get a real kick out of just being around very smart people (there is usually a lot of smart people at a University), it's very motivating.


11
[+2] [2008-10-31 16:16:39] Cervo

I gave my opinion earlier, let me give you someone else's :) This deals with college in general, but contains several mentions of grad school.

http://www.paulgraham.com/college.html


12
[+1] [2008-09-09 16:11:22] Darren Kopp

ironically, right now, my thought process is "ok, i can already program quite well, maybe i should pursue a law degree so i can cast asunder the patent trolls" so i'm gonna say.... yes for me, but meh for you.

depends on what you are going to be programming really. i only think a masters degree would help you in 5% of programming jobs, unless you want to teach programming, then i say go for it.


I think to teach programming (at a college level) you need to go all the way to PhD - Cervo
13
[+1] [2008-09-09 16:13:18] Thomas Owens

It depends on the kind of experience that you got while an undergraduate, the type of work experience that you have, and what you want to do.

I talked to my adviser about this, and I was told that my university's SE program is modeled after the graduate SE program at other universities, so I would most likely gain more through work experience than an SE graduate program. However, if I wanted to get a graduate degree in something else, like CS or Computer Security/Information Assurance, then I would probably learn something that I could only get if I found a job in those fields.


14
[+1] [2008-09-09 16:33:47] Kristopher Johnson

I'm wrestling with this question myself. I have a lot of good experience as a developer, but I'm not really getting any of the kind of experience I want. I'm thinking that if I get a MS in a particular subfield of Computer Science, it will be easier to get the kind of job I really want.

Maybe the right course of action is a lot of self-study and a personal open-source project that I can use as proof that I know what I'm doing.


15
[0] [2008-10-21 17:46:55] Rob Z

I think that this answer is going to be similar to what the others have said, but ultimately it all depends as to how your career is going, what your life plans are, and how much you really want to go to graduate school.

If you feel that your career is starting to slow down then graduate school might be useful to either kick things up a bit or help you move in to a new position. Likewise, if you are interested in a given area but are trying to figure out how to get in to that field (e.g. bioinformatics) then a graduate degree might be quite useful. It could also be a nice way to bump you up in the company if you feel like your career progression is currently stalled.

If your life plans include getting a graduate degree then ultimately you should be doing what you want to do. The only real question you should be asking yourself then is what field do you want to get a degree in and how long do you want it to take.

Also, your own desire to go should factor in. If you are currently feeling burned out from finishing up another degree or you just don't want to have to deal with school right now, then you should only go back you absolutely have to.

One thing to note though, but if you company is offering tuition assistance for the degree then you should give it some consideration as you don't have too much to lose if it is someone else's money paying for the tuition.


16
[0] [2008-10-21 17:57:02] JB King

It is worthwhile if one likes the theory of Software Engineering enough to go do a thesis on it, which is not me.

It doesn't matter if the engineer is older. If your undergraduate degree was over 20 years old, I'd wonder what did you do for the last 20 years? I'm not sure how many things still run now like they did in 1988, but I don't think it would be that many as look at all the Windows and Mac advanced in that time: The floppy drive is now gone on most new machines, the size of a hard drive is enormous compared to what it was then and even the connection is different as most now use a USB while the older ones were PS/2.

Certifications are about showing you can pass a test, that's it. If you use the certification to be your sole body of knowledge on a subject, that may not work so well, IMO. Week long seminars are good for getting an initial interest or perhaps a little honing of a skill, but not for getting all the ins and outs of a new technology. I don't think I'd expect someone to go into an ASP.Net week long seminar and have the same knowledge and expertise that someone who has been programming in it for years has had. To keep up with new technologies usually involves either finding a way to use them on the job or do it as a hobby.


17
[0] [2008-10-23 07:20:20] BaLs

I'm curious , given below scenarios

*Developer A - MSc Software Engineering grad with 3 years experience after his/her BSc Software Engineering

Developer B - Bsc Software Engineering grad with 3 years experience

If both of them went of interview who is more likely to secure the job from qualification point of view its more likely the MSc grad but looking from employer point of view , he can pay less for Bsc grad.*

I'm a developer with 3 years exprience , BSc Computer Science degree holder. I thinking about doing my masters and interested to research in programming languages and compilers because as mention by one of commenter above I'm curios "always wanted to know exactly how (fill in the blank) works" behind compilers and programming languages.

But thinking abt future , after I finish my masters and looking back to enter the development world how good my chance to secure job again will be?


Depends on how you go about getting the degree. If you get hired with the BSc and continue on for the MSc then you are going to be seen as a bit more of a specialized skill set without much experience. If you get a job after the BSc and do night school for the MSc then it should cause many problems. - Rob Z
I think if economy bad developer B. I think if economy good it is not as clear cut. And if the interviewers are recruiting through college recruiting then developer A may have an advantage. - Cervo
18
[0] [2008-10-31 16:11:54] tvanfosson

The best option is to have your current employer recognize the value in you earning your masters in CS and get them to foot the bill. Having gone this route (it helps to work for a University), I can tell you that I've learned a lot that, while not always immediately useful, helps make me a better programmer. It was through going to grad school and doing research on software engineering methodologies that I had my "aha" moment with Agile. For someone else it may be a different aspect of research or a class that finally gives them enough background for things to click.


19
[0] [2008-10-31 16:33:36] user15071

Sure, if you can't find a job. Same goes for Phd :)


20
[0] [2011-03-25 14:42:33] Mr. Zen

One day I was thinking just like you, hungry for knowledge plus the burnout of development/running a software business, and then I did my PhD . I won't say it was worth it considering the pain, and the loss of a reasonably good income. I also didn't learn anything new for development other than a simulator architecture. My career options, however, have increased multi-folds and I get more respect at companies. I can go into diverse fields - bio-medical,imaging, communication, cs, even mathematics.

So go there if you are hungry for knowledge. If you want money, MBA would probably be a better route.

I would warn you that I(as any other CS grad who cares to go through their books) seriously think MBA is for people with lower than average IQ, not developers like yourself. Other than some high school standard accounting courses, all other MBA subjects are as easy as reading these forums. But the business world still accepts that as a standard.


21