Sam Gentle.com

Exhaustive knowledge

An old timey map

I've never been hugely fond of formal education, and I'm quite happy to see that the modern world has a lot of alternatives to offer. Many software developers are self-taught, and I would say even the ones who get a formal education are also self-taught if they are any good. This is perhaps the most obvious reason why a degree in computer science is not a great predictor of ability in software development. I've even heard people claim that there's no point in formal education at all, but that seems a bit too far to me.

It's easy to learn bits and pieces from tutorials or videos online, to build up a giant bag of facts and skills, but that's not the same as true understanding. Each fact in your bag is like a waypost planted somewhere in the knowledge space: as long as you're near it you know where you are and what you're doing. But what happens when you inadvertently wander off the path? Worse, what if you need to wander off the path because it's the only way to get where you're going? The bag of facts can't help you there.

The one thing formal education does do well is define the limits of the space, to map its contours and dimensions. You may not know how to solve every individual problem, but you know that this one falls within a class of problems, which itself falls within the boundaries of the foundational models of the entire field. In computer science, we call this "theory", but I feel like this name doesn't really do justice to the concept: defining the bounds of what is known within the field.

In logic, there are two main quantifiers you use to describe the scope of a statement. You can say it holds true for one case (existence, or ∃), or that it holds for every case (universal, or ∀). To prove something exists requires only a single example, a waypost in the knowledge space. I can prove that there is number greater than 5: it's 17. To prove that a statement holds for every single thing is much more difficult, because you need to map the entire space and reason about it.

You might think that's a bit ambitious. After all, how often do you actually need to reason about the entire space of things, or prove something universally? In practical terms, if I know lots and lots of facts and skills, isn't that good enough? Over the course of a lifetime of study you can build up a stunningly large bag of tricks. But there's still one thing you can't do: disprove anything. To say that something doesn't exist is to say that everything isn't that thing. You need universals for that, and without them you're limited to saying "well, I haven't seen it yet, but..."

To say no to something, to understand what is possible and what isn't, or reason about the unknown at all requires a particular kind of knowledge. I think of it as exhaustive knowledge: once you have it, you're done searching. I don't need to wonder if you can make a significantly faster comparison sort, or an infinite compression algorithm. I may not know the exact details of every minor new piece of knowledge that comes out of those spaces, but I know their limits.

I think formal education is good at giving exhaustive knowledge because that's its stated aim, and I don't think many self-directed resources share that aim. I'm hopeful that more such resources will come to exist over time, especially as more people come to realise the power of self-directed learning. In the meantime, though, it's easy to be led astray. Don't settle for a bag of facts, true understanding only comes from exhaustive knowledge.