← All posts

Practice

Typing code

Why code is harder than prose, and how to drill the symbols you actually use.

Programmers type all day, but their wpm on a regular typing test is often unimpressive. The reason is that prose and code are different problems. The fingers that fly through English text get stuck on every semicolon, every brace, every shift-2, every backslash.

What makes code harder

Three things, mostly.

Symbol density. A line of prose has zero or one punctuation marks. A line of code has five or six -- braces, parens, dots, semicolons, equals signs, comparison operators. Each symbol means a shift key reach to a key you do not type often.

Capital letters mid-word. userName, getUserById, XMLHttpRequest. CamelCase puts shifts in the middle of identifiers, where prose typists never need them. The two-key motion of shift-then-letter has to happen in the same time slot as a regular letter press, or your tempo breaks.

No predictability. In prose, after typing "the quick brown" your fingers are already drifting toward F-O-X. In code, after typing function, the next keys could be any identifier. Your fingers have nothing to anticipate.

The combined effect: a typist who runs 80 wpm on prose might run 45 wpm on real code. That is normal. It is not a signal that something is wrong.

What to drill

If you write code regularly, the code drills are worth more than another round of prose practice. Three are essential:

Brackets -- (), [], {}, plus the nested versions. Open-close pairs are a specific motor pattern. Most fingers do open fast and close slow. Drilling this evens out the rhythm.

Math symbols -- + - * / = < > !. The shift-key reaches that almost no one practices on a regular typing test. You will use these constantly in any language.

JS keywords (or Python decorators, or HTML tags, depending on what you write). The high-frequency tokens in your language. Type them enough that your fingers stop spelling them out one letter at a time.

Lessons that go further

Stage 13 of the lessons is programming-focused. It covers TypeScript, Rust, Go, Java, C, C++, Ruby, Swift, Kotlin, PHP, Lua, Elixir, Haskell, Scala, Clojure, OCaml, F#, Dart, Julia, R, Erlang, Solidity. Plus framework drills (Vue, Angular, Svelte, Express, Django, Rails, Phoenix), plus DevOps tools (Docker, Kubernetes, Terraform, Ansible, Helm).

Pick the languages you actually use. Skip the rest.

A target

A reasonable goal for code typing is roughly two-thirds of your prose wpm. If you type 90 wpm in prose, 60 wpm in code is good. 70 is excellent. The gap closes with practice but it does not close all the way -- code is genuinely harder.

The number that matters more than wpm is the ratio of clean lines. If you have to backspace and retype every fourth line, your code is being written twice. Drilling brackets and symbols cuts that ratio fast.