Our human brains are primitive and puny. Despite being well-adapted for hunter-gatherer survival, they find it difficult to work with several complex ideas simultaneously. We’re good social interactors, superb empaths, excellent pattern-matchers, skilled readers between the lines, but we’re terrible at reasoning directly about the complicated behavior of non-human systems.
That’s a problem, because complex non-human systems now dominate our world. In this talk I’ll present our solution: abstraction.
Abstraction is an adapter between the fearsome complexity of the universe and our simple primate minds; when the real world is too fiddly or confusing or counterintuitive for us to work with directly, abstraction gives us big friendly levers to pull on instead. This single powerful idea underlies computers, mathematics, language, and everything else we rely on in our daily work as computer programmers.
This talk unpicks Steve Jobs’ famous description of a computer as “a bicycle for the mind”. I’ll explain where simple abstractions (e.g. numbers) come from, compare our everyday understanding of them to what they actually mean, and show how they enhance our natural cognitive abilities by allowing us to succeed at complex tasks while still sticking to what we’re good at.
Instead of having to maintain an intuitive understanding of the arithmetic properties of numbers, for example, we can just manipulate symbols according to some easily-remembered rules; because of the careful design of the symbols and the rules, our simple manipulations are deeply connected to much more sophisticated properties.
The same applies to the abstractions we use in computer programs every day: object-oriented programming is a way of systematically hiding complexity by bundling it up into opaque units, each of which is given a meaningful name so that we can think about it abstractly in the rest of our program. This encapsulation of complexity is the only way we can ever get any useful work done.