I’ve been reading a lot of complaints about the current state of computer science education lately. This post makes a reasonable attempt at summarizing the different ideas around what sort of graduates these programs should produce. I’ve been in industry long enough that my CS program hadn’t switched to using Java as the initial language when I started. I agree with Brian Hurt and Chris Cummer about the value of a computer science degree.
The right courses in a CS degree amount to a toolbox of concepts that you can use to solve whatever real-world problem you’re facing. The most recent example of this happened on the job. We had an issue where some text files being downloaded for storage in a database kept causing failures in a process. Because of how the process was implemented, there was no way to pin the cause of a failure on a particular line of the file. The files in question are regularly more than a gigabyte in size, so manual inspection wasn’t an option. The minimal understanding I have of how compilers work enabled me to direct my staff to build a parser, so we could validate the input file before running the process against it. Without a CS background, it’s highly likely that I don’t come up with a solution at all (or a really bad implementation of a parser).
If I had it to do over again, I would have spent more time in my CS program getting better depth in compilers, operating systems, and other areas.
Computer science isn’t perfect, but it’s relatively young as a field compared to disciplines like law or medicine. There are probably things that should be changed, but I think the fundamentals are good.
I absolutely agree with you about the value of CS and the more fundamental and theoretical concepts.
However, I’m not certain that every last code monkey out there needs to have been exposed to them in school. What they do need is to be instilled with an ability to learn continuously, to come up to speed with whatever they need to do their job.
I’m also not certain that current business culture is going to much longer accept paying what it takes to make sure all their programmers have this theory knowledge from school. If for no other reason than that there are so many duds out there because of the faults in most programs, and they can’t risk hiring a dud.
Also, I’d hope that if your staff is actually capable of building a decent parser, that one of them would also have the sense to come up with a parser as a possible solution, if you hadn’t.
Finally, the fact that you were able to make it out of a program that is billed as “Computer Science” without getting a good understanding of compilers, OS, etc., is exactly the type of fault that people are complaining about.
My post was essentially saying, there are some great points on all sides that need to be dealt with, but I don’t think we will be able to solve them all with just one degree, regardless whether revamped or left alone.
I wholeheartedly agree with you on the importance of theory and fundamentals in a CS education, however the degree to which these are required I think really depends on your aspirations. I think it’s far more important, for the average programmer out there today, to instill in students a willingness and ability to quickly come up to speed on whatever it takes to get their job done. That way if they need the theory, they can pick it up.
I’m also concerned that companies hiring into “business programming” positions will not much longer be willing to pay the salaries that CS graduates with that theory education will demand. The larger companies, who can afford the non-personnel overhead cost of off-shoring, will gladly off-shore these positions. Smaller companies more concerned about total cost will go with local resources, and I think there’s definitely a space here for 2-year grads as a sort of highly modular, small-scope, “code monkey” style developers (Reg Braithwaite calls them clerks, and argues that they will be hired if they can get stuff done).
Regarding your parser project, all I can say is that, if your team is capable of successfully building a parser, I’d think that at least one of them would also be savvy enough to recommend it as a solution, even if you hadn’t.
Finally, I just want to make it clear that the fact that you were able to get a CS degree without having to learn more about compilers, OSes, etc., is exactly the problem that many people are pointing out. If a CS degree isn’t doing this, then calling it a CS degree is not accurate.
I guess all I’m really saying is that there’s no way one degree can be everything to everyone in the CS world. In reality, we don’t have anything close to that anyway. We have a lot of different degrees with no coherent vision, all claiming the same few names. Things need to be cleaned up a bit.
Very sorry for the double-post. =(
I posted the first one a few hours ago, but for some reason it still wasn’t showing up. I thought maybe I had forgot to hit submit on a preview screen or something.
No apology needed on the double-post. Comments are modded here to deal with spambots.
As far as my CS experience at University of Maryland went, they allowed you to specialize in any one of a number of tracks. I opted to touch on some of the theoretical underpinnings (operating systems theory, more algorithms, data structures), and get depth in software engineering and databases. In retrospect, adding the experience of writing a compiler and an operating system as an undergraduate would have made me a better developer and widened my job prospects. Regardless of how you structured your course selection, the required courses at Maryland ensured that you had sufficient exposure to theory and practice that you had only yourself to blame if you weren’t at least a competent programmer at the end of the experience. If you don’t believe that rates as a computer science degree, that’s fine. There’s a long list of employers, bosses and colleagues (current and former) who will heartily disagree with you.
There’s an argument to be made that if a company doesn’t want to pay the sort of salaries a CS graduate rates, they are willing to accept inferior results. If they aren’t interested in 4-year graduates, nothing says they’ll be interested in 2-year graduates when DeVry, or Learning Tree, or any of the multitude of certification places assert that they can turn out a productive software developer in a year or less.
As far as the parser project went, it only took one member of the team to build it. Because he has a computer science degree as well (even though he didn’t suggest the parser idea initially), it meant he understood the goal right away, and was able to implement it.
> There’s an argument to be made that if a company doesn’t want to pay the sort of salaries a CS graduate rates, they are willing to accept inferior results.
There certainly is, and I won’t disagree with you. However, breaking things down to inferior and superior is an oversimplification. Otherwise, why in the world would anyone hire a fresh grad when there are people with experience available? Different price points mean a healthy market. Not everyone needs a plasma TV. Not everyone needs programmers that can write a compiler with one hand and business logic with the other.
> Regardless of how you structured your course selection, the required courses at Maryland ensured that you had sufficient exposure to theory and practice that you had only yourself to blame.
Sorry, I got the impression your school wasn’t pushing/requiring the theory courses. My mistake. However, these schools do exist. I graduated from one. In retrospect it’s obvious the degree I got was geared toward a very different type of work than what I wanted to do. But it would have been nice if this information was made clear up front.
>If you don’t believe that rates as a computer science degree, that’s fine.
My complaint here is more one of nomenclature than of elitism. I just think that this is the core content that justifies the name “science” in the degree. Without these theory fundamentals, it becomes much more like a trade than anything else. It doesn’t make sense to me to remove this content, even at the student’s choice, and still call the degree the same thing, because it really drastically changes what the student’s foundations are built on.
> There’s a long list of employers, bosses and colleagues (current and former) who will heartily disagree with you.
That’s the cause of the debate. No one agrees on what constitutes a computer science degree. Generally people seem to think that it’s “whatever I need my peers and employees to know”. And if people are going to insist (like Joel and Jeff) that a degree should prepare people better for “the real world”, one degree is _never_ going to be able to cover the breadth of software industry and academia. Some people are going to come out tragically undereducated for what they intend to specialize in, simply because they didn’t know that CS at their school means something different than CS somewhere else.
This is the reason I suggest we need to acknowledge the reality: that programs are already diverging organically right now, and that the inconsistent naming is confusing both students and employers. Things need to be cleaned up.