Lately I've been thinking about changing careers and going into teaching. This isn't actually a new idea for me; the thought of eventually teaching at an international school like the one I attended has always been in the back of my mind. But as my dissatisfaction with life as a corporate drone grows, it's starting seem more and more attractive.|
Part of what appeals to me about teaching, is that I feel like I could approach it with a different perspective, if I'm in an environment where creativity is permitted (which is admittedly rare). Having been an academic failure most of my life, I have a deep-rooted skepticism of traditional pedagogical approaches. In fact, I firmly believe that most schools today are not only inadequate, but actively setting up our children for future (if not present) failure. But... that's a big topic, and not what this post is about.
If I were to teach, I'd teach Computer Science to high schoolers. Computer Science in K12 is disappointingly rare and niche, considering the importance of this field in this day and age. You can't even get a Single Subject Teaching Credential in Computer Science in California, which also means there are no Masters of Education programs for Computer Science. In other words, nobody's really even thinking about how best to teach Computer Science to high schoolers. It's sad, but that also means there are opportunities there.
I got into Computer Science by accident. At my school, one year of computer classes was required in high school, and the curriculum was divided between one semester of basic computer literacy (typing, using office apps, etc), and one semester of programming. Yes, every high school student learned to code. I didn't realize it then, but that was revolutionary, especially back in the mid-90s.
At first, I didn't enjoy programming. If Mr. Scutt had taught it like most people teach introductory programming, I probably would be flippin' burgers today. But Mr. Scutt, who had no formal background in Computer Science, did things differently. Our second assignment (after "hello world") was to write a program that drew a picture. It had to have a house, some grass, a sky with clouds, maybe a sun. For extra credit, flowers. The assignment was surprisingly hard. I didn't get variables. I thought the whole thing was stupid. But then came the third project, which was to write a simple GUI-based role playing game. A game! Who doesn't want to write a game? That got me hooked, and I stayed late in the lab night after night to work on my game.
Mr. Scutt's approach worked well for me, but lately, I've been thinking about how I'd teach Computer Science to a group of unwilling high schoolers. I've come up with a few ideas:
- Human computer - I think the highest barrier is in the very basics. I didn't get variables. Syntax was annoying. I suspect a lot of people get turned off at that point. One idea is to get students to actually physically execute code, by moving around, labeling boxes (variable declaration), putting numbers in boxes (assigning values), handing boxes to each other (function calls), etc. This wouldn't take long, but anyone who doesn't get it after hearing/reading an abstract description might get it if they see it/do it in action1. If nothing else, it'll give kids an excuse to move around.
- Buddy system - In reality, programing is highly collaborative, and knowledge sharing is an integral part of the experience. So, one idea is to put newbies and more experienced CS students in the same lab sessions, and pear them up in a buddy system. This is a win-win situation. The newbies get help, and the oldies gain valuable mentoring experience (not to mention, teaching is a great way to learn), and it generally fosters a collaborative environment.
- Teach how to cheat/show off - Thinking back at my mandatory CS course, one common objection raised was "why do I need to learn this stuff?" (also generally a common question among know-it-all high schoolers) So, projects that can demonstrate utility or matches their natural computing activities might resonate with some kids. A modern equivalence of programming a TI-82 to cheat in physics , writing Flash widgets to put on MySpace, or apps for Facebook might do the trick.
One of the reasons I'm interested in teaching high school is to tackle the gender gap in CS, and my theory is that we need to start early (by college, it's too late). The male-female ratio in CS is alarmingly skewed, which to me means we're doing it horribly wrong. Of the 3 ideas, the first and second might appeal to girls, mostly by making learning CS a more social experience. The 2nd would work particularly well if girls can be paired together (arguably, that may be the only effective thing to do), which might help create a cycle of positive reinforcement. I don't know if it'll work, but it'll be interesting to try. The cool thing about education is that it's an environment that should, in theory, be conducive to iterative experimentation. You get a new batch of kids every year. You can even split them into control and experiment groups, and to some degree, quantify the outcome. It doesn't look like educators take advantage of this potential2, but that just means there's room for improvement (and eventually, disappointment and disillusionment --but then I'll just change careers again).
1 - A related idea to this is to tier different learning methods. So, I'd first start with a lecture on the basics of programming, then quiz the students to figure out who got it and who didn't. The kids who don't get it from a lecture will then get another chance using a drastically different teaching method, like the human computer idea.
2 - Restrictions around human experimentation might have something to do with it, but in general, people are horrible at trying new things and critically examining established patterns -- in any field. Google has an interesting rule where people are actively discouraged from staying on the same project for more than 2 years, specifically to prevent stagnation.