This post is the fifth of six in a series with ideas and resources on how to make computing lessons engaging and demanding for as many students as possible. Click here for the original post.
I’ve sat through some programming lessons as part of my degree which were probably some of the dullest hours of my life. There was a well-informed, well-meaning lecturer and the subject content was interesting, but listening to someone else explain coding concepts without any opportunity to try things out was just painful. It’s also tempting as a teacher to guide our students towards avoiding common mistakes. However well-intentioned this may be, it’s not nearly as memorable or useful as allowing students to make the mistakes then discussing together why problems arose and exploring different ways of avoiding them.
Curious students enjoy learning because they take ownership of their discoveries. Students who are encouraged and equipped to follow their curiosity are more independent and resilient: far less dependent on the teacher – which has significant benefits in the long term (and for summative assessment!). Learners encouraged to be curious during a lesson are much more likely to follow their curiosity outside of a lesson to read around the subject and develop a wider and deeper interest and understanding.
There’s a danger though. If every new skill is ‘discovered’ by students, they can feel abandoned and unchallenged. You need a certain level of confidence – if not a starting point of core knowledge – to be able to follow your curiosity to discover new skills or solve a problem for yourself. The students who either lack the initiative, desire or confidence to explore or research for themselves are the ones who have the most to gain from a ‘curious’ lesson activity but they’re also the ones who will need the most support to engage with it.
- Combine ‘curious’ research with incentives to help and support others. Avoid always pairing up a student who’s able to discover for themselves with someone who always needs support 1:1 because this can actually feed the dependency and ultimately frustrate or hinder both students. Instead, split the class into teams and create an incentive for the whole class to demonstrate a new skill. Allow them to help each other but don’t allow them to do someone else’s work for them.
e.g. “The first whole team who can show me a web page that includes a paragraph tag, a heading 1 tag and an image will be the first team to leave. Start with the example on the board, search on w3schools and help each other – but remember: you mustn’t touch anyone else’s mouse or keyboard”
- Equip students who have less independence / initiative by setting regular research challenges at the start of the lesson that involve searching for data online. Start simple with definitions that they can copy / paste, then get them to dig deeper for opinions, analysis, comparisons or ordered data
.e.g. “While I take the register: search for and try out three different ways of drawing a square using python. There’s a merit for the person who can do it using the fewest characters”Encourage “What happens if” activities by planning them into your projects and by praising anyone who asks that sort of question and creating a chance to follow a tangent to explore the answer every now and then.e.g. “Beth’s just asked what happens if we play the sound at 8KHz rather than at 44KHz. Great question! Thumbs up if you think it’ll sound higher, thumbs down if you think it’ll sound lower or thumbs to the side if you think it’ll sound the same. [play sound] What other difference did you notice between the two sounds?
- Provide step by step instructions or demonstrations to get people started with a project but then create opportunities for open ended challenges where you mention some places to start looking for hints but don’t tell them exactly what to do.
e.g. “Follow these instructions to get your code to play “Happy Birthday” then see if you can write code for a TV theme tune and a song in the charts. You can search on … for song ideas”
How do I react when my students show me something I didn’t know how to do? What opportunities and incentives are there in my lessons for students to share their discoveries?
Example Activity: ASCII text data representation challenge
The above code lets you type in some text. It takes each character that you type in and converts it into binary based on the ASCII value for that character. It then draws the ASCII data as a black and white image. Ask your students to try the program for different messages and discuss what ASCII is. Then, show them the following images and see if they can work out the messages that they contain. Finally, get them to create and share their own messages for others to decode in the class. You could even use it to encode a web address with a hidden message…
Research and further reading
This paper debates the relative differences, advantages, risks and limitations of constructivism and discovery learning models in computer science. It strongly recommends that students with little or no background knowledge in a computing topic need to be explicitly taught key concepts but to create space for students to reflect on, discuss and choose next steps to investigate and accumulate their own knowledge and understanding. There are significant challenges here, particularly when in a programming context, so an effective teacher should model how to investigate and extend understanding by gradually removing the level of scaffolding and support when students are ready to cope with that level of independence.Ben-Ari, M. (1998). Constructivism in computer science education. Proceedings of the twenty-ninth SIGCSE technical symposium on computer science education. Atlanta, Georgia, United States: ACM