Give a man a computer program to frustrate him for a day; teach a man computer programming, and frustrate him for a lifetime.
– ancient proverb
In 2005, about 54,000 people in the US earned bachelor’s degrees in computer science. That figure was lower every year afterwards until 2014, when 55,000 people majored in CS. I’m surprised not only that the figure is low; the greater shock is that was flat for a decade. Given high wages for developers and the cultural centrality of Silicon Valley, shouldn’t we expect far more people to have majored in computer science?
This is even more surprising when we consider that 1.90 million people graduated with bachelor’s degrees in 2015, which is 31% higher than the 1.44 million graduates in 2005. (Data is via the National Center for Education Statistics, Digest of Education Statistics) That means that the share of people majoring in computer science has decreased, from 3.76% of the all majors in 2005 to 3.14% of all majors in 2015. Meanwhile, other STEM majors have grown over the same period: “engineering” plus “engineering technologies” went from 79,544 to 115,096, a gain of 45%; “mathematics and statistics” from 14,351 to 21,853, a gain of 52%; “physical sciences and science technologies” from 19,104 to 30,038, a gain of 57%; “biological and biomedical sciences” from 65,915 to 109,896, a gain of 67%. “Computer sciences and information technologies?” From 54,111 in 2005 to 59,581 in 2015, a paltry 10.1%.
If you’d like a handy chart, I graphed the growth here, with number of graduates normalized to 2005.
(Addendum: Several people have pointed out that 2005 was an idiosyncratic year, and that I should not rebase figures from that date. I graphed it from this point because in the NCES dataset I’ve been using breaks out the data by one-year intervals only since 2005. Scroll to the end of the post to see data on graduates from 1975, which shows clearly that 2005 was a peak for graduates. A more full discussion would involve the impact of the dotcom bubble; see below.)
I consider this a puzzle because 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. Now let’s establish whether majoring in CS delivers either.
Are wages high? The answer is yes. The Bureau of Labor Statistics has data on software developers. The latest data we have is from May 2016, in which the median annual pay for software developers is $106,000; pretty good, considering that the median annual pay for all occupations is $37,000. But what about for the lowest decile, which we might consider a proxy for the pay of entry level jobs that fresh grads can expect to claim? That figure is $64,650, twice the median annual pay for all occupations. We can examine data from a few years back as well. In 2010, median pay for software developers was $87,000; pay at the lowest decile was $54,000. Neither were low, now both have grown.
Now we can consider whether someone majoring in computer science can expect to join a high-status industry. That’s more difficult to prove rigorously, but I submit the answer is yes. I went to high school during the late-aughts, when the financial crisis crushed some of Wall Street’s allure, and Silicon Valley seemed glamorous even then. Google IPO’d in 2004, people my age all wanted to buy iPhones and work for Steve Jobs, and we were all signing up for Facebook. People talked about how cool it would be to intern at these places. One may not expect to end up at Google after college, but that was a great goal to aspire to. Industries like plastics or poultry or trucking don’t all have such glittering companies that attract.
I tweeted out this puzzle and received a variety of responses. Most of them failed to satisfy. Now I want to run through some common solutions offered to this puzzle along with some rough and dirty argument on what I find lacking about them.
Note: All data comes from the Digest of Education Statistics, Department of Education.
***
1. Computer science is hard. This is a valid observation, but it doesn’t explain behaviors on the margin. CS is a difficult subject, but it’s not the only hard major. People who proclaim that CS is so tough have to explain why so many more people have been majoring in math, physics, and engineering; remember, all three majors have seen growth of over 40% between 2005 and 2015, and they’re no cakewalks either. It’s also not obvious that their employment prospects are necessarily more rosy than the one for CS majors (at least for the median student who doesn’t go to a hedge fund). Isn’t it reasonable to expect that people with an aptitude for math, physics, and engineering will also have an aptitude for CS? If so, why is it the only field with low growth?
On the margin, we should expect high wages to attract more people to a discipline, even if it’s hard. Do all the people who are okay with toiling for med school, law school, or PhD programs find the CS bachelor’s degree to be unthinkably daunting?
2. You don’t need a CS degree to be a developer. This is another valid statement that I don’t think explains behaviors on the margin. Yes, I know plenty of developers who didn’t graduate from college or major in CS. Many who didn’t go to school were able to learn on their own, helped along by the varieties of MOOCs and boot camps designed to get them into industry.
It might be true that being a software developer is the field that least requires a bachelor’s degree with its associated major. Still: Shouldn’t we expect some correlation between study and employment here? That is, shouldn’t having a CS major be considered a helpful path into the industry? It seems to me that most tech recruiters look on CS majors with favor.
Although there are many ways to become a developer, I’d find it surprising if majoring in CS is a perfectly useless way to enter the profession, and so people shun it in favor of other majors.
3. People aren’t so market-driven when they’re considering majors. I was a philosophy major, and no I didn’t select on the basis of its dazzling career prospects. Aren’t most people like me when it comes to selecting majors?
Maybe. It’s hard to tell. Evidence for includes a study published in the Journal of Human Capital, which suggests that people would reconsider their majors if they actually knew what they could earn in their associated industries. That is, they didn’t think hard enough about earning potentials when they were committing to their majors.
We see some evidence against this idea if we look at the tables I’ve been referencing. Two of the majors with the highest rates of growth have been healthcare and law enforcement. The number of people graduating with bachelor’s degrees in “health professions and related programs” more than doubled, from 80,865 in 2005 to 216,228 in 2015. We can find another doubling in “homeland security, law enforcement, and firefighting,” from 30,723 in 2005 to 62,723 in 2015. Haven’t these rents-heavy and government-driven sectors been pretty big growth sectors in the last few years? If so, we can see that people have been responsive to market-driven demand for jobs.
(Sidenote: if we consider the pipeline of talent to be reflective of expectations of the economy, and if we consider changes in the number of bachelor’s degrees to be a good measure of this pipeline, then we see more evidence for Alex Tabarrok’s view that we’re becoming a healthcare-warfare state rather than an innovation nation.)
In the meantime, I’m happy to point out that the number of people majoring in philosophy has slightly declined between 2005 to 2015, from 11,584 to 11,072. It’s another sign that people are somewhat responsive to labor market demands. My view is that all the people who are smart enough to excel as a philosophy major are also smart enough not to actually pursue that major. (I can’t claim to be so original here—Wittgenstein said he saw more philosophy in aerospace engineering than he did in philosophy.)
4. Immigrants are taking all the jobs. I submit there are two ways to see that immigrants aren’t meeting all the marginal demand. First, most immigrants who come to the US to work are on the H1B visa; and that number has been capped at 65,000 every year since 2004. (There are other visa programs available, but the H1B is the main one, and it doesn’t all go to software engineers.) Second, rising wages should be prima facie evidence that there’s a shortage of labor. If immigrants have flooded the market, then we should see that wages have declined; that hasn’t been the case.
To say that immigrants are discouraging people from majoring in CS requires arguing that students are acutely aware of the level of the H1B cap, expect that it will be lifted at some point in the near future, and therefore find it too risky to enter this field because they think they’ll be competing with foreign workers on home soil. Maybe. But I don’t think that students are so acutely sensitive to this issue.
5. Anti-women culture. Tech companies and CS departments have the reputation of being unfriendly to women. The NCES tables I’m looking at don’t give a breakdown of majors by gender, so we can’t tell if the shares of men and women majoring in CS has differed significantly from previous decades. One thing to note is that the growth of people earning CS majors has been far below the growth of either gender earning bachelor’s degrees.
More women graduate from college than men. (Data referenced in this paragraph comes from this table.) In 1980, each gender saw about 465,000 new grads. Since then, many more women have earned degrees than men; in 2015, 812,669 men earned bachelor’s degrees, while 1,082,265 women did. But since 2005, the growth rate for women earning bachelor’s has not significantly outpaced that of men. 32.5% more men earned bachelor’s degrees in the previous decade, a slightly higher rate than 31.5% for women. It remains significant that women are keeping that growth rate for over a higher base, but it may be that it’s no longer the case that their growth can be much higher than that of men in the future.
What’s important is that the growth rate of 30% for both genders is below that of 10% for CS majors over this time period. We can’t pick out the breakdown of genders from this dataset, but I’d welcome suggestions on how to find those figures in the comments below.
6. Reactionary faculty. The market for developers isn’t constrained by some guild like the American Medical Association, which caps the number of people who graduate from med schools in the name of quality control.
CS doesn’t have the same kind of guild masters, unless we want to count faculty to be serving this function on their own. It could be that people serving on computer science faculties are contemptuous of people who want high pay and the tech life; instead they’re looking for the theory-obsessed undergraduate who are as interested in say Turing and von Neumann as much as they are. So in response to a huge new demand for CS majors, they significantly raise standards, allowing no more than say 500 people to graduate if a decade ago only 450 did. Rather than cater to the demands of the market, they raise standards so that they’re failing an even higher proportion of students to push them out of their lovely, pure, scholarly field.
I have no firsthand experience. To determine this as a causal explanation, we would have to look into how many more students have been graduating from individual departments relative to the number of people who were weeded out. The latter is difficult to determine, but it may be possible to track if particular departments have raised standards over the last few decades.
7. Anti-nerd culture. Nerds blow, right? Yeah, no doubt. But aren’t the departments of math, physics, and engineering also filled with nerds, who can expect just as much social derision on the basis of their choice? That these fields have seen high growth when CS has not is evidence that people aren’t avoiding all the uncool majors, only the CS one.
8. Skill mismatch and lack of training from startups. This is related but slightly different to my accusation that CS faculty are reactionaries. Perhaps all the professors are too theoretical and would never make it as coders at tech companies. Based on anecdotal evidence, I’ve seen that most startups are hesitant to hire fresh grads, instead they want people to have had some training outside of a college. One also hears that the 10X coders aren’t that eager to train new talent; there isn’t enough incentive for them to.
This is likely a factor, but I don’t think it goes a great length in explaining why so few people commit to majoring in the field. Students see peers getting internships at big tech companies, and they don’t necessarily know that their training is too theoretical. I submit that this realization should not deter; even if students do realize this, they might also know they can patch up their skills by attending a boot camp.
9. Quality gradient. Perhaps students who graduate from one of the top 50 CS departments have an easy time finding a job, but those who graduate from outside that club have a harder time. But this is another one of those explanations that attributes a greater degree of sophistication than the average freshman can be observed to possess. Do students have an acute sense of the quality gradient between the best and the rest? Why is the marginal student not drawn to study CS at a top school, and why would a top student not want to study CS at a non-top school, especially if he or she can find boot camps and MOOCs to bolster learning? I would not glance at what students do and immediately derive that they’re hyperrational creatures.
10. Psychological burn from the dotcom bubble. Have people been deeply scarred by the big tech bubble? It bursted in 2001; if CS majors who went through it experienced a long period of difficulty, then it could be the case that they successfully warned off younger people from majoring in it. To prove this, we’d have to see if people who graduated after the bubble did have a hard time, and if college students are generally aware of the difficulties experienced by graduates from previous years.
11. No pipeline issues anymore. In 2014, the number of people majoring in CS surpassed the figure in 2005, the previous peak. In 2015, that figure was higher still. And based on anecdotal evidence, it seems like there are many more people taking CS intro classes than ever before. 2014 corresponds to four years after The Social Network movie came out; that did seem to make people more excited for startups, so perhaps tech wasn’t as central then as it seems now.
I like to think of The Social Network as the Liar’s Poker of the tech world: An intended cautionary tale of an industry that instead hugely glamorized it to the wrong people. The Straussian reading of these two works, of course, is that Liar’s Poker and The Social Network had every intention to glamorize their respective industries; the piously-voiced regrets by their creators are absolutely not to be believed.
Even if the pipeline is bursting today, the puzzle is why high wages and the cultural centrality of Silicon Valley have not drawn in more people in the previous decade. Anyone who offers an argument also has to explain why things are different today than in 2005. Perhaps I’ve overstated how cool tech was before 2010.
***
A few last thoughts:
If this post is listed on Hacker News, I invite people to comment there or on this post to offer discussion. In general, I would push on people to explain not just what the problems are in the industry, but how they deter college students from pursuing a major in CS. College freshmen aren’t expected to display hyperrationality on campus or for their future. Why should we look for college students to have a keen appreciation of the exponential gradient between different skill levels, or potential physical problems associated with coding, or the lack of training provided by companies to new grads? Remember, college students make irrational choices in major selection all the time. What deters them from studying this exciting, high-wage profession? Why do they go into math, physics, or engineering in higher numbers instead?
I wonder to what extent faculties are too strict with their standards, unwilling to let just anyone enter the field, especially for those who are jobs-minded. Software errors are usually reversible; CS departments aren’t graduating bridge engineers. If we blame faculty, should people be pushing for a radical relaxation/re-orientation of standards in CS departments?
Let’s go to the top end of talent. Another question I think about now: To what extent are developers affected by power law distributions? Is it the case that the top say 25 machine learning engineers in the world as worth as much as the next 300 best machine learning engineers together, who are worth as much as the next best 1500? If this is valid, how should we evaluate the positioning of the largest tech companies?
Perhaps this is a good time to bring up the idea that the tech sector may be smaller than we think. By a generous definition, 20% of the workers in the Bay Area work in tech. Matt Klein at FT Alphaville calculates that the US software sector is big neither in employment nor in value-added terms. Software may be eating the world, but right now it’s either taking small bites, or we’re not able to measure it well.
Finally, a more meditative, grander question from Peter Thiel: “How big is the tech industry? Is it enough to save all Western Civilization? Enough to save the United States? Enough to save the state of California? I think that it’s large enough to bail out the government workers’ unions in the city of San Francisco.”
Thanks to Dave Petersen for offering helpful comments.
***
Addenda, May 30th:
I’m pleased that this post has generated more discussion here in the comment section, on Hacker News, Reddit, and on Twitter. On Twitter, Evan Soltas pointed to an article from Eric Roberts, a professor at Stanford, discussing this question from a longer term view.
Several people remarked that my rebasing of majors to 2005 is misleading because of the impact of the dotcom bubble. I only gestured at it in the post above, but it probably explains a big chunk of why the number of CS majors hasn’t risen. So here’s a more full chart, from Eric Roberts’ article, with the number of CS majors starting from 1975.
Wow, the number of people graduating with CS degrees is really cyclical. The first peak in 1985 corresponds to the release of the IBM Personal Computer. The second peak corresponds to the 2001 dotcom bubble. I agree now that the ’01 bubble explains a lot of the decline afterwards; people graduated into a bad job market and that scared many students away. That year, however, may have been the worst of it; by 2005, Google had IPO’d, Facebook was spreading on campuses, the iPod was a success, and the iPhone would be released two years later. Those companies drew students back into studying CS, and we can see that from the rise again in 2009.
This is a neat story, but still I have to confess some surprise. Should it take 15 years before the popping of the bubble before we see that college students are graduating with the same degrees again? I guess so, and I’m interested if other industries have experienced a similar lag. Were people entering school say in 2003 acutely aware of how badly fresh graduates were suffering? Were they very well aware of then market conditions, and decided that things were too risky? Why didn’t freshmen/sophomores course correct earlier when they saw that the bubble had bursted?
Elsewhere, Matt Sherman points out this survey from Stack Overflow, which shows that three-quarters of developers have a bachelor’s degree or above, alongside much other interesting data. Alice Maz and an email correspondent remark that people decide on majors because they’re driven by fear of failure, not for high wages; that explains why so many people are fighting for med school spots. I like that Bjoern Michaelsen and commenters below have pointed out that developers suffer from significant skill depreciation and limited job security; I suppose that this is stuff that undergrads are able to intuit. And several people have remarked on mid-aughts fears that all software development would be outsourced to India; I had been unaware of the strength of this fear.
I’d like to finally remark that this could be an interesting project for more serious researchers to pick up. I wrote this out of fun on my leisure time, and invite others to study how cyclical demand for this major is, what the supply constraints are, and the quality gradient between the developers. Someone more serious than me can also discuss how the NCES aggregates different majors in these categories; perhaps a more granular breakdown is more helpful. Wage data especially might be helpful to overlay here. In the meantime, I invite people to keep commenting here.
What a great post. I can only offer two data points.
1. In the computer science department and also the MIS Department at my university the curricula are not current. That is not just my opinion but that of faculty who are more in touch with regular industry employees. Maybe it’s actually the university’s problem – faculty teaching in these areas don’t get the support they need to stay current.
2. Too often the executive level people are former majors in finance, economics, management… CS majors as perceived as locking themselves into a limited career path, unless they live in a city where they can get funding to do a start-up. Again, at my university the person in charge of tech has no tech background at all! It is not working out very well…
“regular industry employers” not “employees” sorry
thanks for your nice words, Paul.
CS is becoming commoditized. IT industry is entirely driven by and from India. Why one would spend 4 years studying CS and incur student financial debt, when an Indian with a Java boot camp will take his/her job?!
you don’t get a CS degree to do IT though, that’s what a Computer Info Systems degree is for and is far easier to acquire. Why would someone spend 4 years studying coding to get into IT where coding is not the primary job. Maybe there’s the occasional person who thinks a more impressive CS degree will help give them an edge in the IT field but most of the people pursuing a proper Computer Science degree are trying to get into software development which is not so easily outsourced.
For some reason the replies i posted have dissapeared from here. They did show here when i posted them.
One problem with the high wages in Silicon Valley is the high cost of living in Silicon Valley. I submit that $60k in Palo Alto does not go as far as $30k in the rest of America. New graduates with six-figure incomes tend to live in relative squalor: families of four squeezed into a small one-bedroom apartment, 90 minute commutes.
I agree with you, David. I live in Iowa and will graduate in December. My current job offer in my area is just under $70k, which for the area is really good. I know that an offer of $70k in Palo Alto would be horrible, but here in Iowa my family and I will be quite comfortable.
I live in silicon valley and I guarantee you nobody making over 100k is living in squalor unless they’ve chosen to do so voluntarily in order to save more of their income.
One problem that I observed in last 5 years is that folks are afraid of change. They see mechanical, civil, electrical as core fields of study and they will stay green for years to come, (arguably) forever. On the other hand, CS is prone to change. Safety is not guaranteed. Unless you acquire knowledge as fast as the changing times, you’re bound to be out of job in say a decade. (e.g. a front-end developer would probably be out of job given the rise of AI (again, open to arguments).
Amen! As a developer, stuff changes, often for no logical reason other than industry momentum (at least not for time-tested reasons). You are expected to foot the bill for most of your own training.
This is similar to what I was going to say…. I majored in electrical engineering but I learned a lot about programming and I work as a programmer today. People commonly said you had more options with this major… and it has more prestige. But…. If I had it to do over… I would major in CS.
As a general rule, CS degrees can be a plus, but I’m not sure many recruiters who look for them would be dismissive of similarly rigorous technical degrees in other fields. I’ve never seen a dev job that wouldn’t consider someone with a physics, math, or engineering background and equivalent programming skills on an equal footing with someone with the CS degree. Add to that the fact that an undergrad CS degree doesn’t necessarily impart any domain specific knowledge useful outside of software development, whereas those others all tend to broaden the pool of jobs someone might be considered for due to their additional domain knowledge, and generally impart at least the basics of programming as well.
This is an interesting post – I’ve noticed the opposite trend at top CS schools, here’s a few:
http://web.mit.edu/registrar/stats/yrpts/index.html Something like 30%+ of MIT undergraduates are doing a major in some form of CS
http://facts.stanford.edu/academics/undergraduate-facts CS has been the top major for the past two years. There’s probably more statistics that I couldn’t find
https://eecs.berkeley.edu/about/by-the-numbers The number of students in the Berkeley CS program has been growing year over year since at least 2009, possibly earlier.
I wonder about the power law. There are only so many Jeff Deans in this world. How could we quantify this?
Anecdotally, I’ve noticed students from “elite” institutions get outsized attention from recruiters. I believe it’s possible to find the cost of recruiting at a school – I wonder how this changes (and how the companies that recruit change) as one goes down the list of CS schools.
yes, anecdotally it seems like the pipeline is close to bursting now. And the power law question I think is very important.
How about this reason: When I was struggling with deciding what to study, I just went with the subject that I knew I was good at, physics. I can only speak for Belgium in the 90’s of course, but before college or university we were thought literally nothing about algorithms nor programming. This can also be said about, for example archeology or engineering, but at least for those subjects you can have an idea of what to expect and computer science was a black box, except for people that got involved in it as a hobby.
The main reason why I planned to major in cs in the fall is because of the high salary. There is this company in Raleigh, NC , I forgot the name but, they have a paid training program for cs grads (10-12 weeks) before they officially hire you and willing to pay for housing. More tech companies should do that.
If it is over the summer, that is called an internship, and tons of companies have internships available.
It was under a job offer not an internship and didn’t say whether it was just during the summer or anytime of the year . After the training program, they do placement and you have to work for them at least 2 years.
I have seen this sort of offer too. The company I am thinking of specialized in a certain database technology, I believe. They would have hired me fresh out of college to do 3 months of training — paid, IIRC — and then work for them.
I think they were based somewhere in the South… Texas? Florida?
It would have been more tempting had I not wanted to work for startups, and on web technology, and without touching Java.
I think the major reason is CS degree is the master of none. For Google, Microsoft, the CS graduates may be preferable, but other startups may only need a code monkey. CS teaches too much theoretical knowledge, which would never use in daily work.
I think there’s an interesting pattern here, but that you may have it backwards. Big successful companies (young and old) recruit CS graduates. Little unnamed startups only need a “code monkey”. Yes.
But maybe they stay little anonymous startups because they only hired “code monkeys”?
There was a time when search engines, online bookstores, social networks, and movie rentals were considered just other kinds of webpages. It turns out, though, if you take even these silly problems seriously, there’s a ton of depth to be found, and you end up needing all that useless theory from college: new compilers, operating systems, distributed architectures, and so on.
As someone who studied electrical engineering and also worked at a university, I disagree. I think that most degree programs teach you more theoretical knowledge than you will use in daily work….so this is not exactly unique to CS!
Phil Greenspun had an explanation back in 1995 that I still feel is the most reasonable: “anyone smart enough to make it as a computer scientist can make it with less work and risk as an MD, MBA, or JD”.
In hindsight, this matches my experience exactly. I knew lots of very smart people in college, but most of them didn’t study computer science. They picked something like law or banking, and they all got a lot more sleep than I did, and I suspect they’re mostly all millionaires now, or well on their way.
You don’t have to work 60 hours a week in the startup lottery to get rich as a lawyer.
I know of people who went the CS route, then later went on to get their MBA. The two pursuits are not mutually exclusive. Indeed, the CS experience combined with MBA or JD can be incredibly valuable.
I agree. Being a hybrid of MBA+CS catapults one to managing IT. All fears of outsourcing can easily be minimized because you are now a decision maker and have insight into the high level roadmap. You now have to make business decisions while keeping up with new technologies.
Actually, as a beginning doctor or lawyer, you have to work your ass off for a couple of years; medical residents do 80-100 hour weeks, and they may work 36 hour shifts, while junior lawyers at a firm also are expected to log as many billable hours for the firm as possible, again putting in 80 hour weeks.
I think the difference is that the majority of young people already know what a doctor or lawyer does, and the respect those careers get (from those who don’t know better) is greater than if you tell someone you’re going to “go into computers.”
“The NCES tables I’m looking at don’t give a breakdown of majors by gender, so we can’t tell if the shares of men and women majoring in CS has differed significantly from previous decades.”
It has differed significantly. A graph in a 2014 NPR article shows a significant decline in the share of women majoring in computer science from 1984 (where it was over 35%) to 2008 (where it was less than 20%). The graph levels off from there (just before your line for CS majors starts to curve upward), but the proportion remains below 20% today, below the share women had in the major in 1975.
I believe the numbers behind this line in the NPR graph are from the National Science Foundation. Here’s another graph directly from the NSF, showing bachelor’s, masters, and doctoral degrees from women in CS.
I think it’s three reasons. Firstly, until the generation in schools now, computer education in schools was very low. Secondly, you don’t need a degree or masters in CS to get work. It’s a passion for most developers. Lastly, many CS degrees cover outdated techniques and only a handful of languages, many of which are already saturated with devs. CS is a waste of time. Self learning is more effective because that’s the job at the end of the day
In interviewing recent college grads for a top-tier company, I very seldom got the feel that people took CS degrees as a rational decision, like one might take a law degree, rather people seemed to take it because they were an enthusiast. Unfortunately, enthusiasm is not talent, CS is really not at all about setting up a computer or tweaking OS settings to make a game work well. A CS degree is not yet rigorous in the way that some other STEM degrees manage, but it is more rigorous than “Bang things together until they work”.
Beyond that, I’ll be honest, people with five or six years of experience often let me down, too. It wasn’t so much that they were dumb, it was more that they literally didn’t realize the complexities underlying things. Many working software engineers literally think the industry is about writing glue code between pre-existing libraries/systems. I will certainly admit that that is a huge amount of the job, but the real work is in crafting the future, not in rearranging the past.
Basically, I think that the industry and the population at large are still somewhat confused as to what Computer Science is. Since the signal is faint, the results are noisy.
thanks for your perspective.
I’m wondering based on what it is that you say, “A CS degree is not yet rigorous in the way that some other STEM degrees manage”?
It’s as simple as this: Anyone who cares about longevity in their career will avoid software development.
“No career longevity in programming” Come on. I started programming full time in 1965 and continued till I retired in 2004. Sure there is no longevity if one lacks ability or does not keep up. From 1980 on I worked in compilers and intrepeters but prior to that did real time, os development, even billing programs.
I think there are many programmers who leave the field in their 40’s compared to doctors, lawyers, and other professions. The average employee at Google or Facebook is 29 years old, considerably younger than the average lawyer or doctor, even though studies show that 40 year old doctors are better than 60 year old doctors.
There’s a major conflation problem in this article: CS majors vs CS grads. Someone will choose to be a CS major based on current conditions, but a CS major will become a CS grad after about 4-5 years, meaning CS grads are a 4-5 year lagging indicator of market conditions. If you look at the graph of CS grads going back 20 years, you will see that it peaked 4-5 years after the dotcom bubble (meaning 4-5 years after 2000). Then the number of grads goes down for a few years because there were fewer people declaring CS majors for a few years (meaning fewer CS grads 4-5 years later). Then it picks back up as the tech industry got its footing back.
No speculation about difficulty, gender issues, faculty, etc.
yes, it seems like the dotcom bubble is playing a bigger deal than I’m giving credit for, and that’s messing with the rebase I selected. I discuss this in an addendum.
but there’s no semantic conflation issue with majors/grads here. I’m using the terms interchangeably. It’s just grads in the dataset.
One data point which would be interesting to explore: when I talk to students at my former university (a large state university on the East Coast) they point to there being lots of interest in classes, but there simply aren’t enough sections for all the students who want to take those classes. I would be curious to see if other universities are encountering a similar teaching shortage.
I can attest to this at my University. A class offered this fall, Object Oriented Systems, is only offered once a year. It filled up before registration was opened to Juniors! Registration had been so frustrating. I’m glad I’m graduating in December.
I got my CS degree back during the big wave of the 1980s and that was the case back then. Simply not enough space for everyone that wants to get a CS degree. I live near Seattle now and UW simply doesn’t have enough spots for everyone that wants to get a CS degree. It’s a pipeline issue right now…
Something else that may factor in somehow: at my university (Virginia Tech) the CS department used to be in the college of science but was rolled into the engineering department around 2005. When it was in science the students had a lot more flexibility on electives. When it moved to engineering it became more restrictive and came into direct competition with the computer engineering department. As a student, if you have to go into the engineering department anyways to get a CS degree then why not go for computer engineering? On the flip side if you want the flexibility you could go into mathematics, analytics, physics, or a number of other science fields and use your electives on coding classes. Might have some impact if other schools have done similar consolidation.
that’s an interesting thought, thanks. I didn’t know that it could be much different to graduate from the “college” and the “engineering school.”
In my time, there were three “programming” degrees. You could get a biz/IT degree, a CS degree, or an engineering degree. These are very different degrees for very different people. Each has their own point of view. They are not interchangeable.
As for boot camps, they don’t teach data structures.
And, getting an MBA means you have no intention of changing the world. That works in most software startups today because they are just doing continuous innovation in the late phases of the technology adoption lifecycle making lots of cash, but nothing more than that, no economic wealth. In the rare firms doing discontinuous innovation, more than two people with MBAs is a death sentence.
Note, continuous innovators in late phases don’t make any upside on their IPO, so don’t take the stock options in that situation. Discontinuous is where you make that premium on the IPO.
A recent study demonstrated how H1Bs suppress wages.
Ageism is a real problem in the software industry. Further, the software industry is very much limited by geography. There could be no such jobs across hundreds of miles. You need to keep enough money on hand to get back to a place with a job.
My own experience (in the 90s): I went in physics and not CS because I was competitive. The people in CS were 2 or 3 rungs below those in physics brain wise. I would have been bored out of my mind in CS. I have no idea if the bright people go in CS today.
Writing here as a former grad student lecturer, rockstar programmer, senior manager that spends a lot of time trying to hire the very best from midwest universities. Here are some observations, but I’m not sure what conclusions to draw as it related to your data:
1) People are either naturally good or bad at programming. They either “get it” or never will. I’ve never seen someone jump this barrier through education, study, force of will or enthusiasm. It appears to me to be fixed in intelligence, personality or the way they think about engineering problems.
2) If I grouped together all of the “Good” people I’ve met over the last 20 years, I’m not sure that even 50% of them have a CS degree. The rest are from 20 different degrees, with no apparent pattern.
3) Pursuant to the last point, when I taught at the university, my best students were always from the EE department, then the Computer Eng (electronics) department, then the CS majors, followed by a few smattering of other degrees. My best instructor and department chair was a Philosophy PhD.
This is what I believe…ie either good or not good at CS…and that is a personality trait as well as intelligence factor. Personally I found CS tedious and boring compared to many other disciplines. Economics and psychology fit my talents and PERSONALITY much better
I think you’re going to have to qualify #1 somehow, but I’m not sure how. I’ve seen many, many people jump this barrier. Nobody crawled out of the womb grasping a copy of Lions’ Commentary. Every good programmer I know today is the first to admit that their own early programs were just bad.
It’s true that a formal computer science education is neither necessary nor sufficient to become a great programmer. Still, I don’t think it’s controversial to state that computer science has something to do with computers, or that education helps one to become better at one’s field of endeavor.
Context: I went to a school which was (and is) consistently rated among the top in the world at computer science education. I can believe, though, that it’s possible for a school to do such a bad job of teaching that it’s essentially useless at developing programming skills. Apparently at some universities, you can even graduate without ever having written an operating system, or a compiler! I don’t know how one could be expected to learn to program well, without having to write at least a few serious programs, including the core components of every system. It’d be like going to medical school and never taking Gross Anatomy. You wouldn’t take that as evidence that all medical education is useless.
Very similar background as yours. I’m coming to the conclusion that becoming a rockstar programmer involves starting to program at a very early age and programming for literally thousands of hours. The people I’ve worked with that have the hardest time (they can still become competent programmers) are the ones that started in college. It’s really a different way of thinking and I think like language, it’s something that needs to be learned while the brain is pliable.
You need to back up a few years. In the early 2000s, computer science and related programs were very impacted, especially post-bubble. It was natural for programs to cap out and many schools were aggressively trying to push people into alternate programs. I don’t find the stagnation of degrees awarded in that time frame surprising.
yes, good point, I’ve added another chart that goes back to 1975.
This is a great article! Thank you for your exploration into and perspective on this topic.
Personally, I have a background in engineering and I program all the time. So, when I started to think about a career shift, CS was a no brainer. I wanted to make sure I was prepared for such a transition though, so I began taking some university courses in the area.
I have found a large difference between my engineering and CS coursework. In both, there were always mistakes made, but the trend I’m seeing in the CS courses is the profs seem to be looking for reasons to reduce my grade, whereas, in my engineering coursework there was the mentality of here are points for what you did well.
This may seem like a trivial difference, but had a CS degree been my actual degree and not just a something I was looking into as a transition later in life, I definitely would not have wanted to deal with the additional stress of what feels like professors constantly pulling me down.
Just one opinion though.
thanks for your perspective
https://danwang.co/why-so-few-computer-science-majors/
Why do so few people major in computer science? May 29, 2017
These are my observations for the past 30 years:
1. Students: state universities admit more students at first to collect per student reimbursement form the state education department. After the census date the faculty gives a very tough exam to weed out many students. Thus, the workload- correction, quizzes, etc., are very reasonable and most students don’t need baby sitting. The grade point average for the department is A- and the administration is happy. It gives them bragging rights in the recruitment of more victims. No sate government has caught up with this scam. If they insists that the total number of students after the grades are posted will be the basis for reimbursement, the scam will probably stop. This is the reason, not every one is allowed to be CS program. The number of faculty is kept small and the administration pockets the budget. I was a faculty member for over 30 years and when I had protested they labeled me “loose cannon”, not cooperative etc.
2. CS department want scholarly output- refereed papers cited many times to attract money from the State and other funding agencies such as NSF. So, full time teaching is not valued at all, thus having many students is not an encouraging sign for most faculty.
3. Students who come to the colleges and universities come for two reasons (a) find a partner (about 45% of my girl students told me) and (b) get an easy degree as easy as their high school diploma. They constantly fight for grade and complaint to the Dean, who to get a better grade from the administration, does not support the faculty. Thus, the faculty want to restrict the number of students who really want to learn and less complaining. Thus, allowing more students to CS program is a death warrant for the faculty. Most students have no proper training or knowledge about algebra, calculus etc. The well motivated and achievers naturally go Physics, etc.
4. CS has two components and seldom discussed. (1) The CS course work on technology and techniques and (2) domain specific application. Since most faculty do not have industrial work experience to bring the industrial knowledge to the CS domain both as an example for each topic, and for a group based topic. Since the faculty did not work with any group in industry, they do not know how to implement a group based project, which is what the industry wants. So, the faculty has theoretical knowledge but not on heavy hands on software or hardware related projects in industry. For example, most faculty I knew did not know the inside parts of a computer and have seldom have assembled system from components. So, they do not setup labs. like the engineering department do. Thus, CS graduates are just bookish degree holders.
4. The best teachers of CS have done basic research in some aspect of CS area and have industrial experience. They care for their students and treat the students as “customers”. However, 90% of the faculty are second and third grade faculty who do not want any first rate CS faculty with basic research credential. For such excellent faculty MIT, Stanford, Carnegie Mellon etc., become the asylum. Thus most CS department in most universities are waste of money and cannot create real CS graduates.
5. Text books are in general, created by contract persons who had never taught a CS degree class. The old book stores have full of junks. The reason one writes a text book is to get tenure in lieu of scholarly research papers for which most universities lack facilities. Thus, except for the chapter that is based on their Ph. D topic , rest of the book is a sham. The best teachers do not write text books and the best writers have not taught the subject. Major publisher routinely collect the best books, copy right it and dump them, as their contractor
Written book is already minting money via the 2nd and 3rd rate faculty. These publishers question and answers, quizzes, slides for presentation and other tools, to make the faculty enjoy their paid work. Thus, unlike mathematics, physics and other subjects, there are no standard text books in the CS curriculum. So, students find neither the help from the faculty nor from the text book. So, many students drop out or forced out by the tough exams and poor grades.
6. Unlike Ph. D granting CS schools most TA s and RAs are not highly qualified to help the students who want to learn. Mostly senior students with the same poor understanding help the less fortunate students. Thus copying and cheating is rampant and tolerated to maintain the artificial department average grade.
7. Some State Universities (I know them personally) with the collusion of the administration admit a large body of students by hiring part-time adjunct faculty and are told that they have to maintain the specified department grade average to attract more students. The chair person invariably force the faculty to give a very large % of “A”s even if the students has no understanding of the subject, cheated and have all sorts of excuses. In variably, these foreign students from India, China and Arab countries stay marrying citizens without an CS jobs.
8. Women students do not have women faculty mentors. Very few universities who do lip service for gender neutrality have sufficient high quality female faculty. So, these poor women students who want to enter the CS world is denied indirectly the learning and earning potentials of a CS degree. Simply call is discrimination!.
9. The Cs major alone is not sufficient in the real work for large scale software development. However, cross training courses in other areas are seldom offered in most schools such as, CS and Pharmacology, CS and Industrial production, CS and Biology, CS and AI based systems and so on. Thus, just learning some new standard programming language which is appealing to the faculty but not industrial standard or variety, the CS degree is irrelevant. For example, the ACM curriculum decides COBOL, FORTRAN, C are obsolete where as NASA wants people to fine tune their FORTRAN code for timing efficiency and will award 50K reward. Industry uses still FORTRAN, COBOL which are all well and alive but not used in small scale operations. While C++, Java etc., are taught, not even in summer such courses like FORTRAN, COBOL etc. are offered. Too expensive to make money! They forget that a program has three parts – the problem defining natural language such as English- incomplete ambiguous domain specific definitions; the algorithm with efficiency, security and robustness and finally the data structure or storage structure . The dynamic behavior parts have all these components and the wrapper is the object oriented shell. If you know the dynamics – sequence, selection and loop in the algorithm , the syntax and storage structures may vary. Yet, starting with say C++, where the first ten chapters teach “C” language for the dynamic part of the coding and suddenly mention about the object oriented programming. If you know multiple inheritance in C++ , Java’s single inheritance is a not a big deal! Yet, due to the complexity and developing nature of C++, Java becomes “the” coding language in most CS program. Is the faculty who teach (part timers not included) have any hands on major projected successfully implemented in Java? Not at all.
10. Companies should insists that students do internship for six months on their project before they can be hired, similar to apprenticeship in German companies, CS majors will be prepared for the real life and take courses in which they have efficiencies. But no large scale program exists now .
So to summarize, society, NSF, CS departments, faculty, university administrators, text book publishers do not care about CS, thus most unqualified employees with cheap costs end up running the show. Solving this CS shortage is not a simple problem.
thanks for these critiques
Philosophy major here, working in IT. I like a number of your points, but number 8 was particularly salient to me based on my experience in an Intro to CS class. I think any university get’s one class to introduce the department and the field to students and my intro class definitely fell short on both accounts.
For one, there was a lot of emphasis on group work and theory and almost none on actual coding. I worked on simple algorithms in Scratch and Assembly language (pen-and-paper), usually in group work (not my favorite), and frequently with a class-competition angle baked into the assignment (e.g. most creative solution gets CS Dept swag and 20 extra credit pts–bleh) Walking away from that class, I wasn’t able to code anything useful. I learned lots about how computers worked, binary, the von Neumann architecture, simple algorithms, and Assembly language, etc, but didn’t know the joy of writing a program that actually accomplished a task that I wanted to do.
Working in the IT field after college, I was completely lost. I didn’t know how to create a project in an IDE, didn’t know anything about object oriented vs. functional programming (still sketchy about the latter), and I didn’t know how to write tests or deploy my code to a server. However, the instant I wrote my first program that actually accomplished something I needed done, I understood why people like Computer Science. Knowing what memory addresses and logic gates are, while certainly important, didn’t generate a love of computer science in me.
thanks for your perspective
Ramsey Nolan made 10 good points, and summarized his post with the paragraph:
“So to summarize, society, NSF, CS departments, faculty, university administrators, text book publishers do not care about CS, thus most unqualified employees with cheap costs end up running the show. Solving this CS shortage is not a simple problem.”
Sam, the philosophy major, followed Ramsey with observations on the sad state of instruction in colleges. Both articles summarize the sad state of affairs in the industry.
I have an Engineering Bachelors and an IT Masters, with 40+ years managing IT operations, consulting for large firms, and an additional 17 years teaching as an adjunct at a local college. I agree with both gentlemen. Clearing this swamp may take a generation or two.
I would add that the cost of college is part of the dilemma. In my classes, 15 to 20 students start a cohort with a class in the Introduction to IT. I see them again in several of the intervening “soft” courses throughout their curriculum, with fewer and fewer persons in the cohort. They show up at the end of their studies for the capstone course, and there are as few as three persons in the cohort, and they are not the brightest of the starting students. When I ask what happened, the answer is usually along the lines that IT is hard, and even the brightest see B and C grades in the more technical programming classes. Their loans and scholarships demand that they maintain a B or better grade point average. So, the smart ones, even those with a B or A average, switch majors to less demanding courses so that they maintain their financial support, and get a degree. They know that they can get the IT knowledge later, just as Sam and millions of others have done.
I should add that the college has done extraordinary efforts to develop courses that meet the highest standards, and to provide students with an excellent education along the current guidelines. The current guidelines and standards must change.
not surprising at all people are avoiding this dodgy as hell career path, e.g. just a handful….
(a) outsourcing is rampant
(b) in businesses CS has little say over anything – they will just lose they’re weekends/nights fixing it. businesses hate the cost center IT department even though they are utterly dependant on it. Technical IT people are viewed as trench diggers.
(c) do you want to put your hard work into something where youll be thought of as an extra on the IT crowd or the next vaporware developer on Silicon Valley?
(d) your hard earned knowledge is out of date in a couple of months. Lets not BS that other industries move as fast as IT does.
(e) ageism – your career in tech is going to have a very short shelf life – especially if you stay technical. who going to buy into a future that bad?
(f) sitting in front of a computer all day and often into the night and weekends sucks while your tradey mates who left school at grade ten are out banging chicks and doing endless “cash in hand” jobs.
(g) CS is hard but youll have it painted down as easy by everyone who cant do it (e.g. youll be called things like a code monkey etc).
All this while you develop the physique of the hunchback of notre dame and gain weight while sitting on your ass all day.
(h) in most companies sales people, proj managers, bdms etc all earn way more than CS people with nowhere near the same qualifications, certificiations and late nights etc
avoid CS like the plague!
None of these are actual facts.
A) Outsourcing fear-mongering. Look up some numbers, this doesn’t happen nearly as often as the media says.
B) This sounds like a company culture problem, though this is seen in old traditional companies (banks).
C) Find a company you like?
D) Again this simply isn’t true. If you consider web-dev technology stacks as the hard important knowledge, I’m not sure you understand CS.
E) Again false. Average of engineer at my company is ~40. It is a very young industry and you’ll see this change as the industry matures.
F) Again find a better company. No good company will force you to work more than 40 hours.
G) It isn’t hard to go for a walk now and then during work day. (Or get one of those fancy standing desks)
H) This also isn’t true at all. I make 250k, significantly more than project managers and any sales person (excluding high level managers).
It just sounds like you’ve worked at a few miserable companies and have generalized that to the entire industry.
you are practicing the fallacy of composition… yes one individual can change companies or industries to find more compatible cultures…but you are dealing with statistics encompassing thousands of data points/individuals. The truth is there are MANY IT jobs in industries / companies where CS/IT people are viewed as fuctionaries/grunts and these jobs are a large part of where your statistics wind up. Now whether students deciding on a major are aware of these facts is another topic
And good companies make up what percentage of the total employment? 10% ???
Having worked in the field for 15 yeasr, I think the uncertainty is really what deters people.Tech was the new, hot thing in the mid-to-late 90s, when I was in college. But then the dot-com bubble happened, and it was no longer so appealing. Of course, there was lots of tech still there, but it was no longer seen as amazing. Then I can remember people telling me about the race to the bottom and everything was getting outsourced to India, and then the Indians started complaining about being outsourced to China. Of course, the reality is that there was and is a very real need for software engineer here in the US, and with the fact that the employment in the industry is stable and the wages good, I think you are seeing people migrating back into it. A few years ago, I was really concerned that I wouldn’t have a job. At this point, I’m almost certain that I’ll be needed in some capacity for the next 20 years, until I retire. I do think you have to be willing to do training to keep your skills current, but that’s the case with any job nowadays. Lawyers, doctors, other engineers – they all have to keep up with the latest changes in their professions.
Start your graph 10 years earlier, in 1995. It will be pretty obvious what the cause is.
The starting point you choose is very important. You happened to choose a very poor starting point from which to draw conclusions.
I think perhaps the biggest problem is lack of exposure to programming during high school. The only reason I took a programming course in high school (and thank God my school offered one) was because my dad (who works in IT) told me to give it a go and see if i liked it. I really enjoyed it and recently graduated with a degree in software engineering wholly because of a love I developed for coding starting in high school.
Furthermore, programming has always struck me as something that is slightly different than most other STEM areas and requires a special kind of person. Half of the students that took our Intro to C++ course in college failed. The most complex topic in the course was creating a basic class. Many of the students who failed went on to pass in an engineering field, so clearly they weren’t lacking in intelligence, something just never clicked for them.
To me programming has always been a series of efficiency problems, be they computational or simplicity based. Sometimes it seems almost like a video game. I need to work with what I have (knowledge, requirements, legacy code, etc) to get a working piece of software that a good dev could look understand and maintain. Oftentimes there’s nothing groundbreaking about it and someone online (praise be to stackoverflow) has already found an answer. What I enjoy is taking what I know and what I find and using that to create something not new and unique, but simple, efficient, and well suited to the need.
Tl;Dr
Teach it in high school, it takes a special person, use knowledge and internet to synthesize a solution.
CS compared to other majors is not useful in the majority of the United States. If you are unwilling to move and live in a non-tech area, a CS degree will not be valued as much. Most companies have their tech division in one of the major tech hubs. Not everyone is willing move for their job.
I completely agree with some points above. CS classmates appear stupid (my main turn-off was hearing “nested loops are crazy!”) and other STEM degrees have more interesting knowledge based on the real world which would change slower if ever.
I self-taught a bit of programming in high school and I wanted to learn new stuff in college so I picked EE. I’ve applied programming a bit in developing firmware. I still doubt I could find a rewarding, value-creating job in just programming. I don’t have any amazing ideas for the internet. Security sounds like an annoyance. Startup stuff doesn’t capture my interest so much.
CS is hard. Regularly updating yourself, studying all the time, practising, practising, practising… by that I mean coding all day and night to be able to stay current and on top. Read papers, follow up with training and tutorials, spending countless frustrating hours trying to fix something minor that requires days of reading through docs or searching online.
It is a very long marathon that not everyone is willing to commit into.
When I interview people that don’t have the passion for tech, you can tell instantly that they are not interested in learning and keeping up to date. Those people will be obsolete at the next technology change and many people are clever enough to know that race is not for them.
Some cultures get people interested on the topic just because it is a passport to escape their country and follow the American dream. From those countries, you get many horrible developers with zero interest on good practices and awful analytics skills. You also get good ones that have to make themselves distinct from the rest and that is hard.
Too many topics in CS too, my expertise has been changing a lot over the years. Starting from Assembly in several microprocessors, Computer Graphics and software rendering, hardware rendering, web development, Microcontrollers, Video Analysis and video streaming, random php and web technologies, enterprise search… to back to hardware, firmware, Bluetooth, real-time OSs. Android, iOS, and lately smartwatch development and management.
It is a huge career commitment.
Sometimes I feel overwhelmed by the huge number of things I don’t know and for which I don’t have time to learn.
CS is a career full of frustration and people not understanding what you do, will think that you just repair computers. Not something easy to explain to your mom.
The more flashy and interesting parts in CS, like the video game industry, are traps in which you normally suffer hard for a few years and if you survive you will be OK.
That burns down many people that will tell new students how bad that industry it is (I do agree) and discourage people from following their initial interest in the industry.
I’m currently a computer science student at a UC. I can tell you personally that getting a job as CS major isn’t easy at all. I have a friend who just graduated with a CS degree and works at a vitamin shop. Another friend just took a job as a tutor, the best they could do even with a CS degree. Also competition just for internships is extremely fierce. It’s common to apply to 50+ internships and not get any responses. As a current CS student, I wouldn’t recommend CS to any friends. I’m worried about getting a job myself.
This is confusing to me as a distant observer. I am surprised. Every Indian student who graduates with an MS in CS is offered a job with a sponsorship for visa. And please don’t go with “they come cheap” I don’t know that that is correct. They are offered something like 100-120 K USD in Silicon valley. Is that less than what Americans are offered? I have always (academically) wondered why those positions are not taken by Americans and why they need so many Indians in Silicon Valley. This article plus the fact that Indians are hired seems to suggest a local shortage. And the comment above says it is tough to get a job!
Have you considered what it costs to live in Silicon Valley?
Someone above has presented a comparison.
They are disposal commodities. They have to wait for many years to get a green card(if at all). When the profit margin or market share goes down, they become obsolete. When a company wants to sell it to another, they need to show how many good employees they have. Once sold, these foreigners will be disposed off. Fire at will has problems if the person is a native. They have to be paid legally agreed up on severance pay. They will not work for 60-70 hours if they have a family and if they insists on working late,t he wife will be gone for ever. The foreign guys in general are unmarried , live with many others sharing rooms, car etc. Unless you are born in the US, you can not understand why the foreign students who graduate are recruited. The top knotch PhD from Stanford, UCLA, MIT etc., will be very valuable, thus end up either as faculty or researcher or start their own business due to their superior mathematical skill set. Many Mechanical Engineers , the top 1% from Indian Institutes of Technologies (IIT Kanpur was set up with the PL 480- Public Law 480 which gave food assistance to India during the 1960 when India had extreme drought and famine invested it there with the participation of the best US institutions, British followed IIT Delhi, Germany with IIT Madras and Russia with IIT Bombay), were behind the financial disaster we had in the USA. These genius Mechanical Engineers with MBA from Warton, Sloan etc., were hired by the Lehman Brothers, and other Wall Street Bankers) etc., creating mathematical model to squeeze the last ounce of blood from the financial world!. So, Smita the Indians who are hired are going to be sacrificed sooner or later. Trumph has started the process. So, learn more about American System and not from the mere $ now syndrome! Also every American Citizen has directly or indirectly paid their taxes for school districts and all the facilities you are enjoying here – airlines, 4-6 lane roads, water(?/), electricity etc., which the new techies have not paid back in any form. So, it is natural for American Techies to be angry about the job market and living wages in Seattle, New York, Boston etc. It is also true that due to the Greek Philosophy that success and failure only count and failure is not an option, the best from India incorporate into their philosophy – success, failure and may be in between, and thrive in the USA when doing research or starting new companies, thus contributing to the American Economy. Trump wants only such Ph.Ds and now code monkeys. This is not against you as an Indian, rather you have learn about the American History and the constitutional guarantee of property rights including intellectual properties embedded in the constitution. So, only those who will create intellectual property wealth will be allowed to be here and rest will be packed out. So, your wonder is based on ignorance.
I was NOT asking why some people are angry. I was wondering why Indians are picked over qualified Americans at the entry stage. Your answer is because they are disposable easily. I have seen generations of Indians settled in the US doing well for themselves and contributing to the economy . So I don’t think you have got your facts right.
Sorry Smita. The early part of Indians coming to USA after Kennedy’s immigration relaxation law brought the best from India and not now. So, that generation is not now in question. Now, all cousins, kith and kin who are not qualified migrate using those early pioneers as vehicles of migration. Look a New York, New Jersey, etc., taxi drivers, gas station owners, temple related workers, grocery store owners and such others are not CS majors rather beneficiaries of the best earlier migrants. So, find the statistics from 1962+ you will get the correct picture. Your perception is not based on facts, rather based on emotion which I am told is the norm in India. Sorry the truth always hurts. The original question is broad and some few hundred CS majors coming from India does not answer the broad question.
Most students in high school and colleges have girl friends and their relocation becomes a problem if they too have jobs. Indians, in general come as bachelors and do not have that burden. Poor people in general, do not have access to computers thus have difficulty in colleges too. Indian parents who sent their children have boots strapping advantage in that, they have moved up in the poverty ladder, thus either can borrow or have funds for their kids to go to college. American kids have to borrow heavily, thus hesitate to take on extra burden and millinials are forced live with their parents. Also, Smita I have had contact with over 50 Indian professionals and most of them came here to study Physics, Chemistry etc., and were absorbed here. That generation is what you had referred to and not the 2000+ generation. I am in close contact with those scholars and have high regards. So, my comments are based on facts and not based on discrimination etc.
Nolan, I am only trying to understand the phenomenon. And there is NO emotion involved, believe me. I am not even defending the anyone. I am only asking WHY companies like Google, Apple and many more tier 2 seem to appoint (a few hundred? No thousands is more accurate) graduates when there might be American grads available. So there is a short supply for sure? That is the topic of the article as well. For the last 15 or so years many CS majors have immigrated successfully. They do not seem to be disposed- as you put it. What’s the reason? Your reasons like they are sharing rooms, single etc are not correct. The people I am referring to have families, homes in Silicon Valley. I agree with you that the 1962 -1985 era saw people with Science background going to the US and they were the desirable kinds of immigrants. I lived and worked in your country for sometime using my education in Physics (a Ph.D.). I was surprised with the stream of graduates coming in around the nineties who were relatively less qualified and we concluded that this must be a demand-supply equation. It seems to have continued. Later, the trend changed to a large number of students coming to US and securing jobs . The outcry about jobs being taken away therefore surprises me. ( no emotion other than surprise! 🙂 Why would your companies employ Indian grads if American grads are available? Treat this as a research question please. You have automatically assumed I am taking sides or defending something! Please don’t. I posit that there is a short supply of local grads (as the article says and many have stated reasons in comments for the same), which is the reason why immigrants seem to be finding it easy to get an H1B and plum jobs. I am not talking about the job loss due to offshoring. Confine the discussion to competing for jobs among the US grads both locals and immigrants within US only.
Why Indians are picked..
When you learn or major in Physics, Chemistry etc., you do not gave a clear cut idea of in which industries your are going to work. So you accept what ever job you get where the salary is not high.
And those subjects have fully evolved and almost stabilized in terms of the subject matter. However, Computer Science teaches a set of disconnected tools – Programming languages, Data Structure, Data Base Management etc., but does not tell in which industries you will use them. It is like a auto-mechanic having a tool box with rachets, wrenches, screw drivers and so on but has to select and use appropriate tools for every different job such as, changing a tire or working on the engine and so on. Thus, there is no well defined single industry for Computer Science graduates (both under grad and grads) but have to find a niche industry. The industries which thrived have developed all most all tools such as compilers, operating system, Data Base Management and so on, and none of them will be newly developed unless there is a perceived need. So, what is left over is the application areas such as, graphics for automatic lane changing software based on camera input, navigation and so on, or optical instruments in surgery or DNA analysis in medicine, Economic an business modelling and so on. No new development is taking place and companies which originally got involved now have surplus employees and they are let go. So, what they need is stop gap software developers and simple code monkeys in consulting roles. American students want steady job and not an uncertain future. Further, the CS majors should have also knowledge and skill sets in a targeted software development area which can be fulfilled cheaply from outsourcing though the final cost of fixing such a system is enormous and realized late by bean counters. One buys expensive utensils if one is going to use them for generations, else buy only cheap disposable plastic stuff. CS degree is thus, not a fine cutlery unless the person is also semi expert in an anticipated area such as Statistics, behavioral models etc., involved in Data Modeling, Large Scale Data utilization and so on. That mean, an average undergraduate has to re-enroll in a few selected universities that offer such courses incurring additional 60K+. So, it is cheaper to higher foreign students with MS degree and send them home without getting them green card. The only exception is that they have niche expertise or have become top administrators with additional MBA degrees and intuitively understand human behavior, such as Nadella of Microsoft or Sunder Picchai of Google who have not developed any new ground bracing new software to revolutionize the world. They have technical knowledge and management skills. Typical American technical skill does not include management skills and when a CS guy becomes a manager he is miserable and does not know how to deal with creative software developers, and ending up micro managing the staff. Indian and Chinese guys will tolerate these things as they had already experienced these atrocities in their native countries. But since they have no legal standing to fight, either they develop new software and sell back to their employers late or move on with unhappy life. No psychological and statistical studies have been done as funding is almost difficult and the major companies which employ less than 10% , don’t care. . Take for example, IBM always has a huge portfolio of innovations, they produce and the management squanders the profit without accountability. Take for example, OS/2, could have been the only object oriented operating system in the world, yet due to mismanagement and greed was killed. If they had allowed some entrepreneur to form a subsidiary and debug the system and market it with reasonable price (I met several sales guys who imagined that the name IBM will give them $200/ per OS, when the American expect it to be around $50/- per sale, IBM did the same with their antivirus software and so on) and Americans walk away. So Smita, your question appears to be simple, the answer is complex . It is similar to a three year old child asking “why the sky is blue” and an adult can not explain to the child. American economic system is complex and controlled by politicians and greedy executive and share holders , but they themselves expect everything to be free or without paying any tax. Call it the American paradox, which the American forefathers never expected when they (31 of them) secretly wrote the constitution, and now their bones are stirring in their graves. So, all these reasons given by different readers should be taken together to get a view of why foreign students are temporarily employed with high salary in some part of USA and is not pervasive in other places.
I found it difficult to get a job with a computer engineering degree 30 years ago even though I had industry experience in summer jobs. Most companies want people with 5 years experience. Big companies hired recent college grads but only from the top of the class.
After 6 months of minimum wage labor I found a job somewhat related to my degree and remained employed continuously for 10 years as a job shopper. It was never easy to find my next gig but the pay was sufficient to survive between jobs.
The biggest problem with being a techie is lack of prestige. Lawyers and doctors get more respect.
Nolan You keep insisting that Indians and Chinese are sent home after some time. They are not. The article has posed this question because this seems a genuine problem with the US system. There are jobs but there aren’t enough takers. Yes answer is complex. One possibility could be that only a few of the jobs offered have a creative component and most of them involve routine tasks. Perhaps American kids shy away from those. The result is a gap that needs to be filled with other available non-American grads. I don’t think steadiness is an issue. I know they are high wage jobs too. Jobs that afford them a home and families in the US.
It would be interesting to see the percentage of people who start our majoring in Computer Science who then switch to something like Communications. In my experience, a lot of young CS Majors want to create the next Quake/Halo/Call of Duty. When they find out how long it takes and how hard it is to create a game, they switch to an easier major. The same is also true of Criminal Psychology majors. People want to get into the heads of serial killers, just like the lady on TV. When they find out how dry the coursework actually is, they switch to communications.
It’s not only the H1-B visa abuse, there is also the off-shoring which is affecting MILLIONS of IT jobs. Companies like InfoSys, Tata, and Wipro have infiltrated large tech companies such as IBM, HP, and even Microsoft. They are behind the recent debacles such as ConEdison, Disney, and countless other places where IT staff are forced (at threat of loosing all severance packages) to train their replacements, who are then going back over to India. It’s not just the US; even British Airway’s recent outage is due to poorly trained outsourced IT.
We need some serious visa reform in the US. The program is supposed to be for skills that are not available in the US; instead it has become a way to boost profits and has created a new “indentured servant” class of sub-citizens. If I was in charge of the program, I would allow everyone who has successfully completed 2/3’s of their visa contract to apply for special “non-employer sponsored” green card and fast-track to citizenship. If you are “good enough” to work in the US for two years, have no legal trouble, and can pass a citizenship test…then you are the type of person we want and obviously NEED to become a citizen. The visa holder’s entire direct family should be able to immigrate all at once. I would call it “Make the American Dream Real Again” or something.
Yeah, that was my first thought as well when I read the “H1-B Visa argument” H1-B visas are a tiny fragment of the IT jobs that aren’t being filled by US citizens.
There is no doubt in my mind that offshoring has depressed wages for programmers significantly.
I have told many people not to major in CS because of this, because you aren’t just competing with other CS majors, you are competing with the low cost from a standard of living in other countries where people can live very well for a much, much lower wage.
Is the quality of work done off shore inferior, in my opinion yes… but they are apparently cheap enough that a lot of rework is still viewed as economically acceptable.
Indian students who major in CS (Masters) are offered something like 100-120 K USD in Silicon valley. Is that less than what Americans are offered? I have always (academically) wondered why those positions are not taken by Americans and why they need so many Indians in Silicon Valley. This article plus the fact that Indians are hired seems to suggest a local shortage.
You can’t use Silicon Valley as representative of the average programming job.
In the companies I’ve worked for in the past I’ve had upper management tell me they could get 5 offshore programmers for the cost of one full time american programmer (and they weren’t paying 120k starting out for local talent). It didn’t matter that the model was inefficient, or that most projects had to be sent back at least 3 times to be reworked, they still felt they were saving money. And in order to make the model work they had to take those of us who were good programmers and stop us from programming and have us spend all our time writing specs, reviewing code, doing all that sending of code back to be corrected… really nasty, not enjoyable work.
I told my kids not to go into CS, one did anyway and he’s ok with it. But like I said, I’m 100% convinced that my salary would have been much, much higher over the last 20 years if they hadn’t found super cheap labor off shore.
I was not referring to outsourcing; that phenomenon is well known. I was wondering why Indians are preferred over Americans at the entry stage (if enough American graduates are available for hiring). I agree that Silicon valley is not representative of the rest of the country. But this is where I see many Indian graduates getting hired at high salaries. I therefore wondered why Americans may be shying away form such lucrative jobs. You seem to indicate it is the overall uncertainty in the field that made you advise your kids to pursue something else.
Well, I have a PhD in computer science and I worked in a leading research lab for 7 years post-doc in the foundations of programming group. I work for a manag ent consultancy (I specialise in what can best be described as custom and mathematically complex software. Note I work in Germany, not the US. I’m immodest enough to be comfortable describing myself as a very good programmer.
Here are my thoughts:
Actual programming is, to a large extent, a difficult craft skill. Not a lot of people are good at it, and it is not something that you cannot really teach. The world is full of bad programmers. I have to deal with them all the time.
Nevertheless, given somebody with aptitude, an academically rigorous course can teach a lot of valuable knowlege. You would be amazed how valuable a bit of intuition about linear algebra is to a programmer. Remarkably, most programmers would be too. Same goes for the difference between modal and declarative sentences. Not to mention the ability to produce a coherent three-page memo in English (you could have emerged at the end of my primary degree course without ever having written a one-page text – as far as I’m concerned, this should not have been possible in a university – night-school, maybe.
Few courses – fewer today- teach this stuff because the vast majority of students are not interested. Thus university courses are not really university degrees – in practice they often boil down to technical training for code monkeys – they are not really university degrees.
In my personal experience mathematics and theoretical physics graduates are notably better trained than computer science graduates. From experience I know that physicists tend to have particular blind-spots, but those can be fixed. The blind-spots of CS graduates are more difficult to address.
P.S., Some of the comments above about books on programming written by out of touch academics, are so ignorant that they are laughable. Easily the best books on programming that I know of are written by academics who have world-class reputations (backed up with CVs) as real-world programmers. The only problem with these books is that the average code monkey is not sophisticated enough to make use of the ideas in them.
Totally agree. Around 20 years ago, I was writing 3D engines for a living. I started from a very poor mathematical background and never got super good at it.
I was frustrated with the complex maths required in some parts of the engine. Proper maths is what converts a good engine into a first class one.
I always thought that Physics or Mathematics instead of CS would have been a better option for me.
But not all day to day work is related to that kind of development. 95% of the code is interfacing against APIs, scalability, protocols, performance and code analysis, systems architecture, memory management and good quality code + QA. A 3D engine is a mixture of all of that, and nowadays a developer is just another piece of a huge machine.
Most of the academic developers I know cannot generate any kind of production code with the security and reliability required for going live with millions of users. Being confined in an algorithm or complex section of code is what I find they are good at.
The overall picture of weeks of debugging against multiple hardware is a collaborative effort from many parts of CS.
It is a delicate balance between craft, knowledge and experience.
Sadly, we don’t live long enough to master every branch of our combined sciences.
That is why I find that people with combined degrees of Physics and CS degrees always have a job. And I am afraid, to get there you have to sacrifice a lot of your life and early career.
I did always think it was strange that the CS majors at my university required so little math (CT needed Calc 1 and Discrete math, CIS only needed an intro statistics). As a software engineering student we were 1 course away from a math minor. The course that taught me the most for math was a numerical analysis course that really opened my eyes to how computers are actually used for math. I always liked to think of it as Why Computers Are Stupid 343. It was in the top 5 of most useful classes for me as a programmer and it wasn’t even required under the major.
Sidenote:
The best programming professor I had was a Math PhD. Then again he’s the smartest guy I’ve met in my whole life and had 40 years of embedded systems programming under his belt. I think a strong foundation in math should be necessary for any backend dev.
I graduated Comp. Sci in 1984. To this day, I am a professional software developer (albeit with my software consulting company), and I love programming every day.
One does not “go into computers” because they want to make money, but because one loves abstract thinking, solving puzzles, and see the implementation of their work used by millions of people worldwide.
The only place where one can learn to truly think in computer-abstract terms is with university level computer science. Sure, you can do basic programming after just reading a book, but the deep understanding, and being able to the really hard stuff in computer science, you do need a university comp. science degree.
Yes, comp. sci. is hard – it almost killed me, because I spent innumerable days sleeping on the bench in front of the university comp science lab, drinking coffee and eating chocolate bars, and I would not have it any other way.
You study computers because you love it, you breathe it, you live it, not because some body will pay you xxx.
I graduated college with a BBA in Information Systems in 1982. Many of my peers were working full-time by the time graduation rolled around so I would guess that at least 20% of them never finished.
It could well be that these days, because computers are considered a ‘tool’ in so many other disciplines, students don’t see that their chosen field of something else may not pay as much as a computer science degree when in fact it will or perhaps may pay even more. And could even turn out to be more interesting….
I outsmarted myself, going into college in 2001. My ears were full of people talking about going into computer science for many years. So I figured that everybody else must be hearing something similar, so the field would be supersaturated. Better to go for chemistry, thought I.
Turns out that no, everybody was not going for degrees in CS, tho that was the era when everybody apparently went for graphic design (at least from my graduating class, only about five of us didn’t). 16 years and a PhD later, it is what it is.
Loved the article. I do take issue with the point regarding where the quality bar should be, for prospective students and grads:
“Software errors are usually reversible; CS departments aren’t graduating bridge engineers.”
Reversible to a point. There is such a thing critical software, particularly in military and medical applications. For example, the software that controls how much radiation is given to a cancer patient, or the routing of ambulances in response to an emergency situation. These are life and death situations. The bar should be high for people responsible writing this kind of software.
Universities should be concerned with identifying and training the folks that want to be at the top of a respective field, CS / Math / Engineering included.
“In 2005, about 54,000 people in the US earned bachelor’s degrees in computer science. ”
“4. Immigrants are taking all the jobs. I submit two ways to see that not all demand is met by immigrants. First, most immigrants who come to the US to work are on the H1B visa; and that number has been capped at 65,000 every year since 2004.”
Well, that suggests the H-1B numbers are swamping the U.S. numbers so how can that not be a significant factor in deterring the latter from the major/career? Furthermore, the law was loosened to permit H-1B spouses to work and so many more were added beyond the 65K number.
Lastly, just look around the lunchrooms of tech firms and explain why the average age is so young; American students majoring in CS are doomed to being shown the door as they age and HR departments are pressured to replace them with cheaper labor from the fountain of youth from overseas.
I think that you have ignored the impact of “Big Bang Theory” and other social currents on college major selection. None of the characters on Theory have CS degrees, but each of them use the computer easily as a CS major.
Just like many majors tend to be an outgrowth of childhood fantasies and unrealistic expectations, young people of today also choose majors based on little knowledge of the career path and more on popular social topics and icons.
I graduated with a bachelors of science, major Management Computer Systems, minor Computer Science. To explain what that adds up to: Heavy programming and database methodology, interface design, capped with a healthy dose of requirements gathering, technical design and project management.
I’ve found this degree to be impossibly valuable and durable in my career, which nearly a decade old now.
I got my first salaried position in 2008, just as the economy went into recession. Five years later my department was laid off and replaced with H1-B workers. Finding a new job was not difficult, in fact I’ve found that with my skillset I’m actively hunted by employers looking to bolster their abilities to build software. I’ve done a few hops since then, but job hunting has never been a concern. Thanks to my degree, I’ve floated above the worst trends in our economy with ease so far, and my salary has only improved year over year.
I do not think this would have been the case if I hadn’t gotten my degree. There are many hobbyists turned professional that can indeed program, but if all of the code that I’ve spent time investigating, repairing and replacing is any indication; It’s that truly great programmers took the time to learn extra skills beyond just putting down lines of code that made something work. A good degree is an excellent path to learning how to build durable software, and it pays off in the quality of the work down the road.
Right on Joseph, very well put. Anyone who reads a basic-intro-programming can eventually write a program – however, the really complicated stuff – forget it – need a degree. By complicated, it can be any of the following:
Embedded systems
Real time programming
Compiler/interpreter design
At the University I attended, we had a great Engineering program with excellent professors, because they all wanted to come and do research there. The CS department did not have a grad program and was crap. We went through professors sometimes 2-3 in one semester. Try learning something in a class from 3 different professors. CS isn’t something that requires a graduate degree, so you don’t have too many universities offering one. Which means you don’t have too many sweet research positions for CS professors, and all the decent professors go to those few spots.
There is one point that I have seen briefly touched on in one or two comments, but I am surprised has not been discussed further. I think that a huge part of the reason that there are not many CS Majors is because CS is utterly neglected at lower levels of education.
I am a computer programmer (although my degree is in Electrical and Computer Engineering). And I am pretty sure that I would not be one if I had not started independently developing computer skills in middle school. I still remember my confusion and irritation when I was looking into electives in high school and asked if there were any computer programming classes. I particularly wanted to learn C. But I was informed that the closest they had to offer was a class that taught how to use Microsoft Office products (Word, Excel, etc). I lived in an extremely affluent area with a very well funded school system, so I kind of assume that if that school didn’t have even the slightest hint of a programming class, the vast majority of other high schools also did not.
Because of my early interest (and the incredible resource that is the internet), by the time I got to college CS classes I was ahead of most of the class. Many struggled with things that were already basic to me. I think that this is the real reason that CS majors have been relatively uncommon. It would be as if no math classes were offered until college level, and people were asking why there are so few math majors. But of course there aren’t many! Any possible interest in the subject was neglected for years while interest in other subjects was nurtured! And the fundamental building blocks of programming, things that I came into college with a solid understanding of, most people enter CS courses completely lacking. Of course they quickly become frustrated!
I have heard that my old high school now offers some kind of programming classes, so maybe things are getting better now. I am just not sure.
Interesting article. With respect to women majoring in CS, I think the “bro” culture is a turnoff. It is much more obvious now than it was many years ago, when I drove to a local university to take a programming course while still in high school (only female in the class), and then another programming course when I earning my STEM degree in college (one of maybe 3 women in the class). Then, most (not all) of the male students and the professors in CS and many of my STEM courses basically ignored the women, so it was more a matter of forging your own way. Now, the Internet has spawned an environment where people are emboldened and feel free to virulently disparage others. You have to be very sure of yourself to ignore that kind of “feedback” and lack of support. I went on to earn an MBA (women represented 28% of my class) and never looked back.
The NCES table quoted is incomplete, listing 59,581 for 2014-15
Here is a list of degree paths to Computer occupations.
Academic Discipline, 6-digit Classification of Instructional Program (CIP)
11.0101 Computer and Information Sciences, General
11.0102 Artificial Intelligence
11.0103 Information Technology
11.0104 Informatics
11.0199 Computer Science, Other
11.0201 Computer Programming/Programmer, General
11.0202 Computer Programming Special Applications
11.0203 Computer Programming, Vendor/Product Certification
11.0299 Computer Programming, Other
11.0301 Data Processing and Data Processing Technology/Technician
11.0401 Information Science/Studies
11.0501 Computer Systems Analysis/Analyst
11.0601 Data Entry/Microcomputer Applications, General
11.0602 Word Processing
11.0699 Data Entry/Microcomputer Applications, Other
11.0701 Computer Science
11.0801 Web Page, Digital/Multimedia and Information Resources Design
11.0802 Data Modeling/Warehousing and Database Administration
11.0803 Computer Graphics
11.0804 Modeling, Virtual Environments and Simulation
11.0899 Computer Software and Media Applications, Other
11.0901 Computer Systems Networking and Telecommunications
11.1001 Network and System Administration/Administrator
11.1002 System, Networking, and LAN/WAN Management/Manager
11.1003 Computer and Information Systems Security/Information Assurance
11.1004 Web/Multimedia Management and Webmaster
11.1005 Information Technology Project Management
11.1006 Computer Support Specialist
11.1099 Computer/Information Technology Services Administration and Management, Other
11.9999 Computer and Information Sciences and Support Services, Other
14.0901 Computer Engineering, General
14.0903 Computer Software Engineering
14.0999 Computer Engineering, Other
15.1204 Computer Software Technology/Technician
26.1103 Bioinformatics
26.1104 Computational Biology
30.0801 Mathematics and Computer Science
30.1601 Accounting and Computer Science
30.3001 Computational Science
30.3101 Human Computer Interaction
43.0116 Cyber/Computer Forensics and Counterterrorism
51.0709 Medical Office Computer Specialist/Assistant
51.2706 Medical Informatics
52.1201 Management Information Systems, General
Bachelors Degrees conferred:
Citizens and permanent residents:
2005 = 69,543
2015 = 70,850
Temporary residents:
2005 = 5,710
2015 = 4,338
Source Webcaspar
H-1B Computer-Related Occupations: Initial Employment
2005 = 52,352 (45.3%)
2015 = 70,902 (62.4%)
Source: “Characteristics of Specialty Occupation Workers (H-1B):”
Computer Occupations: Employment growth
2005 = 114,190 (H-1B 45.8%)
2015 = 143,510 (H-1B 49.4%)
Source: BLS OES data
Surplus US bachelors degrees:
2005 = 7,705
2015 = (-1,758)
As you can see, the students are responding quite normally to market signals and there is more slack in the market because L-1 visas (78,537 in 2015) are primarily in Computer occupations.
However, during recessions, employment growth can and does go negative, while H-1B keep coming — magnifying the harm done to those unfortunate 70,000 to 140,000 US graduates. (Recessions generally span more than one year.)
Behavioral economics – the future’s human capital levels r decided by teenagers
“The first peak in 1985 corresponds to the release of the IBM Personal Computer.” The IBM PC came out in 1981; the Mac, in 1984. There must be other reasons for the 1985 peak.
I believe the data was about graduates, not declared majors. Given most CS degrees are 4 years, it would stand to reason that 4 years after the PC there was a spike in graduate numbers.
As a 2004 CS grad, I try to be honest if not dissuade people from CS. I spent over a year applying for entry level jobs and internships and eventually accepted the first job offer that came my way. Which was not as a software developer. I always was told that I went to a good college and your grades are great (graduated with honors) but was always turned down because of a lack of any real-world experience. I tell people don’t expect to get a job as a software developer just because you have a CS degree. As long as you have a Bachelor’s degree, most companies I applied to didn’t care what the degree was in. It is what you learn and do outside school that matters the most when trying to land your first job.
What I always recommend my interns is to work in building stuff, you need to release as much software as you can.
Release projects into the wild, build Apps for iOS or Android and publish them. Try to find a talented graphics guy that helps with design, a musician to create a nice tune and create a random app that does something.
Contribute to Open Source communities, create shaders at Shader toy… Try to build a new library and open source it. Find some Arduino project, develop it and expand it.
Don’t expect to be judged by what you did at Uni, or even what you did at your internship.
Every time I interview people from the same university, the only person that looks a bit different is the one that has projects outside the “follow the line” that they did in class.
This individual is usually the one that can answer the most questions and the one that can do a basic coding challenge.
By 18 I already had plenty of projects to show and my portfolio has consistently been growing in different fields.
It should be fun to play with tensorflow, image analysis… you like pets? Build a pet feeder.
I still buy every sensor on ebay that I can find, and I prototype something to see how they work.
Don’t give up and just try to have fun.
I don’t understand the assumption that a software developer should study computer science to prepare for a career in designing, writing, and delivering computer software.
Consider the building trades. Employees in that industry don’t study “Building Science”. Architects study architecture. Engineers study engineering. Craftsmen in the various building trades study in apprenticeships.
Why not admit that computer scientists should study computer science (a valid and useful area of study in its own right) and instead develop a fully-fledged degree program for the various skills involved in the software-development industry?
I am turning 62 in June and taking an early retirement because I’m so over the work I do. It stopped being fun recently when admin rights were moved to a higher level thus reducing the importance of my position. I started out as a computer operator when I was 18 and still taking classes at a community college. I moved into programming 4 years later and have worked numerous jobs. Some of the most satisfying were contract programming when one could still make a six figure salary in the mid-west. It has been a steep up-hill climb. I never got that degree but have mostly had to rely on myself to buy books and train myself. The computer science field is shifting sand. What is popular today is ancient tomorrow. Many companies like to think they use tried and true technologies like a Systems Development Life Cycle (SDLC) but few actually do.
I wished I had gotten out sooner and who knows, I may take a job in retirement but at least it will be on my terms: no cubical, an office with a door and a window. My hours, not theirs, etc, etc.
I am turning 62 in June and taking an early retirement because I’m so over the work I do. It stopped being fun recently when admin rights were moved to a higher level thus reducing the importance of my position. I started out as a computer operator when I was 18 and still taking classes at a community college. I moved into programming 4 years later and have worked numerous jobs. Some of the most satisfying were contract programming when one could still make a six figure salary in the mid-west. It has been a steep up-hill climb. I never got that degree but have mostly had to rely on myself to buy books and train myself. The computer science field is shifting sand. What is popular today is ancient tomorrow. Many companies like to think they use tried and true technologies like a Systems Development Life Cycle (SDLC) but few actually do.
I wished I had gotten out sooner and who knows, I may take a job in retirement but at least it will be on my terms: no cubical, an office with a door and a window. My hours, not theirs, etc, etc. – John Brunton
With a thread this long, I did not expect to have something to add, but I think I do.
There are two elements missing:
1) Everyone is a product of their parents. I was raised by an engineer with great prospects and paid relocation multiple times in ten years! He also did computers. The people graduating now are the ones that were laid off as all interesting technical work was given to cheaper labor. The promise of “if you have domain knowledge and technical skills you will never be outsourced” was completely obliterated, and the children of those people have the inherited attitude of “I can always learn to code. I need a job for my whole like. Software moves across borders faster than almost anything else.” This was in the face of mountains of evidence that the outsourcing was not actually cost effective in the full CBA picture.
tl;dr They would rather be the ones laying people off.
2) CS is boring and abstract. Software is an assist to everything, but by and large people have bad experiences with it. Physics has experiments that explain the nature of the universe. CS is a giant logic puzzle with little practical application unless you are making those specific pieces of software. Why put yourself through that?
Most humans need a connection to the real world.
I find point #2 to be a very interesting comment. I would argue that physics and software are polar opposites at times. Physics always seemed to me as we see the effects and want to understand the causes. The ball drops I want to know why/how, if it’s consistent, if I can predict this behavior. Software appears quite the opposite. I know what I can do, what my language provides me as features/tools, etc. My goal is to make the software have the effect I desire by manipulating the causes/code. Besides who doesn’t like a puzzle? I mean they ARE a form of entertainment. If I can get paid well to do something that I find enjoyable, why wouldn’t I?
Many American companies have reduced their demand for CS graduates as they have moved thousands of engineering jobs to low cost design centers. These centers are still owned by said companies which doesn’t count as outsourcing.
Those of us in the industry have told youngsters to stay away from CS as these jobs would be offshored in an accountant’s heartbeat. The only saving grace is the burgeoning startup case where CS majors are valued…until costs get out of “control” and those jobs are moved to other countries.
I would look at the total CS graduates worldwide and then look at the cost of a CS engineer in each country over time. In that data you should see the ebb and flow of graduates and jobs.
I didn’t major in it because I simply wasn’t exposed to it until my sophomore/junior year of college, which was when I found that I absolutely loved programming. No elementary/middle/high school classes for me to find that out – which honestly I think is a huge factor for the underrepresentation of minorities and women. By that point, it was pretty much too late (I picked up a minor, but that’s not really much); plus I did love my current major anyway, physics, which also helps prepare you with (less rigorous) CS skills. Going back, not sure if I would have double majored, but probably.
Another potential factor: although there are tech jobs throughout the nation and across most industries, such jobs, especially the high-status ones, are largely concentrated in Silicon Valley/the Bay Area, Seattle, Portland, Denver, Dallas, Austin, San Diego, Raleigh-Durham, New York, and Boston. People from other parts of the country who want to remain in their home communities may be less likely to choose an academic program leading to a career in a field that could require them to relocate.
I am pretty certain the AMA has nothing to do with regulating medical school graduation numbers. The ACGME may regulate the available number of residency and fellowship spots once these graduates move on though. AMA is a membership/professional organization, not in the education business
The AMA heavily lobbies the government and every 2 years a group of doctors gets together to decide how many doctors are needed in each specialty. The amount doctors say is needed is always too low so that doctors’ earnings can stay high. It’s the most corrupt industry in the United States.
I am a long term computer programmer, many decades under my belt in various languages. After 5 years of so of amateur programming I went to college and got my diploma in it, during my free time I made a game similar to RType to use as part of my application for work.
I went to several interviews and they were all wanting me to have years of experience in their frameworks, although I assured them I could learn to use these frameworks in a reasonable amount of time they wanted years of experience in it before they would hire me. After six months of this or so I finally got tired of it and just started to work for myself.
The industry is a problem to it self, those 56 000 positions will not get filled with new graduates, they will instead poach from one another since no one is willing to take in the new talent and allow them to train themselves.
I tried to contain myself not responding to Mr. Sean Matthews. But without giving some response a wrong impression will be left on readers. So, here the facts as I have understood:
1. Actual programming is, to a large extent, a difficult craft skill- Not true.
Both mathematics and programming have incomplete assumptions which have to be first flushed for the students. Take for example, a problem given in
English: Given, Sales and Cost, Compute the Profit. This problem is ill defined and assumes the domain of business. That is, This problem looks very simple. Just subtract the cost from the sale price and the result is the profit. Typically, one can write this as:
However, there are lingering question associated with above statement of Profit=Sales- Cost. These are: (1) What happens if the Sales amount is zero, Cost is zero; what is the largest amount of Sales, Costs, and Profit (that is, the largest number of digits to represent the Sales, Cost and Profit such as 2 degits long, 6 digits long and so on); does the Cost include the Sales Tax if any, or has no Sales Tax is involved; does the Sales and Cost amount represent a whole number (integer) or involves decimal places, if they have decimal palaces how many decimal places are assumed such as two decimal places, if the calculated Profit has decimal places should that be rounded up to the nearest higher value such as, 56.76 be rounded to 57.00 or to be dropped such as, 56.45 to be rounded to 56.00 ? So, all these missing information are presupposed but not explicitly clearly stated. A student of Business management may know that, at least in the USA food items have no sales tax, but other items have sale tax rates and has to be calculated and subtracted from the gross Profit to get the final actual Profit.
The second problem is how do we store the numerical value associated with the Cost, Sales and Profit that have variable number of digits. For example, if the Sales say, is six digit long such as, 999999 ( if you add 1 to it it will become seven digit, thus the largest six digit number would be 999,999), what about the number of digits for Cost and Profit? When do you add a digit to the result if the number of digit in the answer increases, and by how many digits? Addition increases the length of the number of digits by one and, one has to add a sign digit. Thus, addition increases the size of the result by two when it reaches the largest two digit value such as, 99 and so on. All such details are called “Data Structure“or storage related problems. Obviously, the given problem does not say anything about the increased size of the resulting value. So, here again one has to use a guess approach and the final result may be correct or not depends on the assumptions one makes. Thus, no two persons working on the problem will have identical results if they don’t collaborate(or copy)!
The third problem is writing a procedure that can be implemented in a programming language that executes on a computer. This is known as the
algorithm and it has to make sure that it is complete, correct, terminates and so on when presented in a programming language.
Thus, even to solve a simple computer programming project one has to know or understand three separate parts of the computable problem and make assumptions.
When I wrote the first FORTRAN Laboratory Manual , a famous publisher wanted me to rewrite it similar to the useless other text books. The reviewers had no clue as to why this book was unique- similar o Physics, Chemistry and other science books, even today there is no laboratory manual to teach programming. I therefore, rejected their offer and published and made $ 25K . I followed this method to teach BASIC programming in MIS Intro.. class. Course and made $ 50K. I have several such books. Sean Mathews can show a couple of books, can he show statistically significant number of such high quality text books?. On the Computer Architecture there is the only best text book John L. Hennessy and David A. Patterson, 5th edition, how many such books had been written still used? The top 1% of students in any field can learn anything from any text book, the question is we want user friendly software, hardware , but what about students friendly text books? I have Pd. D in Linguistics, Computer Science and several other fields masters degree which I learned to expand my knowledge base. I did five years of Basic Research and not just a Ph. D. I had made the speech synthesis and music synthesis via software simulation on a CDC 3600 System. So, both as a student and as a Professor I have first hand experience of handling about 1200 or more students and my views were the result of observation. Can you make the programming interesting?. This is what I had done at the end of each chapter of the text book I had used. – So what? For example, we learned about 8 bit, 16 bit, 32 bit and 64 bit computers. Do one size fit the whole organization and what about ROI (Return on Investment). If the system is down for 8 hours what is the salary loss of a front desk girl with a base pay of 18 K per annum, an accountant with a base pay of $65/- per hour and an Engineer with a base pay of about $100 per hour? I ask them to go to their company to find the details. Now the bulb lights that a company can not get the same cheap lap top or system for all the employees based on some bean counters optimization.. Thus a highly productive engineer needs a 64 bit system that may cost say, 5K where as the front desk can have a $300/- computer. Thus, connecting the text material to real life is a challenge and that is what makes a course interesting and useful. Just teaching the syntax and coding turns of the students.
Even in high school when we teach the center of gravity, does a text book ask the students to think about slanting a ladder for about 450 and what happens if he leans backward? Just the theory and no real life application. So, what I wrote is the result of a huge survey I had taken and noted. I have no interest to publish them as the human brain hippocampus, processes political and religious region rebels to accept rationality, thus all these discussions raised here have no one correct answer. Personal experiences vary but are not helpful to answer the question asked by the author. This is no way an attack on Dr. Sean’s views, rather telling him to be careful with your views.
Major problem which most programming professionals face is the frequent layoffs. From making a six-figure salary all of a sudden you are forced to live off unemployment insurance, which isn’t much. New companies are formed then they disappear, either sold to others or just go out of business leaving all the workers without a job for many months. Well established companies such as Sun, DEC, CDC, are gone. HP survived by selling printer ink.
All major companies are setting up off shore operations. H1B will no longer be an issue because all the jobs will simply move overseas. Would I advice my kids to take up computer science? I would rather they go for MD or JD. Even Civil Engineering will be a better option. You won’t have to compete with 8-week bootcamp graduates.
Here is hopefully a slightly different perspective. I didn’t have any exposure to computer science throughout high school. I tried to gauge what I might be good at based on my exposure. I noted that I was generally good at math and science and that two common paths for math and science grads were healthcare and engineering. I didn’t know any engineers, but I had a few doctors and thus I related to my experience.
As I was exposed to computer science in college, I considered maybe taking a course, but I had such a heavy load of physics, biology, and chemistry courses that it never seemed practical. As an adult working in medicine, I often look back and wish that I had majored in something like physics or computer science. I feel like the experience in these majors would likely have been more useful, but it just never occurred to me. I think I likely would have still ultimately gone on to medical school, but I think computer science could have been a really useful tool for me at this stage in my life. I imagine we will see an influx of interest in these fields as more high schools add computer science to their curriculum.
tldr: We relate to our personal experience, and not many of us are exposed to programmers on a daily basis.
I agree that exposure might be an impact.
Your post had me thinking back to school. I entered college in 1989 as a physics major. As I think about it, I probably did it because it was hard and that’s the kind of thing good students pursued. I had a couple classes early on PCs programming physics problems and one on assembly language. Prior to that I had never used a PC in my life – so starting behind the curve was bit intimidating.
I actually liked the programming classes, but the most discouraging thing was how I’d get stuck in the computer lab hung up on a bug for hours, when I had plenty of other difficult and pressing things to do. It could be a huge time sink. I actually enjoyed programming and over summer worked on my own projects, but I lacked perspective I guess and was unable to extrapolate my programs at the time into a bigger view of what was possible. I did enjoy it, although I was concerned about the amount of time and late nights it required – often on short notice – and in conflict with the other demands of my schedule.
When I considered changing majors to computer science at one point, when I inquired I found out that I would be unable to transfer credits from my science classes it was a no-go. The curriculum at the time was built w/ prerequisites in such a way that you pretty much had to follow a 4 year plan from day one to graduate on time, which was important. Economics, however, would take my science credits, so that’s what I ended up doing.
So yes, I agree with the post above that decisions of uninformed teenagers help determine the future human capital of the economy. 😉
Computer science is only the academic peak. Programming is a method, not the content itself. Most of what people need is not all that difficult that you would have to study it in a classroom for several years.
See this for how programming gets applied elsewhere:
https://learnpythonthehardway.org/book/advice.html
I didn’t major in Comp Sci because at my state school was basically required you do heavy math along with programming. Calc I was a mandatory pre-req for comp sci 101. They basically bundled math and comp sci, usually under the assumption that knowing math will help you in some aspects of comp sci.
I’ve never seen that in any other major. If you take math you don’t need to *also* take programming.
My English major didn’t require me to take philosophy classes even though I’m sure they would have helped me understand some literature
I think this could partially explain why there are relatively few CS majors.
Most of us are not really contemplating the question at hand: stagnation, and in some cases, the decline of CS Majors. Seems like most of the replies/comments have descended into opinions about the industry or the purpose/content of a given CS curriculum, but not spending time contemplating the question…..
Here’s my two cents:
#1 Lack of barriers of entry
Very intelligent and pioneering computer scientists, computer engineers, and electrical engineers have created technologies that now can be developed at scale and sold as a product or service. Getting straight to the point, this has created an “industry” of programmers, essentially software auto mechanics. One does not need to know anything about compilers, computer theory, or calculus in order to maintain a feature/module, or even create one, or to debug a program at a certain abstraction level just to get it to work for “x” users. Another example is, it may be more a requirement to have this knowledge to work for ATT or Lockheed Martin rather than Amazon, depending on what you are working on, of course. Furthermore, just how many people does Amazon need to possess theoretical knowledge at a systems/architectural level as opposed to the number of “programmers” they need to implement and maintenance the system?
I guess what I’m getting at is, as with most industries, after research/development/innovation, these companies now have products and services that need to be maintained. This is the reason why so many smart product leads and managers with tech backgrounds at large tech firms leave a few years after the product/service is on the market, yet sales growth is either stagnant or declined.
Anyway, if one is not going to work at Redstone Arsenal, NASA, Boeing, but instead Blue Cross/Blue Shield, GE, Travellers,etc., chances are, there exist a handful of software architects/CTO’s who already possess both the theoretical and practical skills needed for those firms. All they need now are software developers (middlemen) and code monkeys (junior developers still learning their craft). To get a job, all you need is a portfolio and the ability and passion to solve problems within the specific domain and scope of the job, in most cases, not all. Can you be dangerous enough not to destroy the repository????…lol.
Any reasonable person would consider not taking the more rigorous path if I can get the same job and earnings going around it. An industry has been created where one can call themselves an “software” engineer without any engineering training. I’m not saying that’s bad, at least not here….
Other “industries” have a more strict barrier to entry, such as Electrical/Computer Engineering, Accounting, Physics, Medicine, Law, etc.
Mathematics, Management, Sociology, Psychology and even Information Systems are perceived as being more flexible.
To sum it up, most will take the path of least resistance, if given almost the same result. Only those who want to be the best of the best will pursue this path of learning, either through a degree program, or self development over time. There also exists a small percentage who pursue the degree for fear of being shunned by a small number of CS Majors only snobs.
Let me rephrase your wonderful observation. CS is a field where one should be able to transfer the functional knowledge of one area to another. Most programming is about the behavior part of a system – how the system behaves dealing with the numerical data – sequence to deal with arithmetic/logical sequences, conditional – optional paths to be taken based on encountered conditions and repetition or loop. These are analogous to the blood flow, nervous systems etc., so that the body functions and the object oriented skin covering over the skeleton is what the object oriented programming is about. If you go deep into the dynamic part of the program or the system behavior, excepting for the syntactical differences, an arithmetic statement is still the same and so on. The problem is the data structure differs in several domains, thus one has to devise an algorithm to solve this new situation, like synchronization, communication, state verification etc. This needs a reasonably good mathematical and statistical models which are not canned as most code monkeys would like to use rather than create. While the program design is engineering (explicit or implicit), MIS/IT is like an auto-mechanic who can use the designed car and fix the parts. Compilers, Data Bases, Operating Systems, Telecommunication are essential engineering tools created by excellent CS majors and not by just any CS majors. That frightens most people. Logical thinking, isolating the complexity into simple components and how to make them to communicate, are not trivial things. Less than 5% from India have such a background and much less in the US where frtom KG to High School education is controlled by uneducated black robe politicians and religious fanatics and prevent children to get the best STEM education. Unlike Singapore, Japan, Finland, the old idea of finish high school, get a job mentality has not changed in the USA. But these children are wonderful to begin with and with low expectation, they never learn to “transfer” learned knowledge from one domain to another. This is unfortunate and you see this in most CS major in the US. Strong background in Physics, Mathematics and a good dose of humanities and teaching problem solving skills for the Robatic and AI based economy is a must for survival whether you have a CS degree or not. Computers are integral part of our life now.
I would have loved to have a degree. But I came from a poor family with parents with very low education level : my father just did 3 years of school, my mother one year. Then, they immigrated into France. Mother did cleaning jobs, father worked for a car manufacturer.
My father found someday a computer that someone had thrown in the trash : a ZX-81 with programming book about basic. Plugged that into the black and white TV and I started learning. My parents were intrigued. They came from a family where no one could read, no one went to school, farmers.
In school, things went pretty badly. I only worked on stuff I liked, which was english, mathematics and physics. Everything else I had horrible grades, but in what I liked it was either 20/20 or never under 18/20 in notation. So I only got a basic degree and went out of school.
Where I am today ?
I started by learning BASIC. Then, I moved from MS/DOS in the 80s to Linux, and started to use C. C++ when it became available and Java in the 90s. I was fluent in C++ and when the army recruited me (service is mandatory in the country I was raised) they used tests and found out my IQ was high, and I was very good with mathematics, and programming. So of course, I ended up working for the cryptographers : extremely intelligent cryptographers would design ciphers, systems and cryptanalysis attacks, and they asked me to implement it in C++ which I did and everyone was very, very happy. I was given access to mathematics that, 15/20 years later, are not even available in the public academic field. They hired the best mathematicians and they have hundreds of books of very advanced number theory mathematics and I have learned things that today are totally unknown the the current mathematicians (army had at least 10 years advance in the 90s and today it’s closer to 15 to 20 years in advance). I have seen and used 100 % optic machines, where every component was optic, from the CPU to everything around of it. That was almost 20 years ago and in the current computing field, none of this is available, not even as prototypes. 100 % optic shit machines to break ciphers.
After getting bored with cryptography I went to write code for weapons. It was mostly C and C++ but subsets of it : we programmed in C/C++ but under strict rules, and a lot of things were not allowed (no delete at all, every variable created at beginning and never removed, and once the creation part is past, no more variable creation at all for example). I wrote code for guidance systems for missiles, and it was fun and I absolutely loved it. All of this with a low level stupid basic degree and coming from a family where people had to learn to read/write and speak a foreign language by themselves. I found out that my parents were extremely intelligent : they could learn anything very quickly, be it to speak a language, or any new technology. So what seems to be my own intelligence is just the result of their genes combination, and all I have comes from my parents genetic lineage. They would have been amazing scientists if they could have had access to education themselves…
After boring myself with C/C++ I left the army. They tried for a very long time to keep me there. The mathematics and cryptographic knowledge, the mastery of C/C++, the high level of security access. But I’ve never been interested in all those things. What I liked is programming. I absolutely love C++ and optimization once something works fine. All my fun is optimizing code and having very simple, elegant code. It’s like sculpting but with code and going back to basic shapes as you master the trade.
Today I mostly write Java code. Because it pays very, very, very well. I get 10 times more money per month writing Java code for a company that works for a huge retailer chain than writing C/C++ code to break ciphers or guide missiles that kill people (I never was bothered by this too, all that I cared for was reliable and effective code and getting the job done. Who was killed by those weapons I never give a though or rat’s ass because I don’t care).
I’m sorry but almost everyone I see coming around with “education” they’re pretty bad coders. Half of them should not be programming, they’re not made for it. The other half, they learned interesting things but seriously, it’s clear that half of their time has not been writing code to put into practice what they learned. It really should be 50 % learning, 50 % writing damn code. Because that’s how you learn: writing code, and reading other’s people code. Some of them we’re able to save and with their education, they become very good. Others, we push them away from production machines and programming.
I think education is very fine and I miss it. Would have loved to have some to avoid spending 10 years of hard work to learn stuff they teach you in a few years… I would not be a better programmer today, but I surely would have become skilled years earlier with such precious knowledge.
But the problem to me is not education. It’s that a lot of people should not be in that field, because they are not intelligent enough, dare I say “astute” enough which is a mix of being lazy and clever to KISS (Keep It Simple, Stupid).
It’s like music. Everyone of us can learn to play guitar or bass or sing. To the level of being able to play in front of people in a band and do tours. To do that for 10 or 20 years and be “good” at it. But we all know there are some people that at 15 or 20 years old, they’re already as good as you when you spent all your life learning to do it. They are made for it, they are, at their young age, already at that best level there is which it took you 10 to 20 years to reach. People like Jimmy Hendrix. They have that something from the beginning given to them, that you had to work to and learn with hard work.
In programming, it’s the same. Some of us are made for it and we kick ass from the start and young age. And even if you’re given education and work hard in mathematics, algorithms, programming, even after 20 or 25 years of experience, those people will kick your ass and do circles around you and write amazing code that works the first time, with no bugs, and are the best algorithms when you start to analyze their work. There, you understand that those amazing people, whatever your education or work, will always be better than you.
We have to look for and find those Mozarts in every field and make sure they can get to the fields they will shine like stars. And please : keep the people that should not be programming out of the field.
No education will give you the best programmers. The best programmers are the best because of their innate skills, and all education can do to them is make them reach the best level faster. And they will always be better than even the best educated people you can “produce” at schools because those people don’t have that little something the “natural born coders” have.
It’s like hacking. Everyone can learn it with work or even education. We see degrees in “computer security”. And there’s always that guy that has no education, learning hacking all alone, and kicks everyone’s ass when he/she starts to work on anything. They just go around you doing circles, laughing and everything is so easy to them. They break anything, write amazing clever code, fast and easily. And you see all the educated people around realizing that education, hard work, is not enough. They will never reach that level of skill, ever.
This is why I love the computing field. Because if you have a gift, you will always shine and kick everyone’s ass and people just cant believe you’re going circles around them with no education but self-learning because they spent 10 years or more to learn it, and they’re nowhere near your own level…
I can give you one more reason: it’s not considered hot. =) How many TV shows are there about doctors? Grey’s Anatomy, ER, Scrubs, you name it. About law? Don’t get me started. Everywhere on TV there’s these hotshot doctors in scrubs, having sex with each other in a cross-join manner. Same about the lawyers, they are pretty much saving people right and left on each major TV network or streaming service. Suits, Good Wife, lots and lots of others. There’s this “cool” factor.
At least, it is so on TV.
Also, there’s the factor that people in those professions are actually saving lives. And make money. Saving lives and making money is better than just making money right? Yes, maybe programmers are saving lives too… provided they work in a say medical field. So what? No one will ever know.
Having said that, I majored in CS. Because I knew I wanted to do that and however cool I consider the doctors to be, I don’t think I could do that much pressure and responsibility. However good the money. Give me my average programmer job any day.
Maybe people in US are just more ambitious? Take India for example. There’s such a rush there to become a software developer. Why? Because it’s a sure way to get yourself and your family out of poverty. And having done that much, you are already king. In US, you’re not. You’re still just that boring nerd.
Makes sense.
There is a wave of professors coming out of university to join industry, especially in machine learning. Is it possible that the number of faculties are capping the enrollment? I also heard in UW it is very competitive to major in cs. I don’t
know where to find data though.
I have an old CS degree from way back in the 1980s from a large east coast university.
My kids are a couple of years away from going to college and we have started looking at schools here on the west coast. Most schools have a huge pipeline problem. Too many students, especially foreign ones, competing for a few coveted spots. https://www.geekwire.com/2014/analysis-examining-computer-science-education-explosion/
There is the geek problem that many don’t want to be associated with. Just watch Silicon Valley on HBO.
The demands for keeping up with the latest and greatest tools has been my hardest hurdle. Shifting coding standards. New tools. First it was C, then C++ then C# then it’s Java or PHP or whatever. Most jobs don’t expect you to be on a constant learning binge for your career. Make one mistake in your choice of tools and you’ll never get back on gravy train.
The work ethic is highly challenging for anyone that wants a semblance of work/life balance, especially if you work in the tech sector. Too many people this is simply not worth it especially if you want to raise a family.
Competition from overseas is real and they are willing to work for less and harder at it than you so why bother?
For those reasons I will be turning my kids away from a CS major as I’m sure many have come to the same conclusions.
I thing I haven’t seen mentioned yet is that CS as a career has a reputation as a very time intensive job. War stories are plentiful about people working 20 hour days for weeks at a time to get something to work. We literally brag about it all the time. I could imagine that trickling down to prospective students and deciding that the benefits don’t outweigh the lifestyle.
The only other profession that does it as much is doctors, but for them its established that it’s just for a few years. The stereo-type of the grizzled programmer living under his desk is ingrained in the culture.
Really enjoyed reading this article. A key factor that should be considered is the lack of available computer science education opportunities in our compulsory education system and how it affects perceptions of incoming freshman. Today, there are still many grade, middle, and high schools that simply don’t offer any computer science curriculum or maintain curriculum that carries significant weight to influence incoming freshman. Because of this it’s quite possible that many incoming freshman, with little exposure to computer science, view the major as an uncharted sphere of their knowledge compared to subjects like math, physics, and business. One could quite easily see how this would dissuade someone from majoring in computer science simply due to their fear of an unknown subject.
You have mentioned the gender issue but say you don’t have good data. Unfortunately, I don’t either but “In 1984, 37 percent of computer science majors were women, but by 2014 that number had dropped to 18 percent,” https://www.usnews.com/news/data-mine/articles/2016-10-20/study-computer-science-gender-gap-widens-despite-increase-in-jobs
If 50% of the population is moving away from a field, it is not surprising not to see growth in numbers of the field.
You also have to consider that a degree in Software Engineering qualifies you for most of the same jobs.
I wasn’t able to find data on the number of Software Engineering degree’s vs Computer science. But it may explain the difference in demand for skills vs CS degrees.
On the margin, it might be a matter of cs having a lot of close substitutes like engineering, math, and physics that teach some applied coding skills while imparting knowledge of a subject area that will use those coding skills. Some of these areas, especially engineering, pay higher starting salaries than cs.
Not sure if anyone has mentioned this already, but I think the NCES data for “Engineering” also includes “Computer Engineering” – so there could actually have been high growth in CS major, but it’s just lumped together under the Engineering category, as I’m sure some universities might categorize their program as CE instead of CS.
A CE degree is not a CS degree. When you use the word “engineering” think an engineering degree from an engineering school. A CS degree is deeply mathematical as opposed to being a trade school. These two degrees are very different.
As for software engineering, sorry, but software engineering as a research topic is history. Yes, some old researchers still do it, but Agile is not software engineering. Developers are very plainly not engineers and can’t do engineering. That job title should die.
The software industry died with open. It’s almost gone.
“Isn’t it reasonable to expect that people with an aptitude for math, physics, and engineering will also have an aptitude for CS?”
No. I believe this to be demonstrably false, anecdotally, but also as far as research goes. Aptitude in other STEM fields may be a good proxy for IQ, but IQ is only necessary, not sufficient, for computer programming skill.
I wouldn’t know where to start finding references, but I recall sharply my first day at my first college C.S. course, where the prof made a point of showing us research from the 60s and 70s regarding correlated aptitudes. Firms were eager to find a proxy measure for programmers at a time when there weren’t any C.S. programs. The punch line: English and Music aptitude, independently, were better predictors of programming skill than Math.
The data broken down by sex for 2004-05 is here: https://nces.ed.gov/programs/digest/d06/tables/dt06_268.asp
While there has been a 16% increase in men majoring in CS, there has been a 10% *DEcrease in women majoring. Math, Bio and physical sciences have all seen increases in women majors, although not as large as men, and in engineering the increase in women majors is even larger than in men.
Doesn’t explain all of the discrepancy, but some of it surely is because CS has not just not enticed more women but actually turned them off CS.
Thanks for doing this analysis. The research I have seen is that women are turning away from CS for rational reasons – why take on a career where you will be constantly marginalized? Lisa’s comment above is pretty typical.
I’m a retired professor of both computer science and mathematics; I started doing computer science in the early 60’s when it was just beginning to be thought of in academia. Get some data on how many students start CS and end up in something else, often math. CS is damn hard; many students switch out in their sophomore year, when they first have to deal with a data structures course involving serious large programming projects. Succeeding then in a timely manner requires an unusual amount of mental organization and discipline. “Structured programming” should be something that comes naturally, which isn’t true for most people.
It’s hard to add anything to what has already being said, perhaps rearranging a couple of ideas could be of help.
Work with computers encompasses many different activities that are often confused. CS is only one of them and is not what the overwhelming majority of the economy demands. The economy demands mere “Programming”, Computer Engineering or IT.
It has been repeated that Programming is more of a craft at which some people naturally excel. Being good, however, won’t suffice to make someone able to come up with Markov Chains to create a search engine or to invent a new programming language, the stuff CS is made of. I don’t think that the demand for such sophistication is high enough to justify so many majors.
We have all heard legends of programmers self-taught at 10 or 12 years old and who by 15 started their “serial entrepreneur” careers. Except for Gauss, I don’t know of any other mathematician starting so early in life. The same for physicists or enginneers. Why this is so? Indeed, bootcamps do not teach people what to some seems indispensable basic knowledge like data structures, but then perhaps such knowledge is not necessary for what the majority of the computer work is all about, or perhaps in regard to what the industry demands.
These demands bring us back to the first paragraph. There is the “infrastructure” part, so to speak, definitely not a CS path. Then we have the “business software”. What need could there possibly be for Von Neumann to code/configure SAP? Then we have all the trivially hackable/unusable websites of the world -no comments. And finally there is a demand which is constantly being fed by the programmers themselves, which consists of mastering the last fashionable and in so many cases arguably unjustified or simply rediscovered new tech, that makes the contents of any computer major look like selected for extinction within a few years.
To sum up: perhaps any analysis should start by discriminating the different aspects of what is meant by working with computers. In this light, CS looks like too narrow a specialization. The crafty nature of development combined with the unsophisticated demand of the market and the fickleness of technologies within reach of a teen, make a strong case to follow another major and acquire software skills as a complement.
I graduated college in 1974. As a woman, I felt that my choices were to become a nurse or a teacher. I left with a degree in education. I’m happy that women are no longer placed in the constraints of these “acceptable ” professions.
Here’s a possibility. A hypothesis. The industries employing CS graduates have a lot of jobs to offer. The money is good. However a very small portion of those jobs involve creative thinking, design or such exciting stimulating work. A larger chunk of jobs are somewhat mundane. Perhaps American kids are not incluned to take those. Therefore they do not opt to take this major though it is high wage. I recently spoke with a friend’s son who got a job in silicon valley. His salary is 120000 dollars. He writes tax software. I don’t k ow if that is very exciting. Another one is in google testing. Yet another, quality assurance. Are these jobs left for others to do because kids in US don’t want them? Wondering if this is why they graduate from other disciplines not CS.
Possible you can find the initial enrollment numbers of CS majors and compare those? Thoughts are that they either change or dropout and still work in the industry.
I think that the boom-bust cycle is amplified in the both popular culture and by individual anecdote. The crack cocaine fury of the 1980s ended when the neighborhood was full of 30 year old guys in wheelchairs reminiscing about their gangster days. Look at Aeronautics and Astronautics in the 1970s. It had been a hot field since the 1920s, but after the big bust in the late 1960s, no one wanted to major in it. The joke at MIT was that it was Aero and Asshole. You’d hear talk of guys a week shy of their pension getting laid off for good.
There’s also the problem that there is such a range of software work, and the real heart of computer science just doesn’t show up anywhere. It’s like the mathematics of page ranking or physics of weather forecasting. People look at the results and don’t think about how it got there. Look at any review of any new Apple release. It’s all viewed from a hardware point of view, because people can see hardware. Maybe a handful of review sites like Ars Technica look at it from a software viewpoint even though Apple is a software company that sells hardware platforms to get its software out there.
This variation and invisibility leads to a lack of respect for the occupation, and the fact that it is good computer science that makes real applications work. No one thinks about consistency issues when paying by credit card or scaling issues when doing a search or buying a plane ticket. It’s like all the hard work font designers do and people fail to even notice. Most people think that software stops with throwing together a web page, so why build your career hopes on that.
Add to that invisibility the usual problems of technical careers: the lack of a real career path without moving into management, being considered part of the problem not part of the solution, the age discrimination which is often blatant. My niece got a CS degree from Stanford. I would have talked her out of it, except she wanted a career in finance, and she’s working at a VC firm. Yes, she’s a good programmer, but she wants to work she’ll be rewarded.
Really, really great post – the problem is really acute worldwide, not just US. I think there is one more reason for not choosing a cs major, perhaps the most important one. Tech is a booming market for sure and bound to stay so for some more time, however it is very different from other industries in being very tooling focused. As a result, there is a huge shortage of talent for just doing things, but growth prospects within the industry are not as high as in others. Executives in tech actually earn less than execs in finance or energy or healthcare. The starting compensation is higher, but the growth trajectory is flatter. Again, just because the shortage happens to be driven primarily by knowledge of tools. So not choosing CS actually makes a lot of sense.
(Disclaimer: I’m 27, work for a silicon valley unicorn and don’t consider my own growth path flat or my options limited – these are just my observations of many other people in the field)
Maybe it’s because employers don’t care about Bachelors degrees when they are hiring.
Lots of great opinion here. I think there’s a lot going on with the figures and there’s probably not one answer.
Part of it though is that Computing has outgrown Computer Science. It used to be that computing was a mathematics discipline and that computers were designed to assist with computational mathematics problems.
Now computing is fundamental to the data and communications efforts of every facet of human life. There are as many domains as there are things that interest us.
It used to be that if you wanted to work with computers you studied computer science. Now there are an array of different education options and focusses that teach computing related skills within different domains. A genuine splintering of the subject into many relevant areas none of which capturing or even requirement the mathematical depth of computer science but all of which leveraging off of it to different degrees.
In this context Computer Science is becoming a specialisation. It’s not a general computing field but a specialised mathematical field. There’s so much in computer science that is not required in varying computing careers and so much in varying computing careers not covered by computer science.
Sure innovations will come out of computer science but not every employee is required to be a cutting edge innovator. In the same way as Accountants need to be good at maths and need some awareness of the mathematical underpinnings in economics yet don’t need to be experts in maths, a typical computer programmer will benefit from some basic discrete maths and an awareness of how computer science informs their field but does not need an advanced computer science background.
I think we are starting to see a move away from mass hiring of people with computer science degrees to do any computing work and instead hiring of graduates with computing degrees that have a business domain focus or technical application specialisation. It’s probably a necessary shift as the field is not a single field anymore and one person cannot do the whole range of it.
The point behind the computer science degree was to professionalize computer programming. It could have been a trade. As it now becomes a trade, less money will be made doing it. There were many different professional tracks in computer programming.
The business track, the computer science track, and the EE track. Each of these produced different programmers with different approaches.
The microprocessor category is nearing its death. Phone and the cloud are indicators of this. We need new categories. And, while everyone can program, not everyone can program everything. The degreed programmers can expect continued employment, but a degree is not enough.
During the 1.0 dot bust, there were 25 of me for every job in my field.
Further, Open software killed the software industry. We still pretend to be in that industry, but we are really in the industry of our monetizations, aka ad serving. Worse, management still thinks they are in the software industry.
exactamuno… also, a CS major is NOT qualified to work on ANY job posted in today’s climate — you have to know all the fancy tools – which are not taught in the curriculum
I feel like a big part of the difference here is the growing cost of universities.
If you’re good at programming and commercial-minded, you don’t need a CS degree to get your foot in the door and rise to the top of your field.
I’d say roughly half of the engineering talent at the startup I work at here in the Bay Area don’t have college degrees, including me. I’ve carved out a 20+ year career without a CS degree.
Some other factors:
1. No idea what to expect in CS since programming and algorithms are not taught in school like math.
2. CS academic culture where you are required to learn everything on your own. If you are stuck on a math problem, the teacher solves the rest for you. There is a specific approach that can be learned to solve math problems. CS has no specific approach, neither does the faculty believe in helping the student when stuck on code.
3. Expectations to know and learn stuff beyond academics like new technologies and creating side projects on your own.
I just found this article, and it’s quite insightful. I offer a couple of thoughts.
First, I graduated with a BS in Math, because in 1979 there were only something like 11 schools in America that had accredited “Computer Science” degrees, and mine wasn’t one of them. There were actually five (5) majors you could study that were related to computers and software, and one was in the Math Dept., which offer three “specialties”: pure math, applied math, and computer math. I chose the latter. A few years later they actually merged the computer math classes and teachers with several from the EE Dept and formed an official Computer Science Dept. Their degree was everything I studied plus a couple of missing courses.
Second, for about a decade, I was told by prospective employers interested in me that, “oh, you’ve got a degree in Computer Science … you can learn any of this stuff quickly!” So I spent 5 years at one place, then was laid-off and hired at another place with absolutely zero experience with the platform and languages they were using, expected to pick it all up on my own, which I did.
Today, there’s a broad debate about the actual relevance and value of a CS degree. Most employers seem to favor hiring people who can hit the ground running, meaning they’ll hire people who have the most relevant experience to the tool stack they’re currently using, regardless of their educational background.
Which is why coding bootcamps and “nano-degrees” are actually effective in many areas. They seem to have replaced the various “certifications” that were required in most IT specialties for years.
Here’s what I think is funny about all of this. The driving force in software today seems to be web-based applications. The web started out as simple pages displayed to visitors, with a little bit of customization. Today, vendors want to replace desktop apps with web-based apps. The state of this technology today is about where it was when Windows 3 was introduced. I can’t actually tell if it’s improving or if there’s just a lot more platforms and frameworks being introduced at a dizzying rate.
That said, I’m of the firm opinion that we’re long overdue for a complete transformation of the entire software development process. The process used today is the same one that was created in the 1950s — we use the same EDIT-COMPILE-DEBUG paradigm. Only the computers have gotten faster so the turnaround time has shifted from days and hours to seconds.
Also, much of classic CS is involved with “optimization” issues. Computers have gotten fast enough, and memory is cheap enough, that most of these are no longer of much concern for nominal programming activities. The materials in other engineering fields have not changed, and practitioners in those fields are still required to work with physical limitations that aren’t going anywhere. But in the computer field, Moore’s law tells us that any sufficiently complex software problem we might face today will become easier to work with in 18-36 months. That does not happen in any other engineering field!
We need to transform the entire programming paradigm, and when that happens, I think that most of what we identify as the classic CS curriculum will become obsolete, at least the parts that aren’t already.
David, if that’s true, then a lot of universities, at least in Texas, are behind the eight ball because they appear to be offering more programs that are more specialized, such as computer engineering, software engineering, hardware engineering, right along with computer science. UT Austin has one of the top rated CS/engineering schools, and UT Dallas is slowly becoming more noticeable, and on a global scale. While UTD’s school of engineering wouldn’t be my first choice for CS or software development or any other program remotely associated with coding/programming, I’d definitely pick it over ITT, DeVry, University of Phoenix, or any other “trade” school.
Everyone seems to be telling me CS is more theoretical, which I equate to my eyes rolling over into the back of my head from “lack of action”. I have no reason to doubt you, so which route would you recommend these days?
Sorry for any confusion. I thought my reply was going to fall under David Locke’s post about software/computer engineering not being a viable title.
As I alluded to in my reply to David Locke’s comment, CS sounds extremely boring, and as someone else pointed out, students in computer/software engineering programs are probably being lumped in with the engineering stats. So, with that understanding, that’s most likely a significant portion of the answer to Dan Wang’s original question. Students are studying programming, but they’re doing it under a different umbrella, perhaps because in hopes of conveying themselves as versatile as possible within the industry.
I’m guessing there’s a need for graduates to be more skilled and not so “theoretical”, for lack of a better way to explain it, and so the CE and SE degrees might lean, at least slightly, in that direction, as opposed to theory-heavy CS, and the Information Systems degrees probably lean even more so towards skills-based studies, especially when you get into your second, third tier, and for profit colleges/universities.
I spoke with a faculty advisor at a major state university who said she went the route previously mentioned with a science/engineering undergrad degree and an MBA, and she hated the related work. No details were given, but I imagine that combo would land most in mid-level management in the corporate world, and from what I’ve heard about the younger generations being difficult to work with, I imagine that manager deserves every penny they make.
@bikerj … ummm … so you’re from the Great State of Texas, eh? Have you bothered to check whether they’ve changed the laws there so that you can only use the title “engineer” in reference to a course of study or job role if it’s one that’s actually licensed by the STATE OF TEXAS, after sitting for a long-ass test? Last I checked, “software engineering” was not a legal title nor job role in Texas.
As far as your eyes rolling back in your head, you may not be cut out for ANY college degree! Most of it is B-O-R-I-N-G! You have to take something like 40 classes to get a BS, and only about 1/3 of them relate to your major. The others are just crap they require so all graduates have a “well-rounded education”.
Most Comp Sci programs require two or possibly more semesters of Calculus. I hated calculus, and never used it after I left school. Nor did I use anything from Sociology, Anthropology, Linguistics, Psych, or many other classes. I happened to be very interested in some, but not all of them.
There is an evolutionary history and some theories behind software, and it helps to understand some of it if you want to be a really great programmer.
That said, I think we’re nearing an inflection point where programming technology is about to transform, and a lot of that previously useful theory is going to become meaningless.
If you take a step back and look at most of the “theory” that’s embraced in the CS domain, the vast majority of it is dealing with constraints in either (execution) time, or (memory) space.
Given what’s happening with IoT, and the steady growth of “cloud computing”, execution times are becoming irrelevant because processing can be dynamically split up among parallel processing units. Also, given the steady advance of hardware innovation, available memory space is growing faster than we can use it. So we find much of it being occupied by dead software that companies like Microsoft don’t even bother removing from their code bases.
Most “theories” that are taught in traditional CS programs become irrelevant for most practical purposes when their underlying assumptions of “limited CPU and/or memory resources” are no longer valid. But trust me, back in the day, these were VERY IMPORTANT FACTORS to consider. Not so much any more.
Honestly, languages and platforms are evolving so quickly, companies prefer to hire folks who are up-to-date with whatever technology they’re working with. Sometimes it’s quite old — one large SaaS company I know of is still stuck using Java 6, even though Java 10 was recently released. It’s not easy to migrate huge code bases to newer versions of a platform. So the bigger a product’s code base is, the more dependent they become on finding people who have the expertise in their specific tool stacks.
This sort of thing is NOT something you get in school, but rather just spending time “in the trenches”. Their job specs may say they want, eg, “3+ years of working with Java 6 in Eclipse” or whatever. Just got 1 year of Java 7? Fogetaboutit!
Believe it or not, the tech schools today are far more attuned to the needs of businesses than most traditional CS programs. So don’t rule them out completely.
And if you live in Texas, you’re probably not going to be studying or getting a job with the title “Engineer” in it unless it’s related to building roads or buildings, or possibly electronic stuff.
Dan,
Apparently, you have a problem with academia.
You can learn to code at code camp, but many employers know that those graduates are weak at data structures.
CS degrees, any degree really, are about academia, not getting jobs. Yes, you can find work without a degree but is that the point? No. Yes, everyone is missing the point. And, everyone is just lucky if they get a job. There are CS grads that don’t get hired out of college. They can code, but so what. They won’t get the money.
From what I seen in my college. Initially a lot of people who really like computers and interested in programming join CS program. Almost all of those people are capable of staying in the long run but they drop out and go into other programs halfway through because of the difficulty. Main reason is not because it is difficult but because the people teaching intro classes are mostly instructors who are really bad at teaching not worried about setting up a proper foundation for the students. Without walking you through showing you the right way they expect you learn from reading a book with vague partial sample codes. How can you learn without seeing the right way to do something. This itself disheartens a lot of potential programmers and without the proper foundation the course becomes very difficult further you move along. Another major problem about CS professors and instructors are they are more concerned about plagiarism than if the student understood the concept and knew how to apply it.
“I’m happy to point out that the number of people majoring in philosophy has slightly declined….It’s another sign that people are somewhat responsive to labor market demands. My view is that all the people who are smart enough to excel as a philosophy major are also smart enough not to actually pursue that major.”
I guess only short-sighted people would go for majors according to labor market demands.
Philosophy major, who has a love for computers, would do far better and make much more sense with their work in the computer world than a random student who just took computer science because it pays well.
There are tons of examples of computer engineers with a philosophy background who have done far better in their career.
Philosophy as such is not marketable to get a job, except being an academic or pursuing Ph.D. It is the tools that one learn or gain insight of during the study of philosophy that makes it one of the best major that opens up a wide variety of opportunity – skills like logic, writing, defining, analysing, debating, ethical thinking etc., opens up a wide variety of careers like – law, economics, investment, computers, entrepreneurship, management, advertisement, marketing, data science etc.,
It is not that people are not good before philosophy, but after studying it and engaging in the thought process, and endless debates with your class and faculty, you gain and sharpen so much of your above skills, that it becomes a habit, that expresses in your work and life. It becomes a way of your life.
In fact, I feel, Philosophy is one of the most underrated major.
Thanks! I’m writing a TedxYouth talk titled ‘Is coding really the language of the future?” and this has been a great help!
You don’t learn anything in computer science and you can’t easily start a business with it.
With computer science you learn how to manipulate info, store it, etc.
Your learning about the architecture of managing info. You never learn any real knowledge. That architecture always changes and changes quickly. In demand computer languages change as well.
In the end you will find yourself obsolete and know nothing of any value. Then people will spit on you on the street because your a bum.
Sorry to spoil the party but computer science sucks that’s why people are avoiding it like the plague.