Learning to Think at Different Levels of Abstraction
I am sitting here trying to improve my typing skills. You are supposed to press the letter "c" with your middle finger, but I press the letter "c" with my index finger. This forces my index finger to do too much work. Another problem I have is inconsistency with "b" and "y". Sometimes I press them with my left index finger, sometimes with my right. Both of these are problems, and as a result, my typing speed is stuck at around 80 wpm. Considering I think at around 150–200 wpm, typing is my bottleneck.
So, I went to Monkeytype, customized the settings to just the letters "z," "x," "c," and "v," and got to relearning how to type the letter "c." I then graduated to "z," "a," "s," "x," "d," "c," "v," and "b" before earning the right to add all the letters of the alphabet back to my keyboard. Words at this stage are "zfj", "qwmjp", "lbvty". They were random letters across the keyboard.
Weirdly, my wpm dropped from 80 to 20 wpm. I knew it would decrease somewhat, but I was honestly astonished by the 4x drop. What this shows is that the human brain memorizes patterns. We see the word "people" and we know how to type it. We don't actually comprehend each letter we're typing, we simply think in patterns to arrive at the letters. The most common words in the English language are all memorized on your keyboard. The brain has also memorized common patterns that are repeated often like "th," "ing," "pr."
I then moved to Monkeytype's 450k words level. These are words you probably haven't seen on any given day, but patterns are still stored within them. Examples include "heftinesses," "pseudoanachronistical," and "neuraxis." I shot up to 45 wpm because of these embedded patterns.
Coding Abstraction Layers
It struck me in this moment that learning how to write and then applying that to typing is identical to learning the principles behind coding and applying them to coding.
I've also realized that there's an emerging class of people building software who don't know the individual "letters" of code.
I'm learning in a way where I don't know the letters. I know the properties of letters, like that an "l" is a straight line perpendicular to the other letters, but if you were to show me the actual letter "l," it would take me quite a while to figure out what I was looking at. Coding is different from language in that you have the ability to think in sentences, paragraphs, pages, or even books.
I don't think at the level of letters. I rarely think at the level of words, although I try to as often as possible because it helps me understand the sentences I'm stringing together. Most of my day is spent thinking at the level of sentences. AI is really good at taking my sentence-level meaning and turning it into the proper output.
I would argue this isn't such a bad thing, contrary to what the coding community makes it out to be. I find that sentences are a close enough level of abstraction that I'm able to manipulate or build nearly anything. You can specify a sentence to really just mean a single word. You can even specify a sentence to mean a single letter. Obviously, specifying a letter through a whole sentence is very inefficient relative to developers who learned from letters up (most developers), but the inverse is equally true. When you're trying to write a book, it's a lot easier to think at the level of sentences to get it written out.
When I was coding with Claude 3.5 Sonnet, the sentences often were pretty shit sentences. I would have to continually use sentences to redo the sentence that I was asking to create. It was hard to get it to write the sentence that conveyed the thing I meant in the right way. This was a mix of the model being less capable and me not being able to articulate my ideas of what I wanted to see well.
When I write code with Claude Opus 4.5 today, it usually picks up on what I want and writes a pretty good sentence for me. I get to stay in flow and think at the sentence level, planning one feature and then the next. This level of thinking is great fun for me. Some people have explored thinking all the way up at the book level, while others think at the paragraph level.
The best programmers will be able to think at any one of these levels. But this will be a very hard—maybe even world-class—skill. People tend to stick with what they are good at. Even though I should be typing with my middle finger pressing "c", my mind developed the bad habit to unconsciously use my index finger. When you don't want to think hard, you default to what you know.
Engineers Vs Vibe Coders
Developers need to retrain their minds to think at the sentence level, while engineers learning on the job need to train their minds to understand the words and letters that compose sentences.
It's an uneven pitch, but both camps are on the same field for the first time ever. It's a lot easier to learn sentences from words and letters than it is to learn words and letters from sentences. But sentences are the most efficient way to build software right now. Maybe in 5 years it will be at the paragraph or page level.
Engineers are giving up a lot when they decide to code at the sentence level. Playing Monkeytype is very fun. When you get good at typing, it's not really an act of thinking—you just do. This is the same for good engineers. They mostly turn off their brain and do. This new world is forcing engineers to activate their brains and start solving problems again, rather than letting a product manager determine the problem for you.
If you're just getting started in code or want to get started, I think it's best to learn at the level of paragraphs or pages first, and then hone in on sentences. This way, you get the dopamine hit of building something yourself out of thin air, which is needed for the desire to keep pushing to learn more. There will be a lot of struggle to actually get something working, which is why you need agency. You also need curiosity to let you understand what you are actually building, so you can replicate whatever it is you are building now down the line. Hopefully that curiosity takes you down to the level of words and letters—learning them out of genuine interest you can apply to your own work (like studying history), rather than as a requirement to do the job.