Software Development is not Computer Science
This post by Chris Chapman is a wonderful piece of interesting research. He is basically pointing out that Ontario Universities are not teaching newer software development practices in their computer science programs. He apparently plans to follow up with all Canadian Universities.
What Chris doesn't seem to understand is that computer science is not the study of software development. Computer science is theoretical, not applied science. If you want to build a bridge, do you do a degree in civil engineering, or in physics?
Check out Wikipedia on this common mistake:
"In fact, the renowned computer scientist Edsger Dijkstra is often quoted as saying, "Computer science is no more about computers than astronomy is about telescopes." The design and deployment of computers and computer systems is generally considered the province of disciplines other than computer science. For example, the study of computer hardware is usually considered part of computer engineering, while the study of commercial computer systems and their deployment is often called information technology or information systems."
In a field that's still relatively new, there's still much confusion over what each of the related fields should be named. But there's no reason to believe that agile development or design patterns are computer science concepts.
That said, I can't explain why so many computer science departments are interested in talking about big design up front or waterfalls.
I think Chris has opened up an interesting dialogue. Where do people go to learn these practices? Do employers believe that computer science grads should know these things? If so, someone needs to clarify for the employers.
Someone also ought to clarify for the students! I personally have a Bachelor of Computer Science degree. When I started, I thought I was going to learn to be a better programmer. But that was not the point of the program, and I was disappointed.
6 Comments:
I have a bachelor of science degree in CompSci from U of Toronto. I agree that CompSci has taught me mostly theoretical stuff, mostly a lot of mathematics (and those things called "semaphores"). But, those kinds of thinking prepared me mentally, set me up on a different (higher?) perspective. Will it make me a better programmer? Probably. If we can do abstract thinking, we can easily do the practical ones (not the other way around).
Hi Scott;
Thanks for your comments - I've been in the middle of writing some other posts and just noticed your article.
Re: "What Chris doesn't seem to understand is that computer science is not the study of software development. Computer science is theoretical, not applied science."
I've encountered this reaction to my articles quite a bit, and it comes from both CompSci and SoftEng majors, each somehow believing it's "the other guy's" responsibility to know best practices.
I call "shenanigans" on this attitude: Irrespective of whether you're following a path toward AI/neural nets or architecting the next big platform, code is code, unit tests are unit tests, refactoring is the improvement of the design of existing code and BDUF/waterfall projects fail 99.99999% of the time.
So, to respond directly: I'm fully aware that there are "differences" in the way post-secondary IT instruction is delivered today. I just find when it comes to better practices, students and our industry will be better served knowing them, whether they are CompSci or SoftEng.
In any event, the distinctions tend to be way overblown, IMHO.
Cheers!
Chris R. Chapman
Hi Chris,
I don't disagree that these are important things to learn. But I think it's the domain of a professional governing body like with the P.Eng.
The problem is that we don't have such an organization yet.
Exposure to some of these ideas would make a great course, and definitely should replace the typcial waterfall course. But these things are definitely not the focus of a Computer Science program.
I read and interesting essay by Edsger Dijkstra (not sure which one) where he states that what is taught in computer science has not changed in 30 years (or so). Now this essay was written, I believe, in the late 1990', but I believe it is still true today. Now I'm not sure if this is good or bad thing...does computer sci teach the 'fundamentals' or are they out of touch?
I did learn LISP and the "Turing" language back in 1988. They are old languages. But CompSci also offered C and Unix shell programming. It also had Mac's Macromedia for UI course. So that was a progressive curriculum.
I'm assuming by now they would include Java and (gasp) Ajax.
Apologies if I'm prolonging this past its "best-before" date...
" don't disagree that these are important things to learn. But I think it's the domain of a professional governing body like with the P.Eng."
No, it's not - otherwise, why are these practices even being considered at all in CS/SE curriculums?
Almost every school I reviewed in Canada had some proper software development/life cycle management requirement for graduation -- even if they were what I thought to be "worst" practices.
And they applied for both CS and SE streams - with the latter having additional specialization requirements.
Clearly, schools are valuing having graduates who have some professional skills to prepare them for the real world - it's just unfortunate that most aren't getting anything useful and that employers and students are having to make up the deficiency a-posteriori.
I can only speak from experience: I've worked with a lot of interns, many of them CS, many of them SE. The commonality they shared was that neither group had practical skills to work on code, at least beyond the level of "code-and-fix" - and it's not because they're unable or unwilling: They just had no exposure.
Anyhow, I'll conclude my comments here - we obviously have very different ideas about how best to approach the matter.
Post a Comment
Subscribe to Post Comments [Atom]
<< Home