Tuesday, July 09, 2013

How Important Is The First CS Course?

I’ve been reading a lot from CS educators lately. Regular readers know I am running a series of interviews with teachers from all over. As I write this I have five of them posted with an other half dozen or so in the queue to post over the next couple of weeks. Patterns are starting to emerge. One of them is that many successful programs start with a very good first course. Not the AP CS course. And not an applications based course. rather they start with a first course that is more of less a gentle introduction to computer science.

These courses include programming as you would expect (or hope) but they do it in a way that encourages students to want to do more. Make Zamansky (who I hope to have an interview with soon) talks a bit about his schools first course on his blog at Gender Stats. While the main thrust of that is his school’s success with attracting and retaining young women in the program he talks about the first course that is important to those efforts.

A well designed required intro course where young ladies can see that this stuff is cool and women are just as good at it as men.

The word required is Mike’s emphasis but I’d highlight it myself. Would that we could get more schools to require a first computer science course. It is long since past time when students should get the basics of word process and spreadsheets long before they get to high school. Having an applications course in high school is a systemic failure. But we do need students to have some early exposure to computer science. If not in middle school than no later than early secondary school.

When I bring this up I often get the response that another required course will just turn students away. My answer is plain – if your required courses, in any subject, do more to turn students away from the discipline than towards it you are doing it wrong.

In the case of computer science there are lots of fun and interesting things to teach and ways to teach them. You can use block languages like Scratch, Kodu and Alice (see lots more at block programming languages) for example. You can use turtle graphics in tools like different versions of LOGO or TouchDevelop or Small Basic and many more. You can use languages like Visual Basic that are more friendly than the semi colon and curly brace languages.

But most of all you can teach things that students care about.Let them get creative. A project they can and want to show their friends is worth five they have no interest in. You can talk about applications that change the world. Or even just their world. But by golly computer science is fun and interesting and a first course should show that. Get them interested. We are not yet at a point where courses that weed out the kids who are not already hooked on software are necessary or desirable.


Garth said...

There are just so many ways to make an intro programming course fun for even the non-geek, average student. Mindstorms robots (a bit pricey but I used a grant), Arduino and making the lights blink (cheap, hands on and can go all sorts of directions), multiple game making solutions (GameMaker, GameSalad, Corona to name just a few). If a teacher cannot make a fun and student attractive intro CS course then they have a problem. This intro course may be many student's one and only CS/programming course so it needs direction but it also needs to leave a good impression. Make it ugly later once the hook is set.

Mike Zamansky said...

Just a few thoughts:

Fun is great, but interesting is probably more important. We know that not all of our kids should go on to be CS majors any more than all kids in bio should become bio majors. We've got to connect with those meant to be in our field and we've got to give the rest an appreciation and a useful set of tools (both mental and practical).

We also have to be careful about not selling a false bill of goods -- making it easier than it is by sugar coating - it's important that we don't send the kids off to college just to have them hit over the head with a hammer when they get there.

Finally, a comment on tools I generally don't like the drag and drop languages, particularly for my kids, but we do use NetLogo which is very visual. We also use Scheme. For every kid that's turned on by NetLogo's visuals and interactivity I can show you a kid that was turned on by Scheme's elegance, simplicity, and beauty. What's more, this cuts across gender.

I'll try to get that interview stuff written soon but it sounds like you've got lots of great people in the pipeline already.

Alfred C Thompson II said...

Mike I guess part of my problem is that fun and interesting sort of mean the same thing to me. :-) Probably not true for everyone but it is sort of a goal.

Oh and yes the interview pipeline has some good people in it so far but I am really looking forward to yours and to the other ones that people have said they will do for me.

Mike Zamansky said...

Alfred, you're right on the fun=interesting goal, but even those that don't find it fun can learn to appreciate the way of thinking and the power it provides.

It reminds me of a conversation I had with my daughter earlier in the year when she was missing a few of her classes one day:

Her: I'm missing all my fun classes
(she was missing BC Calc, English, and my CS class).
Me: Math is fun?
(Batya never loved math)
Her: Well, no, math class is fun!!

So she doesn't love the subject although she had an amazing teacher that made the class enjoyable and does see the utility of the subject (and she is really good at it, if I do say so myself).

Anonymous said...

Typo: page shows "Make Zamansky" at one point.

C.P. said...

Game programming is a wonderful way to increase enrollment, attract girls and minorities to programming and thoroughly engage students. LiveCode is a programming language (remember hypercard?) that is easy to learn and use. It creates executable programs that run on any platform (PC, Mac, Linux, Android, iPhone, iPad, etc). Without complex rules or strange syntax, the students produce amazing programs in weeks. It helps them develop soft skills as teamwork, and collaboration, build confidence, foster creativity and spark interest in computer science.

Check it out at Live code.com and tinyurl.com/erhs-lc

Students know what makes a good game and they have ideas for their own games. They have their standards of excellance and work hard to meet them with their games. They work hard, research, collaborate, share discoveries and implementations, laugh and produce some great programs. By the way, they learn programming, logic, design, perserverance, patience and frustration. (the joy of programming!)

More than a simplified block language, LiveCode allows some of them to progress on to writing multi-player games, multi-player, multi-computer (Client-Server) games, and more serious apps to sell commercially. Many have gone on to the AP Java course and have done better than others on the exam. So LiveCode appears to be appropriate and effective as a intro level course.

I went from teaching 1 AP course to a full day's schedule of CS courses where 25-50% are girls. We cant stop there. We need to make all the courses more relevant, interesting and fun without reducing expectations or diluting content.