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 氵+ 胡
hǎi sea 氵+ 每
wash 氵+ 先
tāng soup 氵+ 昜
jiǔ 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
shù tree 木 + 对
lín forest 木 + 木
zhuō table 卜 + 日 + 木
chair 木 + 奇
bǎn 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
shāo burn 火 + 尧
kǎo roast 火 + 考
hot 执 + 灬
zhǔ boil 者 + 灬
dēng lamp 火 + 丁
Polymorphism alert: The fire radical has two forms — when it appears on the left, and (four dots) when it sits on the bottom. Same interface, different rendering. Think of it as the same class with a position property that changes its visual representation.

Mouth — implements Mouth

Character Pinyin Meaning
chī eat
drink
chuī blow
chàng sing
jiào 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
xiǎng think
fear
qíng feeling
kuài happy / fast
máng 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
shuō speak
huà words
language
read
rèn recognize

/ Hand — implements Hand

Character Pinyin Meaning
hit
pull
tuī push
zhuā grab
bào hold / hug

More Radical Families

Radical Pinyin Meaning Interface Example Characters
jīn metal Metal iron, silver, clock
woman Woman mother, sister, good
sun / day Sun bright, time, sunny
earth Earth ground, city, sit
rén 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.
Survival hack: You don't need all 214 radicals. About 50 radicals cover the vast majority of common characters. The ten families above already give you a reading head-start on hundreds of HSK 1-4 characters. Learn the radical, and every new character in that family is half-learned before you even look it up.

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 (qīng):

Character Radical Phonetic Pinyin Meaning Code Analogy
water qīng clear class 清 extends Water { sound = "qīng" }
speech qǐng please class 请 extends Speech { sound = "qǐng" }
sun qíng sunny class 晴 extends Sun { sound = "qíng" }
heart qíng feeling class 情 extends Heart { sound = "qíng" }
eye jīng 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 jīng from qīng 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 — (fāng):

Character Radical Pinyin Meaning
door fáng room / house
访 speech fǎng visit
strike fàng put / release
mound fáng prevent
The practical takeaway: When you encounter an unfamiliar character, try this: (1) Check the radical — what category is it? (2) Check the other component — does it look like a character you already know the sound of? If yes, the new character probably sounds similar. You just reverse-engineered a character you've never studied. That's the power of understanding the composition system.

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
míng + bright Sun AND moon? Maximum brightness.
sēn + + forest One tree, two trees, THREE trees = forest.
xiū + rest A person leaning against a tree. Relatable.
ān + peace A woman under a roof = peace and safety.
jiā + home A pig under a roof. Ancient wealth = livestock at home.
lín + grove Two trees = a small woods. Three = forest ().
cóng + follow One person following another.
zhòng + + crowd Three people = a crowd. (See the pattern with trees?)
kàn + look Hand over eyes, peering into the distance.
jiān + 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.
The scaling pattern: Notice how Chinese uses multiplication for intensity? One = tree. Two = (grove). Three = (forest). Same with people: (person) → (follow) → (crowd). It's like 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.
Why stroke order matters for engineers: You might think "who cares, I'll just type on my phone." Fair. But stroke order helps with three things: (1) Handwriting input — many phone keyboards accept handwritten strokes and need correct order to recognize them. (2) Memory — motor memory reinforces visual memory. Writing characters builds neural pathways that pure reading doesn't. (3) Dictionary lookup — stroke count is still used to look up unknown characters. You don't need to obsess over it, but knowing the five rules above covers 95% of cases.

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.

Practice what you learned