What Is...?

I spend a lot of time talking. Probably more than I should and definitely more than people enjoy! Along the way however, I often get asked common programming questions, and while most of the time I have a good answer to hand it can be useful to have a reference.

(As well as a good opportunity to make sure what I’m talking about is reasonably correct.. 👀)

This project started in Dec 2021, let’s see if I can add one a week for a year. If there’s a topic you think I should cover then feel free to ping me. (I doubt there’s anyone here I don’t already know so you should be okay! 🙃)

All posts

TSP 3: Finding a better hill

4 minute read

Hill climbing traps us in a minima / maxima, introducing a diversification step allows to break free, potentially finding better solutions.

TSP 2: Hill Climbing

5 minute read

Given an initial solution, hill-climbing makes small changes to quickly improve it.

TSP 1: The Random Salesperson

4 minute read

The first in a series of posts exploring different approaches to tackling the famous Traveling Salesperson problem.

Dynamic Programming

5 minute read

An algorithmic approach to solving optimisation problems by breaking them into small subproblems and solving those first.

WAL

1 minute read

A Write-Ahead Log provides a durability guarantee by persisting state changes to disk.”

ACID

6 minute read

ACID compliance is an indicator of the viability of a database. Be warned however, as just because something is ACID compliant, does NOT mean that it will be...

Chain of Responsibility

3 minute read

The Chain of Responsibility is a behavioral design pattern that passes a request along a set of handlers, each one deciding to process the request or pass it...

CQRS

5 minute read

Command Query Response Segregation is a software architecture pattern that splits responsibility of reads and writes on a system, unlocking advanced patterns...

Closure

4 minute read

A closure is a combination of an environment and a function, they’re used to enable data privacy and only reveal references to privileged functions.

Transactional Outbox

5 minute read

A transactional outbox is an architecture pattern used to guarantee the sending of events after a mutation has been performed, but only after the data has be...

Bloom Filter

4 minute read

A bloom filter is a probabilistic data structure used to check set membership in constant time and space. They’re pretty cool.

SOLID Principles - D

2 minute read

SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. I is...

SOLID Principles - I

2 minute read

SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. I is...

SOLID Principles - L

2 minute read

SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. L is...

SOLID Principles - O

2 minute read

SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. O is...

SOLID Principles - S

3 minute read

SOLID is an acronym for several programming principles for object-orientated programming that aim to create understandable, readable, and testable code. S is...

Reservoir Sampling

3 minute read

Taking a random sample from N items is reasonably simple, but what if we don’t know the upper limit? How can we ensure each item is equally likely to be sele...

The Repository Design Pattern

7 minute read

tldr; a repository is an interface that controls access and mutation of a domain aggregate to some persistance layer. It’s the middleman between the two.

A C4 Diagram

5 minute read

Software engineering is an interesting place. We have roles like Architect, and talk a lot about architecture but rarely will you find any floor plans beyond...

Hexagonal Architecture

4 minute read

Hexagonal architecture (or ports and adapters, depending on who you ask) is a software architecture pattern that concerns itself with the separation of appli...