Let’s call It “Computer Science” AND “Programming”: The fat line where most people will be
Who knows why meme’s start, but one of the big ones in the Computing Education blogosphere today is “Let’s not call it ‘Computer Science’ if we really mean ‘Computer Programming.'” Based on Neil Brown’s excellent response, I suspect that it’s the UK “Computing at Schools” effort that is leading to this question. If you’re going to define a computer science curriculum, you’re going to have to define “computer science.” Both Neil and Alfred Thompson do a great job of helping us define kinds of computing and understand the goals of the different kinds of curricula.
I’m more interested in the assumptions in the original blog about what the “regular people” are going to do. Jason Gorman claims that 99% of people involved in computing are just “users.” “I believe that what’s needed is a much more rounded computing education for the 99%, with IT blending seemlessly and ubiquitously into everyday lessons as well as home life.” They need computational thinking, but not programming, argues Jason. Jason sees that only 1% of students should get programming. “For the remaining 1%, of whom some might become software developers, we need programming in schools (and out of school). Lots of it. ”
That sharp distinction is not how people work today. Chris Scaffidi, Mary Shaw, and Brad Myers explained this in 2007. For every software developer in the world, there are four more professionals who program, but aren’t software developers, and there are another nine other people who are programming, but don’t recognize that.
- A lot of Jason’s 99% are going to write SQL queries. That’s where much of the world’s data lives today, and lots of people need to get to that data. SQL queries require variables, conditionals constraints, an understanding of data abstraction, and oftentimes, a model of iteration. Looks like programming to me.
- A lot of Jason’s 99% are going to create spreadsheets: Same variables, conditionals, models of iteration. Oh, and testing. One of the common themes in all the end-user programming literature is that new programmers don’t realize how many things can go wrong in writing programs, and how much time they’ll waste in debugging if they don’t develop good testing practices. There is a real economic cost to all those end-user programmers losing productive time to bugs. Is testing in the “Computer Science” side or the “Computer Programming” side?
- All scientists and engineers will program: Maybe just in Excel, many in MATLAB or R, and a surprisingly many in both. Greg Wilson just sent me a great paper yesterday about all the ways that scientists and engineers code. They’re not professional software developers. They use programming to achieve their goals.
Jason’s worldview has this giant country of “Computer Users,” and this tiny Lichtenstein of a country called “Computer Programmers” next to it. The problem isn’t that the border between them is thin, porous, and maybe more gray than well-defined. It’s a really fat line, and that’s where most professionals will live. It’s really another whole country, lying in the border, and it swamps the other two.
What people do with computing is changing, and growing. Programming is a medium, a literacy, a form of communication and expression. More and more people will use it. Jason also raises the issue that self-taught programming is just fine. Someone yelled at Alfred in his blog for not recognizing the greater value of self-taught programming. Neil Brown called it right: Emphasizing self-taught programming is another way of shutting women out of computing. I look at the issue from a literacy perspective. Some people can teach themselves to write on their own, but you can’t count on that to achieve literacy in your society. If a literacy is worth knowing, teach it. Computer programming is a literacy, and everyone should be taught it — and computer science, too.
Think of computing as a pyramid. At the base, we have computer users, who will probably make up about 99% of the pyramid. The next level up is people who write software (let’s ignore people who make computers – that’s electronic engineering, which a CS education won’t help you with), and they might account for the next 0.9% of the pyramid. Finally, at the top, are computer scientists – people who advance the concepts, design the programming languages and “push the envelope” for the 0.9% of us who write software day-to-day.