Computer Science at University, hit or miss?
July 14, 2010 7:16 AM   Subscribe

Would you recommend Computer Science to school leavers? If so, do you have an opinion as to why dropout and graduate unemployment rates seem to be so high?

I'm a high school teacher, teaching A-Level computing (AP equivalent) to seventeen and eighteen year-olds. Many will go on to study Computer Science, but I have reservations about the wisdom of this for some. They look to me for advice and I'd like to make sure that it's sound.

My reservation about Computer Science is that it is an uncomfortable fusion of a craft skill - programming, with some rather obscure and highly intellectual aspects of mathematics. I'm troubled by reports of high graduate unemployment and dropout rates. There's a suspicion that a CS course is perhaps not the best preparation for most careers in IT, being rather narrow, lacking opportunities to develop communication skills with clients and users, and creates false expectations as to what a job in IT actually involves.

Is this fair? It's time to challenge these basic assumptions of mine, because they may be doing harm.
posted by grahamwell to Education (22 answers total) 4 users marked this as a favorite
Some computer scientists I know are sociable and employable.

Others are isolated and unemployable.

It may be that computer science attracts its share of people with Asperger's or other things that make socialization difficult, and those conditions make finding employment difficult.

But it is rather a stretch to say that it is the study of computer science itself which makes one unemployable.
posted by dfriedman at 7:20 AM on July 14, 2010

There's a suspicion that a CS course is perhaps not the best preparation for most careers in IT

Well, it's not. I think it's pretty good preparation for a programming job, though. Yes, even though there are lots of necessary skills that won't be taught in most CS curricula.
posted by grouse at 7:28 AM on July 14, 2010 [1 favorite]

Many schools are providing Software Engineering degrees now, in addition to the MIS (Management Information Systems) style of degree that a lot of business colleges provide. These are both more practical than CS, although I would guess they're not going to set you up for higher degrees in the field if that becomes an interest later on.

I know there are a number of CS graduates who do perfectly well out of school, but they're often the ones who were already reaching beyond their classes to apply their skills. I also have met grad students in CS who have a strong grounding in theory but can barely operate Windows and can't decipher how to use a printer.

Unemployment, or delayed employment, is linked to the fact that hiring someone fresh out of college is something a number of companies don't want to chance at this point, especially when programmers have a known learning curve to get from academic proficiency to day-to-day coding proficiency. In my experience (midwestern US), once you have a few years of work experience job opportunities are still reasonably available.
posted by mikeh at 7:33 AM on July 14, 2010

"Computer science is no more about computers than astronomy is about telescopes." -- Edsger W. Dijkstra

People have all sorts of crazy notions about what a CS program will teach them. Some think that it will teach them how to build video games, others think it will teach them how to build and repair computers, or that it will prepare them to be able to build websites, or that it will teach them skills like learning common APIs such as Win32 or Cocoa to build applications. The reality is that none of those is really true -- the CS program assumes that the person will either pick up those skills on their own or will be trained on them on the job once they graduate. The high dropout rate reflects the fact that CS is really closer to applied mathematics than programming, and when people learn the reality that a majority of their work will likely be done in an esoteric language that they probably have never heard of and likely isn't ever going to get them a job.
posted by Rhomboid at 7:33 AM on July 14, 2010 [4 favorites]

Just to add that there are some students who are clearly ideal for CS, fascinated by the mathematics and strong enough intellectually to enjoy questions of computability, algorithmic complexity and the like. They are, however, fairly rare. It's the much larger body of students who will probably make competent programmers but are driven by the desire to make things rather than explore theory. Those are the ones I puzzle over.
posted by grahamwell at 7:34 AM on July 14, 2010

I think that a good knowledge of computer science is essential for most programming jobs. So is a good knowledge of programming skills, communication skills, business and a bunch of other stuff that isn't anything to do with computer science.

Going into a CS degree thinking that the degree is sufficient to launch a programming career is stupid.

