It is the most discrete strand of computing, therefore it is easy to define and map out its progress.
It encompasses foundational principles (such as the theory of computation) and widely applicable ideas and concepts. It incorporates techniques and methods for solving problems, such as logical reasoning, and computational thinking.
Computer Science aims to equip students with the foundational skills and knowledge that will enable them to recognise, understand, write and debug their own programs, read and understand pieces of coding, predict what the code will achieve, as well as train their logical thinking and problem solving skills.
Programs: these tell a computer exactly what to do. Every program is written in some programming language, that allows a piece of code to be written once, and reused repeatedly. This abstraction is the key to controlling the enormous complexity of real programs (e.g. a web browser), which consists of dozens of layers of such abstractions.
Algorithms: re-usable procedures (often a sequence of steps) for getting something done. For example, plan the shortest delivery route for a lorry, given the required stops on the route.
Data structures: ways to organise data so that a program can operate quickly on it. For example, there are many different ways to represent numbers (decimal system, binary system, etc) with different trade-offs.
Architecture: this is the term used to describe the large scale structure of computer systems. At the bottom is real physical hardware. On top of that are layered virtual machines. Compilers translate from a high level programming language to the low-level binary that the hardware or virtual machine executes. Operating systems manage the resources of the machine.
Communication: almost all computer systems consist of a collection of sub-computers, each running one or more programs, and communicating with the others by sending messages or modifying shared memory. The internet itself is a large-scale example of such a collection.
Modelling: representing chosen aspects of a real-world situation in a computer.
Decomposing problems into sub-problems, and decomposing data into its components.
Generalising particular cases of algorithm or data into a more general-purpose, re-useable version.
Designing, writing, testing, explaining, and debugging programs.