Categories
Uncategorized

Never mind the PowerPoint

Have you asked a question like this on teacher social media?

Has anyone got a PowerPoint for binary addition? They just aren’t getting it.

I need a decent lesson for client server versus peer to peer.

Any resources for boolean logic? I can’t seem to get them to understand it.

When I see these questions I do try to help, but I believe those asking would be better off working on their explanation of the concept. Once you have a strong grasp of the topic, you can explain it well, answer questions, and check for understanding meaningfully.

Teaching is simple, really, if we remember we are just trying to transfer knowledge from our heads to theirs. Looking for lesson resources that shortcut this process is a distracting, often futile enterprise. The time spent looking for that “magic lesson” could be better spent growing your own understanding so you can develop theirs.

Fortunately we now have the NCCE curriculum backed by the Oak Academy recorded lessons, so we can teach ourselves before teaching our students. I also recommend Craig’n’Dave videos and the Isaac Computer Science website, and the great textbooks by Heathcote & Heathcote. Better still, partake of the NCCE training offers.

Once you know it yourself, and feel confident you know it, you can explain the material in ways others understand.

Rather than asking for slides and worksheets, I recommend teaching yourself the content. Then study others explaining it well.

My forthcoming book might help with greater understanding of the GCSE Computer Science content. Comments welcome here on WordPress, on Twitter or on LinkedIn.

Categories
Uncategorized

Peer to Peer IS NOT A MESH!

Misconceptions are my new obsession, and there are loads in the book.

The biggest misconception in the Networks topic is confusion between topology and “service model”. Here are some typical questions from Facebook that illustrate the confusion:

  • what is the difference is between a mesh network and peer to peer network?
  • Would you give marks for star topology advantages being central backup and security. Or is that not right because it is not referring to the actual cable layout?
  • It seems to be common to conflate Star with Client Server and Mesh with Peer to Peer, is this OCR stance?

Peer to Peer and Client-Server are two service models which are unrelated to the topology (star, mesh, ring, bus etc.). These service models are a logical description of the network, while topology is the physical description.

A network has a physical arrangement of devices and connections, and this is its topology. Independent of the topology is the way files and programs are shared, and this is the service model, or sharing model, which can be peer-to-peer or client-server.

The topology matters when we are discussing how packets travel around the network, which devices they pass through and how they get to their destination. But this is irrelevant when we are talking about how files are shared, because the user does not care about the journey the packets take when copying a file from another device or saving a file on the server. So a Star topology can support a peer-to-peer model of network, just as a mesh topology can support a client-server network (or vice versa).

The confusion arises partly because of unclear images in textbooks, which appear to show a mesh network described as a peer-to-peer model, and a star network as client-server, and we can see this on the Wikipedia page for P2P here. Confusing as these images may be, the authors are trying to illustrate the logical relations between devices rather than their physical connections, so the images are not wrong. However, learners (and indeed teachers) may be more used to seeing diagrams of the physical connections – the topology – of a network, and therefore unused to seeing the logical relationships described the same way. In short, the diagrams look exactly like topology diagrams, even though they are intended to convey the logical service model.

I discuss this misconception and many more in “How to Teach Computer Science”, out in June 2021 from John Catt Ed.

Categories
Uncategorized

Googling is not Research.

This post was inspired by a Twitter discussion today.

When I was an NQT I was told “teacher talk is bad” and I had to ensure the students were “finding things out for themselves”. You can read about that tale of woe here… but at the time I believed it and included lots of what I believed was “discovery learning” in my pedagogy. This included hiding text around the room, giving half the students one half of the knowledge and the others the other half and playing “quiz-quiz-trade”. But mostly, because it was a computing lesson, they searched online for knowledge.

I started to suspect this was not highly effective when I asked them to find out about the family of cyberattacks called “social engineering”. I set the task “find the definition of social engineering”, expecting that after a few minutes they would write down something like “Social engineering is manipulating people into handing over confidential information such as a PIN or password. It includes blagging, phishing, pharming and shouldering.” But at least half of them wrote this:

Social engineering is a top-down effort to influence particular attitudes and social behaviours on a large scale—most often undertaken by governments but also carried out by media, academia or private groups—in order to produce desired characteristics in a target population.