Going into an EE degree or a maths or business degree thinking the same thing is also stupid.

To be employable as a programmer, people need a good mix of all these things, and there is no degree that will hand them all of that on a plate.

Perhaps the best thing to do is work out which set of skills they'd find most difficult to pick up on their own, and pick a degree with that in mind, then go all out to acquire the rest of the necessary skill set in other ways.
posted by emilyw at 7:34 AM on July 14, 2010

It's the much larger body of students who will probably make competent programmers but are driven by the desire to make things rather than explore theory. Those are the ones I puzzle over.

This is me. I mean, in the sense that I'm absolutely giddy over making stuff, but largely bored by the theory. Here's the thing: You need a grounding in the theory. Also, from a "getting a job" perspective, a CS degree is the "right one." An Info Sci degree is - at least in the US - very much seen as "I want to work in IT," whereas a CS degree is more "I want to write code." So while what I probably really wanted was some kind of hypothetical undergraduate Software Engineering degree, despite my disinterest in pure theory, I'm very glad I went with CS.
posted by Tomorrowful at 7:37 AM on July 14, 2010 [1 favorite]

I'm not sure I understand. If you're planning to be a programmer, you do computer science. It is a common criticism that CS programs are too theoretical and have too much math, but nevertheless it's still the natural major for software developers.

Now if these students are interested in other areas of computing--such as network administration, or building and maintaining racks of servers & other equipment--then sure, CS is likely a mistake. Programming is only one type of computer-related job.

From where I stand as a working programmer, CS programs do not adequately prepare graduates for a life of programming. I agree with that. There is nowhere near enough practical programming done. Sadly, while I really dig the high-level math, day-to-day programming tasks practically never require even basic mathematics, let alone stuff like algorithm complexity analysis or advanced data structures.

However, I don't place all the blame on CS programs. To be honest, most programmers are simply terrible at it. It takes a lot of craft, discipline, and caring to write good software. Much as in any field, few people put a high level of effort into improving themselves. Few professional programmers spend time reviewing old code, refactoring and cleaning it up. A lot of programmers do not "think ahead" and anticipate problems due to poor design and poor planning.

Why is this? Well, (1) CS programs have too much computer science (i.e. math) and not enough software engineering (e.g. good coding practices, how to work on a team, version control, etc.). But also, (2) programming is hard. I strongly believe it requires a rigorous mindset that the average developer lacks. CS programs try to instill this sense of rigor, so it's not really their fault that so many programmers are sloppy and not very thoughtful.

I think these factors have a lot to do with high dropout rates. Many CS students realize that, wow, programming is hard. It takes a lot of thought. Many others don't like all the math and want to do more PROGRAMMING. And then another contingent does it for a while and gets burnt out. Some burn out in college, others work for 5 or 10 years and then figure out they hate programming.

If I had to guess, for every 10 students who enter a CS program, only 1 or 2 are really cut out for a career in software development. The rest should do computer engineering, or a business/IT program, or maybe just get some sort of MS/Oracle/Cisco cert and get a job as an IT pro.
posted by Khalad at 7:46 AM on July 14, 2010

Yeah, don't confuse "software engineer" or "computer scientist" with "careers in IT." This Venn diagram doesn't necessarily overlap much. True, there's a lot of unemployment in IT, but my company (and several others I know) can't find enough good software engineers to fill open positions right now. That's software engineer in the C++, large-team-project sense, not the "I wrote an iPhone app once" or the "I like network administration" sense. The skillsets are entirely different. A CS background could launch anyone into any of those areas -- with the right internships, experience outside the classroom, and targeted skill building -- but CS does not necessarily launch you into unemployment.
posted by olinerd at 7:48 AM on July 14, 2010 [2 favorites]

A lot of programmers do not "think ahead" and anticipate problems due to poor design and poor planning.

