(First bad example should be (high+low)/2 to calculate midpoint. It overflows because if high and low are huge numbers, then their sum can exceed the largest possible number in a computer. By...
(First bad example should be (high+low)/2 to calculate midpoint. It overflows because if high and low are huge numbers, then their sum can exceed the largest possible number in a computer. By instead subtracting high-low and continuing from there, you guarantee that you'll never have a temporary number larger than high.)
A CS major really focuses on theory, because there's so much background knowledge that can be used in a huge variety of situations. Then when you get to an industry position, a lot of that theory never comes up directly. And you find out that the most important skill as a programmer is teamwork. Which, it's very easy to find CS majors that lack that skill; everyone hates doing group projects for a reason...
I think part of the failing is how late most people start learning CS.
With math, we're practically learning from childhood. All of society requires you to know some math, so we all have to pick it up early. But math is just another abstraction; it's our way of fitting a model to the world. It's a very good abstraction, honed by centuries of thinking. CS is an abstraction that we don't learn until much later, and it's built on a totally different way of thinking. And so if you don't latch on to that early, then everything else is built on top of a faulty foundation.
This strikes me as similar the "we need children to learn about Jesus young so that they can accept his grace once they can make their own decisions" my church used to use when Vacation Bible...
This strikes me as similar the "we need children to learn about Jesus young so that they can accept his grace once they can make their own decisions" my church used to use when Vacation Bible School rolled around. Not saying it's wrong or incorrect, but I consider myself pretty decent with computers and I couldn't cut it as a comp sci major because I didn't have the patience to translate code text into action. I was able to pick up Labview through Robotics, had a blast with Yahoo pipes back in the day, and can work my way through scratch blockly or whatever tool of the week to set up a conditional, but wherever I tried to apply it to a proper language, it was just very not fun anymore, and I had a hard time wrapping my mind around anything more complicated than take this data here and manifest it over there. That may be a personal failing of not sticking it out or not believing hard enough, but I have to imagine that a lot of people are similarly put off.
My experience was many, many years ago, but at the time the only approach to computer programming was through an electrical engineering curriculum. The program was utterly cutthroat, with...
My experience was many, many years ago, but at the time the only approach to computer programming was through an electrical engineering curriculum. The program was utterly cutthroat, with outspoken plans to fail a significant proportion of students, and no academic support. Students were stealing or sabotaging each others' work, cheating on exams, and otherwise acting as you'd expect in a no-trust environment. (Oh, and there was more than a little extra unpleasantness for the rare female students, which may be even worse now.)
Though there was some practical science involved, which I enjoyed, the otherwise narrow focus and strict limitations on courses outside that curriculum (no more than the barest minimum of English, let alone history or foreign languages) really turned me off. Like you, I switched to biochemistry with a math minor, and was much happier with the flexibility of the curriculum and the cadre of other students.
I blame the academic environment, not just the dryness, abstraction, and irregularity of the subject programming languages and theories. What little programming I've learned on my own (certainly not a full-time professional level), I've enjoyed. My circle of friends and acquaintances includes a number of dedicated computer science survivors, and they're not intrinsically horrible people, just a bit late in social skills development because of the artificial intensity of focus they endured for so long.
Holy crap! I'm sorry that so many of you ran into this. My experience was not like this. There were certainly a lot of egos and people had their stupid camps, but from talking to friends in other...
Holy crap! I'm sorry that so many of you ran into this. My experience was not like this. There were certainly a lot of egos and people had their stupid camps, but from talking to friends in other majors, it was the same there. But the professors were mostly reasonable and interesting. The material was anything but dry. I took computer graphics, artificial intelligence, and computer vision classes as an undergrad. The web didn't exist yet, but if it had, I'm sure I would have gotten classes on that as well. There was plenty of theory, too. Some of it was odd or abstract, but I feel it helped me in the long run.
My CS classes were also through a liberal arts program, though they heavily overlapped with the engineering courses. That meant I had to take classes in English and a foreign language as part of my graduating requirements. I also largely enjoyed those classes.
My college has a pretty decent program in place for computer programming, but this rang particularly true. Between the students who do not have enough CS or math experience for the class, the...
Your fellow classmates were mostly the worst mix of people you would never want to hang out with, and the faculty was a coin toss as to whether or not you would get a decent human being for a professor or someone who thought they were God's gift to mankind and had zero time for their plebeian students. It just wasn't what an 18-19 year old wanted to be doing with their life.
My college has a pretty decent program in place for computer programming, but this rang particularly true. Between the students who do not have enough CS or math experience for the class, the experienced ones who are likely to think helping their classmates is beneath them, and the ones who don't put forth enough effort (hopefully because they are burnt out, but more than likely not), the students who are actually new to the particular subject and are doing their best to keep up with the instruction is a tiny portion of any given class.
And this can be especially painful when you have a "practical" class where you will be put in teams to write a big project. The last time that happened to me, I had one person who only submitted empty classes with no code and one genuinely interested partner who just wasn't up to speed. The former was a godsend because he actually submitted code and took my help when he couldn't get it to run. The latter basically forced me to rewrite everything he did for fear of failing the class.
It seems like teaching would be a lot better if, instead of group projects,there were some kind of apprenticeship system. I guess internships sort of do that, but not for introductory teaching.
It seems like teaching would be a lot better if, instead of group projects,there were some kind of apprenticeship system. I guess internships sort of do that, but not for introductory teaching.
There's a lot of analysis and speculation in this post and in the Hackernews thread, and it's all pretty interesting. One thing I didn't spot was surveying of incoming college students and also...
There's a lot of analysis and speculation in this post and in the Hackernews thread, and it's all pretty interesting. One thing I didn't spot was surveying of incoming college students and also active college students to ask them why they're picking this or that major or actively completely this or that major.
Even being more specific and asking "Why aren't you pursuing Computer Science?" would be revealing.
In my particular case Computer Science (CS) was a complete blind spot for me. I went to an Australian academic selective school which selects for the brightest (or best test-takers) in the state, and within that school environment it seemed that almost no one was interested in pursuing CS (circa 2009-2010).
Unsurprisingly, lots of people wanted to be doctors, more than could actually be accepted after high school. The entry bar is a ~99 ATAR and my year level's median ATAR was ~95. Plenty wanted to be lawyers, which also not surprising. I'd say ~60% went into Commerce or Finance, as the vast majority of my year would clear the entry bar and it was seen as a gateway to good jobs.
I didn't know one single person going on to be a software engineer, though there must have been a handful. Given career outcomes for good software engineers though, I think far far more of my year should have been heading in that direction. Like 10-20%.
Hindsight is 20/20, but if someone had come and spoke to our year and told us that it was possible to complete a CS degree by 2013, join Google Sydney, and by 2020 have earned over $1,000,000AUD in salary and be sitting on over $1,000,000AUD in Google RSUs* we would have at least tried programming for the first time.
Nothing like that happened though, and I realised I loved programming only in ~2015.
* my napkin math on ballpark salary and RSU compensation numbers.
I'm currently a 3rd year Computer Science student, so I'd like to share what anecdotal insights I can. 1. Computer Science is hard. From my experience, this hasn't been true, at least not nearly...
I'm currently a 3rd year Computer Science student, so I'd like to share what anecdotal insights I can.
1. Computer Science is hard.
From my experience, this hasn't been true, at least not nearly to the extent other subjects are hard. I have friends whose majors are bioengineering, music, math, religion, and all other types of sciences and liberal arts majors, and I can tell you that they all have a much more difficult course-/workloads than I do. I have spoken to my close friends in computer science, and they agree: comp sci is just easier than other programs at my university. This could just be indicative of the difficulty of the workload and not that of the material itself, but the way I see it, comp sci does not have the memorization/study requirement of the sciences, it does not have any long hours spent on lab work, and does not have the grueling hours and hours of classes a practices required for a music degree. There is little to no reading of textbooks, as everything can be found and referenced online. I have very few exams, instead having a large number of team and individual projects, most of which take only a few days to complete. Overall, although there might be the perception generally that CS is hard, that has not been my perception.
3. People aren’t so market-driven when they’re considering majors.
I think this is the point I most agree with. Pretty much no one I know considered earning potential at all when choosing a major. All of my friends--including me--chose their majors because it's what they're passionate about: what they wanted to do. I think the most glaring failing in the author's assumptions comes from the statement, "I think that people who go to college decide on what to major in significantly based on two factors: earning potential and whether a field is seen as high-status." I have never found that to be true, either in high school or now when speaking to my peers about their choices. When I chose CS, the fact that the field was high-earning just seemed like a good bonus to me, and was never an actual motivation for me to choose CS as a career.
5. Anti-women culture.
This is certainly a factor. There are very few women in my current CS classes, probably only 15-25% at a quick estimate. However, I have not noticed any discrimination or a hostile learning environment for these women, but then again, I am not a woman, so take my experience in this area with a grain of salt.
6. Reactionary faculty.
I have never seen any of the faculty at my school see CS as a "lovely, pure, scholarly field." I have never felt any degree of gatekeeping in CS by the faculty during my time at university. On the contrary, there has always been a great balance between theory and practical application in my experience.
7. Anti-nerd culture.
Anti-nerd culture is certainly a thing of the past. Things such as Star Wars, comic books, superheroes, and video games are now part of the cultural mainstream. The idea of "nerds" in and of itself is truly a thing of the past, something only kept alive by the likes of The Big Bang Theory, and people who knew nerds when they were young but have no idea of the true realities of the current culture of the youth today.
10. Psychological burn from the dotcom bubble.
I didn't even know what the dotcom bubble was until I learned about it in a Company Man video about AOL that I watched a week ago, so I certainly don't think that's a factor. I've never heard anyone talking about the dotcom bubble in my search for an internship, nor have I heard any discussion about it when discussing the CS industry in other contexts.
Responding to some other comments I've seen here, I can say that my fellow CS students are not competitive in the slightest, and are never reluctant to help out fellow students. Although we aren't the closest-knit of communities on campus (I am always amazed at how close all the music majors are), we're friendly enough to each other, and no spirit of competition exists at all. Overall, I think the CS environment has changed for the better quite recently, perhaps more recently than we have data for.
In terms of why I think that there are so few CS majors, I would say that it has to do with the name: Computer Science. Most people don't live their lives online, and only use computers briefly as a tool. They don't customize their workflows, they don't even know what Linux is, and they still have the Windows Store pinned to their taskbar. They don't use their PC all that often, so the idea of working with computers as a career causes most people to balk at the idea. While, fundamentally, CS is about the theory and software development and all that, it requires a distinct interest in Computers as a whole. I think that most people don't want to live their lives at a computer, and CS is the only major where that is guaranteed.
I started out in music and moved over to CS after a few years. As a music major I had significantly more work (though I also wasn't as good at it as I am at CS, so maybe it just felt harder?). But...
I have friends whose majors are bioengineering, music, math, religion, and all other types of sciences and liberal arts majors, and I can tell you that they all have a much more difficult course-/workloads than I do.
I started out in music and moved over to CS after a few years. As a music major I had significantly more work (though I also wasn't as good at it as I am at CS, so maybe it just felt harder?). But the thing that really got me was how subjective the grading was. You could go an entire semester without knowing if you were passing or failing a given class. I had to do a jury where I played my instrument solo for a panel of judges at the end of each semester. I worked individually with a teacher who guided me and helped me learn my pieces and fix various problems along the way. There were no assignments or grades given during any of this. Then I went into my jury, played my pieces, and got a grade based solely on that 1 performance. When I got comments telling me that, basically, my interpretation of the piece sucked, it was too late to do anything about it.
Was that something my teacher should have been telling me about? I mean, he gave me lots of practical advice and guided me in lots of different ways, so it wasn't like he did nothing. But how can he know what the jury is going to think of my performance? And realistically, as a performing musician, an audience may either love or hate your performance, so in some ways it's realistic. But who's to say the jury's judgement was even valid? They didn't give me any practical advice on why it sucked or in what way it sucked, so even after nearly failing the jury, I still had no idea how to improve. I would not want to be put into such a situation again. It's just brutal.
At least in CS, they can give your program some inputs and see if the outputs are correct. And you can try things and if you miss, fix it and try again. It definitely feels easier to me.
Same thing for me in architecture. You'd get a semester of "yeah this is good" and then come demo day the guest architect wouldn't like your work or your teacher was misleading you about your...
But the thing that really got me was how subjective the grading was. You could go an entire semester without knowing if you were passing or failing a given class.
Same thing for me in architecture. You'd get a semester of "yeah this is good" and then come demo day the guest architect wouldn't like your work or your teacher was misleading you about your work's quality and you'd get a subpar mark.
I pulled many all-nighters in architecture, one time two in a row. During the degree I had long periods of being exhausted.
I worked my arse off in a subsequent CS degree, but there were no all nighters and I was basically never surprised at my marks. Having objectivity about competency made the completing the course feel so much easier.
I came by Computer Science the other way around. I skipped the classes by majoring in History and do the work expected of someone who had majored in it (and out-performed someone who majored in it...
I came by Computer Science the other way around. I skipped the classes by majoring in History and do the work expected of someone who had majored in it (and out-performed someone who majored in it to get my job; more on that later). So I can't speak as much to why fewer people major in computer science, I can relay some of the other side of the coin which probably impacts in subtle ways from how the degree is taught (how coursework is structured, what is emphasized, the way the teachers generally approach the subject), and who is primed by the university as good candidates for the coursework.
Simply put, the perception of the industry impacts in ways that much of the student body might not see for themselves, especially in the subtle grooming process that happens at high schools and colleges to nudge people into or out of choosing to major in the field. I saw this when I worked with advisors to pick new coursework as a last resort before transferring away from my college. They would try to nudge me for or against certain courses and teachers based on the feedback I gave about what I was looking for and what my background was. It would be hard to believe that wasn't partially at play here.
It's also ridiculously inexpensive to develop those skills, with the skills most rewarded being an independent mindset (personality) and demonstrated passion (portfolio), and far too many companies and universities charging way too much for that expertise (which comes with a lot of asterisks in the first place). A lot of programs around the US have a ton of variability to them, so much that a lot of employers still need to ask very precise and tough whiteboard questions and conduct hours long interviews just to get a sense of a candidate. My interview with my break-in job was on the short side at just three hours in a day. And all of my skills I learned informally through looking shit up and needing an automated approach.
Trends like the sort this author is talking about is going to be complicated, with several factors. You could be going out and asking people like me, who clearly had enough of an affinity for the industry to make a living in it but didn't see any value at all in the coursework, why I didn't choose CS. As a counterpoint to what you're proposing, when I was choosing a major I had a lot of friends who knew linux and I knew pretty well what Computer Science meant and would mean for me. For why I passed, though, I would point to few different things:
A lot of kids I knew in high school who were majoring in Computer Science were assholes. Some were my friends because we were in high school and I needed friends, but I wasn't kidding anyone. They were almost all assholes. I'm not going to want to take courses with people I don't like, and I hadn't met many people who said they were majoring in Computer Science who were as hopelessly extroverted as I was (am).
Advisors never brought it up. On aptitude tests I would score high in a bunch of technical and professional fields, as well as service oriented positions. I was open to suggestions and tests weren't telling me a damn thing. Neither were advisors, which isn't their fault; they're trying to guide me to what I wanted to do, and I was way too young to have any idea of it.
Computer Science felt like a choice-limiting option. Just like I got done mentioning, I didn't know what I wanted to do, but I surely didn't want to prematurely narrow my options to a field I didn't really know I would like. The risk, hating my work, didn't match the cost ($$$ and years) or the reward (liking the job).
I liked the complexity and abstraction involved in History first. I took a year off from school after I graduated high school and just chilled for a bit, then when I went back I started off with general prerequisites. That led me to History, English, Biology, and the regular suite of freshmen starter courses. None of them even hinted anything about what computer science would be, and I was much more extroverted and politically inclined than the typical student. Why would an advisor suggest for me to take Computer Science when I'm already so obviously interested in philosophy, history, politics and linguistics? (Note: anyone who has actually taken Computer Science would probably see a lot of overlap, but we're talking about advisors who are not industry experts here.)
As for your point about women, this is an industry that rewards assertiveness, and a lot of women from a lot of cultures are not primed to be good at being assertive. I find that I have to stand up for my female colleagues some time to make sure they can be heard (because one in particular has a ton of relevant experience in the sort of maturity I'm trying to build, and I sure as hell want her to flaunt it). The people who look assertive, who seem confident, those are the people who look successful and get rewarded with more opportunity. You have to be a little bit of a self-starter, spinning up your own projects, because the coursework alone doesn't say much about your interests, or your particular lived knowledge base. There's too much variety between programs.
So back to why I beat a CS major for my position: two big reasons. (1) I had a huge background in conflict resolution, volunteer management, and self-spun projects. (2) I knew python's skeleton pretty well and could make it obvious in a technical interview dedicated to Python. The CS major just got out of college and had most of his experience in Java (which while helpful, wasn't the more relevant skillset to what the development effort would be dedicated to). You could trust the guy to spin up in Python eventually, but I already knew it and had demonstrated people skills all over my background.
As for why a lower proportion of people are taking CS than before, and yet I propose that a lot of people who majored in CS in the aughts did so not because they wanted to be full time...
As for why a lower proportion of people are taking CS than before, and yet
based on anecdotal evidence, it seems like there are many more people taking CS intro classes than ever before
I propose that a lot of people who majored in CS in the aughts did so not because they wanted to be full time programmers, but that they wanted to use programming skills to supplement another STEM field. At the university I went to most STEM programs included requirements for software engineering or computer science courses.
Today if you want to be a mechanical engineer you'll probably graduate with some experience in MATLAB and Python, having used one or both to program a raspberry pi or drive some servos. 15 years ago that may not have been so universal. But the pragmatic students would have looked at the job market and realized that being able to report some level of programming proficiency would earn them a fair bit more.
To prove or disprove this I'd like to see the numbers on people dual-majoring in CS over time and people minoring in CS over time. I would suppose the number of CS minors has increased and CS dual majors decreased.
(First bad example should be
(high+low)/2
to calculate midpoint. It overflows because if high and low are huge numbers, then their sum can exceed the largest possible number in a computer. By instead subtractinghigh-low
and continuing from there, you guarantee that you'll never have a temporary number larger thanhigh
.)A CS major really focuses on theory, because there's so much background knowledge that can be used in a huge variety of situations. Then when you get to an industry position, a lot of that theory never comes up directly. And you find out that the most important skill as a programmer is teamwork. Which, it's very easy to find CS majors that lack that skill; everyone hates doing group projects for a reason...
I think part of the failing is how late most people start learning CS.
With math, we're practically learning from childhood. All of society requires you to know some math, so we all have to pick it up early. But math is just another abstraction; it's our way of fitting a model to the world. It's a very good abstraction, honed by centuries of thinking. CS is an abstraction that we don't learn until much later, and it's built on a totally different way of thinking. And so if you don't latch on to that early, then everything else is built on top of a faulty foundation.
This strikes me as similar the "we need children to learn about Jesus young so that they can accept his grace once they can make their own decisions" my church used to use when Vacation Bible School rolled around. Not saying it's wrong or incorrect, but I consider myself pretty decent with computers and I couldn't cut it as a comp sci major because I didn't have the patience to translate code text into action. I was able to pick up Labview through Robotics, had a blast with Yahoo pipes back in the day, and can work my way through scratch blockly or whatever tool of the week to set up a conditional, but wherever I tried to apply it to a proper language, it was just very not fun anymore, and I had a hard time wrapping my mind around anything more complicated than take this data here and manifest it over there. That may be a personal failing of not sticking it out or not believing hard enough, but I have to imagine that a lot of people are similarly put off.
My experience was many, many years ago, but at the time the only approach to computer programming was through an electrical engineering curriculum. The program was utterly cutthroat, with outspoken plans to fail a significant proportion of students, and no academic support. Students were stealing or sabotaging each others' work, cheating on exams, and otherwise acting as you'd expect in a no-trust environment. (Oh, and there was more than a little extra unpleasantness for the rare female students, which may be even worse now.)
Though there was some practical science involved, which I enjoyed, the otherwise narrow focus and strict limitations on courses outside that curriculum (no more than the barest minimum of English, let alone history or foreign languages) really turned me off. Like you, I switched to biochemistry with a math minor, and was much happier with the flexibility of the curriculum and the cadre of other students.
I blame the academic environment, not just the dryness, abstraction, and irregularity of the subject programming languages and theories. What little programming I've learned on my own (certainly not a full-time professional level), I've enjoyed. My circle of friends and acquaintances includes a number of dedicated computer science survivors, and they're not intrinsically horrible people, just a bit late in social skills development because of the artificial intensity of focus they endured for so long.
Holy crap! I'm sorry that so many of you ran into this. My experience was not like this. There were certainly a lot of egos and people had their stupid camps, but from talking to friends in other majors, it was the same there. But the professors were mostly reasonable and interesting. The material was anything but dry. I took computer graphics, artificial intelligence, and computer vision classes as an undergrad. The web didn't exist yet, but if it had, I'm sure I would have gotten classes on that as well. There was plenty of theory, too. Some of it was odd or abstract, but I feel it helped me in the long run.
My CS classes were also through a liberal arts program, though they heavily overlapped with the engineering courses. That meant I had to take classes in English and a foreign language as part of my graduating requirements. I also largely enjoyed those classes.
My college has a pretty decent program in place for computer programming, but this rang particularly true. Between the students who do not have enough CS or math experience for the class, the experienced ones who are likely to think helping their classmates is beneath them, and the ones who don't put forth enough effort (hopefully because they are burnt out, but more than likely not), the students who are actually new to the particular subject and are doing their best to keep up with the instruction is a tiny portion of any given class.
And this can be especially painful when you have a "practical" class where you will be put in teams to write a big project. The last time that happened to me, I had one person who only submitted empty classes with no code and one genuinely interested partner who just wasn't up to speed. The former was a godsend because he actually submitted code and took my help when he couldn't get it to run. The latter basically forced me to rewrite everything he did for fear of failing the class.
It seems like teaching would be a lot better if, instead of group projects,there were some kind of apprenticeship system. I guess internships sort of do that, but not for introductory teaching.
There's a lot of analysis and speculation in this post and in the Hackernews thread, and it's all pretty interesting. One thing I didn't spot was surveying of incoming college students and also active college students to ask them why they're picking this or that major or actively completely this or that major.
Even being more specific and asking "Why aren't you pursuing Computer Science?" would be revealing.
In my particular case Computer Science (CS) was a complete blind spot for me. I went to an Australian academic selective school which selects for the brightest (or best test-takers) in the state, and within that school environment it seemed that almost no one was interested in pursuing CS (circa 2009-2010).
Unsurprisingly, lots of people wanted to be doctors, more than could actually be accepted after high school. The entry bar is a ~99 ATAR and my year level's median ATAR was ~95. Plenty wanted to be lawyers, which also not surprising. I'd say ~60% went into Commerce or Finance, as the vast majority of my year would clear the entry bar and it was seen as a gateway to good jobs.
I didn't know one single person going on to be a software engineer, though there must have been a handful. Given career outcomes for good software engineers though, I think far far more of my year should have been heading in that direction. Like 10-20%.
Hindsight is 20/20, but if someone had come and spoke to our year and told us that it was possible to complete a CS degree by 2013, join Google Sydney, and by 2020 have earned over $1,000,000AUD in salary and be sitting on over $1,000,000AUD in Google RSUs* we would have at least tried programming for the first time.
Nothing like that happened though, and I realised I loved programming only in ~2015.
* my napkin math on ballpark salary and RSU compensation numbers.
I'm currently a 3rd year Computer Science student, so I'd like to share what anecdotal insights I can.
1. Computer Science is hard.
From my experience, this hasn't been true, at least not nearly to the extent other subjects are hard. I have friends whose majors are bioengineering, music, math, religion, and all other types of sciences and liberal arts majors, and I can tell you that they all have a much more difficult course-/workloads than I do. I have spoken to my close friends in computer science, and they agree: comp sci is just easier than other programs at my university. This could just be indicative of the difficulty of the workload and not that of the material itself, but the way I see it, comp sci does not have the memorization/study requirement of the sciences, it does not have any long hours spent on lab work, and does not have the grueling hours and hours of classes a practices required for a music degree. There is little to no reading of textbooks, as everything can be found and referenced online. I have very few exams, instead having a large number of team and individual projects, most of which take only a few days to complete. Overall, although there might be the perception generally that CS is hard, that has not been my perception.
3. People aren’t so market-driven when they’re considering majors.
I think this is the point I most agree with. Pretty much no one I know considered earning potential at all when choosing a major. All of my friends--including me--chose their majors because it's what they're passionate about: what they wanted to do. I think the most glaring failing in the author's assumptions comes from the statement, "I think that people who go to college decide on what to major in significantly based on two factors: earning potential and whether a field is seen as high-status." I have never found that to be true, either in high school or now when speaking to my peers about their choices. When I chose CS, the fact that the field was high-earning just seemed like a good bonus to me, and was never an actual motivation for me to choose CS as a career.
5. Anti-women culture.
This is certainly a factor. There are very few women in my current CS classes, probably only 15-25% at a quick estimate. However, I have not noticed any discrimination or a hostile learning environment for these women, but then again, I am not a woman, so take my experience in this area with a grain of salt.
6. Reactionary faculty.
I have never seen any of the faculty at my school see CS as a "lovely, pure, scholarly field." I have never felt any degree of gatekeeping in CS by the faculty during my time at university. On the contrary, there has always been a great balance between theory and practical application in my experience.
7. Anti-nerd culture.
Anti-nerd culture is certainly a thing of the past. Things such as Star Wars, comic books, superheroes, and video games are now part of the cultural mainstream. The idea of "nerds" in and of itself is truly a thing of the past, something only kept alive by the likes of The Big Bang Theory, and people who knew nerds when they were young but have no idea of the true realities of the current culture of the youth today.
10. Psychological burn from the dotcom bubble.
I didn't even know what the dotcom bubble was until I learned about it in a Company Man video about AOL that I watched a week ago, so I certainly don't think that's a factor. I've never heard anyone talking about the dotcom bubble in my search for an internship, nor have I heard any discussion about it when discussing the CS industry in other contexts.
Responding to some other comments I've seen here, I can say that my fellow CS students are not competitive in the slightest, and are never reluctant to help out fellow students. Although we aren't the closest-knit of communities on campus (I am always amazed at how close all the music majors are), we're friendly enough to each other, and no spirit of competition exists at all. Overall, I think the CS environment has changed for the better quite recently, perhaps more recently than we have data for.
In terms of why I think that there are so few CS majors, I would say that it has to do with the name: Computer Science. Most people don't live their lives online, and only use computers briefly as a tool. They don't customize their workflows, they don't even know what Linux is, and they still have the Windows Store pinned to their taskbar. They don't use their PC all that often, so the idea of working with computers as a career causes most people to balk at the idea. While, fundamentally, CS is about the theory and software development and all that, it requires a distinct interest in Computers as a whole. I think that most people don't want to live their lives at a computer, and CS is the only major where that is guaranteed.
I started out in music and moved over to CS after a few years. As a music major I had significantly more work (though I also wasn't as good at it as I am at CS, so maybe it just felt harder?). But the thing that really got me was how subjective the grading was. You could go an entire semester without knowing if you were passing or failing a given class. I had to do a jury where I played my instrument solo for a panel of judges at the end of each semester. I worked individually with a teacher who guided me and helped me learn my pieces and fix various problems along the way. There were no assignments or grades given during any of this. Then I went into my jury, played my pieces, and got a grade based solely on that 1 performance. When I got comments telling me that, basically, my interpretation of the piece sucked, it was too late to do anything about it.
Was that something my teacher should have been telling me about? I mean, he gave me lots of practical advice and guided me in lots of different ways, so it wasn't like he did nothing. But how can he know what the jury is going to think of my performance? And realistically, as a performing musician, an audience may either love or hate your performance, so in some ways it's realistic. But who's to say the jury's judgement was even valid? They didn't give me any practical advice on why it sucked or in what way it sucked, so even after nearly failing the jury, I still had no idea how to improve. I would not want to be put into such a situation again. It's just brutal.
At least in CS, they can give your program some inputs and see if the outputs are correct. And you can try things and if you miss, fix it and try again. It definitely feels easier to me.
Same thing for me in architecture. You'd get a semester of "yeah this is good" and then come demo day the guest architect wouldn't like your work or your teacher was misleading you about your work's quality and you'd get a subpar mark.
I pulled many all-nighters in architecture, one time two in a row. During the degree I had long periods of being exhausted.
I worked my arse off in a subsequent CS degree, but there were no all nighters and I was basically never surprised at my marks. Having objectivity about competency made the completing the course feel so much easier.
I came by Computer Science the other way around. I skipped the classes by majoring in History and do the work expected of someone who had majored in it (and out-performed someone who majored in it to get my job; more on that later). So I can't speak as much to why fewer people major in computer science, I can relay some of the other side of the coin which probably impacts in subtle ways from how the degree is taught (how coursework is structured, what is emphasized, the way the teachers generally approach the subject), and who is primed by the university as good candidates for the coursework.
Simply put, the perception of the industry impacts in ways that much of the student body might not see for themselves, especially in the subtle grooming process that happens at high schools and colleges to nudge people into or out of choosing to major in the field. I saw this when I worked with advisors to pick new coursework as a last resort before transferring away from my college. They would try to nudge me for or against certain courses and teachers based on the feedback I gave about what I was looking for and what my background was. It would be hard to believe that wasn't partially at play here.
It's also ridiculously inexpensive to develop those skills, with the skills most rewarded being an independent mindset (personality) and demonstrated passion (portfolio), and far too many companies and universities charging way too much for that expertise (which comes with a lot of asterisks in the first place). A lot of programs around the US have a ton of variability to them, so much that a lot of employers still need to ask very precise and tough whiteboard questions and conduct hours long interviews just to get a sense of a candidate. My interview with my break-in job was on the short side at just three hours in a day. And all of my skills I learned informally through looking shit up and needing an automated approach.
Trends like the sort this author is talking about is going to be complicated, with several factors. You could be going out and asking people like me, who clearly had enough of an affinity for the industry to make a living in it but didn't see any value at all in the coursework, why I didn't choose CS. As a counterpoint to what you're proposing, when I was choosing a major I had a lot of friends who knew linux and I knew pretty well what Computer Science meant and would mean for me. For why I passed, though, I would point to few different things:
As for your point about women, this is an industry that rewards assertiveness, and a lot of women from a lot of cultures are not primed to be good at being assertive. I find that I have to stand up for my female colleagues some time to make sure they can be heard (because one in particular has a ton of relevant experience in the sort of maturity I'm trying to build, and I sure as hell want her to flaunt it). The people who look assertive, who seem confident, those are the people who look successful and get rewarded with more opportunity. You have to be a little bit of a self-starter, spinning up your own projects, because the coursework alone doesn't say much about your interests, or your particular lived knowledge base. There's too much variety between programs.
So back to why I beat a CS major for my position: two big reasons. (1) I had a huge background in conflict resolution, volunteer management, and self-spun projects. (2) I knew python's skeleton pretty well and could make it obvious in a technical interview dedicated to Python. The CS major just got out of college and had most of his experience in Java (which while helpful, wasn't the more relevant skillset to what the development effort would be dedicated to). You could trust the guy to spin up in Python eventually, but I already knew it and had demonstrated people skills all over my background.
As for why a lower proportion of people are taking CS than before, and yet
I propose that a lot of people who majored in CS in the aughts did so not because they wanted to be full time programmers, but that they wanted to use programming skills to supplement another STEM field. At the university I went to most STEM programs included requirements for software engineering or computer science courses.
Today if you want to be a mechanical engineer you'll probably graduate with some experience in MATLAB and Python, having used one or both to program a raspberry pi or drive some servos. 15 years ago that may not have been so universal. But the pragmatic students would have looked at the job market and realized that being able to report some level of programming proficiency would earn them a fair bit more.
To prove or disprove this I'd like to see the numbers on people dual-majoring in CS over time and people minoring in CS over time. I would suppose the number of CS minors has increased and CS dual majors decreased.