Applying a procedural approach to real life problems: sequencing basic steps, identifying common patterns.
Communicating procedural descriptions: flowcharts, pseudo-code.
Understanding underlying abstractions used in programming, through examples: variables, iteration, accumulation, filtering, parametrised procedures, polymorphism and state.
Selecting appropriate data structures to store relationships between data: lists, trees, matrices, graphs.
Identifying algorithmic techniques to solve a given problem: searching, sorting, indexing, matching.
Decomposing problems into smaller units to find a solution: recursion, divide and conquer.
Understanding and checking algorithms: predict their behaviour, design tests to verify their output, perform simple debugging.