In my experience this is the main skill lacking in programmers, regardless of whether they got a CS degree, a business oriented IT degree, or are self-taught. They can't get out of their own head and design something that needs to fuction for the end user. I have absolutely 0 experience writing code of any sort, but I got roped in to a software creation project as a leasion between end users and code writers because the code writers were entirely incapable of asking the correct questions to end users to figure out what exactly they need the new software project to do (in this case the software was for invoicing and cataloging charges and payments for different departments of a school).
posted by WeekendJen at 8:00 AM on July 14, 2010

I went to a very prestigious university. They openly admitted that the BS CS program had a lot of material and they were shoehorning five years of learning into four.

I like to make things but after I earned my degree I never wanted to code again (I blame the compilers class I took). Many classmates felt the same way and ended up as product managers, not programmers.

In retrospect, I should have gone for a different, hybrid major they offered called Symbolic Systems.
posted by kathryn at 8:15 AM on July 14, 2010

It's the much larger body of students who will probably make competent programmers but are driven by the desire to make things rather than explore theory. Those are the ones I puzzle over.

You can become a programmer without a CS degree. Generally people slam up against the discrete math and complexity theory classes and think, "wait a sec! all I wanted to do was program!"

I think that programming is an application, rather than an end in itself. What are you programming for? Because you want to do scientific computing/numerical analysis? You might want an applied math degree and work with a professor who needs a lot of programming done. You want to build stuff? Maybe a degree in Electrical Engineering or Mechanical Engineering might be useful.

Now, being a good, experienced programmer should have a computer science background, and maybe a Master's in Software Engineering: and I think they should have those things. But I think what you have to do is convince your students to aim high-- tell them that if they're good enough to succeed at AP Computer Science, then they should be steered away from IT. If they want to do IT, then career paths in "Management of Information Systems" and the like are probably useful. At the same time, anyone with any kind of engineering degree can work their way into that field.
posted by deanc at 8:55 AM on July 14, 2010

Personally, I'd recommend a CS degree to people who seem interested and able to become an academic studying CS.

For programming jobs, something like Software Engineering is probably better suited (but I'd still try to stay away from the excessively vocational side - it'll help initially, but if you're still programming in 25 years you'll wish you had more theory).

