A few weeks ago, before Christmas, I attended a BostonPHP event on Paper Prototyping. The idea behind paper prototyping is that one builds a model of a piece of software you want to build, out of paper and office supplies, first. Before one does any programming at all, the goal is to make a rough model of the thing you want to build, and then refine that model through testing and refinement until you have a very specific and clear model of the computer program. And then you build it.
My kids built the paper prototype. They were ready to go. So I took them into the computer lab and got them to download the software. Now we’re building the computer program, using Scratch.
And suddenly, I’m teaching computer programming.
I’ve never even learned computer programming. How do you teach something you’ve never learned?
Part of it is coming up with suitable challenges, which the students then have to solve. Here were my first several:
- I’d like you to design a software routine that moves the figure on the screen around when you start the program.
- I’d like you to design a software routine that moves the figure forward when you hit the ‘d’ key on the keyboard.
- I’d like you to design a figure so it will move forward, backward, up and down on the screen.
- I’d like you to program a routine onto the figure so it turns around and runs away.
- Please design a single figure that is capable of doing all the things I just named.
As I walked around the room, I looked over their shoulders to see what they were doing, and I discovered that my classes in logic all those years ago in college were serving me pretty well in predicting which programs were going to work, and which ones weren’t. I also saw that kids were teaching each other — rather than treating the challenge as a competition, they treated it as a joint effort. This is something we want to encourage in our design program, so I was OK with it.
But ultimately, it’s clear that I need to learn a lot more about programming, and not just in Scratch. what resources are out there for teachers? Particularly teachers who are starting a program almost from level 0?
I don’t know about the teaching part, but I’m happy to be a resource for you for the programming side.
Here’s how I’d categorize the topics:
GENERAL COMPUTER SCIENCE:
Two mental capacities:
* the skill of breaking a process down into explicit, step-by-step instructions, as if you’re directing a really dumb robot.
* grasping the idea of a variable. Just like X in algebra, or a blank line in a mad lib, we use a variable to pass around a Whatchamacallit.
Computer science concepts:
* conditionals
* logic: true, false, A and B, A or B, A exlcusive-or B . Stick to “true” and “false” with beginners. Stay away from bitwise logic. I’ve used it occasionally, but can’t imagine a scenario where it would be gratifying for a beginner who wants to do something cool.
* loops: while, for each, do until
* arithmetic: add, subtract, divide, multiply, modulo, and the fact that whole numbers and decimals are different
* reusing behavior by bundling it up into functions or methods
* reusing data things by bundling them up into classes or objects
* reusing code by bundling it up into libraries, so we can use goodies that other people made
THINGS SPECIFIC TO THE PROGRAMMING LANGAUGE:
* How to install the language (though you could set this up for them).
* How to write in the editor, save, and run the program.
* Where to find documentation and how to look something up.
* How to express all the all-purpose concepts in the syntax of this language.
* Output and input. How to have a conversation with the user- print to the screen, read what they type in, and do something with it.
* Built-in functions. What handy things come bundled with the core language?
* Fun with strings – which often uses built-in functions.
* How to write your own function.
Along the way, look at other people’s code. At a minimum, you’ll need
to understand an example in documentation or tutorials. At best, like
writing prose, we improve from reading more.
At an intermediate level:
* Get to know some popular libraries for the language. They take care of tedious things for you, or give you goodies. Want to talk to Facebook? There’s a library for it.
* How to make an object/class.
* How to make a library.
* Recursion.
I saw these Scratch links for teachers:
http://info.scratch.mit.edu/Educators
http://scratched.media.mit.edu/
Here’s the syllabus from a workshop on Python for beginners, if you’d like to see how they approached it:
https://openhatch.org/wiki/Boston_Python_Workshop
And finally, Hackety-Hack at http://hackety.com/ is a popular introduction to Ruby. Ruby also features a poignant guide – with foxes, and bacon! – at http://mislav.uniqpath.com/poignant-guide/book/ . It might appeal to your students.
I can come down early on the 5th or talk on the phone if you want to spend more time on this. Typing is too slow.