Advanced Degrees for Software Developers?
DagnyJ asks: "I am an Undergraduate planning to pursue a Graduate Degree in Software Engineering and Design. The question is whether to get a Ph.D. or a masters degree. When pursuing a career in this industry, is a Ph.D. going to make much of a difference in opportunities over a Master's degree, or would it be better to get out of school fast and get some real experience?" It's an ever popular question for college undergrads in their senior year. With the change in economic climate, maybe staying in school for a few more years might not be a bad idea.
What do you want to do as a Computer Science graduate?
Do you want to code and hack? Get a job right away.
Do you want to do research? Check out PARC's employment page.
An advanced degree will not get you any further than a bachelors in JoeSchmo Bank. But you won't even get talked to without one if you want to work in a research center (HP, PARC, MS Research).
Dancin Santa
Way way back in the early 1980s my family took a vacation on the Shetland Islands, north of Scotland. One day my father got talking to an old crofter. After a while the crofter turned to me and asked how old I was and what my trade was. I told him I was 13 and that I was still in school. He said "What do you you want to be in school for, at your age?".
I have a masters degree (Mathematics). For as much as it was a fun way to spend the time, it has had no bearing on my career whatsoever. In fact, apart from getting me in the door at a few short-sighted companies, my undergraduate degree was pretty worthless, too.
My advice: go get a job. What do you want to be in school for, at your age?
--
Yes, the nick is flamebait
My best advice to you is this. Only go for a PhD if you feel you can make a meaningful contribution to the field. Do not expect more money or more opportunities. Sure, you could perhaps find better opportunities with a PhD but the odds aren't for it. Instead, you'd be better off making money with an MSc and building up your experience that way.
--
Oceania has always been at war with Eastasia.
Honestly, get real-world experience just as soon as you can. You should have started before you got into college. Finish the masters if you feel like hanging around, but I have seen it make little difference in the actual job market. Get the PhD., though if you are rich and can afford a research job.
That being said, you MUST get the experience. Even in a pure research environment it helps to understand what outside factors and demands exist.
*whup* "Get along, little electrons. Heeyah!"
An advanced degree is an indulgence if you want to work as a software engineer. Do it if you want to, but don't expect it to improve your salary. The only thing that counts is years "in the real world", i.e. writing code for a customer or product. I mean that literally. If someone is trying to hire a software engineer with five years of experience, then six years in grad school and one year of experience will usually not get past a screening of the resume.
A Ph.D. can actually be a hindrance. If you get one, many potential employers will view you with suspicion for a number of reasons. The attitudes I've seen are that if you have a Ph.D. you must:
- think you're too good to write code, fix bugs, write release notes,
etc.
- be lousy at writing code.
- be incapable of writing efficient code.
- be more concerned with cool ideas and theory than shipping
a product.
- have outrageous salary demands.
- have a problem dealing with holders of mere B.Sc. and M.Sc. degrees.
I have never seen these sorts of concerns applied to candidates with an M.Sc. degree.I'm definitely not saying that you shouldn't get an advanced degree. I really enjoyed it, and I think the quality of my work (including code) greatly benefits from my education. My point is that potential employers may not see it this way.
I'm also not saying that you should go get a programming job right out of high school. Learning the basics of complexity theory, data structures and algorithms, compilers, databases, numerical analysis -- typical undergraduate courses -- is really important if you're going to be a serious software engineer.
This /second/ post will hopefully be more helpful. :) I would do a cost/benefit analysis and see if the PV of all salary cash-flows equals or exceeds the PV of all tuition cash-flows. If it does (having used a generous rate-of-return), then go for it. For the most part, PhD's are useful mostly for teaching; therefore, experience and training will do you more good in the long-run. But who knows? Sometimes it comes down to a gut feeling.
'He who has to break a thing to find out what it is, has left the path of wisdom.' -- Gandalf to Saruman
I'm a senior graduating this year from college and I faced the same problem as you. From what I've found from doing some research and talking to people (and actually working out in the field) that it's better to go get a job now since a lot of places don't hire people with advanced degrees because they think they'll expect too high of a salary. I've worked with people with Ph.D.'s and also with people who were self taught. Some of the people that were self taught were better programmers than the ones with advanced degrees. I'm not saying this applies to all cases, but it is possible :) So go get a job and get some experience!
I'm in a good CS grad program right now. There seem to be 3 types of grad student that I typically see. Someone wanting to get an MSc and leave. That's a good move, helps your salary when you go into industry. Then there are 2 types of PhD student. To generalize, some are shot hot, can program well and basically know what they are at. They also tend to be doing systems research or scary theory stuff. The rest... well they are crap. Can't code, don't know much theory and waffle a lot. I don't know how the selections are made, but there are plenty of these type of people around, and they are not gonna make it. They also tend to be in areas that lend themselves to waffle, like software engineering, HCI, and so on. Lot harder to bullshit a potential systems advisor. "So what have you built recently..."
I seem to remember him having a rant on there about the diminishing value of a graduate+ education, but I can't seem to find it now, and the content I'm thinking of seems to have been folded into the page above. *shrug*
DO NOT LEAVE IT IS NOT REAL
If you come to me as a PhD with 20years of industry experience I'll see you as a wizened (wisened?) veteran who care share some real insight with myself and my team. Then again I might see any guy with 20yrs experience that way, the PhD would be extra in that case.
As for masters? I was at a college recently, doing some recruiting. When I saw bachelors kids I tended to think "Ok, entry level, we'll start him off as a junior programmer and give him the scut work." Masters students tended to make me think "Ok, here's a candidate to go right into our core team and be given some responsibility." Why the difference? In our case it's primarily about design skills. If you know how to code, I'll have you write code. If you know how to design a system, I'll have you doing that. In general I found that the masters guys had more experience to backup their claims of knowledge. The BS ones said "I have experience in Z" when they meant "I've downloaded the free Z compiler." Masters students who said that meant "I had an internship at Oracle where I implemented the following project in Z."
Just my experience. There have been entry level kids come in and wow me with their experience (although not many, there's less of you out there than you think). And there have been masters holders who don't know which end of the monitor is up. Make of it what you will.
An interesting question would be, what about somebody who gets a BS but has the experience of an MS? My answer would be "I'm not sure that's possible. If you really have equivalent experience, then why don't you have the degree to back it up? It's more likely the case that you think the cases are similar, but they're not.
In the interests of full disclosure : I have a bachelor's in CS. I spent 3 years at a small company as the only (hence, "lead") programmer, then 2 at the company that bought them where I became the team lead by nature of my expertise on that system. I had about 8-10 years experience in the field before circumstances turned me into the manager I am today.
www.HearMySoulSpeak.com
My advice may be a bit old, since I went to grad school in 1987, but when I was going to grad school in CS, pretty much everyone there originally entered because they were going for their Ph.D. The school didn't accept very many Masters-only students simply because their philosophy was 'if they're going to aim low, they can aim low somewhere else'.
Granted, about half or maybe more of said students ended up taking the Masters consolation prize and leaving (your author among them), but out of 100 grad students or so, maybe 5 of them entered with the intention of just getting a Masters. This was just my experience, YMMV, Insert Disclaimer Here, etc.
---
At least mafia-owned pizzarias make excellent pizza. Compare to Bill Gates.
As a manager, I occasionally see Ph.D applicants for software positions. My fear is that if I hire a Ph.D, they will assume that their degree makes them my boss, instead of the other way around. The person I hire might simply ignore their job and try to do mine instead. If they start to schmooze with senior management (instead of doing the job for which they were hired), they will either (a) convince the top brass that they should be running I.T. or (b) manufacture some other "more challenging" job in the organization for themselves. This leaves me with at best a refill of a vacant position; at worst a total loss, since the person and position might get re-assigned. With an MS degree, this problem is reduced and with a BS it is eliminated.
I have plenty of confidence in my skill and experience, it's just that I once worked in higher education. I saw some wacky behavior from people who thought the Ph.D was a replacement for experience.
As you say, learning the basics is really important. However, everyone has to decide for themselves, just how much education is enough. In the long run, a person's willingness to keep up with technology will determine their career success more than anything that happens in college.
I agree with many of the other posters: get a job now.
If you really want to stay in school, and you are reasonably intelligent, and you want a good (i.e. satisfying) job later, get an advanced degree in something else.
Good candidates are: communications, english, business management. If those ick you out, find something not CS related that you're really interested in.
People who can bridge two or more disciplines by far have the most interesting jobs.
... then you will want to get a PhD. Some people find that life attractive - living in a college town, teaching, doing research, supervising graduate students of ones' own, etc. To do it, a PhD is usually necessary.