Tuesday, March 13, 2007
« Specialization: the future of our indust... | Main | Issue with Orcas March 2007 CTP »

So here’s a good question: is computer science dead?

I have a degree in computer science, but a large number of people (probably a majority) I’ve worked with over the years have not had such a degree. Instead, they’ve had certificates from tech schools or they migrated to computing from other disciplines like astrophysics, literature, theatre, etc.

Our industry really attracts an eclectic group of people. Personally I think this is because some people “get it” and some don’t. Education is incredibly helpful, but that ephemeral mental twist that allows some people to grok programming can’t be taught, and without that mental twist a person can only go so far – no matter how much education they have. At the same time, people with that mental twist often find their progress slowed by a lack of education, because they waste time rediscovering solutions to problems solved long ago.

Still, the question is interesting: is CS dead? Certainly it is in trouble. Enrollment in university CS programs is down across the board.

But I think the bigger question is whether CS has remained relevant. And if not, can it become relevant again?

Computer Science, as a discipline, is really only useful if it pushes the boundaries and advances our understanding of the science. I was recently privileged to attend Microsoft’s annual TechFest event. This is an event where Microsoft Research shows off their stuff to mainstream Microsoft – to the product groups. Because this is their 15th anniversary, they invited some media and other special guests as well.

Before going further here, it is important to realize that Microsoft Research is the single largest provider of CS research funding, and they fund groups in several locations and universities around the planet. While there are obviously many smart people not funded by MSR, some of the smartest researchers out there are funded by MSR.

Some of what they showed was really cool. Some of it, however, was barely at the level of what you’ll find from vendors in industry. (I’m bound by NDA, so I can’t give specifics – sorry)

In other words, the top academic minds are, in many cases, barely keeping up with the top industry minds who are building salable products. And to be fair, some of the top academic minds are exploring things that are barely even on the radar in the mainstream industry.

To me, this is the crux of the matter though: CS can’t be relevant if it is merely keeping up with industry. If product teams at component vendors or product groups in Microsoft are at or ahead of the researchers, then the researchers are wasting their time.

Consider the idea that a Microsoft product team could be working on a very cool set of functionality. This functionality involves a set of new language features, some runtime capabilities and directly addresses a very important pain point we all face today, and one that will get rapidly more painful over the next 2-5 years. Suppose, for grins, that they even have a working prototype that demonstrates the basic viability of this solution. One that’s robust enough for serious experimentation in development scenarios you or I might be involved with.

Then consider a bunch of researchers, who are working on basically the same issue. They’ve undoubtedly got a lot of thinking and formalization going on that’s hard to quantify. As a result of that analysis they have a prototype that demonstrates some of their thinking. One that can only be run by one of the researchers, and which is too incomplete for broad experimentation.

In other words, these researchers are behind a non-research group.

Now for all I know, the researchers will ultimately come up with a better, more complete solution to the problem. But if they come up with that solution after the product group ships the product then it is rather too little, too late.

My point is this: I think CS is in trouble because academia has lost track of where the industry has gone and is going. As I noted in my last post, the rate of change in our industry is incredible, and it is accelerating. While this may have some negative side-effects, there’s no doubt that it has a lot of positive side-effects as well, and that we certainly live in exciting times!

I do think, like the author of the original article, that one of the negative side-effects at the moment is that Computer Science is struggling to remain relevant in the face of this rate of change. Too many of them are teaching outdated material, and are researching problems that have already been solved.

However, I don’t see a collapse of CS as a foregone conclusion. Nor do I see it as a good thing. The author of the original article appears to suggest that it is a good thing for CS departments to stop focusing on programming, and rather to become focused on “interdisciplinary studies” to better promote the needs of IT organizations. You know, the remnants of what’s left after all the fun work moves to India, then China and then wherever-is-cheapest-next.

But I see it differently. If the technology we have today is the best mankind can achieve, then that is really depressing. And let’s face it, industry-based research is pragmatic. In my example earlier, the industry-based team is solving a very real problem we face today, and they are doing it in response to a market need.

Effective research however, must address problems we don’t even know we have. Problems industry won’t solve because there’s no market need – at least not yet.

I absolutely reject the idea that computer scientists can abdicate the responsibility to move the science forward. Or that we’ve somehow reached the pinnacle of human achievement in computing.

Worse, from an American nationalistic perspective, this sort of attitude is very dangerous (fortunately the author is British, not American J ). Why? Because our economists tell us that it is a good thing that the fun work is being outsourced, because it gives us more time and energy to “innovate” (and allows us to buy super-cheap tube socks and plastic toys). Well, in computing that “innovation” comes through research.

In other words, for the US itself to remain relevant, we must ensure that we have a vibrant Computer Science focus, and that our researchers really are pushing the envelope. Because if innovation is all we have left, then we’d damn well better do a great job with it!

The bar has been raised. For CS to remain relevant they need to recognize this fact and step up to meet the new expectations.

Tuesday, March 13, 2007 9:59:42 AM (Central Standard Time, UTC-06:00)  #    Disclaimer  |  Comments [7]  | 

