Focusing on Problem-Centered Programming Instruction
Stephen Hughes (Coe College) and J. Philip East (U North Iowa)
In 2013, Stephen and Philip began discussing what programming instruction might look like if it focused on the problems being programmed rather than the language features being used. As a result, they have found or devised instructional strategies that greatly changed what they do, how they think, how they teach, and (they believe) what their students learn. Those strategies include:
- Emphasizing the use of natural language algorithm descriptions;
- Designing solutions that consider a division of labor between the user and program; Stressing the process over the product;
- Minimizing the introduction of language-based hypotheticals;
- Working with grounded examples and
- Actively striving to identify the source of problem-solving barriers.
Using this approach has substantially changed their teaching behaviour. This session shared their experience and rationale for the approach.
Designing a Programming Course
Constructs and Problem solving
How do they fit?
Most approaches begin with programming principles (loops, arrays, etc)
probably not ideal – why do it this way? Because we can?
So perhaps start with Problem Solving?
• encourage natural language solutions first which are translaeed into code
◦ students lack ability to articulate problem solving
◦ intro the phrase coding
◦ early activities can be done without any programming language
◦ programming vs coding
◦ what is program “supposed” to do ?
Missing card problem
- remove card
- set of instructions to identify misisng card from cards in deck
Appropriate level of discourse.
Analyse solutions, look for structure, process, abstraction, etc
Sequence selection iteration data structure, compexity, efficiency
Example of very inefficent process eg is it ace of spades, check whole deck for that one card at a time, then try 2 of spades etc
- CAN WRITE CODE FOR THESE SOLUTIONS• solve problem then transfer authority to the computer
- Machine isn’t more capable than you – just faster and more reliable
- Multiple ways to divide task between user and program and stil solve problem eg validation requiremetns of password can be presented to user to check boxes, or machine can check it.
- Division of labour aids with decomposition and abstraction
- Does it assist Iterative Development?
Example of Division of Labor = got a Q in scrabble – and don’t have a U What info does the player need?
Given a dictionary, can find solutions
I have these letters what can I really make? (put more workload onto program)
• Programming is about process, not necessarily about the product
for early programmers – how do we react to bad code?
Translation into language – Ich bin ein Berliner
- Submit reflections about their programming
- Tell us about your thoughts
- How would you improve it?
Problem selection can hurt or help understanding.
Choose examples that have a grounding in real world problems that make the world better
Growing a problem – how can you make this more useful, more cool,
detecting inappropriate messages in Facebook
Minimise ‘toy” problems – exist only for sake of demonstrating a language features
Differentiate between LANGUAGE features and PROBLEM SOLVING barriers
“why can’t you write this program?” – where are you stuck?
- Don’t understand the problem – requirements gathering
- Problem representation – algorithmic thinking, problem decomposition
- Domain knowoeldge – real world problems require research
Programming Constructs – new language features
“I can” – build or deflate confidence
eg How strong is your password?
Why can’t you write it?
– dunno what strong means – elaborate problem – examine password strenght factors
– metrics of strength – nm ^length /speed
how long would it take for a computer to guess it. – PC 10 million tries/sec, supercomputer 1 billion tries per second
• string processing
Can we derive a speed metric for specific computer? Write a program to do it.
Expose students to the language features needed for that problem and nothing more (avoid temptation to say “and you can also….” )
Approach has changed how teaching program – can focus on core constructs rather than programming language specifics. NOT teaching kids to be language specifics.
Brainstorm problems with kids to get problems