The declining value of the MS in Computer Science
blog.regehr.org
blog.regehr.org
But to put a counterpoint on it, undergraduate education in CS can also be highly variable. My university used to require 20 courses, but because so many other schools required so many fewer, they adjusted down. Heck, most schools don't require students to take operating systems (something that stuck at my school). So, even within undergraduates, I'd say there's a decent difference between someone who took 12 courses, avoiding harder ones and someone who has taken a harder program. In some ways, the same thing that is driving these mercinary-masters programs is driving departments to encourage and keep lower-quality undergraduates within the department.
One of the big problems is that there are a lot of people that want to retrain for software engineering jobs. Yes, they could learn on their own (and many do), but some like the classroom and some like the perceived safety of a piece of paper from a university. We could call these programs post-bac, but that's a lot harder for someone to market on their CV/resumé. So, what is someone that wants to retrain supposed to do? There are undergraduates coming out of top schools with 10-course majors in computer science (including required math courses). As long as the courses are taught at the same level, there's no reason that someone should be able to retrain with those same 10 courses and be seen as having gotten the same education.
So, getting back to the issue at hand, I think there's an issue of whether any CS credential carries the same weight. We only demarcate a few options (BS, MS, PhD), but within a BS, there's huge variation that isn't captured by GPA given that so many schools allow students the option of skipping the hard courses and going with electives like "Web Engineering with Rails" and "Mobile Apps for Android". But part of it is that those course titles offer something that is of value to a lot of companies. For both of those jobs, you don't need to know how a TLB works or why a B-tree is better when doing disk IO. It can be helpful, but there are a lot of jobs that don't need high CS skill.
Maybe the issue is that we don't generally have Software Engineering degrees. There's overlap between software engineering and CS, but I think there's a decent difference worthy of demarcation. Technology is seen as a good path today and I think some of the harder pieces of CS get some people discouraged out of the departments. That usually gives departments two options: water down the major or have fewer achieving the major. Maybe a balance could be struck, maybe a software engineering degree would be the way to go. Maybe universities in America need to start offering MPhil degrees (a research masters) to make the distinction.
But, even if that distinction were made, some schools would be offering software engineering under the CS name and students looking for a fancier piece of paper would send their money that way. We don't have anyone like the AMA dictating standards as they do in medicine. But maybe this is better. Maybe this means that we need to actually look into candidates rather than relying on one piece of paper.
Their knowledge, problem solving skills, 'soft skills' and ability to quickly learn areas they have gaps in are what make them effective. How they acquired them and 'prove' them are all I care about. Part of the onus on me is to tease that out in my short-listing process and interviews and part of the onus is on them making it easier for me to see it so they jump out for me as quickly as possible.
I did (thankfully) participate in research, so I can always talk about the research work even without a publication track record. I have published since in different formats, so that worked out.
But, and this is a crucial issue, a MS in CS of any type helps get you past the HR filter at big companies. When I completed mine, it meant a significant boost in starting salary right out of the gate. If you're looking to join IBM or Microsoft, you probably need to think hard about that signaling credential . . .
Ignoring the disconnect between the academic CS experience and the reality of what most CS programmers work on in the day job, the biggest challenge I see for new practitioners is building a portfolio of software work that a hiring org can understand well enough to make a hiring or interview decision on. How do you communicate that ability and drive to hiring managers outside of your personal network? Do these combined BS/MS programs (e.g., a year of additional coursework to finish off a coursework-only MS) or simply hitting grad school still work better than saying, hey, here is my open-source implementation of path expressions for concurrency control in Common Lisp?
As part of my MS, I did build a portfolio of work - well - a project ! - that I've used in my interviewing process.
And, oddly enough, serendipity is that it had to do with concurrency and was written in Common Lisp.
That said, I'm sure there are employers who will give developers a shot even without an sort of academic credential, but they're not very common in my experience.
If you're really good at coding I don't care about the lit degree. I just don't like liberal arts majors who think they're better than me because they don't have to worry about money. :/
If I think machine learning sounds like an interesting approach to solving problems, are my choices really limited either to seven years of academic research or to teaching myself this stuff from whatever materials I can cobble together in my spare time?
If you want to do machine learning, go and do a Master's with a thesis option where your advisor does research in machine learning project and where you will be encouraged to publish your work at conferences.
Further, from my brief exposure to a CS grad lab, research occurs in very narrow areas, often on things with no discernable utility, where all work is essentially throw-away, and where the only goal is to publish a paper. In contrast, I want to build stuff, possibly hard stuff, stuff that someone would use; and that may mean learning things (not discovering things).
It's not that the advanced knowledge isn't taught in a graduate program, it's that a formal research project where some or all of the advanced knowledge is applied is seen as a great way to integrate everything, and it's completion is a better marker of autonomy than course project completion. Of course there are professors doing useless research, so find someone at a school doing something that interests you. Or get hired by a company and learn on the job. Or start a side project. Yes, academia can be a waste of time if you don't actually like the work, but depending on what you want to build it might be the easiest way to get there. Grad school is generally an opportunity to become an expert in the field that interests you, and the production pressures of industry might preclude this.
That said, a coursework MS will make you generally much more attractive to employers. It's just that they will interpret the degree as more of a signal of your capability and intelligence (and this effect is greatly underestimated by HN) than an indication of any specific expertise.
So with a coursework masters, you stand a chance of having generally great job opportunities, but you may be disappointed that you are not eligible for the most interesting jobs, even though they are related to your coursework.
For international students, it becomes significantly easier to get work authorization and permanent residency in the US if they obtain a higher education degree (basically an MS or a PhD) from an American university. This is one of the main reasons that students from India and China in my university who have a BS and already have very employable skills still go for an MS.
People with CS degrees who can't code are more likely to be out of work, or to be in low-paying jobs, and therefore more likely to be applying for jobs.
EDIT: typo
I also had some folks in my program who were, in my opinion, definitely not graduate-level material (a point made in the article as well). I feel like I have a strong CS background and can take things to a higher level, but because of the weaker folks, some of my classes were (to me) watered down and ineffective and thus not challenging to me.
One: As an MS in CS holder I certainly worry that my degree is perceived as worth less, if not outright worthless. I worked very hard for it and am proud of my accomplishment. It represents a great deal of sacrifice. It also represents the 30 credits of undergraduate coursework and six credits of graduate coursework I completed before entering a graduate program. Of course, Ms. Lerner would see the MS on my résumé and throw it in the rubbish pile.
Two: According to Prof. Regehr's second point, training in public speaking and writing is an important aspect of a research-oriented master's program. I already had a B.A. in Journalism so I was pretty well covered on both of those points. And, since I was working full-time, with a child on the way, I was plenty mature. A coursework-oriented degree is what I wanted.
Three: I violently object to the denigration of MSCS holders based on the limited experience of a recruiter. Maybe Ms. Lerner is unable to attract more qualified candidates, and so she's extrapolated too liberally. Her arrogance is what I find most offensive.
[1] http://www.forbes.com/sites/quora/2013/05/09/how-different-i...
1) I was able to work full-time while completing the degree, and my employer paid for the tuition.
2) I don't have a BS in CS, but I do have a semi-related BS in engineering, so getting a second BS was not a very attractive option in terms of time or money.
3) I came away with a formal CS credential that will allow me to get past HR screens. I've already had a few recruiters from well-known tech companies contact me since adding the CS degree to my LinkedIn profile that I don't think would have noticed me before.
Does having the MS alone put me on the same level in terms of overall knowledge as the average BS in CS holder? Probably not. I definitely noticed that some of the graduate-level courses I was taking seemed to be easier overall than what I was used to from some of the undergrad courses I had taken in CS. But at the end of the day I did learn a bunch of new stuff, and I know that I can fill in any gaps remaining through self-study or resources like Coursera, so I'm not too concerned.
Getting the degree for free made all the difference though. I wouldn't recommend paying full tuition for one of these programs, which the author agrees with.
- BSc: A 3 year taught course with some of the final year devoted to research.
- MPhys[1]: A 4 year taught course that is essentially a longer version of the BSc with good chunk of the final year being a research project (some UK universities have an even larger portion of time in the 4th year for research)
- MSc: A 1 year master's course focussing entirely on research (no exams) designed as a follow-on to a BSc.
In the UK, an MPhys is understood to be different to a MSc in the level of research achieved and teaching received.
Many people only go for an MS because employers increasingly have a credential fetish.
The quality of the actual education isn't generally that important to students because it typically has little overlap with their future jobs.
If someone is getting a degree just to pad their resume and fake out a potential employer, they're doing life wrong.
I'd certainly think very hard about hiring a MS-only candidate, particularly if he/she didn't have publications.
You talked about "shocking failures to understand CS basics." What would you recommend learning for someone like me before they start an MS in BS?
A student ought to have studied and understand discrete math, data structures, and fundamental concepts of computing and programming languages. CS isn't about programming, but for your mind to be in the right place and in order to participate in the program you really ought to be a strong coder with at least one language under your belt. Research will almost certainly require significant coding, even if the work is theoretical in nature.
Beyond that it really depends on what program you're doing and what your focus will be. In many cases you'll want significant mathematics background, including areas like abstract algebra (important for crypto studies), numerical analysis, experience with proofs (useful for theory of computations studies)...it goes on and on.
So I think you're the perfect candidate for an MS in CS.
What worries me more are the options mentioned in the article and the comments for non-CS/informatics degrees to do an MS in CS. Maybe there is some thinking that someone with a BS degree in any science shouldn't have to do undergrad CS work, but it seems to me they should earn a BS in CS not an MS. I also get that some cross-pollination between similar fields (say robotics and CS, applied math and CS, etc.) can be beneficial to the students and the program in general, but make those students take extra undergad courses to catch up. Dumbing down MS coursework for non-CS people really defeats the purpose of the MS for everyone. That would be my main issue with the topics in the article (having a research-oriented and a non-research MS seems fine to me).
That said, it was different than Computer Science. Besides one introductory programming course, there was no programming required. Even for our capstone projects, wireframes were sufficient. We didn't actually need to code anything.
To give you an idea, here's the curriculum: http://ischool.uw.edu/academics/informatics/curriculum
My main concern with doing an MS in CS is that I wasn't exposed to a lot of traditional computer science concepts, such as operating systems, hardware, compilers, algorithms, etc. And the highest level of math I've taken is Calculus I (and a 300-level statistics course which was frankly a joke).
To take a recent example here on HN: did you cover big-O notation? To me that is fundamental, and the BS programs are cutting corners if they're leaving that out.
I'm generally worried about two points I'm deficient in: subjects that require formal education (I don't know if I can learn about compilers on my own, for example), and subjects that require advanced math.
With that I got into a French school where the students had done 2 years of cramming for exams (mostly math, physics, and chemistry) and one year of intro CS, then I joined them for the last 2 years. I did repeat some processor and compilers work, but then took the software engineering option that focused on process, tools, UI, QA, along with a mandatory industry intership with final report (not as big as a research thesis, but still quite hefty).
To me it was a very practical and useful course of study, and I really think that masters programs can provide valuable non-research skills. There are many domains where I think that 1-2 years of additional study on top of 2 years of BS coursework can be very valuable. I think these domains can and should be industry-focused fields: software engineering, imagery, maps, geo-location, big data, web-apps, testing, processor design, etc. These would be advanced courses where the students look at industry practices and the latest research and do (minor) original work in the field, either on their own or as an internship with a company solving real problems.
My interpretation of the OP and the various other threads in these comments is that:
1) CS is highly in demand and HR doesn't know how to evaluate skills other than to ask for degrees.
2) Some schools are responding to the need for degrees by offering MS in CS that are really a BS for people who already have a BS in another field.
3) These people are doing mostly intro CS, not the advanced topics or research that "real" MS programs are doing.
So I think it really is a problem with these schools and the accreditation of their MS degrees in CS. I was surprised to read other responses above that most colleges do not allow multiple BS degrees. This is some sort of artificial limitation that is skewing the meaning of the MS degree.
(it also helps that tuition is free)
Maybe the coursework-only MS is diluting the value of an MS, but there are a lot of research MS holders I wouldn't particularly want to hire, either.
However equally bullshit is the idea that you can't write software without a Bachelors in CS. As far as I'm concerned my MSc is a halfway house. It gets you passed HR and let's you talk to people who know these MSc aren't worth anything but only really care if you can make things.
For a student like me, there is also a tradeoff between during research vs doing your own side project vs taking more courses in school. Doing research can be extremely time consuming and potentially affect other course selection density and even performance. I've also seen may CS graduate students who take undergraduate level courses out of MSCS and they max-out the amount of course they can take. These are usually great courses that their previous school does not offer. Doing research in a specific area is probably the most counterintuitive for those who're taking lots of diverse courses. You can argue that these type of students are still figuring out what they want to do and that's what they should have done in their ugrads. But the truth is when you realize you can do much more, the curiosity to discover more is not that easy to stop.Doing research in summer usually is the ideal choice if the students take too many courses in other quarters and they do not want to do an intern.
Also I am currently a CS Undergrad in my senior year at University of Illinois Urbana-Champaign and from what it looks like (at least from where I am standing) I would benefit more getting a MS in something such as finance or (what I am doing) chemical or bio molecular engineering. This gives me both the appropriate background to take jobs in CS as well as the ability to work in the field of medicine or both.
Just thought i'd share...
The post suggests that course-only Masters degrees are inadequate and dilutive because, while the survey a body of knowledge, the human contact is missing and that the human contact with a real live researcher is how computer science it best taught. I agree.
The fact that most don't is a sign that most USA universities, even those supposedly at the top, are giving a watered down curriculum that's taken as a cover for credentialing and partying and not real education.
College in my opinion should be used to increase your depth of knowledge about one specific area of study. If it were meant to make you well rounded then why have any majors? One of my biggest gripes about college was having to take classes (aka pay for classes) that had no impact on my major (Literature, Tennis, etc...). I can only analyse the epic of Gilgamesh so many times before no additional value is added. While knowing the story arguably makes me a more interesting person, it does not make me a better developer.
If you are going to a good school where they actually work you (UW worked us well into the wee hours and they were a hacking school when I was there, I watched Joe Moran do a Unix port in 36 hours there - Joe is the guy who implemented the Sun VM system which is something Bill Joy imagined but couldn't do), if you are going to a school like that, go for it.
For me the MS was just a chance to hang out with people who were doing real work. And learn from them.
Here is where a MSCS ("Coursework") works really great for all parties involved -
1. (And the biggest reason) Provides actual, high skilled nonresidents an easy route to working in USA. MSCS ("Coursework") are doable in 15 months with some schools such as Cornell offering a 9 month program (MEngg not MSCS but same difference). This works great for the student (since CS grads are paid well, they don't have any issues repaying student loans), for the university (they're struggling for cash and this is a welcome inflow of cash) and BigCos such as Microsoft, Amazon, Google etc who recruit most of these and basically pay for these degrees (they're bleeding top talent to the Facebooks, Twitters and startups etc and are always hiring)
2. Students who don't have a BS in CS. Its a great route for them to add some formal education to their resumes and improve the core CS skills. Startups don't really care about your resumes, but it can be hard to get calls from the BigCos without a formal degree in CS or EE. Nothing wrong with that and I can't see why anyone would disparage them.
Finally, I'd disagree with the blog author's two observations. First, his recommendation to the undergrad. If you don't fit into either of the two scenarios mentioned above (nonresident, didn't do a BSCS) there is only one scenario where it makes sense for the undergrad to do a MSCS - if he/she is interested in research and doesn't have a good enough profile to get into a PhD program directly (it'll give you an additional year to try and get some more publications + give you an opportunity to convince a prof at the school you're at to do a PhD).
However, if you're going to reject all the schools which don't give you any financial aid or give only a TA, you'll left with schools which will give you a RA which basically means you are good enough for their PhD program and they accepted you to the MS program only because thats what you applied for.
The second scenario - of Udacity/Gatech's $7000 MSCS eating other schools lunches, unless this $7000 MSCS comes with an CPT, OPT and its own category of H1B visas, I find it really doubtful it'll make much headway with the first group, nonresidents. Although it is definitely quite attractive towards the second group, those who didn't do a BSCS.
1) Someone else (probably your employer) will pay for it
2) You _know_ it will get you a raise
For example, when I was at Lockheed Martin a long time ago, they would pay for a MS and give you a $N raise when you finished it. 100% worth it.
I know a bunch of people who worked their ass off getting a MS while working a full-time job only to keep working the same job for the same salary after they got their degree, except now they were saddled with $30K in debt.
If you don't have a BS in CS or you're looking to get a masters as a precursor to a PHD, that's probably a different story.
So we're talking about spending ~2 extra years in school for basically a nil result when applying to development jobs. My personal anecdotal experience observing those around me is that getting a MS in CS is leaving a lot of money on the table - you will give up 2 years' salary and your salary upon graduation will be the same as, if not lower than, an undergrad with 2 years industry experience. Do it if you love it, but know that it's a financially negative move (and substantially so).
The big gap I see is Ph.D's. When interviewing Ph.D's for development jobs (i.e., you're writing code a lot of the time) they consistently do poorly. I see a lot of poor code discipline, bad architecture, and all in all poor engineering. They know algorithms and data structure inside and out, but when it comes to writing solid, maintainable code, a PhD in the room is in my experience a disappointment.
If a hacker decides to get a degree, it shouldnt be because the job he wants requires it. Rather college should be a personal pursuit to accomplish a life goal. Something for them to look in the mirror and say, "Your pretty damn bitchin at this thing called life."
What makes me want to do get the MS is that my undergrad performance was not stellar. I struggled in the middle of my time in college, and while my grades have rebounded and I have been doing well for myself since, my GPA is pretty dismal. I can't see myself getting into any of the good MS programs around the country, and the easy remedy to this is to staying at my university for another year and getting my MS with the goal of having a much better GPA in order to demonstrate my ability.
That said, if the value of such a degree is declining at the moment, maybe it's a lost cause to redeem my academic credentials.
One of my good friends and I started at the same company around the same time. He had just finished his masters and I hadn't. He had 5 or 6 years of real world experience, while I had 3.
I got hired in making considerably more money than him because he was considered a "university" hire.
While this could just be the result of the fact he went through university recruiters and I didn't, it still seems like his Master's didn't help him much.
In my (admittedly short) career, I haven't seen a difference in quality between what people with a BS and an MS produce that would make it worthwhile for me to go back to school. It just wouldn't be worth it for me unless I was really interested in the research.
I actually have a little different opinion - what's killing the value of an MS in CS is the fact that CS curriculum is becoming Software Engineering under a different name. Let me be clear - there is NOTHING wrong with Software Engineering but as someone who is more interested in NP completeness, computability, static analysis, machine learning, etc - much of what passes for CS cirriculum in course-work only programs simply isn't.
I'm a non U.S. citizen/resident and I'd like to work in Product Management in the U.S.; I had hoped that an MS CS from a top university would help bridge the gap between my design undergraduate from an unknown international university – helping me land a job at a top tech company as an Associate Product Manager or the like.
Thoughts from the savvy HN crowd?
My BS is in Physics, not CS, I have five years experience in industry, and my goal would be to cement my foundational knowledge and complement the self-study I've done over the years.
I spent four years in the MS program and, looking back, I could have done more with the time I had there. Even so, it was well worth it and opened a lot of doors for me.
In a research-driven job, someone with a strong research background in CS makes sense.
For a job where you want a top craftsmen and producer of code, it would seem to be much more tangential.
For the latter situation, companies that hire purely based on academic credentials will likely be making suboptimal, if not outright negative EV hiring decisions.
Actually, they are paid less as they are considered to have less experience...
If you don't match the average, you are much more likely to get lower quality candidates apply to your job. If you, as you claim, pay them less than people with 1-2 years less education, you are pretty much guaranteed to get the worst candidates.
This latter point usually ends up leading to "I've worked with so many people with masters and they are all bad!"
I was doing a whole ton of interviews and the candidates who had cross-trained to CS from some unrelated discipline by getting an MS were almost universally unable to cut it in interviews.
So, hardly "declining" value.
Of course, I'd be happy to accept the distinction between the two types of MS that the article discusses.
While I understand, respect and even agree with the reason why - the fact remains that I studied Communication, Beer and Skirts for my undergrad degree, didn't start programming until two years ago when I was 30 and now more than anything in the World want to be a software engineer.
So for somebody like me - the absolute lowest form of life in software engineering - is spending two years doing a coursework only MS CS (first year is a fast paced BS CS) a waste of my time and money?
No employer has ever asked me for a github address, or a list of open source commits. I put github on my CV via a goo.gl url last time, and counted very few visits. Yet they invited me for interview.
HR filter by qualifications, and hiring managers filter before phone screen on what you claim in your CV. Then they assess at the interview whether you were lieing.
If you were genuinely famous in the OS community, or had spent a year full time making an amazing product they could see, I think things would be different. For most software engineers, 80% of our work is for our employer. I've made some awesome stuff for other people. It's not on github. My boss wouldn't like that.
Is the above really a good recommendation? I'd say at least the MS would get him through the HR filter?
Then after that, HR appear to filter by previous job title, hoping to see career progression and a similar title previously.
I guess the people at a large company that reduce 200 resumes down to 20, before the hiring mangers sees them, do not understand Ruby. They understand that they must be able to quantify why they rejected an applicant in case of a lawsuit. Hence the frustrating rigidness.
There's a certain snobbery about people who had their act together. Not everyone knew what they wanted to do as an undergrad. You might have more aptitude than people with a BS CS. Pick a program that doesn't treat you as a cash-cow: one where you can take the same courses as undergraduates and PhD students. Then ignore nay-sayers.
If it's a two-year program, you can likely get enough courses in to learn something serious. I have less respect for one-year BS/MS masters programs simply because you won't be taking that much. In two years, you could take 12-16 courses and maybe do some research in the second year.
When it comes to university credentials, people like to "lock-in" their value. If you went to Harvard, no matter how much of a failure you turn out to be, you went to Harvard and people should respect you. So, if I have a BSCS, there's a great temptation to say, "no, you can't go back in time and get to the same level as me. Even if I'm incompetent at my job, employers should devalue you no matter how good you are because you're that 'absolute lowest form of life in software engineering'". But we shouldn't think that way. You're trying to better yourself. Kudos!
To be realistic, you might come out of the program not on-par with the type of student that would be capable of applying to top PhD programs, depending on how rigorous your courses are. Two years can be a short time, especially if you're starting with intro to programming. However, if it's a good program, I think you can come out well among those looking for software engineering jobs.
The real issue is that the BS degree covers (roughly) 2 years of general study and 2 years in a major. Anyone that has already done the general study part just wants to do the 2 years part in another field. I think it is a failure of the academic system (in the US) to not break down the degrees correctly and to call those 2 years in another field an MS--should be a 2nd BS.
I will note that in Europe, a lot of the general study that US universities do in the first 2 years of a BS are done in the last two years of high school, for example the French baccalaureat (bac).
source = me. i'm currently admitted back to my alma mater for a second degree in CSC and will be returning in fall this year.
I ended up taking some post-bac courses at the university I'd gone to for my BA then going directly into an MS program.
1. Getting re-admitted to ones alma mater is simpler than a new school (given that these are adults going back to school who may well have moved and established families, their alma mater quite possibly is no longer an option)
2. How many credits were waived? This is a pretty serious sticking point, as anything > 2 year full time equivalent becomes a major time commitment & investment. I would also point out here that this can vary significantly by institution, unfortunately.
3. Many undergrad classes don't support a fully flex part time schedule (or, severely limit their evening & part time options). This becomes increasingly important in this scenario.
While there may or may not be an admission-department policy or stigma against second undergrad degrees, the system is by and large certainly not geared to encourage it as of present.
But the question here is what is best for the poster.
Assuming he can pass the MS degree, a future employer will give much more credit to an MS than a second BS in CS. Furthermore, as he describes it, the coursework already includes the equivalent of an undergrad in CS or more.
If you have that kind of passion for software development, you'll do fine, regardless of your original degree (or lack thereof). Having said that, I'm skeptical of the value of a MS in CS without a BS in CS. In my MS program, the assumption was that you had the basics - algorithms, data structures, language theory, basic hardware design & logic, compiler design. You can certainly gain that knowledge with enough reading on your own, or taking some courses at a local community college to get the basics.
If this option is available to you then I'd heartily recommend it.
Would you mind if I email you a few follow up questions?
No, definitely not a waste, but I'm not sure it's an optimal use of those resources. You can try to simply do the minimum to "get your foot in the door" of software development jobs, then take it from there. That minimum is probably taking mostly programming-oriented courses, and asking your programmer friends what else can you study to make you a more appealing candidate. (Not sure I'm qualified to give that advice, but feel free to contact me about that if you want)
So the real questions is: can you handle the coursework?
Only you can answer that. If you can pass the degree, and it is from a decent school, I don't see how it could fail to be worth it.
It is all in the head.