Tuesday, March 13, 2007 11:27:09 AM (Central Standard Time, UTC-06:00)
I think that the way that we do CS education here is all out of whack. I have a 4 year CS degree and I can think of only 5 classes that actually taught me something practical that I've used today. I graduated in 2002, and we could only take a basic course on Java, nothing that even mentioned the first thing about .NET, and no courses on web languages like PHP. Now I'm reading blogs about technologies that won't be out for over a year. I highly doubt that people in CS departments are reading these blogs based on their class offerings!

I would've been much better off if I just went to school for 1-2 years, learned the important stuff, and then just did 2 years of internships/apprenticeships or just started in a real job. I certainly would know way more than the person that just went to classes for 4 years.
Wednesday, March 14, 2007 2:51:30 PM (Central Standard Time, UTC-06:00)
My sentiments exactally, Jon. I can count on one hand the classes I really got something out of -- and most of these were taught in the first two years (data structures, compiler design, etc.) When I was at university in the early 90s the language of choice was Ada becauase the university got government subsidies for pushing it. Never mind the fact that in industry the only people actually trying to *use* Ada was the DOD and other government agencies/contractors, and only because they had to. C was taught in an elective course called "Programming Languages" and got a couple of weeks of classroom attention along with Prolog and Lisp. A course on software engineering was also an elective. Yes, universities in this country (US) need to step-up or rightfully die on the vine. In practice, I think our industry would be much better served by eductation that treated CS as any other trade vocation like blacksmithing, wood working, etc. In these vocations you are "apprenticed" to a master at the craft that has been doing it for his/her career. In reality that is what is actually happening -- why not formalize it?
Wednesday, March 14, 2007 3:56:35 PM (Central Standard Time, UTC-06:00)
When I completed my CS degree, one of my instructors said that we're not there to learn syntax of a programming language. What they are teaching us are good programming skills, understanding of OOP concepts, design patterns, state machines, OS and database theories. I for one valued my education because anytime there's a new language out (i.e. C#, Ruby, Java), my foundation of CS degree always help. If I just learn the syntax of the new language, I can be an effective developer on that language because I have a good foundation on programming.
Cesar San Jose
Friday, March 16, 2007 12:52:49 PM (Central Standard Time, UTC-06:00)
I completely agree with the outdated items being taught and the lacking of good research -- its a prime motivation for me to get a masters just so I can teach.

A friend of mine is getting an associates in computer science and he's learning vb ...6. Not .Net, but 6, and this bothered me. Curious, I asked him what else he was learning and I found more of the same, old, outdating languages and theories. So recently, I've been taking the time to show him the differences between languages and more importantly, the thought process involved in attacking a problem. His particular professor believes in grading the "most correct way" to solve a problem, which I half agree with, but he has yet to outline a good methodology for solving this problem.

I worry about his ability to be successful in the programming world with the way he is being taught and worse, what about the other students that have no clue?
Jesse
Friday, March 16, 2007 3:20:17 PM (Central Standard Time, UTC-06:00)
I absolutely agree - but one thing is nagging.

I suppose part of the problem has been that anyone on the leading edge gets money thrown at them to form a startup or become an employee of a corporation. Some corporations create positions (such as evangelists or fellows) to perform research style work for a variety of reasons beneficial to the hosting company. Closer to home perhaps the question would be, would CSLA grow and thrive as well if you were working at a University as opposed to working for Magenic?

While this has subsided in the past few years, things like Google started with a thesis paper. And then they regretted making that public. Let's see - earn a few billion ...or... sit in acadamia.

Perhaps looking at it another way - what has to change to this industry to make research a viable career?
Monday, April 02, 2007 1:47:39 PM (Central Standard Time, UTC-06:00)
I got into programming by accident, my university training was in Political Science. Out of all the instructors I had, only one really stood out.

He taught us how to precisely define a problem or theory. For example, we might need to do a study on gender bias in the media. He taught us how to define the variables we needed to measure so precisely that we could hand the definitions to 10 other people, they could gather data and measure the results according to our definitions, and we would get statistically equivalent results out of each person. My entire class struggled like crazy through his class. Frankly, it hurt our heads! But by the end of that semester we had learned how to think differently and accurately communicate our thoughts to others. Naturally, we all signed up for his next class!

I still remember, some twenty-five years later, the first day in the new class, as he started explaining the same concepts to new students. At the same moment, all of us looked at one another with the exact same thought: "Why was this so hard?!"

Once you know how, it's easy. Until you do, it's painfully hard to do.

Data modeling and programming came very easily to me after that.

So, respectfully, I have to disagree with you that good programming cannot be taught. I will agree that precise thinking skills are very rarely taught!
David Wendelken
Wednesday, April 18, 2007 10:10:31 AM (Central Standard Time, UTC-06:00)
Software development can be thought of as both an engineering and scientific discipline. It is a science when working on new algorithms or processes; it is engineering when applying established approaches to well understood problems. Business applications tend to be of the latter variety. That is why you find more college educated people developing business apps. They aren’t applying the scientific process to solve their problems they are applying design patterns. One area that I have been studying for the last five years is computational neuroscience. Programmers in that field tend to not only be university educated but also on the Phd. track. So the education level required is based on the type of problem that needs to be solved. Computer Science will always be needed as long as there are computers and things about the universe we don’t understand. But we don’t need computer science to build yet another table editor.
robert
Comments are closed.