Wednesday, June 14, 2017

How To Teach Computer Science

I always read articles like this one - The 5 Worst Ways to Teach Computer Science – with some trepidation. I always expect to find out that I’m doing it all wrong. The other thing that always concerns me is that the author will be all wrong. Everyone who knows how to code thinks they are an expert in teaching computer science. Many of them are wrong. But this article is a good one. (In other words it mostly talks about doing things the way I already do them.) I think to most experienced CS teachers it is review. I think it is written for teachers who are new to teaching CS though and it fits that role well.

I do think there is a place for individual projects though. Not every project needs to be or even should be a group or team project. So the second thing that article did was get me thinking about good practices.

One of the worst ways to teach computer science that the article doesn’t talk about is Do Everything On The Computer. I am seeing that that can be a real problem. My teaching focus is always concepts first and while after 40 years of writing code a lot of things on the computer seem obvious to me. Not so the “digital natives” I am teaching. Many of them separate real life from what is going on in the computer.

We think they see them as the same because of the social aspects of computer use we observe but I don’t think that is really the case. Young people see the communication aspect of using computers as somewhat parallel to their real life but that is much different from most computer science concepts.
Take counters and accumulators for example. They don’t think in terms of those computer science type words even though they use both in their daily lives. It’s hard for them to make the connection using code. I have them count a hand full of coins. Then I have a student total the value of the coins. Now we can have a conversation about counters and accumulators in the context of a loop.
Speaking of loops I have students walk as a loop. Walk seven steps or walk to this point – demonstrates counting and while/until loops. I’m struggling with how to have them act out recursion though. Ideas?

More and more I am looking for kinesthetic learning that gets students physically involved in computer science concepts. There are some great ideas at CS Unplugged which I use with several classes. “Steal from the best” I always say.
We use some exercises from there when we teach sorting, parity checking, and more. They work well and get students involved. Of course kinesthetic learning is far from just a computer science teaching thing. The growth of maker spaces is one newer aspect of it and “making” has some potential in computer science education. We can also connect computer science to other subjects which will help students learn both/multiple subjects.

The important thing is that we don’t narrow our teaching to just lecture and things the students do on the computer. We have to be more interactive and include ways to get students doing things.

6 comments:

Brian Sea said...

*sigh* sadly the article you link to continues to confuse computer science with programming...

Tami Brass said...

Thanks for another insightful piece. I read the article you referenced earlier this week and felt like it was written by and/or for K-8. With CS instruction beginning much earlier, or at least teaching it earlier becoming more pervasive, the approach is a bit different. Often, teachers focus more on coding than broader CS concepts. With such early exposure, the points made in the article need to be a focus or it does just become "coding":
- Everyone can code
- Project-based learning is best
- Engineers collaborate
- CS is and should be highly engaging
- CS is a tool for all other subjects

In my experience, K-5 educators approach CS as a tool more than a content area. In K-8 classrooms, especially in K-5, a more integrated approach is viable. I haven't seen that as much in 9-12 where it's usually approached more as a separate content, much like world languages are taught. (Although I must say that I hope to see it emerge when the kids who've had CS since kindergarten will have so much more experience than kids we see now.)

All CS classes need to have room for offline/unplugged exercises. CSUnplugged is great for lessons, as are TeachingLondonComputing.org and CAS Barefoot. Working with middle schoolers, I've found unplugged activities especially helpful as the kids need movement and they lay a great foundation. Kids build interest and knowledge before computers become part of the classroom equation.

John Dougherty said...

Kinesthetic learning from CS unplugged is great, may I also suggest computational singing? My site will be up end of June, but for recursion (as you asked) you can find The Recursion Song on YouTube.

Alfred Thompson said...

Computational singing! What an idea. I look forward to your site.

Joek van Montfort said...

There's a great Seymour Papert video worth all 30 minutes of your time. Referring to it here as the children will enact recursion from minute 11:30 or so https://youtu.be/1jLNmi5mGqw?t=11m40s

Grant Hosford said...

Alfred, great point about unplugged activities! In fact our curriculum includes both unplugged activities and worksheets for offline projects. Also, while I of course agree that there can be great solo projects for kids - with young kids in particular there is a huge stereotype of the programmer as "lone wolf" that needs to be overcome so I tend to overemphasize group projects. Nice post...