I know that this is counterintuitive, but what if you devised an activity to teach programming or computational thinking, but instead of of just telling the kids what to do, you make them solve a problem first – by applying computational thinking or some elementary programming?
I devised a version of this type of thing myself some years ago, when I set a spreadsheet problem that could only be solved by inserting the correct formulae. The problem posed was to find out the name of the best and most popular teacher in the school. It was slightly disconcerting when one urchin, upon discovering that the answer was “Mr Freedman”, decided that he must have gone wrong somewhere. Even so, it was a good bit of fun.
I recently was sent a crossword book to review, that is a book on how to solve cryptic crosswords. Here is what the table of contents looks like:
A self-referential table of contents!
In other words, it’s an example of the sort of thing I am talking about: in order to work out the clues you have to read the relevant chapters in the book. But you don’t know what the relevant chapters are until you have solved the clues! The book, by the way is Alan Connor’s “Two Girls, One On Each Knee (7)”, which I reviewed here: Book review: Two girls, one on each knee (7)
Then a few months ago I came across a game that is played in a Java environment – and involves changing that environment by changing the Java code. Again, a self-referential game. The game is called Untrusted, in case you’re interested.
Why would you want to bother creating a self-referential problem? In my view, simply because it’s an interesting thing to do. It’s a bit different, and can be quite fun.
There’s another reason too. It’s a way of avoiding the situation where the only point of doing a programming exercise is to do the programming exercise. Dressing up an activity in a problem that doesn’t look like a computer-related problem can be quite powerful. For example, I used to get my students to solve a murder mystery using a database. But the questions weren’t straightforward. The activity consisted of a series of witness statements that then had to be translated into complex queries by the kids.
So how might you create a self-referential programming problem? One way that occurs to me is to dress it up in the form of having to decipher a coded message. That could be made up, or you could draw on the History curriculum, because there are several examples of messengers having to carry secret, and encrypted, messages in the past.
Let’s suppose you gave the students a worksheet (yes, I still think there’s a place for them!) headed, “Tpmwf uijt dpef”. It looks like nonsense, but is in fact a simple transposition of letters: each letter in the original instruction has been substituted by the next letter in the alphabet, ie B stands for A, C stands for B, and so on. Admittedly, with younger kids you might have to insert a few real letters to help them get started, but it would be interesting to let them try and solve it themselves, and then follow it up with a discussion:
1. What did they do in order to decipher the heading? Whatever they did, unless it was to try different letters at random, was probably an example of computational thinking.
2. Solving the problem “by hand” would obviously be very tedious if the message was much longer. How could they solve it using a spreadsheet?
3. How could they solve it through a computer program?
You could then, if appropriate, extend the work by looking at cyber security, and e-safety.