Degrees used to be useful for weeding out resumes.
I have 10 jobs, 100applicants, just pick the dozen CVs with degrees. That fails when everyone has a degree, so then you start to pick only ivy league, or only 1st/2:1 class.
SO you can try and pick degrees based on scarcity, ie I only hire oxbridge maths grads, or MIT physics as programmers.
Opensource has changed a lot of that - when I went to college only universities had compilers. A machine capable of running a compiler took a room, now I talk to high school kids who have written kernel modules.
I now hire either people with no degrees based on projects they've done as well as smart graduates (ie maths/physics) - ironically both groups with no formal programming qualifications.
I think you view the degree incorrectly. A degree should be a minbar of what one knows. It shouldn't be a scarcity measure. If someone has a CS degree I should be able to talk about garbage collection, threads, the pumping lemma, Amdahl's Law, control flow, NP-Completeness, etc...
Scarcity really should have nothing to do with it. Either you've acquired the knowledge, in which case the degree signals that or you haven't.
Your job as someone who hires people is to determine which vectors you put the most weight on. CS knowledge certainly isn't the only thing you care about, but a degree in CS may signal sufficient CS knowledge. In some cases maybe it requires a PhD in a specific field. Or maybe you want someone who has worked in the Linux kernel. In any case these vector weights should be job specific.
About the actual article, I must admit I don't know what the writer is talking about. As a consultant I've see a wide range of enterprise development. Some is as sophisticated as what you're likely to see at Google. Others are basic just people doing HTML markup. The degree requirement is a very pragmatic signal that the applicant has the basic skills required to do the job. I'm sure there are other ways to demonstrate this, but there's probably considerable investment in determining what they provide.
The thing that is somewhat interesting is that while there are probably just as many programmers who don't have degrees in CS/Math as those that do, most of the major breakthroughs, academia or industry, are from people either with these degrees or in the process of getting them.
If someone has a CS degree I should be able to talk about garbage collection, threads, the pumping lemma, Amdahl's Law, control flow, NP-Completeness, etc...
Has this been your uniform experience? Consider the following thought experiment: We advertise for a position as a programmer. We state that we require a CS degree. Within the set of applicants, what correlation will we observe between the ability to speak knowledgeably about all or even most of the subjects you list and a degree?
I suspect the correlation will be higher with a degree than without it, but too low to be useful for screening applicants in and of itself. This is not a fault of your reasoning, but rather a fault of the current system, where each institution decides for itself what is and isn't part of the curriculum and many (but not all!) undergraduate programs have been moving inexorably towards vocational training rather than teaching Computer Science.
Scarcity really should have nothing to do with it. Either you've acquired the knowledge, in which case the degree signals that or you haven't.
If the knowledge you describe is not scarce, than signalling that you have this abundantly distributed knowledge is not particularly meaningful. Let's say that the degree works exactly as you suggest: Everyone with a degree can and does have strong knowledge of the exact subjects you mention. But let us further say that this is not scarce: When we advertise for a position, 80% or more of the applicants have a degree and the knowledge that goes with it.
How then does this degree help us go from 100 applicants to five interviews? Sure we might choose to throw twenty resumés away right off the bat, now our problem is going from 80 applicants to five interviews. In this scenario, a degree is not meaningful to us because it doesn't help us make a decision.
Thus, we are forced to consider other factors, such as job experience, contributions to open source, writing on line, and so forth. Those factors become more meaningful because they are scarcer.
Sure, there will always be some meaning to a degree, but its utility for making a decision is a function of its scarcity in the sample set.
If the knowledge you describe is not scarce, than signalling that you have this abundantly distributed knowledge is not particularly meaningful. Let's say that the degree works exactly as you suggest: Everyone with a degree can and does have strong knowledge of the exact subjects you mention. But let us further say that this is not scarce: When we advertise for a position, 80% or more of the applicants have a degree and the knowledge that goes with it.
How then does this degree help us go from 100 applicants to five interviews? Sure we might choose to throw twenty resumés away right off the bat, now our problem is going from 80 applicants to five interviews. In this scenario, a degree is not meaningful to us because it doesn't help us make a decision.
I'm not sure what scarcity has to do with it. Either the skills are useful for the job or they're not. For example, being 7 feet tall is rare. But it's probably not something you care about.
What you really should do is enumerate the set of attributes that are valuable. And there are generally two types, those that are binary, and those for which more of the attribute is desirable (invert the attribute for negative attributes).
Now if the degree captures a lot of the attributes, especially the binary ones, and further if you think those w/o the degree don't have it then it is useful to list. Unless you really believe that the sample set contains 95% people with degrees.
The nice thing this allows you to do then is to focus on other aspects that you value. And for the ones that aren't binary is where you spend most of your time drilling. It's not about scarcity, its about optimizing.
Unless you really believe that the sample set contains 95% people with degrees.
That's the whole point. The value of the degree is the inverse of its scarcity. If you have 50% of people with degrees, it's more useful than if you have 80%, which is more useful than if you have 95%.
Perhaps you misunderstand what I am saying?
I'm not saying a degree isn't useful or meaningful.It is not a boolean, meaningful or not meaningful. Just that it is more useful and more meaningful if a degree is scarce than if it is plentiful.
We don't need to agree or disagree on whether the lack of a degree signals the lack of knowledge or whether we have confidence that those with degrees really do have all of the skills we seek.
Just that the scarcer it is, the more meaning we apply to it.
That's the whole point. The value of the degree is the inverse of its scarcity. If you have 50% of people with degrees, it's more useful than if you have 80%, which is more useful than if you have 95%.
The value of the degree, to you, trying to whittle down applicants, is inversely related to scarcity. But not to the degree holders. In fact, as the scarcity decreases, the cost of not having the degree may increase.
There's effectively two states: (1) Have the degree (2) Don't have the degree.
In a world where the degree is scarce having the degree may provide more value over the average person (although if it is too scarce, the value may actually diminish, as it may also hinder its credibility or recognition). But at the same time, not having the degree doesn't reduce your value as much versus the average person (since its rare, no one notices its absence).
When the degree is common, the opposite is the case.
What I'm trying to say is that scarcity matters to you in a very isolated activity (whittling down applicants). Outside of that, the role of scarcity plays both sides of the fence.
Based on my 10 years of interviewing people no one with or without a CS degree can discuss any of those things. I'm usually happy if they know what a hash table is and roughly how it works.
I find this surprising. Maybe because we covered some of those topics in first year, and, as a second-year student, they're still fresh in my mind, but I simply can't see how someone who completes a CS degree would be ignorant on all of them. For the same reason, I can't see how fizzbuzz is a useful test. It was the very first thing we learned to program in our intro CS class. I'm not from a top-ranked school, and while we tend to do fairly well in competitions, we certainly aren't renowned for our CSc program.
I don't know whether to feel encouraged or discouraged when reading articles and comments like this. Are there truly that many incompetent CS grads and/or insufficient programs out there?
I think being able to google your way out of a problem is worth more than being able to grag a grid to a form, drag a query to a grid and call it a day...
Why should I have to spend Googling for how to write a H264 decoder when I can just drag one, written by people who know it really well, onto my surface?
I know that a lot of people like to argue that these people "don't understand what they're doing". Most Ruby developers don't understand much below a single level of abstraction presented by the language either.
Well, if they can't discuss those things (and an awful lot more) then they don't have a CS degree - they might have some programming qualification, but they don't know about CS.
I think that, when he mentions smart graduates, the idea is that current CS grads are on the low side of the intellectual spectrum, as compared to majors such as math and physics.
At the time I graduated, the differential was the high student demand for CS, so only the best ones would be accepted into a CS program. Nowadays the large number of programs and the low demand pretty much guarantees that almost anyone can be accepted, and thanks to the dumbing down of the curricula, they can actually graduate.
So, a somewhat unrelated question: What are the signs that your program is a good one? I get that there's a distinction between computer science and programming, but I'm interested to know what distinguishes a good CS degree from a bad one? Does the fact that, as of second year, I've spent most of my time on data structures/algorithms and far too much discrete math for one lifetime bode well, or is it not that simple?
These are the types of things I have learnt in high school programming classes.. I'm in my third year and taking AP Computer Science next year. I'm kind of wondering how someone could get through a college program without knowing the basics.
I don't quite understand all the anti-college rhetoric, especially toward what I consider to be a pretty hard science (CS). Personally, I pursued (and am close to finishing) my CS degree because I wanted to know what CS was and get good at it.
Right out of high school I was not qualified for an entry level programming job (I mean truly qualified, as in able to do the job, not just get the job). I'm now confident in my knowledge and qualifications. It's been worth the time and money (read: debt) to me.
What I attempted to do with the article was to educate people to the wide disparities between curriculums in CS programs and to subtly encourage picking a school based on its rigour.
To the extent that you read the essay as being anti-college, I failed as a writer. I apologize.
I did CS because I wanted to learn CS more than math or physics. Of course, there's a decent amount of all three in my CS curriculum. This wasn't necessarily a money-based choice (and I have trouble believing that math or physics graduates make more than CS graduates anyway), it was a choice based on what I enjoyed and wanted to learn more about.
I think the market for CS is part of the problem. The skill set required from graduates varies widely across the industry. Also, it depends a lot on where you want to live. For example, if you are going to use hardcore CS knowledge, you must be or move to an area where companies require it. This means Silicon Valley, and a few places where there is a demand for such knowledge.
99% of other companies will hire CS people to write glue-code in Java or similar. In that case, the important skills are team-working and project management, beyond being able to program in Java.
So, you cannot blame only universities for delivering grads that don't know more than the basics. This is what the market will pay for. It does no good to a State University to teach for example AI algorithms that will be useful only if they get a job on Google, or writing Haskell compiler that will be useful only if they work for Microsoft.
I think a sensible solution would be to limit the number of CS programs, and create a separate major, maybe business computing or something like this, to attend the need to of the large majority of businesses.
Some schools already have an Management Information Systems (MIS) major, which is basically business computing, and/or Software Engineering, which focuses more on teamwork and project management. We should be pressing more schools to offer those majors so that students who want to become software developers will have other options.
Then the CS major would be able to focus more on theory and preparing students to do research (just like real scientists).
I was just talking to one of my coders about how nothing I have used in my career was learned from my computer science classes.
I guess I'm a "business programmer" - if I'm a programmer at all anymore - I'm not sure. I've definitely never delved into Scheme, Haskell, and OCaml.
I majored in CS, graduated from a California State University in 2002. I focused on getting A's, not learning or connecting w/ people or deciding what I wanted to do w/ my life. I figured I would graduate and a coding job would fall in my lap. Since graduating, I've worked at a real estate franchise, a hedge fund kind of investment place, and now ecommerce.
I don't know how a CS degree from a CSU looks vs UC or ivy league, definitely didn't think about it enough when graduating from high school. But I do know that my degree only directly served to let me pass through a filter to get my first job. And I probably could have had that with a vocational school degree.
"nothing I have used in my career was learned from my computer science classes."
It must have still been useful, at least as exercise for the mind - I'm sure most people who go to the gym don't need to bench-press 200 pounds in real life too often.
At one time I kind of felt the same way - I had a degree from a good school, and really it seemed like all I got from it was (maybe) increasing the chances that my resume would make its way to someone who could potentially hire me. But the longer I've been in the software development world, the more I've seen its value to me.
The school I went to made it really easy to dive into projects, build weird things, talk to brilliant people about idea - in fact often it was hard not to (if you wanted to do well). I really took that for granted. What opened my eyes to that benefit were some of the amazing developers that I've been able to work with since - they did the same things in college, and often they had to really look for those opportunities rather than stumble in on them like I did.
I didn't go to school to learn how to not be afraid to play with (and throw out) ideas, but it's probably the best thing that came out of my degree.
Depends what you mean by "know about." I had taken a couple of programming classes. I knew you could write code, compile it, and make a thing that does a thing. I started college as a Computer Engineering major, then realized that really wasn't what I wanted. If I could go back, and if it existed at the time, I'd to informatics.
I ask because if knew nothing going in, you'd learn a fair bit in college.
With that said, I'd programmed since 3rd grade and still learned a fair bit in college that I use to this day. Of course, this was pre-internet, so I think it was generally hard to self-teach. But things I learned in college that I used professionally:
* Data structures. Before college I pretty much used primitives and arrays. In college I learned to make much better use of trees, graphs, sparse matrices.
* OOP. Although in fairness, OOP started to come to life when I was in college. There was no ANSI C at the time :-)
* Compilers. I've since built many compilers, but having taken the sequence certainly made it a lot easier.
* Databases. Never used a relational DB until college. I think it would be fair to say I've made millions off of them since. :-)
* Regular expressions and state machines. This is just ingrained now.
* Vi ... Used Vi exclusively for the first decade of my career.
* Unix ... Used various Unix variants in the first decade of my career as well. Learned most of it in college.
* Architecture and internals -- I've done a fair bit of work at the architectural level, and college is where I laid the foundation for understanding both the architecture (registers, cache, tlbs, pipelines, units, etc..) as well as basic EE. None of which I knew much about before college.
There are plenty more, but these are some examples. Probably my big weakness in going in to college is I did all game programming before college. I understood graphics really well and the game loop, But looking back at some of the code, and it was really horrible. You really shouldn't use arrays for everything :-)
I was exposed to all of that, but 1) haven't used much besides Unix/OOP/Databases since, and 2) feel like I only learned 1% of what I use even in those areas during college.
A lot of it comes back to not having specific goals in college, sliding by like I always did in school.
That, and the excessive my focus on the band I played in. Not that I regret it, but pretty impractical.
Degrees may not be scarce - but the knowledge that should be contained within an CS graduate indeed is. At least as my experience has led me to believe.
So to recap the article: Don't go to UNI to get a CS degree thinking you will make big bucks just due to the degree. However if you actually understand the knowledge you were supposed to learn - then you should be able to make a buck.
That's the opinion often missing here. Just like ideas alone aren't valuable, neither is schooling. If you get something out of it though, formal education is valuable.
My wife has said for a long time that the main reason for a position to require a degree, is to demonstrate that the candidate has subjected themselves to the process and bureaucracy of an educational institution, which is often designed to mimic the structure of your average corporate hierarchy.
Given that I got kicked out of college because I simply was either too lazy to do the busywork, or too much of a rebel to please my professors, and she finished, but considers the net gain from the experience to be relatively worthless, I'd say she's pretty spot on. She also does better in your average 9 to 5 job than I do.
I don't know much about the contents of CS degrees, but from observation over quite a length of time it does seem to be true that most software engineers in businesses are really clerks - and treated as such. It's a very lowly position in the corporate pecking order. There are the software engineers and then there are the cleaners and the part time vending machine attendant.
This was kind of depressing to read. I have a CS degree, am currently working on a masters in IS, and am working as a web developer. I would like to think I am doing all right for myself so far. However, sometimes I feel as if there is a large gap in my CS knowledge.
SO you can try and pick degrees based on scarcity, ie I only hire oxbridge maths grads, or MIT physics as programmers.
Opensource has changed a lot of that - when I went to college only universities had compilers. A machine capable of running a compiler took a room, now I talk to high school kids who have written kernel modules.
I now hire either people with no degrees based on projects they've done as well as smart graduates (ie maths/physics) - ironically both groups with no formal programming qualifications.