Module 4 Composition
Characters & Radicals
Module 4: Composition
How Characters Work — Object-Oriented Writing
Here's a question that haunts every engineer who opens a Chinese textbook: "How am I supposed to memorize 3,000 random drawings?"
You're not. Because they're not random. Chinese characters are composed from smaller, reusable parts — the same way you build complex objects from interfaces and mixins. Learn the parts, and thousands of characters stop being opaque glyphs and start being readable source code.
This module is your object model. Let's crack the binary.
1. Characters as Composed Objects
Every Chinese character is built from smaller components. Some characters are components themselves (primitives), and others are assembled from two, three, or even four parts. It's composition all the way down.
// Characters are NOT atomic. They're composed objects.
// Just like you wouldn't write a 10,000-line class,
// Chinese doesn't invent a unique shape for every concept.
interface Radical { category: string; }
interface PhoneticHint { sound: string; }
class 河 implements Water {
left: Radical = 氵; // water radical → meaning
right: PhoneticHint = 可; // "kě" → sound hint (hé)
meaning = "river";
}
// The radical tells you WHAT CATEGORY.
// The other component often hints at HOW IT SOUNDS.
// Two components. Meaning + sound. That's the pattern.
Once you see this, characters transform from arbitrary pictures into structured data. A character you've never seen before? Look at its parts. The radical on the left tells you the semantic domain. The component on the right often whispers the pronunciation. You can guess — and you'll be right surprisingly often.
2. Radicals as Interfaces
The 214 Kangxi radicals are the interface definitions of the Chinese writing system.
Each radical declares a category — "this character has something to do with water,"
"this one involves speech," "this one relates to metal." When a character
implements a radical, it inherits that semantic tag.
Here are the radicals you'll see everywhere. Learn these and you can read the type signature of thousands of characters:
氵 Water — implements Water
| Character | Pinyin | Meaning | Composition |
|---|---|---|---|
| 河 | river | 氵+ 可 | |
| 湖 | lake | 氵+ 胡 | |
| 海 | sea | 氵+ 每 | |
| 洗 | wash | 氵+ 先 | |
| 汤 | soup | 氵+ 昜 | |
| 酒 | alcohol | 氵+ 酉 |
River, lake, sea, wash, soup, alcohol — all wet things. All carry the water radical. The interface holds.
木 Wood — implements Wood
| Character | Pinyin | Meaning | Composition |
|---|---|---|---|
| 树 | tree | 木 + 对 | |
| 林 | forest | 木 + 木 | |
| 桌 | table | 卜 + 日 + 木 | |
| 椅 | chair | 木 + 奇 | |
| 板 | board | 木 + 反 |
Trees, forests, tables, chairs, boards — things made of wood, or that grow as wood. The pattern compiles.
火 / 灬 Fire — implements Fire
| Character | Pinyin | Meaning | Composition |
|---|---|---|---|
| 烧 | burn | 火 + 尧 | |
| 烤 | roast | 火 + 考 | |
| 热 | hot | 执 + 灬 | |
| 煮 | boil | 者 + 灬 | |
| 灯 | lamp | 火 + 丁 |
position property that changes its visual representation.
口 Mouth — implements Mouth
| Character | Pinyin | Meaning |
|---|---|---|
| 吃 | eat | |
| 喝 | drink | |
| 吹 | blow | |
| 唱 | sing | |
| 叫 | call / shout |
Eating, drinking, blowing, singing, shouting — all things you do with your mouth. The radical is the type tag.
心 / 忄 Heart — implements Heart
| Character | Pinyin | Meaning |
|---|---|---|
| 想 | think | |
| 怕 | fear | |
| 情 | feeling | |
| 快 | happy / fast | |
| 忙 | busy |
Thinking, fearing, feeling, happiness, busyness — states of the heart-mind. Ancient Chinese didn't separate heart from mind; both lived in 心. Every emotion and mental process implements this interface.
言 / 讠 Speech — implements Speech
| Character | Pinyin | Meaning |
|---|---|---|
| 说 | speak | |
| 话 | words | |
| 语 | language | |
| 读 | read | |
| 认 | recognize |
手 / 扌 Hand — implements Hand
| Character | Pinyin | Meaning |
|---|---|---|
| 打 | hit | |
| 拉 | pull | |
| 推 | push | |
| 抓 | grab | |
| 抱 | hold / hug |
More Radical Families
| Radical | Pinyin | Meaning | Interface | Example Characters |
|---|---|---|---|---|
| 钅 | metal | Metal |
铁 iron, 银 silver, 钟 clock | |
| 女 | woman | Woman |
妈 mother, 姐 sister, 好 good | |
| 日 | sun / day | Sun |
明 bright, 时 time, 晴 sunny | |
| 土 | earth | Earth |
地 ground, 城 city, 坐 sit | |
| 亻 | person | Person |
他 he, 做 do, 休 rest | |
| 足 | foot | Foot |
跑 run, 跳 jump, 路 road |
// The radical system is an interface hierarchy.
// ~200 radicals. ~50,000+ characters.
// Learn the interfaces and you can read the type signatures.
interface Water {} // 氵 → wet things, liquids, flow
interface Wood {} // 木 → trees, wood objects, plants
interface Fire {} // 火/灬 → heat, cooking, burning
interface Mouth {} // 口 → eating, drinking, speaking, sounds
interface Heart {} // 心/忄 → emotions, thoughts, mental states
interface Speech {} // 言/讠 → language, communication, words
interface Hand {} // 手/扌 → actions done by hand
interface Metal {} // 钅 → metals, tools, machines
interface Person {} // 亻 → people, human actions
interface Foot {} // 足 → movement, walking, paths
// When you see an unknown character, check the radical first.
// It's like checking what interface a class implements —
// you immediately know its category.
3. Composition Patterns — Structural Layouts
Characters aren't randomly glued together. They follow specific layout patterns, the same way UI components follow layout models. Here are the three main ones:
Left-Right (most common)
class LeftRight {
left: Radical; // usually the semantic radical
right: Component; // usually the phonetic hint
}
| Character | Left | Right | Meaning | Logic |
|---|---|---|---|---|
| 好 | 女 woman | 子 child | good | woman + child = good |
| 妈 | 女 woman | 马 horse | mother | woman + "mǎ" sound = "mā" |
| 河 | 氵 water | 可 can | river | water + "kě" sound = "hé" |
| 说 | 讠 speech | 兑 exchange | speak | speech + exchange component |
Top-Bottom
class TopBottom {
top: Component; // could be radical or phonetic
bottom: Component; // could be radical or phonetic
}
| Character | Top | Bottom | Meaning | Logic |
|---|---|---|---|---|
| 花 | 艹 grass | 化 change | flower | plant + "huà" sound = "huā" |
| 男 | 田 field | 力 strength | man | strength in the field = man |
| 想 | 相 mutual | 心 heart | think | heart + "xiāng" sound = "xiǎng" |
| 茶 | 艹 grass | 余 | tea | plant + components = tea |
Enclosure
class Enclosure {
outer: Component; // the wrapper / container
inner: Component; // the enclosed content
}
// Like a wrapper component in React,
// or a container class in CSS.
| Character | Outer | Inner | Meaning | Logic |
|---|---|---|---|---|
| 国 | 囗 border | 玉 jade | country | treasure within borders = country |
| 回 | 囗 outer box | 口 inner box | return | coming back inside = return |
| 问 | 门 door | 口 mouth | ask | mouth at the door = asking |
| 间 | 门 door | 日 sun | between / room | sun through the door = gap / space |
4. Sound Components — The Phonetic Hint System
Here's where it gets really powerful. In the majority of Chinese characters, one component is semantic (the radical — tells you meaning) and one is phonetic (hints at the pronunciation). This is not a coincidence. It's the architecture.
Watch what happens with the phonetic component 青 ():
| Character | Radical | Phonetic | Pinyin | Meaning | Code Analogy |
|---|---|---|---|---|---|
| 清 | 氵 water | 青 | clear | class 清 extends Water { sound = "qīng" } |
|
| 请 | 讠 speech | 青 | please | class 请 extends Speech { sound = "qǐng" } |
|
| 晴 | 日 sun | 青 | sunny | class 晴 extends Sun { sound = "qíng" } |
|
| 情 | 忄 heart | 青 | feeling | class 情 extends Heart { sound = "qíng" } |
|
| 睛 | 目 eye | 青 | eye | class 睛 extends Eye { sound = "jīng" } |
Same phonetic component 青. Different radicals. The radical changes the meaning category; the phonetic component keeps the sound in the same neighborhood. It's not always exact — tones shift, and some sounds have drifted over millennia (like from above) — but the hint is usually close enough to be useful.
// Phonetic components are like a base class with a sound property.
// Subclasses (characters) inherit the approximate sound
// and override the meaning via their radical.
abstract class 青_Family {
abstract radical: Radical;
sound ≈ "qīng"; // approximate — tone may vary
}
class 清 extends 青_Family { radical = 氵; meaning = "clear (water)"; }
class 请 extends 青_Family { radical = 讠; meaning = "please (speech)"; }
class 晴 extends 青_Family { radical = 日; meaning = "sunny (sun)"; }
class 情 extends 青_Family { radical = 忄; meaning = "emotion (heart)"; }
class 睛 extends 青_Family { radical = 目; meaning = "eye (sight)"; }
// Five characters. One pattern. Know the system, halve the memorization.
Here's another phonetic family to drive it home — 方 ():
| Character | Radical | Pinyin | Meaning |
|---|---|---|---|
| 房 | 户 door | room / house | |
| 访 | 讠 speech | visit | |
| 放 | 攵 strike | put / release | |
| 防 | 阝 mound | prevent |
5. Character Math — Delightful Compositions
Some characters are pure poetry in their construction. The components combine to tell a story that makes the meaning unforgettable. Here are the greatest hits:
| Character | Pinyin | Equation | Meaning | Why It Works |
|---|---|---|---|---|
| 明 | 日 + 月 | bright | Sun AND moon? Maximum brightness. | |
| 森 | 木 + 木 + 木 | forest | One tree, two trees, THREE trees = forest. | |
| 休 | 亻 + 木 | rest | A person leaning against a tree. Relatable. | |
| 安 | 宀 + 女 | peace | A woman under a roof = peace and safety. | |
| 家 | 宀 + 豕 | home | A pig under a roof. Ancient wealth = livestock at home. | |
| 林 | 木 + 木 | grove | Two trees = a small woods. Three = forest (森). | |
| 从 | 人 + 人 | follow | One person following another. | |
| 众 | 人 + 人 + 人 | crowd | Three people = a crowd. (See the pattern with trees?) | |
| 看 | 手 + 目 | look | Hand over eyes, peering into the distance. | |
| 尖 | 小 + 大 | sharp / pointed | Small on top, big on bottom = pointed shape. | |
| 哭 | 口 + 口 + 犬 | cry | Two mouths wailing (with a hint of howling). | |
| 比 | Two figures side by side | compare | Two similar shapes next to each other = comparison. |
// Character math: the ultimate composition patterns
compose("日", "月") // → 明 = bright (sun + moon)
compose("木", "木") // → 林 = grove (tree + tree)
compose("木", "木", "木") // → 森 = forest (tree * 3)
compose("人", "人") // → 从 = follow (person + person)
compose("人", "人", "人") // → 众 = crowd (person * 3)
compose("亻", "木") // → 休 = rest (person + tree)
compose("宀", "女") // → 安 = peace (roof + woman)
compose("宀", "豕") // → 家 = home (roof + pig)
compose("田", "力") // → 男 = man (field + strength)
compose("女", "子") // → 好 = good (woman + child)
compose("小", "大") // → 尖 = sharp (small + big)
compose("手", "目") // → 看 = look (hand + eye)
// These aren't random pairings. They're engineering.
// Each composition tells a micro-story.
Array(n).fill(component) — more copies = more intensity.
6. Stroke Order — The Build Order
Every character has a defined construction sequence — a specific order in which you draw the strokes. This isn't arbitrary calligraphy tradition. It's a makefile.
The rules are consistent and logical:
| Rule | Makefile Analogy | Example |
|---|---|---|
| Top before bottom | Build headers before implementation | 二 — top stroke first, then bottom |
| Left before right | Build dependencies left to right | 好 — 女 first, then 子 |
| Outside before inside | Build container before contents | 国 — outer 囗 first, then inner 玉 |
| Close the door last | Seal the container after filling | 国 — bottom stroke of 囗 is the very last stroke |
| Horizontal before vertical (at crosses) | X-axis before Y-axis | 十 — horizontal stroke, then vertical |
# Makefile: building the character 国 (country)
# Build order: outside-in, close last
国: 囗_frame 玉_contents 囗_seal
@echo "Character assembled: 国"
囗_frame: # Step 1-2: draw left side, then top
stroke vertical-left
stroke horizontal-top
玉_contents: # Step 3-6: fill the inside (玉 = jade)
stroke horizontal
stroke horizontal
stroke vertical
stroke dot
囗_seal: # Step 7: close the bottom — always last
stroke horizontal-bottom
# Total: 8 strokes, strict dependency order.
# Reorder them and the character looks wrong —
# like a binary compiled out of order.
Composition Summary
/**
* Chinese Character Composition Model v1.0
*
* ARCHITECTURE:
* 1. Characters are COMPOSED, not atomic
* - Built from radicals (semantic) + components (often phonetic)
* - ~200 radicals cover the standard library
*
* 2. Radicals are INTERFACES
* - 氵Water, 木 Wood, 火 Fire, 口 Mouth, 心 Heart,
* 讠Speech, 扌Hand, 钅Metal, 亻Person, 足 Foot...
* - The radical declares the semantic category
*
* 3. Layout patterns are STRUCTURAL
* - LeftRight (most common): radical | component
* - TopBottom: component / component
* - Enclosure: outer { inner }
*
* 4. Phonetic components are INHERITED SOUND
* - 青 → 清 请 晴 情 睛 (all sound ~qīng)
* - The radical changes meaning; the phonetic hints at sound
*
* 5. Some characters are PURE COMPOSITION
* - 明 = 日 + 月 = bright
* - 休 = 亻+ 木 = rest
* - 森 = 木 * 3 = forest
*
* 6. Stroke order is BUILD ORDER
* - Top→bottom, left→right, outside→inside, close last
* - Consistent rules. Like a makefile.
*
* KEY INSIGHT:
* Chinese characters are not 50,000 random pictures.
* They're ~200 interfaces composed into objects.
* Learn the parts. Read the architecture. Guess the meaning.
*
* NEXT MODULE: The Standard Library
* → Core vocabulary: the packages you import to get things done.
*/
You now understand how Chinese characters are built. They're not random. They're not arbitrary. They're engineered — composed from reusable parts with semantic and phonetic logic. An unknown character is no longer a wall; it's a class definition you can read. Check the radical for the category. Check the other component for the sound. Decompose, pattern-match, and guess. That's how native readers do it, and now it's how you'll do it too.
Next up: Module 5: The Standard Library, where we survey the core vocabulary
that every Mandarin program needs to import. Time to stock your node_modules.