Of course this is a valid definition, it’s just Wikipedia’s Social Engineering (political science) definition, not the information security definition. But even those that wrote the latter definition…

In the context of information security, social engineering is the psychological manipulation of people into performing actions or divulging confidential information.

…seemingly didn’t understand it when asked questions about it afterwards. The ten minutes they had spent searching and writing down a definition had been completely wasted.

This wasn’t an isolated incident, it was to be repeated many times until I decided never to allow unfettered googling and instead direct the students to particular websites.

Whenever I asked the students to google for some knowledge, what happened was they would spend time searching for a definition, sifting through the search results full of guff and ads, finding degree-level and industry-focused definitions that they don’t understand or definitions that fit an entirely different sense of the term being searched for, or that are relevant to a different context, then write them down, while all the time potentially being distracted by all the rest of the internet.

Each time I did this it would take around ten minutes just to “discover” one fact. Crucially, even if they stumbled on the right fact, or even later when I was directing their web “research”, they would not actually be digesting any information, they were just copying down what they found. Any cognitive load was all being expended on the technology, trying to find a relevant page and then when satisfied with that, just transferring words from screen to page.

No time was actually being spent thinking about the thing they were supposed to be finding out about. “Memory is the residue of thought” as Daniel Willingham explained, so our aim should always to get students thinking hard about the subject knowledge that matters. Googling is largely a waste of time from that point of view as it requires little-to-no thought about the topic. The task has lots of extraneous cognitive load (the searching and sifting of results) but little germane load (thinking about the topic, e.g. social engineering).

Nowadays I either provide the websites to access, or the textbooks to read. But more often I tell them what they need to know in a couple of minutes, check for understanding, then set a task with which they apply their newly-gained knowledge to a task.

Instead of ten minutes googling for “social engineering”, I will explain what it is, ask some questions to check they understood the basics, then set some work such as “are these scenarios social engineering?” or “research this cyberattack, which social engineering tasks can you spot?”. The same ten minutes they once spent googling, is now spent on highly-valuable activities with “desirable difficulty” that will help transfer the new learning into long-term memory.

Say after me: googling is not research.

Categories
Uncategorized

It is Done.

Word tells me I have written 68,517 words, which is about the same as Treasure Island or Brave new World, about two Animal Farms or half a Catch-22. It’s about the length I was going for so I’m happy.

I spent this long holiday weekend proof-reading it myself, sorting out image credits (or making my own images where I could not find a licenseable image!) and fixing all the references and links.

I have also stashed all the links on the pages of this website, so if you want a sneak preview of what I discuss in the book you can follow all the links!

More to follow, but right now I have to get this off to the publisher.

Amazon link here, for pre-order

Categories
Uncategorized

Achievement unlocked. Book listed.

Two milestones happily collided today. I finished the first draft of #HTTCS, 61,000 words of computery goodness. And I got an email from my publisher, John Catt Educational to say that the book is listed for pre-order.

I’m excited and a little bit nervous. Not least because I’m a few thousand words over my planned count, and some of it needs a tidy up. So I’ll be editing frantically and asking friends to proof read before sending the edited manuscript to the publisher.

Pre-order on Amazon here. Kindle format will be added soon. Thanks to everyone who has helped with this labour of love!

How to Teach Computer Science: Parable, practice and pedagogy: Amazon.co.uk: Alan J. Harrison: 9781913622572: Books

Categories
Uncategorized

Escape the Room – updated

I’ve fixed an error in my Escape the Room activity. I ran this when school was fully open and hopefully will run it again one day. Meantime, you might consider using the clues only, without the locked box, and give a prize for the most solved.

Powerpoint here: Escape_the_Classroom_Resources – WHGS vx

More files here on my Onedrive including the Morse code wav file and an editable “bitmap” spreadsheet.

Original post follows from 2019.

Big thanks go to Claire Wicher (@GirlGeekUpNorth) for her resource which gave me a starting point, and I’ve kept in a lot of her content. Claire’s lesson was intended to fit into a standard 50-60 minute lesson, with preamble and review, hence it was too short for my purposes. This one should take 1-2 hours depending on ability and how much help you give them.

The slides are largely self-explanatory. If you open the Powerpoint you will find #escapeinstructions and an inventory of parts. The objective is to open a chest by solving puzzles which reveal combinations for the six locks. There’s a twist at the end though, just for laughs and that extra feeling of achievement.

