Computer science educators are fond of saying that computer science is a lot more than just programming. Programming has a bad reputation. And in some ways so do those of us who find programming to be a lot of fun and very interesting. So there are some good reasons to deemphasize programming to some extent. But can we avoid it completely? A couple of people I respect have taken up some form of this question lately.
Mark Guzdial has a great post on his blog titled Programming is central to Computer Science. Mark makes a good case for programming being a central notation system that is essential for computer science. The whole thing is worth reading and I can hardly do it justice in a summary. One the other hand, the Wicked teacher of the west takes a slightly different view on her post titled Is programming necessary? She riffs off of some comments by Robb Cutler (another really smart guy who I wish would blog) Robb “thinks we could teach introductory CS at the K-12 level without any programming at all.”
Well, yeah, I guess we could teach some computer science without programming. The CS Unplugged program is one great example of that. There is a lot of good computer science education there. But is it enough? I’m not convinced. Teaching computer science without computer and programming is like teaching physics without math and experiments. One can go so far but no further. I do think that it would be worthwhile to teach some computer science concepts without programming. Let’s get people to understand where the path leads. But taking them as far as they need to go is going to take some programming. There we need to make it more interesting and relevant.
This is a good discussion to have though. Where does the need for programming start and how far can one or even should one go before introducing it?
"But taking them as far as they need to go is going to take some programming."
Ahh... here is the crux of the question. How far do they need to go? One place where Mark and I differ is in our daily experience, and I think that hugely informs our points of view. I would NEVER recommend that serious CS students at the university didn't program - I do think that "doing" CS means programming. However, at the middle school and high school levels, we have the opportunity to inform a lot of kids who will never be serious CS students. For many of them, programming gets in the way of understanding what's happening. We can talk about ideas like the limits of computing (even the dreaded P vs. NP) without deriving the formula or writing the programs and most young people will understand the idea better.
I think the future senators, CEOs, gardeners, and doctors of the world would be better off clearly understanding the big ideas in computing and not thinking CS = programming = hard and scary and bad. A little programming sprinkled in so they know what computer scientists do is good. A year of looking for missing semicolons is bad.
I agree that computer programming should be a part of pre-collegiate computer science so students become fully aware of the job expectations as well as the commitment to this discipline prior to attending college. A teacher's job is done when a student takes a class and decides (a) this is for me or (b) this is not for me. With that said, Web 2.0 technologies are so wysiwyg that non-programming students have need to understand "computer speak" and learn software applications, so offering non-programming classes is equally valuable to future computer scientists and all others.
Glad you liked the post, Alfred. I loved "Wicked Teacher"'s post, too, and am planning to respond in a future post.
Robb and "Wicked Teacher" here both express faith in what I think is an open question: Can one learn important things about computer science without programming? I love CS Unplugged, too! Do students know it's about computer science? When students learn something about networking with "CS Unplugged," do they think about that the next time their Internet connection goes wrong? When students do a sort algorithm with people, do they think about that if they do become a CS major and need to write a program to implement the CS algorithm? OR, is computer science without programming NOT computer science at all?
Margaret's point about new tools is the important one. Programming does NOT have to be hard or scary or bad. The current tools that are out there are hard and scary and bad. I can't imagine teaching a middle school student Java. (I have a hard enough time teaching it to undergrads!) Alice is better, but not as easy to use as Scratch or even 1980's Logo. Scratch and Logo are tools designed from the ground-up to be usable by K-12 students for learning. (Alice wasn't -- Alice was originally designed to be a prototyping tool for CMU students, and got morphed over time.)
The amazing thing about computing is that there are virtually no ground rules. If we don't like what the activity of programming is like, WE CAN CHANGE IT. (If the response in the back of your head is, "But nobody uses Logo anymore?" The response should be "Why not?")
Programming is central to Computer Science. You don't teach cooking without mentioning ovens and pans. You can teach how to appreciate a good meal, what makes a bad meal, and the disadvantages of food poisoning but you can't make a cook without putting them in the kitchen and getting them to prepare stuff.
However, programming should be sold as a means to an end. It is all very well to talk about the intrinsic beauty of a well turned piece of code but this is pretty much guaranteed to turn people off. You might as well go into raptures about a particular kind of gearbox design to someone who can't drive.
I sell programming as "The Science of the Happy Ending". It is the thing you use after you have found out exactly what the other person wants. You use it to get the behaviours that will make everyone happy. If you've no idea what is needed you are sometimes allowed to "doodle" with code and see what happens. This is OK for games but less desirable for nuclear reactor control software. But you still need to be able to program.
Saying the curriculum is broken and putting people off the subject is fairly meaningless, since in my experience even the sharpest students don't really read the curriculum anyway. They just have an idea about something they want to do and that it might be cool.
I think the problem with CS at the moment is that nobody is selling it properly. Sell it as the ultimate in creativity. Sell it as the only place that you can build a universe that works to your rules and nobody else's. Sell it as a way that you can express yourself like no other. Sell it as the thing that you can use to make people happy. That might work.