How do we **think about problems** in a way which makes them solvable for a computer?

Computational thinking asks us to "think about a problem in a way it could be solved by a computer".

Our big questions (used with gratitude from wikipedia):

- How do we use
**abstractions and pattern recognition**to represent the problem in new and different ways? - How do we
**logically organize**and**analyze**data? - How can we
**break the problem down**into smaller parts? - How do we
**approach the problem**using programmatic thinking techniques such as**iteration, symbolic representation, and logical operations**? - What is the best way to
**reformulate the problem**into a series of ordered steps (algorithmic thinking)? - How do we
**identify, analyze, and implement**possible solutions with the goal of achieving the most efficient and effective combination of steps and resources? - How do we
**generalize this problem-solving process**to a wide variety of problems?

Identify the procedure appropriate to solving a problem.

Evaluate whether the order in which activities are undertaken will result in the required outcome.

Explain the role of sub-procedures in solving a problem.

Identify when decision-making is required in a specified situation.

Identify the decisions required for the solution to a specified problem.

Identify the condition associated with a given decision in a specified problem.

Explain the relationship between the decisions and conditions of a system.

Deduce logical rules for real-world situations.

Identify the inputs and outputs required in a solution.

Identify pre-planning in a suggested problem and solution.

Explain the need for pre-conditions when executing an algorithm.

Outline the pre- and post-conditions to a specified problem.

Identify exceptions that need to be considered in a specified problem solution.

Identify the parts of a solution that could be implemented concurrently.

Describe how concurrent processing can be used to solve a problem.

Evaluate the decision to use concurrent processing in solving a problem.

Identify examples of abstraction.

Explain why abstraction is required in the derivation of computational solutions for a specified situation.

Construct an abstraction from a specified situation.

Distinguish between a real-world entity and its abstraction.

Describe the characteristics of standard algorithms on linear arrays.

Outline the standard operations of collections.

Discuss an algorithm to solve a specific problem.

Analyse an algorithm presented as a flow chart.

Analyse an algorithm presented as pseudocode.

Construct pseudocode to represent an algorithm.

Suggest suitable algorithms to solve a specific problem.

Deduce the efficiency of an algorithm in the context of its use.

Determine the number of times a step in an algorithm will be performed for given input data.

State the fundamental operations of a computer.

Distinguish between fundamental and compound operations of a computer.

Explain the essential features of a computer language.

Explain the need for higher level languages.

Outline the need for a translation process from a higher level language to machine executable code.

Define the terms: variable, constant, operator, object.

Define the operators =, =?, <, <=, >, >=, mod, div.

Analyse the use of variables, constants and operators in algorithms.

Construct algorithms using loops, branching.

Describe the characteristics and applications of a collection.

Construct algorithms using the access methods of a collection.

Discuss the need for sub-programmes and collections within programmed solutions.

Construct algorithms using pre- defined sub-programmes, one- dimensional arrays and/or collections.

These are only displayed for our current academic year (2021 - 2022).