I’ll post photos of the actual kit next week, and watch my school Twitter account for photos and videos of the students in action. Below is the download link for the Powerpoint file.

Categories
Uncategorized

SQL Practical for A-level CS

Teaching the Databases topic to an A-level class, I have made these tasks and suggested solutions in REPL.it.

  1. First teach the basics of SQL e.g. using Craig n Dave’s video here: OCR A-level SQL
  2. Check for understanding of the basics e.g. by asking a few basic SQL query questions, using a quick quiz like this: W3Schools SQL Quiz or better still, use the premium resources from Craig n Dave that are intended to follow the above video lesson.
  3. Share the skeleton code here repl.it/@mraharrison/sqlite1 with the students. Explain the code. (Needs you to be familiar with it, so read through it and try it out first!).
  4. Optionally walk through the first one or two problems and code the solution live with them.
  5. Assign as homework, or continue as a lesson, whatever you are more comfortable with.
  6. Use the suggested solutions here when stuck, or share this with the students after they have attempted the problems. repl.it/@mraharrison/sqlite1-solutions-1

Feedback welcome on Twitter or in the comments. Thanks.

Categories
Uncategorized

A Computer built in Conway’s Game of Life

Abstraction ad absurdum

I like nothing more than the idea of Abstraction. It’s not just one of the core concepts of Computer Science, it’s probably the most important one. Pioneers like Dijkstra scorned high-level languages because they had megabrains that could simultaneously understand multiple levels of abstraction in complex programs coded in low-level code.

But this is next-level abstraction. I’ve been fascinated by Conway’s Game of Life since reading about it in the 80s, and have coded it many times on machines like the BBC Micro and Color Genie (yes, it was me, I bought one). But it never occurred to me that the GOL could act as a programmable system, using glider guns and glider reflectors to simulate digital processing.

Here is the blog post with embedded video. A Von-Neumann machine encoded on top of Cellular Automata is a thing of beauty.

A Computer In The Game Of Life | Hackaday

Categories
Uncategorized

Great Java exercise for Hour of Code

Last Friday my Y12s and I attended an excellent Masterclass from the Manchester Met. Some degree course information was followed by a Masterclass where we explored Java and Processing and made a “pong” game.

This inspired me to explore some more after the event so the next two lessons we used the Java/Processing tutorial here Processing Hour of Code | Home

After whizzing through the tutorial we tried our hand at using the online editor to make a few things. You could do this too, with a high-performing GCSE or an A-level class, for the “Hour of Code” this week, or just because you can.

I used these lessons to do several things, pedagogically:

  • Introduce a new high-level language (Java) other than Python.
  • Introduce the concept of event loops for interactive programs (e.g. games)
  • Reinforce the concept of modular programming
  • Practice devising expressions – one of the most creative parts of programming for me.

I suggested we make a game with an “AI” element, a computer controlled character. We used the online editor at the page above, and I made the beginnings of the game and shared it here Skeleton Code

void setup() {
size(500, 400);
background(10, 80, 100);
charX = 250
charY = 200
}

void draw() {
background(10, 80, 100);
// add code here to make character move
drawChar()
drawPlayer()
}

void drawChar() {
fill(255,0,0);
ellipse(charX, charY, 30,30);
}

void drawPlayer() {
fill(0,0,255);
ellipse(mouseX,mouseY,40,40);
}

I invited the students to add code where indicated to make the character “blob” move towards the player “blob” which follows the mouse. Several attempts were made involving Selection, for example along the lines of…

if (mouseX < charX) {
    charX -= 20
    } else {
    charX += 20
}

but one student successfully made this work with just mathematics. Like I said, devising an expression to solve problems like this is fun and also makes the program more efficient. Here is what he came up with:

  accel = 30
  stepX = (mouseX - charX) / accel
  charX += stepX

This shows that all we have to do is calculate the difference between the X co-ordinates then somehow break that down into steps. The beauty of the above code is we can alter the accel variable to change the difficulty.

Then we needed to add some “collision detection”. This is where I resorted to the whiteboard and drew this image, and asked what mathematical theorem we were about to code..

