What does it mean to be an expert at something? Is it different from just being good at it? How can you tell if you are or aren't? And is it just a bourgeois construction designed to maintain the iron grip of privilege over the values of society?

These extremely specific questions have been on my mind, in part because the process of gaining expertise has been mostly invisible to me. Sure, I used to be bad at programming, but I started when I was 10 and back then I was bad at everything; it's hard to distinguish my development as a programmer from my development as a human.

Recently, though, I've been using more skills like electronics, that I picked up later in life, or writing, that I've done a lot but never formally studied. In some sense, I am good at these things, but the experience of doing them compared to programming is like night and day: I am not an expert.

What does that look like in practice? Well, with writing I'm at this kind of high-amateur plateau. I've written a bunch of words, and I write 'em good, but my process is messy and slow, my theoretical knowledge isn't there, and my structure can be a bit shambolic. This all adds up to a lack of reliability: I can't write to a deadline, be certain in my grammatical choices, or have a high confidence that my writing achieves what I intended.

The high-amateur plateau is common in self-taught programmers: they're often quite skilled, but the skill is fragile. You can write code, but can you write code in a way that ensures some other outcome? Can you write code fast? Can you write code while people are watching? Can you write code and be confident that it works and it's good without someone else telling you?

I think expertise is more than just being highly skilled; it's being skilled to the point where your skill becomes invisible. In that sense, it's a qualitative shift: from spelling to vocabulary, vocabulary to phrasing, phrasing to voice. To learn the higher-level skill, you need the lower-level skills to support it. To do this, they have to be so reliable that they disappear.

So the reason I am not an expert in writing is because my writing skills are not invisible. I can't really think about what I'm writing, because I'm still thinking about grammar, structure, or editing. By contrast, when I'm programming, I think about what I want my program to do, not about programming itself.

This suggests an interesting strategy for pursuing expertise. Of course, you still need to develop your skill through practice and training, but at a certain point it may be better to start learning something else with that skill so that it is forced to become invisible. The real benefit of a computer science education may be that it teaches you programming in order to teach you computer science.

And finally, it's worth wondering if we could use this to approach even higher levels of expertise. Even if I think only about what I want my program to do, that can still be very complex. What would it mean to reach a point where I no longer have to think about that, and the skill of making a program that does something becomes, itself, invisible? What would I think about instead?