•
Being able to analyse a problem and understand what it's really asking (e.g. understanding what data/inputs you're starting with and what they mean, what the results/outputs should look like)
•
Break it down into smaller pieces
•
Look for patterns in the problem, and be able to generalise those patterns.
•
And finally, be able to write some kind of algorithm which can be expressed in computing/programming terms to get a computer to solve that problem.