Why Morse Code Still Works: Timing, Frequency, and Human Error Tolerance
Morse code was developed by Samuel Morse and Alfred Vail between 1836 and 1844. It is now nearly two centuries old, has outlived telegraphy itself by half a century, and is the only character encoding still routinely transmitted between humans without a computer doing the encoding. The fact that the most common letter (E) is the shortest signal (a single dot) is not a coincidence β it's data compression worked out from a print shop's letter trays a hundred years before David Huffman formalized it as theory.
Morse code is the only thing in this entire blog that predates the electric grid. It was designed for the telegraph β a single-wire current-loop carrying signals between operators who keyed them by hand and decoded them by ear. Every later electronic communications technology made Morse obsolete, and yet Morse hasn't gone away. Pilots fly to airports whose names beam in Morse from the navigation aid. Hams chat in Morse on shortwave at 25 words per minute. The submarine cables that carry the modern internet were laid by ships descended from Morse-era telegraph cable layers, and the network they replaced spoke Morse.
This post is for the person who looks at ... --- ... and wants to understand the system around it.
The two Morses
The Morse code most people learn today is International Morse, formalized by the ITU in 1865 and largely unchanged since. There was an earlier American Morse (also called "Railroad Morse") used in North America until roughly 1900, with a different code chart, longer dashes, and internal spaces inside characters. They are not interchangeable; an American Morse operator and an ITU Morse operator hearing each other's transmissions get mostly garble.
When this post says "Morse," it means ITU Morse. American Morse is a museum piece.
The ITU Morse alphabet covers 26 letters (no case distinction), 10 digits, a small set of punctuation, and a set of prosigns (procedural signals β stop, error, end of message). Latin script only; non-Latin alphabets have local variants (Cyrillic, Greek, Arabic, Japanese kana via Wabun code).
The four timing units
Morse has only two symbols β short (., "dit") and long (-, "dah") β but four durations that all matter:
- Dit length: 1 unit.
- Dah length: 3 units.
- Intra-character gap (between dits and dahs of one letter): 1 unit.
- Inter-character gap (between letters of one word): 3 units.
- Inter-word gap (between words): 7 units.
That's the full timing model. A human transmitting Morse holds these ratios approximately; software-generated Morse hits them exactly.
The "unit" itself is determined by speed. Words per minute (WPM) is the standard speed measurement, calibrated against the word PARIS (which is conventionally taken to be 50 units long). 20 WPM means PARIS-equivalent at 1000 units per minute, so each unit is 60 ms. Casual hams operate at 15β25 WPM; contest operators routinely exceed 40 WPM; some champions decode 60+ WPM by ear, which is roughly the speed of normal English speech.
When you see Morse "decoding" software fail on hand-keyed transmission, the failure is usually in the timing variation β a real human's dits and dahs aren't 1:3 exactly, and they get faster as they warm up. Software has to track the timing, not assume it.
The chart, sorted by frequency (and why)
Here's an unconventional way to look at the alphabet β by encoded length, ordered by English-language frequency:
| Length | Letters | English freq |
|---|---|---|
| 1 element | E (.), T (-) |
E β 12%, T β 9% |
| 2 elements | I, A, N, M | high |
| 3 elements | S, U, R, W, D, K, G, O | mostly high |
| 4 elements | H, V, F, L, P, J, B, X, C, Y, Z, Q | mostly low |
Morse and Vail did this on purpose. They visited a print shop, counted the letter trays β typesetters keep the most-used letters in the largest compartments β and assigned the shortest codes to the most-used letters. E is one dit. T is one dah. Z is --.. and Q is --.- because they're rare. This is prefix coding (no code is a prefix of another) optimized by frequency, which is exactly the principle Huffman coding describes β except Huffman published the optimal algorithm in 1952. Morse and Vail did it by inspection a hundred years earlier and got close to optimal.
The digits are uniform 5-element codes:
0 -----
1 .----
2 ..---
3 ...--
4 ....-
5 .....
6 -....
7 --...
8 ---..
9 ----.
Easy to learn (count the dots from one end), inefficient by frequency (digits aren't equiprobable in real text), but a clean system.
Punctuation and the things you don't expect
The full ITU set includes:
.period:.-.-.-,comma:--..--?question mark:..--..!exclamation:-.-.--/slash:-..-.(,)parens:-.--.,-.--.-&ersand:.-...:colon:---...;semicolon:-.-.-.=double dash (separator):-...-+plus:.-.-.-hyphen:-....-_underscore:..--.-"quotation mark:.-..-.$dollar sign:...-..-@at sign:.--.-.
The @ sign was added by the ITU in 2004, the only addition to the Morse code chart in over a century. It was added because hams started exchanging email addresses on the air. The encoding (.--.-.) is "AC" run together β there was no convention for it before, and the ITU finally gave it one.
Prosigns: the invisible vocabulary
Prosigns are short combinations used as procedural markers, not transmitted as letters. Some are written with a bar over them (SK with a top bar) to indicate "this is one symbol, not two."
| Prosign | Meaning | Code |
|---|---|---|
| AR | End of message | .-.-. |
| SK | End of contact | ...-.- |
| BT | New paragraph / break | -...- |
| KN | Invitation to specific station to transmit | -.--. |
| K | Invitation to any station to transmit | -.- |
| AS | Wait | .-... |
| HH | Error (8 dots) | ........ |
| SOS | Distress | ...---... |
SOS is the only one almost everyone knows, and it's almost never sent in Morse anymore β modern distress signals use GMDSS (digital). The historical importance is real: during the Titanic sinking in 1912, the ship sent both CQD (the older distress call) and SOS (newly adopted), and SOS won out because it was unambiguous and could be sent quickly.
The "error" prosign β ........ β is just eight rapid dits. If you hear an operator make a slip, they send eight dits, then start the bad word over. It works because no real letter or punctuation is eight dits long.
Where Morse is still used
The Coast Guard stopped monitoring 500 kHz Morse distress in 1999. Commercial maritime and aviation moved off Morse decades ago. Yet:
- Aviation navigation aids broadcast their callsigns in Morse on a loop. A pilot tuning to a VOR or NDB hears
... .-. -..-.and confirms it matches the chart, ensuring they're tuned to the right beacon and not a spoofed or misidentified one. Pilots are taught to recognize the three-letter callsign of their primary navaids by ear. - Amateur radio keeps Morse alive socially. CW (continuous wave) operation is still the most spectrum-efficient digital mode you can do with simple equipment, popular for QRP (low-power) and DXing (long-distance contacts).
- Special-needs communication. Morse over a single switch is one of the lowest-bandwidth assistive-tech inputs, used by people with severe motor impairments β Stephen Hawking-era technology. Modern eye-tracking has mostly replaced it, but the technique remains.
- Cultural references and easter eggs. Watch face designs, jewellery, songs (Morse stretches of the Mission Impossible theme, the chorus of Rush's YYZ spelling YYZ in Morse). The format is iconic enough to function as visual signal.
How operators actually copy Morse
Beginners decode Morse one symbol at a time β count the dits, hear "dit-dah," translate to "A." That's slow; it caps out around 5β10 WPM.
Experienced operators decode at the word level. They don't think "dot-dot-dash, U, dot, E, dot-dot-dot, S," they think "USES." Above 25 WPM, decoding letter-by-letter is impossible β there's not enough time between characters to think. The brain treats each Morse word as a single auditory pattern, the way fluent readers don't read letter-by-letter.
This is also why software-driven beginners' tutors use the Koch method: start with two characters at full target speed, drill until you can copy them, add a third character, repeat. Slow Morse is harder to copy for fluency than fast Morse, because at slow speeds you hear individual dits and dahs (which is the wrong skill); at fast speeds you hear word-shapes (which is the right one).
Common pitfalls (in software, in operation, in life)
- Forgetting the inter-letter and inter-word gaps. A common new programmer's error: encoding
HELLO WORLDand forgetting that the space betweenOandWis seven units, not one. - Using ASCII to compare Morse. A space-separated
.... . .-.. .-.. ---is not the same as.... . .-.. .-.. ---β the second has different gap lengths. Most decoders use a single space between letters and/or(three spaces) between words. - American Morse leaking in. Old radio handbooks and films sometimes show American Morse (with internal spaces inside characters). Don't trust dramatized depictions.
- Encoding non-ASCII characters. Morse is Latin-only in its core. Wabun code (Japanese) uses the same dits and dahs but assigns them to kana, and is incompatible with regular Morse.
- Speed mismatched to the receiver. A 30 WPM transmission to a 10 WPM operator is just noise. Hams ask for QRS (slow down) and QRQ (speed up). Software decoders usually adapt automatically.
- Hand-keyed timing variation. Real human Morse keying drifts. Decoders that lock onto a fixed unit length will fail; adaptive ones tracking the rolling median work.
- Missing the SOS-as-prosign nature. It's transmitted as one continuous nine-element pattern with no inter-letter gaps, not as
S-O-S. Software encodingSOSletter-by-letter produces a slightly different signal.
When you'd encode something in Morse on purpose
There's only one scenario where encoding-to-Morse is the right answer rather than a curiosity: you're talking to someone (or a device) that explicitly speaks Morse. Amateur radio operator. Pilot studying for an instrument rating. A novelty hardware project. A film prop with period accuracy.
For everything else β the format is a beautiful artifact, a living connection to the first electrical communications, and a small example of what can survive when the technology around it changes completely. The dots and dashes you can hear on a 7 MHz receiver tonight are the same code Vail tapped out in 1844, with @ added in 2004.
That's a stable spec. Modern engineers should be so lucky.
Primary references
Standards and official documentation used to check the technical details in this guide.
Encode and decode Morse instantly
The Morse tool on this site converts text to and from ITU Morse code in the browser, with full support for letters, digits, punctuation, and prosigns. Useful for amateur radio prep, ham license study, or just decoding the dots on a watch face. Nothing leaves your browser.
Open the Morse toolRelated guides
Continue with practical guides from the same topic area.
What Actually Belongs in a Production Dockerfile for Node (and What Doesn't)
Most Node Dockerfiles in the wild copy node_modules into the image, run as root, and ship a 900 MB layer. A short guide to the few decisions that matter: base image, multi-stage builds, layer caching for dependencies, the NODE_ENV trap, and why your docker-compose should not mirror production.
Catching Missing Translation Keys and Interpolation Mismatches Before Users Do
A missing translation key renders the raw key path to users, and a mismatched interpolation parameter renders an empty string or a crash. Both are easy to miss in review because the developer's locale always has every key. A guide to comparing locale JSON files, finding missing keys, and catching parameter mismatches before they ship.
Mock Data That Actually Exercises Your UI (Not Just Fills It)
Most mock data is ten copies of the same row with a different id. It fills the page and tests nothing. A guide to generating mock data that exercises layout edge cases, long names, missing fields, empty states, and the date and number formats that break formatting code, with field inference so a sample JSON becomes a realistic dataset in one step.