Sunday, January 13, 2008

Theory of Computer Science

Jeff Atwood at Coding Horror wrote a recent post on how we teach computer science (although "How we teach software engineering" would be a better title). His basic premise is that teaching quicksort, A* search, and Donald Knuth isn't enough to make a software engineer in the real world. There needs to be some mention of issues with deployment, source control, dealing with bug reports.

However, I find his conclusion pessimistic beyond the point of reasonability:

"Half of software engineering is pain mitigation. If you aren't cursing your web hosting provider every week, fighting with your source control system every day, deciphering angry bug reports from your users every hour-- you aren't being taught computer science."

No, this shouldn't be what software engineering is. Software engineering should teach ways to avoid dependencies and problems with your web hosting provider. A bad source control system is just that, bad, and should be fixed, not fought with on a daily basis. And dealing with angry bug reports isn't really a software issue at all, more an inter-personal issue to figure out what is broken.

Software engineering education should teach how to design software well in the real world. It shouldn't be about dealing with minor inconveniences that are best dealt with from common sense, that in many cases aren't related to software at all.

No comments:

Post a Comment