Why Are There So Few Computer Science Graduates?

I’m reading a great series of articles (thanks be to the hyperlink!) that have rekindled my on-again, off-again interest in the problem of the precipitous decline in the number of computer science graduates – nationally and internationally.

Let’s sum up the key popular arguments:

  • CompSci isn’t hip enough for students.
  • Nobody needs a CS degree to do 90% of the professional work in the field.
  • Java is responsible, an argument put forth in considerable detail by (among others) Dr. Robert Dewar and Dr. Edmond Schonberg of ADACore.  Joel Spolsky put in his two cents a couple years ago as well.
  • K-12 education is giving our students an aversion to, or insufficient exposure to, computer science.
  • Worries about the job market are turning kids off.

That last one is obvious bullshit.  Every day you can go to Monster.com and look up thousands of programming jobs, at top salaries.  A job in software development is among the most portable, and highest paid, of any profession. And believe me, a key thing on the mind of almost every college kid is “how much can I make when I graduate?”

Regarding Java: Mark Guzdial, in a well written post on the subject, writes:

The curriculum did not change that dramatically from 1997 to 2002, but that’s when the enrollment changed so dramatically.

Hm.  Wasn’t that when Java adoption in CS programs really took off?  Remember when Java was the Next Great Thing, the Grand Unifier, the Language to End All Languages?  You couldn’t walk 10 feet in a Barnes and Noble without somebody’s Java book falling off the shelf and knocking you silly.

I was EXTREMELY fortunate to start my computer science education with Ada. I haven’t programmed in Ada in 15 years, but the lessons learned there have served me well in all subsequent parts of my career. Java? I’ve never liked Java. Java is a language for people who lack rigor in their thinking processes.


The thing that concerns me the most, however, is that the examples of truly innovative computer science programs are few and far between – at least they don’t get enough exposure. I see a lot of defensiveness among university educators about the issue, but no one seems to be grabbing the problem, Tom Peters style, and leading the charge. One might infer that (some) university CS programs are risk-averse; one might also suppose that the administrators of said programs are obtuse, obstinate, or supercilious.

What’s my personal opinion on the key factor that is leading to the decline of undergrad CS graduates? Twofold:

1) Programming qua programming is unsexy. Point #1 above. When your leading lights in the software world are this guy and this guy, you see my point.

How to fix this? Expand the curriculum. Include gaming, multimedia, cross-disciplinary majors, and track the sexy related topics like bioinformatics, clean energy, citizen journalism, etc.

2) Programming is fucking hard. Nobody likes hard. That’s why there are about 100 times as many communications majors as there are math majors.

How to fix this? At some essential level, you can’t. It’s a complex subject, and software is – as somebody points out every few minutes – the most complex thing ever created by humans. You don’t hear talk about “the singularity” for nothing.

However, there are steps that the universities can take.

  1. Make tutoring an essential part of any CS curriculum.
  2. Get the tool bullshit out of the way and don’t make students struggle unnecessarily with the ramp-up chores.
  3. Encourage or demand internships where students will get real-world, hands-on, ten-hours-a-day experience doing actual programming.
  4. Encourage and foster communication among the students, but don’t puss out and do “group projects” exclusively because to do otherwise would hurt student’s feelings.
  5. On the other hand, don’t choose arcane topics, languages, or tools on the theory that “if the witch sinks, she’s not a witch”.

Interested to hear your comments.


