I have included some information beyond the specification because a lot of the content in these chapters is trivial. For example, the textbook talks a lot about abstraction in chapter 47.

Chapter 47 - Thinking abstractly

One good example of abstraction is with increasingly high level programming languages.

Abstract data types such as graphs are another great example of abstraction.

Chapter 48 - Thinking ahead

Preconditions involve specifying requirements for the inputs of subroutines in their documentation. They are useful because it saves the computer having to unnecessarily check if the parameters are correct every single time a subroutine is called. It also makes the subroutine easier to reuse by other developers. In JavaScript, this can be done by using JSDoc. Above a function, enclose documentation within /** */. Parameters can be defined by using @param {type} paramitor name - Human readable description. There are many other tags which can be added to specify information about functions, such as @constructor to specify constructors.

This chapter talks exclusively about thinking ahead. Cashing is a form of thinking ahead, even though it is usually not done directly by the programmer.

Chapter 49 - Thinking procedurally

Procedural abstraction means abstracting the details of code away by calling procedures to do them instead. If the procedure is named appropriately, then the resulting code will be easier to read.

Top down design is sometimes used in the creation of a large program. The general concept of the program is broken down recursively until the program can be defined in terms of small blocks of code that can be written as procedures.

The decomposition used in this way of thinking means that it is easier to figure out where a problem is located, and then fix that subroutine without affecting the rest of the program.

A hierarchy chart is a tree structure that can be used to represent decomposition.

hierarchy chart showing the computation of the hypotonuse as the root note, and each of the individual calculations stemming off as leaf notes [2]

The hierarchy chart shown only has one root node and four leaf nodes, but the leaf nodes shown here could be broken down into smaller tasks below them. Hierarchy charts are never more than one page.

Chapter 50 - Thinking logically, thinking concurrently

A structured approach means only using sequence, selection, and iteration. It aims to improve the readability of code and make it easier to maintain.

Algorithms can be designed using pseudocode and flowcharts, which are useful because most errors occur when there is some sort of branch in a program. They can be tested using trace tables.

Parallel processing must use multiple cores. Concurrent processing is done using only one core. There are limitations to parallel processing, and it may be more resource intensive to coordinate parallel processing than it would be to use concurrent processing.

Chapter 51 - Problem recognition

A problem is computable if an algorithm can solve it in a finite amount of steps.

Enumeration means to solve a problem by listing out all cases, like carrying out an exhaustive search.

A simulation builds a model of a situation to help solve it.

Divide and conquer reduces the size of the problem with each iteration.

Graph unfolding is a method of abstracting a problem down to a simplified graph to make it easier to solve.

A complex graph showing the possible routes to switch the position of two knights in chess, followed by a simplified graph. [3]

Automation is the process of building models to solve problems. You need to decide what is and isn't necessary to include in the model.

Chapter 52 - Problem solving

Visualisation.

Backtracking - essentially trial and error, question any assumptions you have already made. Used in a depth-first traversal of a graph.

Data mining is simply crawling through sets of data to get information. Big data is where there is too much data to store in a database.

Intractable problems:

Intractable problems exist where there is an algorithm which could be used (like a brute force), although such an algorithm would take a long time to run.

A heuristic /hjʊəˈrɪs.tɪk/[4] approach to a problem is one which may sometimes be wrong or imperfect, but which is more efficient than a perfect algorithm. For example, it is very difficult to know for certain that a large number is prime, although you can be very sure using the Miller-Rabin primality test.

Performance modelling - simulating user load on an application.

Pipelining - split into smaller tasks and run each of those simultaneously. Not just used in the CPU!

References

[1] "Generations of Programming Languages" - Geeks For Geeks. 22 Nov 2025. Retrieved 26 Feb 2026. Archived on 9 Feb 2026.

[2] "Structure Charts" - MultiWingSpan. Retrieved 26 Feb 2026. Archived on 18 Jan 2026.

[3] iii. "What does it mean to "unfold" a graph?" - Mathematics Stack Exchange. 17 Apr 2016. Retrieved 9 Mar 2026.

[4] "heuristic" - Cambridge Dictionary. Retrieved 9 Mar 2026.

[General] Heathcote, Pat; Heathcote, Rob. "OCR AS and A Level Computer Science". PG Online. June 2017. ISBN:978-1-910523-05-6.

HTML element collection

Smaller heading

  1. Ordered list

I don't generally like these elements. The ordered list is fine, although I generally prefer to keep consistency in my website by using a global CSS file rather than <style> tags. As for <h1> and <h2>, I find these too large to be practical. Maybe <h2> occasionally, but never <h1>.