Within a few seconds I got the answer I needed: “Pythagoras”. We can detect whether the two circles have touched, by calculating the diagonal distance between them and comparing with the sum of their radiuses. Hence this code:

  h = sqrt(x ** 2 + y ** 2);
     if (h < 35) {
       hitScreen()
      }

Now we have our computer “enemy” movement and our collision detection, we have a playable game. Here it is in full, copy and paste into the “Hello Processing” editor here to edit, or click here to play.

Did I achieve my pedagogical goals? Comment below or on Twitter please Mr Harrison, Head of Computing #loveteaching (@MrAHarrisonCS) / Twitter 🙂

void setup() {
   size(500, 400);
   background(10, 80, 100);
   charX = 250
   charY = 200
   accel = 50
 }
  
 void draw() {
   background(10, 80, 100);
   moveChar();
   checkHit();
   drawChar()
   drawPlayer()
  
 }
 void moveChar() {
     stepX = (mouseX - charX) / accel
     stepY = (mouseY - charY) / accel
     charX += stepX
     charY += stepY
 }
  
 void checkHit() {
     x = mouseX - charX;
     y = mouseY - charY;
     h = sqrt(x ** 2 + y ** 2);
     if (h < 35) {
       hitScreen()
      }
 }
 void hitScreen() {
      background(255, 128, 128);
      }
  
 void drawChar() {
   fill(255,0,0);
   ellipse(charX, charY, 30,30);
   }
   
 void drawPlayer() {
   fill(0,0,255);
   ellipse(mouseX,mouseY,40,40);
   }
Categories
Uncategorized

Book Update – Publisher Acquired!

The Book Formerly Known As CS Hinterland (TBFKACH) has a publisher. Big thanks to John Catt Educational for taking a chance on me. I have agreed a deadline of end of April for the copy, so it can be out by June.

The new working title is “How to Teach Computer Science”. This is because the conversations I have had with experts in academia and education have convinced me there is a place for a book that not only explores the Hinterland of our subject (helping teachers increase the “Science Capital” of their students – more on that later) but exposes some of the highly-effective teaching practices coming out of the latest research in our subject.

From the book introduction

Computer Science is a young subject, taught in schools only since the early 80s and – after a hiatus in which “ICT” took over in UK schools – re-established as a core subject only in 2014, as part of the National Curriculum subject of “Computing”. Computer Science graduate teachers are scarce and many schools employ non-specialists to teach our hugely important subject. Pedagogy specific to Computing is therefore under-developed and – by many teachers – largely overlooked. Computing teacher forums and social media groups are awash with requests for “lessons on <x>” and “schemes of work for <y>”, much rarer are the conversations such as “Should we do <x> before <y>?”, “Is this a good analogy for teaching <x>?”, “What misconceptions to students develop when learning <y>?”.

So right now, as well as writing illuminating tales from the hinterland, I am magpie-ing pedagogical techniques. A rough and ready list of concepts that I am considering for inclusion are these:

Underlying Cog Sci concepts

  • Cognitive load theory
  • Memory as residue of thought
  • Metacognition
  • Cognitive dissonance (avoiding)
  • Ebbinghaus Forgetting curve

Underlying Teaching and learning concepts

  • Science Capital
  • Blooms / SOLO
  • Constructivism
  • Culture of Error
  • Motivation
  • Rosenshine’s principles
  • Explicit teaching
  • Deliberate practice
  • Whole class feedback
  • Retrieval practice

Curriculum concepts

  • Concept maps
  • Fertile questions
  • Threshold concepts
  • Mastery learning
  • Inclusion and belonging

Teaching techniques – general

  • Dual coding
  • Semantic waves
  • Subgoal labelling (chunking)
  • Worked example
  • Retrieval practice
  • Hinge questions
  • Peer instruction
  • Misconception awareness
  • Unplugged activities
  • Collaboration
  • Physical Computing

Teaching techniques – programming

  • PRIMM (use-modify-make etc)
  • Parson’s problems
  • Pair programming
  • Teacher live coding
  • Notional machine
  • Schulte’s block model
  • Code tracing (TRACS)
  • Scaffolding (e.g. skeleton code)
  • Sabotaged code
  • Low floor, wide walls, high ceiling activities

This list may grow or shrink over time as I continue to research and discuss the issues. Your input is welcome, have I missed something?

Feedback welcome here or on Twitter, as always