For most IT jobs (which aren't programming), I'd recommend entirely vocational courses. Possibly a degree if you want the "I stuck at something for 3 years" flag to show to employers.

Working in IT in general (programming and other roles combined), I think is increasingly becoming a bad career choice. It's particularly easy to send offshore, and even if you find an onshore role, I think you're generally hated and undervalued within your company.
posted by curious_yellow at 9:24 AM on July 14, 2010

Nth-ing that IT/programmer/analyst/etc. are all different jobs, some of which benefit from an undergrad degree in CS.

There is plenty of healthy debate about the utility of a CS degree in software dev jobs (see recent thread). If your idea of software dev is customizing wordpress themes, it's pretty overkill. But otherwise I would be very wary of any develop with an undergrad degree in CS. It's not that it isn't possible, but it just means a judgement has to be made on their portfolio of work, not their degree. This means they need to have built a killer app or library (or compiler or os) that I can use and understand their part in. It's just harder.

The undergrad degree will not teach you about UI design, enterprise development (all those kids who "master" java in school are in for a big surprise), etc. While you are unlikely to become an expert in any particular language, you will hopefully learn about the features that make up a language - object orientation, memory management, functional programming constructs, etc. Hopefully, you'll learn that source control exists, but that's about as far as it needs to go (man pages exist for a reason). From there though, you pretty much have to learn on your own. The problem with teaching the tools/languages is that there are too many and they move too fast. When I went to school, lots of kids wanted to learn C++, cause that's what was cool. I have never had a reason to do much more than poke around some C++ code. I'd wager that most of those kids ended up living and breathing C# or JavaEE. So why even bother?

As to employment, there are always jobs for the good ones. Distinguishing yourself from the unwashed masses is certainly a challenge though. Portfolios of work, open source projects, and research are all different ways to do it. But if you don't have any of those, it might be slim pickings. The degree gets your foot in the door, but you have to bring something else with you. That something else is up to the individual students.
posted by yeoldefortran at 9:43 AM on July 14, 2010 [1 favorite]

Maybe it's just the program I was in, but the CS degree I earned prepared me *very* well for life as a programmer.

There was a mandatory course in software design, which forced the class to divide itself into teams that were not of their own choosing, and assigned a final project, for which all members of the team get the same grade.

The math and theory courses I took provided me with reusable knowledge that I still refer back to, to this day.

And, the higher-level courses were all about programming in a particular purpose-based topic. Databases, graphics, etc.

I'm surprised to hear that other such programs don't seem to be preparing people as well.
posted by Citrus at 10:41 AM on July 14, 2010 [1 favorite]

If you're going to be a programmer and want a degree, CS is the best option. Those SE degrees and such are probably fine, after all many programmers have no degree at all. But if you go anywhere a degree matters, a CS degree will count more than any other. That's because it teaches you stuff you're very unlikely to pick up on the job -- algorithms, logic, etc. Actual programming languages and such are skills that you can learn on the job or as you go. The deeper theory/math stuff obviously _can_ be learned on your own, but it's the toughest part for all but a handful of people and can almost never be learned on the job.

[Most employers are pretty neutral on degrees, though a CS degree is a plus. Some, like Google, put a higher emphasis on degrees and thats where the CS degree really comes in handy].

There's absolutely no way I can think of that a CS degree would ever _hurt_ your ability to get a programming job.

[As others mentioned, non-programming IT jobs -- which are probably more numerous than programming jobs -- usually have far, far less need for a CS degree, if any]
posted by wildcrdj at 11:58 AM on July 14, 2010

Hrm, after checking out your profile / articles better I do see you're in the UK. That might change things in terms of employment outlook, since AFAIK there are fewer software jobs there than here. In Silicon Valley we still need plenty of programmers, and while there are certainly unemployed ones the tech sector is doing better than the overall US economy. But this might be a different story in the UK.
posted by wildcrdj at 12:01 PM on July 14, 2010

I'm going to address your stated concerns, rather than the CS round peg - IT square hole debate.

There's a suspicion that a CS course is perhaps not the best preparation for most careers in IT, being rather narrow, lacking opportunities to develop communication skills with clients and users, and creates false expectations as to what a job in IT actually involves.

Communication is overrated in IT. Many IT departments run a call center help desk to communicate with users, and PMs & requirements analysts to communicate with clients. Moreover, IT is frequently done in house, so the client is the company that hired you. As an example, for system administrators their client goal is uptime and their metric is communicated by Nagios. There's still a place for learning communication skills, but it has more to do with writing an email without the spelling errors I find coming from my colleagues all too often than with persuasion or public speaking / powerpoint presentations.

CS doesn't have to be a narrow topic. Mine required substantial general education designed to make students write, a public speaking course, mandatory Biology + Lab (don't ask), two composition courses and a technical writing course. We also had to take several science courses, copious math and a pretty broad exposure to CS topics (unlike arts & sciences math). In particular, I studied: Operating Systems, Compilers / Interpreters, Software Engineering, 3d Computer Graphics, Databases, UML, Algorithm Analysis, Language Theory, Computer Networking, Artificial Intelligence, and Real Time / Embedded Systems. This background will be perfect if you want to be a programmer, and a solid background should you desire to become a DBA or system administrator, and still pretty useful if you want to become a Network Engineer.

Does this prepare them for real IT? No. Real IT runs on specialization of tasks, so that easy tasks like communicating with users can be done with cheap labor and the DBA and programmers can focus on what they were trained to do. If you're worried students don't get real life exposure, look for colleges that hire students into IT positions. I know a lot of students in my dept were hired all over campus for IT roles while they studied. Our distance learning tool was written in house with a large team of student programmers (managed and led by some full time graduates).