21 Responses to “Why Are There So Few Computer Science Graduates?”

  1. 1 roberte3 September 25, 2008 at 8:50 pm

    I totally disagree on “Worries about the job market are turning kids off.”

    It is the case, it turns off a massive number of really bright kids. It comes down to the question, ‘how many 40+ year old programmers do you know?’ The answer is sadly not many.

    I have been in huge IT departments, as suddenly all of the 35 and older non managers suddenly disappear, and all of the replacements have exotic names. Then they disappear over the next few months and all of your development meetings happen late at night… And if you think that the young bright kids don’t hear about someones parent losing their job… your sadly mistaken.

    For that matter how many of the people do you meet at any technology meetup have a kid?

    This industry eats its seed corn, and its a job market for young single people. If you want any sort of long term and profitable career… you get your MBA and go to wallstreet. Oops….

  2. 2 Adam September 25, 2008 at 10:13 pm

    I was the last class of my school’s program using C++, and it worked out that I had classes using each. Having taught C++ I prefer Java for illustrating CSCI fundamentals; I believe C++ is unnecessarily fastidious in a way that sometimes distracts from the algorithms the student is focused on. Python and Ruby lack the rigor required for teaching good practices, in my opinion.

    I’d posit 1997 was about the time it became feasible in the mainstream to have a career as a software developer without a CSCI degree. I’d also be interested to see statistics on MIS degree programs for the same period. I’m glad I stuck it out now, but if my school had offered a “CSCI Lite” like MIS I probably would have tapped out in Junior year.

    As an aside… would good old “2200 Data Structures and Algorithms” code be syntactically distinguishable using C# or Java? As a platform I agree Java is mess, but the two languages are awfully similar in writing style. 😉

    I think there are a few reasons you don’t see as many 40+ programmers in IT shops, but I don’t know any CSCI graduates at any age who want a programming job but are unable to get one.

  3. 3 Brantley Harris September 26, 2008 at 10:32 am

    I think it’s something else: Entering a university back in ’98, a lot of the CompSci students were getting into it because it seemed like an easy way to get well paying jobs. Turns out it’s not easy for most, and that probably got around. So sure you’ll see less these days, but I bet you’ll see generally better students.

  4. 4 Marina Martin September 26, 2008 at 3:43 pm

    I was almost a computer science major, but I’ve always been an entrepreneur and do-it-myselfer at heart and the mere idea of sitting in a class learning how to write an elseif statement bored me to tears. I already had a full-time career as a web designer (a decent one for HTML 2.0 times, but that changed when I realized I suck at graphics LOL) and had zero formal training in that, so I opted to self-teach.

    Anything done to make it “easier” to be a computer science major seems like it would just attract worse candidates. Intelligent, hard-working people don’t need their hands held – so I’d see that as diluting.

    Is it an actual problem that there are fewer computer scienc majors today, or is it just that the numbers have gone down? I’d say the overall increase in the number of people with college degrees is making a degree more worthless. I can honestly say I got zero value out of mine – not a single contact, or lesson learned, etc. Then again, I didn’t exactly exert any effort to get one.

  5. 5 Cassie September 26, 2008 at 4:10 pm

    It’s a little scary to look at my alma mater and realize the CS department is completely dying, though I agree with Marina, it’s not necessarily bad that enrollment is down. IT folk are renowned for being self-taught.

    Interestingly, the EE department was having no problems getting kids on board and excited.

  6. 6 Tero September 26, 2008 at 6:35 pm

    Being a self starter and self taught is very important, but it can not replace good education. Nor can formal education replace what is needed to be successful in this profession: being a self starter and self taught.

    There is no free ticket. Those books that promise to teach you programming in 10 days, should really be titled differently: How to teach you programming in 10 years. That’s just the reality of it all. The IT field can be one of the hardest disciplines there is.

    It is just that the schooling, educational programs, and the whole profession has gone though a severe inflation. The IT bubble in the 90’ies created it all, but the ideals and valuation of the profession has not recovered from those days, schools and education being one of the victims.

  7. 7 Doc September 26, 2008 at 8:01 pm

    I can tell you, as a 40+ y/o computer programmer, it’s pretty sad working with recent graduates. I seem to spend about a half-hour a day explaining to one or another of the junior guys on my team either (a) making internal details of your classes public just so it’s easier to modify them from other classes is a Bad Thing, or (b) we put the data access code in one place, and just call it from everywhere else. We don’t pass Hibernate sessions to every method call “just in case we need to get something from the database”. Then they turn around and use “GOF say to prefer composition to inheritance” to justify creating new classes by copying old ones and changing a method or two. I mean, I was an English major who took a few CS courses (and read a LOT on the side), and some days I swear I’ve forgotten more CS than the guys fresh out of school. Big-O notation? Boolean logic? Invariant code motion? Hell, one of our BAs put out a spec for a macro language they wanted, and not only was I the only one to notice it had an imprecise grammar, but I strongly suspect I was the only one to know what that meant…

  8. 8 florin September 27, 2008 at 12:44 am

    “Java is a language for people who lack rigor in their thinking processes.”

    Yep, thanks for the compliment.

    Your rigorous thinking process should take you out of your tiny box and into the larger context.

    If you paid attention around you, you’d learn that plumbing and electrical skills are dwindling as well. I bet you did not know that. It must be that these journeymen got hung up on too much java. It is a shift across many professions as a reflection of societal changes toward work. 1997-2000 were the heyday of programming – a glamorous, accessible and rewarding profession even for the mediocre. To generalize from the dotcom era is erroneous. To blame a language is even worse. I suppose you haven’t been around for long to have a better understanding.

    The easiest answer to your question is that the cost to benefit ratio is overridden by passion alone. Programming is not a job. For various reasons students may not find programming a way of life. They look beyond a paying job. But other factors mentioned contribute to the unfavorable perception toward programming: long hours for the same pay, in the office or not; job insecurity after 40; globalization that leads to outsourcing, etc.

    It is my opinion that this has very little to do with the way CS is taught in school. This again shows how ignorant you are – it would not surprise me to learn that you received your education in a public school. For generations in this country and presently in most countries, young men and women learn their material in an austere environment. It appears that the more money and methodology you throw at American schools the dumber the students become. Go figure.

    Get used to it and feel good about it as your turf is getting smaller yet your pay better. And stop bashing Java.

  9. 9 Brian Silberbauer September 27, 2008 at 3:16 am

    A lot of things happened around 1997 to 2002, one was the change in the way we share information.

    In about 2000 I was contemplating going to university to ’round’ off my knowledge when I realized that I could learn a lot more and remain up-to-date by using the internet. In the previous century we had to buy books and read manuals and a lot of the time didn’t know anybody who could help us when we were stuck. We even waited with anticipation for the next Dr Dobbs, which I haven’t read for about ten years now!

    As most good programmers I have met are down to earth get the knowledge yourself kind of people, I’m not surprised there has been a turn away from universities, the question should rather be “Why would anybody go to university” (OK, thats a bit troll 🙂

  10. 10 Tina September 27, 2008 at 5:13 am

    I think there is one point that a lot of people are missing… software development is only a small subset of computer science. If someone wants a software development job they can be very successful without any sort of formal education. However, if someone wants to do CS research or work in academia they NEED a CS education. I think the reason there are so few CS graduates is because those research and academic jobs are unsexy, not because software development is unsexy. I don’t have a solution, though I would hate it if CS programs morphed from teaching math and theory to teaching software development because I think it would lead to a lot of academic innovation being lost. I think that while many CS graduates would be better off with software engineering degrees we need a traditional CS degree in order to cater to the graduates who don’t actually want a career in software development.

  11. 11 Anthony Stevens September 27, 2008 at 5:22 am

    Great comments. Has the learning paradigm changed? Very interesting. And it’s definitely crucial to consider the difference between CS and software development.

  12. 12 Michael Duffy September 27, 2008 at 5:56 am

    It’s funny seeing Java bashed on a blog with a link to “Your First F# Function” in the upper left corner. C# looks a great deal like Java, and a CLR isn’t much different from a JVM.

    I would argue that VB has dumbed down programming to a far greater degree than Java has.

    I agree with the author that learning a single language like Java or C# is not a substitute for the fundamentals that a computer science. But the argument posited by the author seems to me to be a good example of the shallow thinking that he’s lamenting.

  13. 13 alan September 27, 2008 at 6:19 am

    “Nobody needs a CS degree to do 90% of the professional work in the field.”

    Here’s where I’m confused. You seem to be treating “CS degree” as “vocational training to be a programmer”. Where’d that come from?

    If you get a biology degree, you can be a physician, sure, or a researcher, or a lawyer, or anything else — including a programmer. Nobody assumes that this undergraduate degree program maps onto exactly one field.

    So why, then, does anybody assume that “CS degree” maps onto just “programmer”? I know people with CS degrees who then went to medical school.

    As Alan Kay points out, there’s one CS degree (or sometimes two), but biology has about 25 different departments. Is it any wonder they’ve got more graduates? They’ve got more degrees! Plus, they don’t try to shoehorn you into one job title.

    Or look at mathematics, which is arguably the closest department to CS. There’s one degree, but no mathematics department would assume all its graduates will go into the same job title. I’ve been told math is great for actuaries, for example, but if a math department was simply actuarial prep school, they would be the laughingstock of math departments.

    CS deserves to have dwindling numbers, until they grow up and act like a real college department. Having few graduates isn’t a problem. It’s market forces telling the department it can’t live on the coattails of the internet bubble forever.

  14. 14 chandelier September 27, 2008 at 8:02 am

    I think outsourcing is turning the profession into a desert. At some places just about /all/ the technical people are Indian; rather than get college students as co-ops to do the less demanding work, giving students some work experience, they just bump their count of Indians. I agree with the whoever said we’re eating our own seed corn; at least, the seed corn of native American programmers.

  15. 15 Alec Goebel September 27, 2008 at 8:57 am

    As a recent CS dropout, you are missing a couple of things.

    Here is a list of things that you will most likely not learn from a CS major: source control, using libraries (ie no one cares that you wrote a linked list or atoi,) and my favorite completing things on time (turning in half finished code for a B always struck me as a really bad practice.)

    Programming requires investing a lot of time outside of the classroom. It requires the desire to keep up with new technology, languages, and practices come out. And unless you are getting a PhD, a wide range of experience and knowledge.

    And yet it is only taught by people with PhD’s. My HCI teacher was horrific at navigating GUI’s and would be unable to find the start button once a class. My Object Oriented Design Teacher (in Java) had only ever taught C so his example code was malformed, poorly designed, and some of the facts he made us learn were flat out wrong. My AI professor had not done any real programming in 15 years and was having his TA’s read our code/debug, but not actually run the programs. In OS we were using the 2.4 linux kernel which would be fine except that not enough was covered to explain why out nice little programs wouldn’t run on a 2.6 system, or why when such great advances such as using kernel modules we still had to rebuild the entire thing for each change. I don’t think they actually covered agile development in my agile development centered software engineering class, or if they did I don’t know why I wound up doing all the code for in my eight person group.

    Oh that’s right, none of them had learned how to program from their intro level courses and couldn’t figure out why there “toSting” method wasn’t printing properly.

    So, although the number of CS grads is dwindling, hopefully that’s a good thing. Hopefully it will convince the CS departments to try to keep up with the times, offer a nice range of practical courses as well as the theory, and force those silly tenured professors to actually write a program once in a while. Until then, the real computer science people will be fine, the good programmers will be disappointed, and the bad programmers would be better served by spending their money on some 24-hour programming books.

  16. 16 Damon September 27, 2008 at 6:20 pm

    I think the key is that a computer science degree is really a degree in mathematics with a few programming courses. For that reason, Java is an excellent tool for teaching algorithms because it abstracts away things like memory and allows the student to focus on the math. In the end, computer science degrees are meant as a primer to advanced computer science degrees with the goal being a PhD.

    This has benefits because most of the truly hard problems in technology require really bright mathematicians. By hard problems, I mean the folks working on solving theoretical mathematics problems that once solved will benefit us in 10 – 50 years.

    As a holder of a computer science degree, I can say that I rarely use the directly tangible concepts learned in my computer science degree in my professional work. Having learned how to learn is one of the most valuable things I…learned. And you don’t need a computer science degree for that.

    By far, the best software developers I’ve had the pleasure of working with do not have computer science degrees. They usually hold degrees and usually are *mostly* self taught. They are the kind of people that are genuinely curious about computers in a way that most computer science grads are not. Broad generalization, but anecdotally supported. I never said I was the best computer science student!

    I don’t think that computer science education needs to be rethought because we need people researching those types of problems. However, we need really, really smart people working on theoretical problems, and really, really pragmatic people working on the 95% of the remaining problems.

    I suggest you check out Ken Robinson’s talk: http://www.ted.com/index.php/talks/ken_robinson_says_schools_kill_creativity.html

  17. 17 Kris September 29, 2008 at 12:53 pm

    I have a Computer Science degree that graduated in 2003. When I started college in 2003, they had just introduced a new degree program called Information Technology that covered more basic computer tasks and touched on other things like networking, multimedia, and computer repair.

    By the time I graduated, I think more than half of the people that went into Computer Science had migrated to Information Technology from reason varrying from too difficult, too much math, or simple lack of enjoyment in programming.

    I think a big reason for decline in enrollment is the rise of programs like Information Technology. Prior to that, if you wanted a computer career, you got a Computer Science degree even if programming wasn’t your main interest because it was your only (good) option into the field. Now there are a lot more option/paths for those that either can’t cut it or find their interests pulling them in different directions.

  18. 18 Kris September 29, 2008 at 12:54 pm

    I should say I started in 1999 and graduated in 2003.

  19. 19 Jeff October 1, 2008 at 5:26 pm

    I’m seeing a lot of comments on this thread that don’t match my experience. I finished a BS in 2006 and an MEng in 2007 from MIT. So, not a bad program. We saw CS enrollment drop at MIT during my time there. The reason seemed to be a perception that there were fewer jobs in CS — a perception I’ve found to be completely false.

    I think the real problem with the discussion of which programming language to teach is that with a proper CS education, you can use any language. You can pick up one you don’t know and be writing useful code in a few days. I don’t like Java, but I don’t think it’s the problem.

    As for the need to get an MBA and go to Wall Street, that comment is so… last week. Seriously, though, the sheer madness of the past week aside, the average salary of a Harvard MBA from the class of 2007 was $115K with a $20K signing bonus, not counting non-guaranteed compensation (bonus, stock options which may or may not have value, etc). The average salary for a 2007 MIT Master’s graduate working in the software industry was a little shy of $90K (it was over $89K), not counting non-guaranteed compensation. (Yeah, the Master’s grads weren’t all CS grads, but the CS-only stats weren’t readily available for 2007.) The MIT guys make less, but they are also a few years younger, on average, and are not killing themselves working 90-hour weeks in consulting or investment banks.

    Software is quite complicated, but I think it’s actually more complicated than it needs to be. If people understood the true value of a specification, documentation, designing a system with verification in mind, and a better theoretical understanding of abstractions, abstraction functions, invariants, and liveness guarantees, it would be far easier.

    On the subject of job insecurity, we’re not seeing outsourcing pressure in the highest-skill sectors of CS. In fact, we’re seeing job creation, as outsourcing the lower-skill work lets companies make more profit and expand. The important thing for a CS major to do is to grow his or her job skills as time wears on.

    The comment about CS research jobs not being “sexy” is another I disagree with. Have you seen what they’re doing at IBM Research and MSR? There’s a reason those two organizations are, respectively, the #1 and #2 organizations in terms of rate of getting patents. They do amazing things. Paxos consensus, the bakery algorithm, snapshots in distributed systems, and perhaps the best document preparation system ever — and that’s just one guy.

    Now, I’m all for a CS degree. But some of the best people I’ve worked with have degrees in physics. The job prospects in the pure sciences seem to be worse.

  20. 20 Anthony Stevens October 1, 2008 at 5:31 pm

    Jeff: excellent, well-written comment. Thanks!

  21. 21 Mr.Bill November 4, 2008 at 8:37 pm

    Why are there fewer graduates? Easy! This is the Youtube/MySpace/Facebook generation where they click a button and everything is done for them. CS, on the other hand, has always been pretty horrifically difficult. Gen Y’ers aren’t used to things being hard. This crumbling economy must scare the bejesus out of the Gen Y’ers. For those of us old enough to remember the recession of 1982, unemployment hit 11%, inflation was over 12%, interest rates on automobiles was 20%, mortgage interest rates were 18% and the economy had its worst contraction since the Great Depression. This current economy is child’s play compared to 1982. The Gen Y’ers have never had it rough. They are used to mommy and daddy taking care of things for them, and slacking off the rest of the time. That is why they avoid hard things like computer science.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: