I'm not sure if enrollment is the correct word. At my college, enrollment in the introductory CS course is at an all time high, over 1200 students who sign up. A result of this is that the CS department is now financially constrained and a high GPA cap has been set in place. But going back to the discussion, why is the number of CS graduates -- I think that's what the author intended to state -- constant? I'd like to offer a student's perspective.
First, CS is hard. Perhaps not from our point of view, us who practically grew up with a computer. But for the majority of people, it is. I notice that the students who tend to do well either have prior experience (if AP CS qualifies as that) or come from a background that emphasizes logic and abstraction (e.g. math, physics, philosophy). However, this rule of thumb fails for one group -- students who are willing to work hard, attend lecture, go to office hours, and are not afraid to ask for help from other students or GSIs. If we tried to persuade students to enroll by depicting CS as simple as making a peanut butter sandwich, I'd think we would be setting them up for disappointment -- somethings are just hard and boring, and you just have to get through it.
Second thing, a lot of college students are not willing to fail or take risks with their GPA. Maybe this has to do college admissions; often times I hear "at least you were smart enough to get into _______". The effect is that students are pressured to maintain an image of academic perfection. And the easiest way to do that is to only take courses you are comfortable with. When I tell my friends to at least take one CS course before graduating, the common response is "it's hard and I don't want to get a D" -- though that is rarely the case based on the public grade distributions.
The point is, CS is hard but doable. But hey, I got some of them to enroll in Data Science.
For me, it seemed like everyone around me in my CS classes just got it. There were definitely times I felt stupid because of it and it was demotivating to see so many people having an easy time while I struggled. When your assignments are taking you 8 hours and other people are getting them done in 3 hours, you start to think, "maybe I'm just not cut out for this". Eventually I started to get it and it became much easier for me, but it took a while. Who knows? Maybe I'm still not cut out for this.
There will always be people who are just "better". They'll learn faster, remember more, and generally make you feel inadequate by comparison.
There are also people who seem like that, but aren't. These people have prior experience and memories that accelerate the speed at which they learn, and leave fewer remaining new concepts to memorize. Over time you'll catch up to this second group, if you apply yourself.
Your #2 is illustrated well by the thoughts of Robert Pirsig (Art of Motorcycle Maintenance), and our need to switch to a knowledge-based mindset instead of a grade-based mindset.
Maybe because a lot of people don't think they need a computer science degree? I mean, look at the tech scene. The general 'message' running throughout is of people who dropped out of school to focus on their startup or picked themselves up by the bootstraps to learn to code to escape a more mundane career.
There's a general assumption (rightly or wrongly) that programming and general tech skills are self taught, and that may lead to people thinking the idea of a degree for the 'theory' side is useless.
Is this picture right? Eh, maybe, maybe not. But I'd say it's definitely how the tech world is perceived, leading to a lots of kids thinking other degrees are more useful (in case they decide to switch to a different career later in life).
This may also explain why computer science enrollment is much higher in countries like India too. There's still a heavy focus on education in the culture there, and people from the region might see a computer science degree as being as necessary for a tech worker as a law degree is for a lawyer.
Most of the information here is at least 4 years old. Using numbers from 2015, the number of people graduating is above 2004 levels and by all accounts rising rapidly. You can build the graph yourself here: https://ncsesdata.nsf.gov/webcaspar/TableBuilder
I don't think it's surprising that in 2013 there weren't that many CS grads. If assuming 4 year degrees(which is probably more like 5-6) then people who got awarded those degrees would have graduated High School in 2007-9. No one I knew even knew what computer science was in those days. The "computer science" course in high school consisted solely of typing and learning how to use Word.
When I started undergrad in 2011, CS was just another science major and you took whatever you felt like.
By the end of college, every 200 level class had a waitlist and the whole process was micromanaged in order to make sure everyone in the major could at least take one class each term.
For "Question #1: Why, in spite of high wages and cultural/economic importance of tech, has the number of CS majors has been basically flat for 15 years?":
The interesting metric for employees is not wages, but "wages minus cost of living". As long as the costs of living are that high in the Bay Area, the wages with respect to this metric are not that large.
For "Question 2: [...] What motivates males to pursue CS?"
An important factor for me was hacking into the machine more deeply than any human has gone.;-) (just kidding, but it should bring over the mentality). With all the legal hurdles against Reverse Engineering, DCMA, show trials against Phil Zimmermann and Aaron Swartz, hacking has become too dangerous. Also with all the standardization (Web standards, POSIX, WinAPI, ...) instead of "being able to do things on your own" it has become much more boring. Finally I am annoyed by "a new bandwagon every year" (is this a sensible translation of the German "jedes Jahr eine neue Sau durchs Dorf treiben") in particular in the web community instead of thinking long and deeply about the best way to solve a problem.
Not too many comments yet. I'll try. My opinion might be controversial, but IMO 100% accurate.
So let's look at some of the top companies who might hire CS people. Not everything I mention is CS, but the overall company philosophy doubtlessly pervades everything:
----------
Google:
90% (give or take) of their revenue is from advertising, most of which simply annoys people. The more information they can vacuum up about everyone in the world, the happier they are. Most jobs are mundane if not soul-sucking, but if you can't invert a binary tree on a whiteboard you can fuck off.
Interesting projects are constantly being released into beta, but invariably abandoned on a whim a few years later.
Plus they're lobbying for more H-1B to help keep wages down.[1]
----------
Facebook:
work for a sociopath ("They 'trust me', dumb fucks"), who also wants to vacuum up as much information as possible about everyone in the world.
His lobbying group wants more H-1B visas, because, as his buddy says, Americans "don't work hard enough".[2]
----------
Apple:
work for a famously paranoid company. Don't dare tell anyone where you work or what you do.
Neglect many multi-billion dollar product lines for years, because the corporate organizational structure won't allow product development continuity. Be completely oblivious to how douchey this behavior is: "Can't innovate anymore, my ass".
But they do have the "courage" to make minor "improvements" such as dropping a headphone jack and dropping a MagSafe connection.
----------
I could go on and on. It's not just CS, it's all STEM jobs. People who do them don't get much respect from companies or from Americans in general.
What something to do? Go figure out how many in Congress are STEM vs lawyers! I don't need to do that I already know just how skewed the numbers are.
America as a country just doesn't care about STEM much any more. And there's feedback in the system to keep it that way. Why hire US graduates when Indians and Chinese and Russians and countless others are fungible and are available at much lower cost.
Why should American kids be cannon fodder in the global race to the bottom?
Now that I'm learning computer science on my own I realize I enjoy it and have a knack for it. But when I was in school I was intimidated by it. Computer science was presented to me like something that required tons of complex math to do even the simplest thing. It also had a reputation as the smart people thing to do which scares off a lot of people, especially when they are young, not so confident and easy to scare off.
Even the article presents this sort of idea when it suggests that maybe the average student doesn't really have the aptitude for CS. Really? Do you really need to be smarter than average to code or even to code well? I think not.
Now most people here are smarter than average and most know how to code. It does seem like tech attracts smart people, but you don't have to be smart to know how to code. I think we can all admit that learning code doesn't require tons of intelligence. IT just takes a bit of patience and determination. Kinda like learning a language, or learning to dance you don't need a really high IQ to do it, just gotta apply yourself and be patient.
Maybe it does take alot of intelligence to program well. But really most projects don't really require you to write magnificent, perfect and complex code. A lot of it is not that hard.
I think tech just seems to attract smart people because of the stereotype that only smart people can do it. It's a bit of a feedback loop.
Computer Science was never presented for what it is, which is basically a skill you can learn just like carpentry or metal working or the many other skills which require you to apply a set of gained knowledge.
I also wish people would highlight the symbolic logic, and learning processes and steps aspect of programming, because that would get philosophy major types and also hands on trades types more interested in it.
At the same time, I think if I had gone into CS through traditional schooling, I probably would have been terrible at it and probably would have hated it. Learning it on my own by doing means I learn only what I need and get to apply it to projects I want to do and see a purpose in. That is very different from the classroom style learning. Also computer science is very procedural and steps oriented, it's the kind of thing you learn best by doing and not through lectures.
A classroom setting seems like the worst and most difficult way to learn programming, kinda like trying to learn how to dance by sitting in a room listening to someone lecture you about dance steps. The fact that anyone learns it this way is just a testament to how hard some of these students work.
So maybe the issue is that computer science is mislabeled as a science and put along-side career paths like maths, sciences, engineering, when really it would fit much better as a skilled trade and put alongside other trades like plumbing, or heavy equipment repair. Because really it's the same sort of thinking and skills that are being utilized. Computer science is nothing like science or math, it's more like a skilled trade. You learn to plug in code in a specific way in the right steps to create a result. That's like what a plumber does not what a scientist or a mathematician does.
I think you are failing to differentiate between computer science and programming. In my mind computer science is to programming as fluid dynamics is to plumbing. I know next to nothing about computer science, I don't think I've ever opened a computer science textbook or read a paper on computer science but I can program fairly well (at least I think so), in fact, almost all of the neat tricks I know seem to have something to do with statistics... not computer science. In the same way, I know absolutely nothing about fluid dynamics except that it is probably the study of how fluids behave but I can fix my shower and operate a hose and set up an drip line for irrigating crops.
From this point of view you might ask the reverse of the articles question. Why are so many people enrolled in computer science when it seems to be such a specialized subject that might not even be useful to the average programmer?
>I think you are failing to differentiate between computer science and programming. In my mind computer science is to programming as fluid dynamics is to plumbing.
Maybe but Im just following the articles lead in conflating the two - from the article:
>There’s ostensibly more demand for programmers than ever, yet CS degrees haven’t even recovered from their 2004 high.
The article seems to make the assumption (and I think the right one) that lots of people get computer science degrees to become programmers.
That's a good point. My mother never studied computer science or even went to university, but she learned to write basic programs (I'm guessing in uh, BASIC) in high school, and it carried over into her office work, which definitely wasn't theory heavy. She's totally lost with modern PCs and languages, but there's probably still a place for theory-agnostic "pipe-laying" roles like the one she had.
First, CS is hard. Perhaps not from our point of view, us who practically grew up with a computer. But for the majority of people, it is. I notice that the students who tend to do well either have prior experience (if AP CS qualifies as that) or come from a background that emphasizes logic and abstraction (e.g. math, physics, philosophy). However, this rule of thumb fails for one group -- students who are willing to work hard, attend lecture, go to office hours, and are not afraid to ask for help from other students or GSIs. If we tried to persuade students to enroll by depicting CS as simple as making a peanut butter sandwich, I'd think we would be setting them up for disappointment -- somethings are just hard and boring, and you just have to get through it.
Second thing, a lot of college students are not willing to fail or take risks with their GPA. Maybe this has to do college admissions; often times I hear "at least you were smart enough to get into _______". The effect is that students are pressured to maintain an image of academic perfection. And the easiest way to do that is to only take courses you are comfortable with. When I tell my friends to at least take one CS course before graduating, the common response is "it's hard and I don't want to get a D" -- though that is rarely the case based on the public grade distributions.
The point is, CS is hard but doable. But hey, I got some of them to enroll in Data Science.