Finally, it's pretty much the case that the "highly obscure and intellectual mathematics" is what makes programmers useful. This stuff comes up all the time in IT scenarios, where it might be useful to have a programmer automate things. Dependency resolution, for example. Package A depends on Package B also being installed. Or Service A requiring Service B to be up, so if B is down we should alert everyone who cares about A. That stuff is made of graph theory and SAT solvers. Even Operating Systems is influenced by theory: all the scheduling and allocation problems are NP complete, so we choose compromise algorithms that harm us the least while still running reasonably fast.
posted by pwnguin at 12:29 PM on July 14, 2010

I'm 16 years away from my decision not to study Computer Science, and during most of those years, I've done some kind of programming for a living. For much of that time, I haven't found myself missing anything at all.

But *sometimes* I'll come up against a problem where I might do better if I had a better mastery of parsing and grammars, where my knowledge of algorithms falls a bit short, where I wish I knew a bit more database theory, where I might be well served with a better background about higher and lower levels of abstraction. Sometimes I have the luxury of taking the time to learn more about these things as the need arises. Sometimes I don't, and the better grounding a CS degree would have given me in these areas would be helpful. I also might have been a generally better programmer from the beginning if there were a few concepts I'd understood better.

I still don't think I should have been a CS major, because to my mind, the big question isn't whether or not whether a CS degree will make you a better developer over your career -- it will, though I think its benefits are probably most important particularly when you're working on the harder end of the spectrum of problems. The big question is one of opportunity cost: what else a student could be studying in college instead, and how those options compare to CS. A CS degree is an asset, no question, but is it a better asset than other degrees?

I think for people who mostly really like computers and software and the possibilities they offer, CS can be a great degree. I don't know if I'd recommend it for someone who's just looking for a profession, and I definitely wouldn't recommended it to someone who's enthusiastic about other things but thinks work as a programmer is acceptable. Because even if they end up being programmers, domain knowledge can be as much of an asset as a well-studied background in CS.

I know it's cliché, but ultimately, I think it comes down to what a prospective student has the most real enthusiasm for.
posted by weston at 2:27 PM on July 14, 2010

(And since we're talking about counseling high school students, I also want to put in a recommendation for Paul Graham's essay What You'll Wish You'd Known. I don't recommend it as gospel per se -- for example, I did major in Math and think I might have been better served with Econ as a choice, contrary to one of the heuristics he gives -- but there's plenty of good food for thought there.)
posted by weston at 2:56 PM on July 14, 2010

I got my degree in computer science and work as a programmer now. I work with a lot of people who don't have CS degrees, but it seems like in general, either they have a BS or MS in computer science, a PhD in physics or math, or 20-some-odd years of programming experience so it doesn't matter what their degree is any more. I think these days, it is VERY hard to find an entry level software engineering job without a degree in CS or a PhD in another highly technical and programming-intensive field.

The folks who don't have CS degrees definitely walk the walk and talk the talk though. At my employer, it would be very hard to communicate with some people if you didn't know a good amount of theory, if only to understand the jokes. I work someplace a little nerdier than average, perhaps, but at other places I've worked too I've found that being able to talk comfortably about runtimes, algorithms, data structures etc is pretty fundamental to being taken seriously.

That said, I did not learn to write good code in school. I learned it on the job.
posted by little light-giver at 6:35 PM on July 14, 2010

Thanks very much for the comments, taken together I think a spirited and persuasive argument for Computer Science. I'm pleased to have my mind changed - I've had something of a 'chip on the shoulder' about CS. The bigger picture painted here is convincing.
posted by grahamwell at 2:49 PM on July 15, 2010

« Older Old lease ends 7/31, new one begins 8/1 - help!   |   Is That Attachment Handier Than the Real Thing? Newer »
This thread is closed to new comments.