Sun 11 Sep 2005

CS education

Slava rips into this guy's opinions on CS education. This is a favourite topic of mine, being a product of such, and now being involved from the other side of the lecture theatre.

While Slava makes plenty of valid points (I also utterly agree with him that the guy needs a clue), I think he misses a few — so thanks to the joy of trackbacks I'm going to supplement his post.

When there are two nested quotes, the innermost is the original article, and the outermost is Slava. When there is only one layer of quoting, it's the original article.

… machine learning, quantum computing, Bayesian networks, embedded systems... How many of these graduates will go on to regularly use this information?

Umm, any graduate who goes on to study neural networks, computer vision, artificial intelligence, robotics, …

For me, it's not necessarily that a student will use this knowledge should they go on to study, but that the knowledge is vital for their development as programmers, computer scientists, and rational people.

The knowledge I gained from my NN, AI, compiler, &c. courses has come in handy in entirely unrelated domains, as well as in the intended domain (everyone has to write a compiler for something at some point, and good luck doing that if you've never been taught how an FSM works!). Like all abstract education, the improvements it makes to your problem-solving skills are valuable elsewhere. Think of it as mental exercise — but it also stocks up your toolkit.

Another top university states that the final year project is to 'Develop a game'. Great for attracting students, maybe not a great idea for getting them a job?

There are also less jobs for neurosurgeons than fast food workers.

From someone who has experience in this area: developing a game is one of the most strenuous development exercises possible. You have stringent performance constraints, complex algorithms, extensive use of all kinds of data structures, and large volumes of code. The fact that you get a visible sense of progress also makes it ideal as an exercise. I think the guy thinks graduands should design an e-commerce transaction processor using J2EE and XML. Right.

If you can design and implement a computer game, you can write a generic business application using only your toes, even if you're forced to use Java for it.

Not much use knowing how to handle three dimensional diffuse lighting vectors when you're trying to create a customer feedback form for an insurance company.

That's like saying "Not much use going to college, when you could be selling drugs on the corner instead".

Conversely, good luck trying to implement 3D diffuse lighting vectors when your final project was a customer feedback form for an insurance company.

Shouldn't your university education stretch you?

Is there any modern software these days that doesn't use XML?

Yes.

Or, to be snide, I'll bring out that old quote — “I wonder if I can use XML for this problem?” Now you have two problems. XML is over-used, and (as Slava points out) takes no more than a weekend for a competent computer scientist to learn. After all, it's just tree walking, and you did attend your basic algorithms + data structures course, right?

Oh no, you were too busy going to your XML course. *sigh*

Patterns and Anti-Patterns (With real world examples, not just theory)

I see a Java bias here. How about producing students who can think for themselves, or — better yet — use languages that don't need codified workarounds for their limited expressivity?

Architectures: client/server, SOA, P2P, etc.

I'd like to point out that this is trivially covered in almost any networking course. Does he think that computer science students are stupid, and need ten weeks to pick this stuff up?

It depresses me when people think that a computer science course should devolve into Java + XML + the latest enterprise fad. Computer science is meant to teach the principles of computation; complexity, data structures, algorithms, and how to solve problems computationally. It is not meant to teach the language du jour, but to give you the ability to learn languages and techniques with minimal effort.

I like to think that I am a capable product of my education, and I have had no difficulty working with complex theory, or learning more languages than I can remember. I am confident that if I'd been raised on a diet of Java and XML, rather than more rigorous and interesting matters, I would be a less capable developer today.

The original author, Dan Zambonini is a Semantic Web guy, which puzzles me — they're not normally this close-minded, or they'd have stayed as XML guys!

I shall leave the final point to one of the O'Reilly commenters (check the title: “I don't think you have any idea what you're talking about”!):

As an actual point of comparison, my company hired a CS intern from UC Berkely this summer. He didn't know SQL, servlet programming, and had no software development experience, all of which is pretty important for enterprise software development. He took all of a week and a half to get up to speed and he did a fantastic job (by the end of the summer everyone wanted him to drop out and come work for us, he wisely declined).


Posted at 2005-09-11 14:28:28 by RichardLink to CS education
Comments, trackbacks.

Google
Web holygoat.co.uk
  • richard is: