Computer science
SUBJECT overview
A highquality computing education equips learners to use computational thinking and creativity to understand and change the world. Computing has deep links with mathematics, science and design and technology, and provides insights into both natural and artificial systems. The core of computing is computer science, in which learners are taught the principles of information and computation, how digital systems work and how to put this knowledge to use through programming. Building on this knowledge and understanding, learners are equipped to use information technology to create programs, systems and a range of content. Computing also ensures that learners become digitally literate – able to use, and express themselves and develop their ideas through, information and communication technology – at a level suitable for the future workplace and as active participants in a digital world.
unit overview  autumn term unit 1.1
unit overview  autumn term unit 1.2
Software and software development 

Skills 
Describing the purpose and function of operating systems Explain the processes through which an operating system manages memory Describe the process through which an operating system handles a system interrupt Describe the various methods which an operating system uses to schedule tasks Classify the types of operating system Describe the role of the BIOS, device drivers and virtual machines in a computer system Justify the selection of different types of applications and source code to solve technological problems. Describe the process of translating low and highlevel programs into machine code for execution by a CPU. Be able to apply a range of common programming techniques in Python so solve common programming problems. Be able to apply assembly language mnemonics in a range of simple LMC programs to solve basic mathematical problems. 
Knowledge 
Understand operating systems:
Understand applications generation:
Understand high and lowlevel programming:

Software can classified according to the various functions it performs for a computer system. This unit unpacks how systems software runs ‘under the hood’, while applications and utilities are run by users to perform tasks. There is an impressive division of labour in computer software, meaning that programmers are able to simply trust that the files they create will be saved into the correct folders, that keyboard and mouse input will be handled appropriately, and that their applications will run at appropriate speeds. This unit considers each of these processes, and pays close attention to how operating systems schedule tasks, how translators turn programs into machine code instructions, and how different generations of programmers have written instructions for their respective CPUs. 
unit overview  autumn term unit 1.3
Exchanging data 

Skills 
Be able to design and model database structures to solve a range of data requirements. Be able to classify networks according to their hardware and connectivity requirements. Be able to describe how data travels from device to device on a network with reference to protocols and layers. Be able to code simple programs using HTML, CSS and JavaScript. Be able to justify decisions utilising compression algorithms. 
Knowledge 
Understand Compression, Encryption and Hashing:
Understand databases:
Understand networks:
Understand web technologies:

The modern computer system is connected to a local (and probably global) network, via wired or wireless transmission media. This unit considers how the various interconnected devices on these networks interconnect and communicate with one another. In particular, we engage with the notion of communication protocols – the rules for exchanging data on networks. During this unit, we examine how data passes reliably from one device to another over enormous distances, almost instantaneously, by observing the various protocols at each layer. We also consider how large volumes of data are quickly transmitted over the Internet after first being compressed. Thanks to some useful compression algorithms, we are now able to stream high quality sports games live, enjoy live video with many participants on our tablet devices and download images from the cloud onto our smartphones. This unit considers some methods of compressing data so this can be made possible. 
unit overview  autumn term unit 2.1
Elements of computational thinking 

Skills 
Being able to model problems by hiding away complexity and focusing on the most important features. Being able to plan software by expressing the inputs, outputs and preconditions. Being able to design solutions using topdown modular design. Being able to design algorithms that apply logic in appropriate sequence, considering how decision points and loops enable branching and iteration. Being able to identify which parts of complex systems occur simultaneously. 


Rationale 
This unit considers some frameworks for thinking about computational problems, so that computer scientists might share a common approach to complexity. Sometimes, we are able to use our solutions to some problems to solve a wider set of problems. A good computer scientist will seek to adapt their code in wider applications. They do this by separating concrete uses of their code from the algorithms they contain. This thinking skill is known as abstraction. A good computer scientist also develops the ability to think ahead, so that they attempt to form a picture of their final solution. They consider how their system will work with existing technologies, how it will be utilised by its users, and what it will take to create it. Practising Computer Science also involves thinking about the steps that a solution will involve. No matter what the problem, its solution will involve a bringing together of instructions, decisions, loops and logic. Being able to arrange these constructs and logic – thinking procedurally and logically – is a cornerstone of computational thinking. To consider multiple core processors, big data, computer gaming, operating systems and weather modelling is to see that multiple processes are executed simultaneously. Recognising that parts of problems can be solved at the same time involves thinking procedurally. These thinking skills are refined through considerable experience working with software. Each skill resonates with anybody who ever programmed a computer and attempted to write software, 
unit overview  autumn term unit 2.2
Problem solving and programming 

Skills 
Being able to apply the full range of A Level programming techniques to write computer programs that solve real world problems. Writing programs which:
Be able to apply higherlevel computational thinking to solve problems:

Knowledge 
Programming techniques:
Computational methods:

Rationale 
Programming is the thinking process of creating a sequence of instructions for a computer to execute. Once we start programming, we quickly notice just how many highlevel languages there are at our disposal. On this course, we prioritise one, Python, because it enables us to dive deep into all the complexities of the A Level and emerge knowing how to create useful software. It would be for the university CS student to increase the breadth and study more languages; this course prioritises depth over breadth. During the A Level, we work through sequence, selection and iteration to create the best software we can. Soon, we scale up our thinking to use subprograms to make modular, maintainable programs; and scale it up again to write programs applying the objectoriented paradigm. By the end of the course, you will have created a fully working computer game with an engaging interface, and possess a set of skills to use in any professional domain. As we make this progress, we grapple with greater problems along the way. Here, we learn how to view problems like computer scientists, applying familiar techniques of computational thinking so that our software development follows the process of really thinking it through as we go. 
unit overview  autumn term unit 3.1
Programming project 

Skills 
Be able to undertake the following:

Understand how to analyse a problem in terms of identifying its scope, the requirements of its stakeholders, expressing its essential features and justifying a solution that feels appropriate. Understand how to design a solution in terms of expressing its decomposed components, and how each one will be coded in terms of subprograms & data structures, as well as how each component will be tested. Understand how to develop a solution to a complex computing problem, using an iterative development methodology. Understand how to test and maintain a final computing solution, both in its component parts and its whole. 

Rationale 
In this practical component, students analyse, design, develop, test, evaluate and document a program written in Python. Students will apply the principles of computational thinking to a practical coding problem – quite commonly to create an original computer game. Here, students should take an agile development approach to the project development. The project assessment criteria is organised into specific categories, and written up in a final report that documents the agile development process. Historically, our students have been intensely proud of what they have produced in this project. It is here that the coding journey of the previous few years comes together, and produces a product greater than the sum of its parts. I look forward to working with you on yours. 
unit overview  spring term unit 1.4
Data types, data structures and algorithms 

Skills 
Be able to program in a highlevel language using the range of data types. Be able to represent and manipulate numeric data in binary form (positive, negative, integer and floating point). Be able to represent and manipulate numeric data in hexadecimal form. Be able to perform bitwise manipulation using AND, OR and so on. Be able to program in a highlevel language using the range of mentioned data structures (see below). Be able to create each of the mentioned data structures (see below), as well as traverse, add data to and remove data from each. Be able to create Boolean logic diagrams (including D type flip flops, half and full adders) Be able to express complex logic problems in simplified Boolean algebra using Karnaugh maps Be able to use De Morgan’s Laws, distribution, association, commutation, double negation in Boolean algebra 
Knowledge 
Understand data types:
Understand data structures:
Understand Boolean algebra:

Rationale 
Computers use electricity to represent data, the current having a high and a low state. Once digitised, this becomes the fundamental unit of computing: on and off, True and False, 1 and 0. This unit examines the binary system of 1s and 0s, which combine to represent not only positive integers, but also anything we experience on our computers. This includes images and video, where millions of bytes are grouped together to form true colour images, and quickly enough to create games. It also includes sound, where analogue audio is sampled so frequently, that it can be replayed in almost true sound. Much of the focus of this unit is mathematical, where we learn about how computers store negative and decimal point values using binary, and how these values are then computed in mathematical operations and logical evaluations. The unit also considers how items of data are combined in data structures. The choice of data structure (static, dynamic, onedimensional, twodimensional, stack, queue, binary tree, graph, hash table, and so on) is a critical one for a realworld computer scientist. This is because the decision has considerable implications for the runtime and relative efficiency of a program. This unit features opportunities to program using a range of data structures, so that the student becomes familiar with each structure, how data is stored within it, and its functions are used to manipulate the data it stores. 
unit overview  spring term unit
Legal, moral, cultural and ethical issues 

Skills 
Be able to investigate and discuss concerns regarding the development, use and impact of computing technology such as:
Be able to apply balanced arguments to discuss contemporary issues arising from using technology. Be able to write balanced essays, which consider how digital technology has been harnessed and how it has affected individuals and society. Be able to consider any emergent technological issue in terms of its impacts. Be able to describe the purpose of each piece of Computing legislation. 
Knowledge 
Understand Computing related legislation:
Understand moral and ethical issues – the individual moral, social, ethical and cultural opportunities and risks of digital technology:

Rationale 
The ubiquity of computers in modern society has led to a proliferation of computerrelated crimes. The digitization and networking of many aspects of our lives have led to some undesirable consequences, both by design and by default. These include identify theft, harassment, bank fraud, and cybercrime, all of which has seen new legislation attempting to protect the public from harm. These consequences also include societal fragmentation, as those who have mastered new technologies are in a far stronger position than those who have not – while those without technology at all are unable to even participate in the digital society. The computerisation of everything has created a large cluster of ethical issues. We use computers in the workplace, which at first augment work processes, until they become so powerful that they lead to human redundancies. We use computers for everything until our landfills are full of obsolete models, and our nonrenewable energy is running out just to power all this hardware. We can send video data instantly over our networks, but the next thing, our lives are observed by an allseeing eye that knows too much about us. This unit is about understanding how we can harness computers and stay mindful of how they can harm us. 
unit overview  spring term unit 2.3
Algorithms 

Skills 
Be able to analyse a given situation and design an algorithm for it Be able to classify different algorithms (in terms of execution time and space) according to their suitability for a given task and data set Be able to apply methods in order to determine the efficiency of different algorithms in terms of Big O notation (constant, linear, polynomial, exponential and logarithmic complexity) Be able to describe the comparison points between the complexity of algorithms Be able to demonstrate (in some cases write) the algorithms for the main data structures, (stacks, queues, trees, linked lists, depthfirst (postorder) and breadthfirst traversal of trees). Be able to demonstrate (in some cases write) the standard algorithms (bubble sort, insertion sort, merge sort, quick sort, Dijkstra’s shortest path algorithm, A* algorithm, binary search and linear search)` 
Knowledge 
Understand how to analyse and design algorithms for a given situation. Understand the suitability of different algorithms for a given task and data set, in terms of execution time and space Understand the measures and methods to determine the efficiency of different algorithms, Big O notation (constant, linear, polynomial, exponential and logarithmic complexity) Understand the comparison points between the complexity of algorithms Understand the algorithms for the main data structures, (stacks, queues, trees, linked lists, depthfirst (postorder) and breadthfirst traversal of trees). Understand the standard algorithms (bubble sort, insertion sort, merge sort, quick sort, Dijkstra’s shortest path algorithm, A* algorithm, binary search and linear search) 
Rationale 
By this point, you will have written a wide range of computer programs for numerous purposes, and have impressed yourself with how you mastered some complex problems. These may be called algorithms – and in this unit, you learn about some of the main algorithms in the field of computer science. In addition, the unit considers how any algorithm is analysed in terms of its memory requirements and execution time. In real world computer systems, this problem is a crucial one, as it enables a computer scientist to see if their algorithm is good enough, or if another one might do the job better. To develop this understanding, we consider the stages of designing an algorithm: we must first define it, then design it, develop it, test it and evaluate it. This is, in fact, an algorithm for creating algorithms. These stages of development are worth mastering, as they make for a great Y13 project, but beyond that, they are a great foundation for considering how to make anything. As the saying goes, if something is worth making, it is worth making properly: software is no different, so let’s understand a process for making software that works. 
knowledge Organiser
A knowledge organiser is an important document that lists the important facts that learners should know by the end of a unit of work. It is important that learners can recall these facts easily, so that when they are answering challenging questions in their assessments and GCSE and ALevel exams, they are not wasting precious time in exams focusing on remembering simple facts, but making complex arguments, and calculations.
We encourage all pupils to use them by doing the following:
 Quiz themselves at home, using the read, write, cover, check method.
 Practise spelling key vocabulary
 Further researching people, events and processes most relevant to the unit.