What are the interfaces (human or otherwise) - the user environment. Is the system a tool or a "friend".

What are the conditions for operation?

What are systems for similar systems or components?

When to use recursive or parallelism?

When is randomisation or approximation is appropriate?

When will a heuristic help?

When will a reformulation or reduction lead to a known solution?

When should you trade space for time?

When dealing with big data: ecological fallacy (designing for the "average" user when there is no particular individual that this fits) and fallacy of composition (going from specific to general)?

Computational Thinking is not just for Christmas, it's for life. But it is about understanding the limitations of computation. Programming is an ideal way to explore computational thinking. Computing Science is Computational Thinking and Computational Thinking is Computing Science.

Programming is everywhere! Whether or not people become programmers, they should understand software and be empowered rather than enslaved by software.

Muffy has a range of interests: from wireless network protocols to molecular biology (the body is a computational system). She is on the Board of BCS Academy of Computing. Also involved in the Royal Society report on the state of Computing in school. (They raised £50K to get the Royal Society report off the ground in three days!) There is a Computing Science: a curriculum for schools document (from Quintin) that's worth looking at.

Computer Science is a rigorous academic discipline. Every learner should be exposed to Computing Science. Scotland is in a good place to do this. Two relevant activities: the Curriculum working group looking at CPD needs of teachers; exemplification material from RSE and BCS Academy (produced by Jeremy Scott) formally launched in December.

Conclusions:

Computational Thinking is about problem formulation and solving

Comp Sci is a rigorous discipline

Programming is at the heart of Comp Sci

Computing is empowering - be scientific, be rigorous and be brave!

Teaching and Learning to Program

Too much doing; not enough understanding

Growth or fixed attitude? There is some truth in there being fixed abilities but there is in unknown potential for growth. It is easy to switch people from fixed attitude to growth attitude. (Unfortunately, the reverse is also true.) Is there something about the teaching of Computing Science that fosters a fixed mindset? Do we assume learned know too much too soon?

Increasing evidence that anyone can learn programming... but we just haven't worked out how to teach it yet. Compared to the Generation Game - do we set them to problem solving too soon? If they don't have the basic skills, they can't solve the problems. Kirschner, Sweller and Clark suggest guided examples are the way to go.

Premise 1: we want learners to have deep understanding of programming

Premise 2: we assess their understanding by looking at the artefact produced.

We use a potentially invalid assessment model. Pupils and teachers see a working program as the key thing but how did they get there? Did they just hack at it until it worked? (Monkeys and typewriters.)Cognitive Apprenticeship model
Start with easy but meaningful tasks. Then given small tasks which set foundation skills in place. The master is constantly observing and encouraging - the quality of intermediate steps are important. All the time, the apprentice is picking up the culture as well as the tools and activities.

The culture of debugging: novice makes random changes to see what happens; expert examines and hypothesises. Can students explain what they understand.

Flip teaching model. Peer instruction. Learners have to use the language of the subject when they are forming their discussions.

What are the small but meaninful tasks we can start novice programmers on? Good questions almost always transition between English; Computing Science-speak; and Code. Used to going from English to code but do we miss out Computing Science-speak? Do we ever go from Code back to Computing Science-speak or English (important for de-bugging).

Scottish schools have new curriculum which can be good for programming. Hard stuff in there like, how do you explain what a program does. If there is no prescribed language, how do you examine it? There must be code in the exam. How do you do it? Write a language for use in exam papers? An official pseudo-code is being created to allow learners to talk about programming and respond to coding questions. (Provisionally called "Haggis")

Suggestions to try:

Reduce problem solving early on

More worked examples moving to examples with steps missed out

Get students to articulate understanding often and give feedback (involve AH students?)

Flip your classroom. (Learners do the theoretical stuff at home and then discuss in school.)

Do we believe students can get there? Are we teaching doing or thinking? Thinking as we do should become explicit in our course design.