I’ve seen a lot of discussion recently about Computer Science versus Computer Programming, at both school and university level. A lot of it seems to be flawed by a lack of a common understanding as to what either side involves. Allow me to muddy the waters with some diagrams! I’ve tried to make a list of the topics that keep cropping up in this area. Would you like to try and draw a line around the ones you believe to belong to Computer Science and the ones that belong to Programming? Do they overlap at all?
And now here’s my impression of what different people are talking about.
“Computer Science is More Than Just Programming”
I hear this line, “Computer Science is More Than Just Programming”, a lot in the Computing at School organisation. My impression is that they think of programming as the solid blue line below: just writing the code. They worry that Computer Science will be taught by rote, with students churning out simple code without deeper reasoning or proper problem solving (the rote-learning, cookie-cutter, tickbox response to a growth in Computer Science in schools). So they want instead it to be recognised that Computer Science is more like the red dashed line, encompassing various other topics than just writing the code:
“Offer Software Development Degrees, Not Computer Science”
Meanwhile, at university-level, you have people arguing that Computer Science is not useful for most students, and there should be offerings of software development (or software engineering) degrees instead. I believe these people think of Computer Science as being the solid green line. They instead envision a degree more like the dashed purple line, focusing on the practical aspects of being a software developer:
What is in a Computer Science Degree?
So-called Computer Science degrees are a fairly broad church, at least in the UK. You could probably draw a line around any combination of 5+ items and find a university in the UK that offered that content under the Computer Science branding. I guess you can take that two ways. You could argue that Computer Science degrees need tightening up, so that they all offer the same content. I think I’d favour more the opinion that we’re naming things too broadly, and we should call it programming if it’s focused on programming. But naming is a complicated issue, and relates to the age-old vocational/academic can of worms at universities.
Side Note: Computational Thinking
A quick final note on what computational thinking is, as some may be surprised to see it separated from problem-solving. Computational Thinking is a term bandied around a lot recently, and thankfully it does have a definition laid down:
“Computational Thinking is the thought processes involved in formulating problems and their solutions so that the solutions are represented in a form that can be effectively carried out by an information-processing agent.”
To my mind, Computational Thinking thus does not encompass problem-solving. It’s more about capturing the preciseness of expression that is required to write programs and interact with precise systems.
Summary
I think we need to somehow be clearer what we mean when we talk about computer science and programming (it’s taken us a while, but the Royal Society at least separated us from IT). If we don’t clarify this, we’ll spend all our time talking in circles and not realising where we actually agree and disagree. Feel free to share your thoughts in the comments.
One additional post I read recently but forgot to weave into the main article is from Miles Berry:
http://milesberry.net/2012/05/coders-and-compscis/
What frustrates me about this discussion is that while I agree with the gist of it, what’s missing is vital. There’s no real discussion of the engineering part of software engineering. The dotted purple stuff listed above may be what many people do in practice, but, too often, they are not doing genuine engineering and are not real software engineers. Perhaps this doesn’t matter for a lot of applications, but I work in areas where things like safety and reliability are vital. I am concerned about the kind of software that lives depend on. For software like that, computer science is an important fundamental (but only so much), and engineering foundations is another fundamental (that is seldom if ever taught in computer science programs).