Problems in Computer Science Education — CLUEHQ
Random Thoughts from a Computer Science Student…
Random header image... Refresh for more!

Problems in Computer Science Education

A recent article discusses a worrisome trend in computer science education:

It is all about programming! Over the last few years we have noticed worrisome trends in CS education. The following represents a summary of those trends:

  1. Mathematics requirements in CS programs are shrinking.
  2. The development of programming skills in several languages is giving way to cookbook approaches using large libraries and special-purpose packages.
  3. The resulting set of skills is insufficient for today’s software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals.

These trends are visible in the latest curriculum recommendations from the Association for Computing Machinery (ACM). Curriculum 2005 does not mention mathematical prerequisites at all, and it mentions only one course in the theory of programming languages.

Any individual who has spent as many years working on a CS degree as I have can tell you that there is a distinct difference in the way that Computer Science is taught now as compared to how it used to be taught. I’ve certainly noticed a difference. It’s important to quantify that difference before we decide if its a positive trend or a negative trend.


There are really two different types of skills that need to be learned to really have a complete CS education. On one hand, you need a certain comfort with computers and computing tools. You have to learn how to properly select the right tools to accomplish any particular task and know how to efficiently use that tool to do the job. On the other hand, you have to understand some of the foundations of computing theory and algorithms to really get good at working in the field. It doesn’t matter how good your Perl hacking skills are if you don’t understand what P ≠ NP means and why it’s significant. Similarly, if you don’t have an awareness of how to implement a certain algorithm in a relatively useful implementation of a language, you’re usefulness is really limited in all but the most academic of environments.

It used to be that CS education at most top schools really focused on the theoretical aspects of CS rather than teach programming languages or frameworks. It was much more likely to see Discrete Mathematics rather than Java 101 early in a CS curriculum at the undergraduate level. This is all well and good. CS has much more in common with mathematics than most people really appreciate and any good CS program will cover at least three important theoretical areas: discrete mathematics, analysis of algorithms, and formal methods. In some programs, the entire curriculum is dedicated to specific theoretical aspects of CS rather than an occupation with teaching the use of tools. Classes on Operating Systems or Compilers are common. If you learn to use any tools or languages as an undergrad, that’s purely a side effect of the instruction and homework completion.

But if you already have a solid understanding of these principles, is it really necessary to revisit them? Sometimes you just need a structured introduction to a specific tool so that you can minimize the learning curve associated with it. When I first started CS, the language used for instruction was Pascal. By the time I gave it a second try, we were using C and Scheme (C for operating systems and Scheme for discrete math and algorithms). Now the language of choice is Java. I knew that I needed a refresher in a currently used tool and decided to take an introductory class at Harvard Extension (CSCI E-50a/b) to gain some needed Java skills.

I didn’t need to learn how to program. What I needed was a guided into to object-oriented programming and Java. With these skills under my belt, I could progress onto the theory classes like CSCI E-119 and CSCI E-124, which are both tough classes that mainly focus on theory. CSCI E-124 is particularly tough; I took it during the summer session and nearly ruined my GPA with the quick pace and depth of material I had to digest.

Note that I’m not saying that one is more important than the other. Both are important if you really want to be effective. You can’t really have one without the other.

Unfortunately, a lot of the CS education programs offered to adults really only focus on the vocational aspects. The spotlight is on a programming language or a database program rather than the theory behind the operation of these tools. That’s a shame. If you’re looking for a true CS education, make sure that the program you select gives at least some treatment of the theoretical aspects of CS. It’s all well and good to target specific skill deficiencies with skill-specific courses but you need a solid foundation to really have a true CS degree.

2 comments

1 Ian Lamont { 01.11.08 at 12:22 am }

There have been a couple of Slashdot discussions about this over the past few years, including these threads:

http://ask.slashdot.org/article.pl?sid=08/01/09/1858220

http://developers.slashdot.org/article.pl?sid=08/01/08/0348239&tid=146

For many people, the focus *does* seem to be on languages.

2 richard { 01.11.08 at 5:52 am }

Ian,

It’s clear there is a kind of disconnect in CS undergraduate education. A lot of undergraduates are concerned about having specific skills that they think employers want so they can get good jobs after school. Clearly employers are also concerned that students seem to enter the workforce without the requisite skillset to be productive in the near term.

But what we see is that if you put too much focus on learning the ins and outs of a particular language and not on the theory of computation then the ability to think methodically about a particular problem type is lost. If all you have is a really good understanding of Java, then you don’t understand how optimizing the data structures you use can have a significant impact on the efficiency of your code. The result is slow, buggy code.

My point is that the theory part isn’t unimportant but it isn’t all-encompassing either. You need good doses of both to really be effective as a programmer. It’s a lucky fact that at HES, you really do get both. There are courses in Oracle as well as courses in Databases (information management). One class reinforces the other in scope and depth.

Leave a Comment