This course is for teachers, and is available face-to-face every January. The next start date is Monday 23rd January 2017. In this course we will consider the computer science elements of the Computing curriculum in particular and offer subject knowledge training in this area as well as research-based approaches to pedagogy.

In each week we will look at a theory topic and a programming topic. Homework will be given and we expect that teachers will spend around 2 hours per week consolidating new knowledge. Materials for the course are available here and are open-access.

There are two pedagogical drivers to the way we teach programming in this course. One is to use pair programming to encourage participants to gain effective debugging skills. The other is to scaffold the development of programs, and focus on understanding at various levels of abstraction, using a method that we call Read-Use-Explain-Modify-Create.

# Week 1

In this week we introduce the concept of computational thinking and in particular some activities to teach the concepts around algorithms. Unplugged activities are used to demonstrate some of the key principles of algorithms and the different skills that can be introduced at KS3.

In terms of programming, we will give a gentle introduction to programming in Python through turtle graphics. No prior knowledge is assumed. Because text-based programming can feel challenging to students and teachers, we use scaffolded exercises and a range of strategies to develop trouble-shooting skills.

# Week 2

In this week we introduce binary numbers and how they relate to the number systems we are used to. A knowledge of binary is essential to understanding how the computer works. Again we model unplugged exercises which can be developed further depending on the students in your school.

In terms of the programming element, we introduce functions using turtle graphics in Python. Using functions early on in programming enables students to develop good programming habits from the beginning and develop the skills of abstraction and decomposition, aspects of computational thinking.

**Resources for Week 2**

# Week 3

In this week we look at binary numbers further, considering how to add and multiply binary numbers. Character coding systems using binary representations are also covered as this gives an introduction to how computers deal with different types of data, a topic explored in Week 5.

In the programming section of the course, we introduce If statements which are a basic construct in programming. If statements exist in every programming language and students will be continually revisiting and developing their understanding of this construct in their programming career. We

# Week 4

In this week we introduce logic, in particular the way the Boolean operators AND, OR and NOT, with truth tables to provide a notation for how these operators work. The use of Boolean operators in programming will be gradually introduced after this point.

In terms of programming, we move to working with different kinds of loop constructs. We introduce pseudocode as a notation for algorithms and focus on understanding the logic behind how a loop works as well as the syntax (the way it is written in a programming language).

# Week 5

In this week we look at how the computer represents sound and images. This builds on an understanding of binary numbers. Any type of data stored by the computer is essentially reduced to the same basic binary representation, and this session introduces some of the ways in which this is achieved. Again a range of activities are suggested that can be used in class.

In the next three weeks, we build on the programming knowledge gained so far to solve a range of problems using Python. This will give more confidence and programming practice. The pedagogy adopted involves understanding, explaining and eventually modifying existing programs to maintain confidence.

# Week 6

In the theory side of the course we look at the basic components of the computer and how they interact. Unplugged exercises are used to introduce key concepts.

In the programming side of the course we continue with problem-solving using Python, further developing skills in use of variables, if statements, working with loops, etc. For teachers who are already familiar with Scratch, we will look at how problems can be solved in different languages.

# Week 7

Following on from week 6, we look in more detail about how the computer executes instructions, and how software and hardware interact in the computer.

In the programming side of the course we introduce more substantial problems and develop strategies to break down problems and solve them by developing algorithms and using programming techniques.

# Week 8

The final week of the course is devoted to programming. An easy-to-use interface is introduced to develop more visually appealing programs with buttons and menus. More strategies for teaching programming in a differentiated way are explored.