The Source for Java Technology Collaboration
User: Password:



Sonya Barry's Blog

April 2008 Archives


Once we have a room full of kids, what should we teach them?

Posted by sonyabarry on April 21, 2008 at 11:33 AM | Permalink | Comments (10)

In my first post about CS education I talked a little bit about what kind of infrastructure we need to do a corporate backed computer science education program for middle or high school kids. In this post I'd like to address two other important issues. The first is Which kids are we aiming these programs for? and the second is What do we teach them when they show up?

There are three general classifications I use for kids in this age group:
1. Geeks. These are the kids who are probably a lot like you were. Usually male. Usually hooked on computers and curious about how they work from the first moment they saw them. Interested enough to pursue CS topics and programming on their own because they enjoy it as a hobby, and a way to tweak their games.
2. Average kids. These are most of the kids, male and female, who like the web, are comfortable with the machines, but don't regard them with any more interest than your average motorist regards their car. This group also includes the group of kids who, due to social or financial circumstances, haven't yet sat down at a computer for any reason. There are a lot more of these kids in the U.S than you might think.
3. Everybody else. These are the few who either have no aptitude at all or absolutely no interest in using computers beyond what is required for class, and they really wish they didn't have to use them in class either. They don't use them at home, even if they have access. Their numbers are small, but they do exist.

So which group of kids should we be aiming for with an after school program? I vote for group 2. The truth is, anything presented to the whole school will grab group 1's attention, but they may be more advanced already than anything we're going to show them. We should be doing something to support group 1's ambitions and interest directly (more on them in later blogs), but those are the kids who are already pursuing CS, who are looking forward to programming classes in school and beg their parents to send them off to computer camp in the summer. These are the kids who, like you, are going to turn into the software engineers of the future. They are already on the path.

CS enrollments are falling across the board. Why? Because we ignore group 2. This is the potential group that could fill out those classes if they are exposed in the right way, and at the right time. They might be more interested if they understood how creative CS can be, and if they realized that despite the media reports to the contrary, there are good jobs with great pay available in the US. These are the girls who, like me, have an aptitude but aren't interested in tearing computers apart as a hobby and so they think CS wouldn't be interesting to them.

These are the kids who we need to be paying attention to. These are the kids that I want the opportunity to hire when they graduate from college ten years from now.

So, what do we teach them? This is a really tough call. There is so much to cover. In my own classroom I made the decision that at middle school age, it's a lot more important that a kid walks away from the class with the feeling that they enjoyed it and that they can do it than it is that they remember the relationships between classes and objects or the ins and outs of for loops. In young kids, confidence trumps everything.

I think it can be argued that the same thing should happen with high school students who are given CS as an after school project rather than a regular class. More than anything we need these kids to be open to the possibility when they get to college.

We also need to do something else that often gets lost in the shuffle - we need to prepare them for things they're really going to see in college.

Here's an anecdote - I was TA for a first semester Java programming class while I was in grad school. I had a student who came in as a freshman completely excited about the class. She had "majored in computers" at her high school and was ready to go. She had a great attitude, certainly had the aptitude for it, but she dropped out of the class and changed majors about six weeks in. Why? Her computer class in high school had been all about using Microsoft Office products at the expert level and a few WYSIWYG web page projects.

She came in confident, but she was confident about the wrong thing, and she was crushed. She's now a chemist. She's an extreme example, but I doubt she's the only one who has had this kind of experience.

My approach to solving that problem is to make the first things my kids see is a minimal IDE (we use JEdit) and compiling from the command line. This gives them a couple of advantages. First, they're never going to be taken by surprise later on when somebody else asks them to work that way. Second, getting familiar with the command line and navigating the file system that way helps them understand their computers beyond the GUI level. Once they realize there is more than what's at the surface, they are naturally curious.

I chose to go with an applet that uses the Graphics API for my first lessons. The reasons are simple - a kid can grasp quite easily what drawLine() or drawOval() is supposed to do. I give them a few lessons and assignments that guide their analysis of their programs, and then have them use what they've learned to write an applet that has a smiley face picture. It's engaging and creative, and the kids get it immediately. They learn about methods and parameters, they get some good practice at doing the arithmetic to get all the pieces place properly, and they learn about logic bugs and order of execution.

The next thing I do with them is design a GUI guess-my-number game using Swing. It introduces loops, decision making, the % operator, integer arithmetic, and random number generation as well as more complex code using the ActionListener interface to handle buttons and text input.

This is when I run out of time with them. It usually takes about 20 hours of instruction, with plenty of CS related digression to get this far. If I had more time, at this point I'd introduce them to Greenfoot or Alice.org. My point is always to give them the basics, and then show them the really cool stuff once they have the basics down.

With the specific goals of getting kids interested and confident, what would you want to show them?

What do we do about Computer Science education?

Posted by sonyabarry on April 09, 2008 at 02:08 PM | Permalink | Comments (3)

Chris's blog about Cay's blog on Monday about the sad state of Computer Science education was really timely for me. I commented that day, but I have a lot more to say on the topic. I'm an engineer at Sun, but I've also been teaching Computer Science at a middle school for the past four years, and my masters thesis project was an intro to programming curriculum for 8th graders, using Java. (It was for an interdisciplinary degree - Computer Science with emphasis in Education.) So this issue is really something I think about all the time.

In the past few weeks I've met with someone from Sun's Global Citizenship Initiative. He's working on proposals to get a volunteer program set up so Sun's engineers can go out with the company's support and teach a CS curriculum either as part of a class or an after school program. He wanted to get some opinions from me about it, since I'm actually teaching it, and he also came in to my classroom on Monday morning to observe.

So what would I do if I had all the time and money to do this? My suggestions were to come up with some kind of portable classroom and to have a fairly rigorous mentor program for teaching engineers how to teach.

Why a portable classroom? Most schools still don't have a good computer science lab, and if they do, they aren't going to let a total stranger come in and install their stuff on it. More importantly, a volunteer is not going to want to spend their time installing their stuff on it and troubleshooting while kids are waiting around for the volunteer to teach them something. It's a recipe for disaster. An Asus eee can run Java just fine, and at 40 pounds total, 20 of them could fit in a rolling carry on bag. Is this a steep price for entry? Certainly, but it's not unreasonable and those machines could each be used for several hundred classes.

Why a mentor program? Teaching is not easy. My first few months in a classroom were pure unadulterated hell. At that point I had no training. I hadn't spoken to a human being under the age of sixteen since I was in high school myself. I had no idea what my students were capable of. I also had no idea what I was capable of. I stuck it out because I had to - I was doing this part time as I started grad school and I didn't have a whole lot of choices if I wanted to pay my mortgage without flipping burgers professionally while I was in school.

I would have been a much better teacher out of the gate if I had been able to sit and watch somebody else teach what I needed to teach, and then somebody to give me feedback in my first few weeks. So this is what I think we ought to do - have an engineer who is interested in teaching pair up with somebody who has been doing it for a while. At first they watch, then they help, and finally they teach and get constructive criticism from their mentor-teacher.

With a program like this in place we could be consistent in both quality and tone. Will I get my wish? I have absolutely no idea.

At the end of this school year, I won't be renewing my contract to teach next year. I am sad to be leaving, because I love what I do in my classroom and I will miss the kids, but I need to focus on my "real" career for a while. I hope Sun can get something like this off the ground, because it would be great to be able to continue to teach without giving up all of my free time to do it.

Next time: Which kids should we be designing curricula and after school programs for, and what should we teach them?



Powered by
Movable Type 3.01D
 Feed java.net RSS Feeds