Karmic Retribution of the Tiger Cub
My wife and I had a plan: she would speak to our son in English, while I would exclusively speak Chinese. That I hadn't read a Chinese book in twenty years didn't stop us from recklessly filling the bookshelf in the nursery with books in every color of the rainbow. Soon enough it was bedtime, my son was on my lap, and I was staring down the barrel of a Chinese book meant for one-year-olds.
As I stumbled through One Million Cats like a hostage reading a ransom statement, I couldn't help but feel like this was karmic retribution for slipping the leash of Singapore's public school system. Though I was great at Math, Science, and English, I was and still am terrible at Chinese. And I don't mean "B is an Asian F" terrible: I was "one more F and you're getting disowned" terrible. When my family migrated from Singapore to the US when I was a young teenager, my Chinese tutors and I celebrated the end of our mutual torment. I assumed, the way children do, that the debt would never come due. Twenty years later, my son delivered the bill.
The reason the bill is so steep is that Chinese is written with thousands of unique characters that don't reliably encode how they're pronounced. There is no system like phonics to bail you out, so many of us learned through rote memorization, sometimes with a ruler hovering over our knuckles for encouragement. Skip this step, as I did, and you'll find yourself lost in a sea of unfamiliar glyphs as an adult.
The language-learning industry has nothing for heritage speakers like me — people who grew up hearing a language they never properly learned to read. Using a translator app is like asking a forklift to do my deadlifts. By jumping straight to English, I never get to exercise the Chinese-processing parts of my brain. Other apps target new learners, and force me to revisit the basics that I already know, or learn new words that are completely disconnected from my everyday life.
Dictionaries aren't the answer either. To look up a character I don't recognize, I must draw it, stroke by stroke, in the correct order and direction. I learned how to do this before leaving Singapore, but for many heritage speakers, a dictionary demands the very education whose absence drove them to the dictionary in the first place. Survive the calligraphy exam and the prize is a list of possible meanings and a pop quiz on which one fits your sentence, when all I wanted was the answer to a much simpler question: how do I say this word?
Because that's the thing about being a heritage speaker: when I read Chinese, I'm thinking directly in Chinese rather than translating from English, and the words I don't recognize are almost always words I already know by ear. What I needed was a fast way to get the pronunciation of an unfamiliar word without translating the whole sentence and robbing myself of the practice I need to get better.
So I built Niàn, a reading assistant that only provides as much help as I ask for. Or more honestly, I built it nine times before something worked well enough to survive bedtime. The algorithmic core of Niàn was tricky too (it deserves its own writeup), but that's the kind of tricky I'm trained for as a software engineer. What actually killed the first eight prototypes was the user interface, which, to put it nicely, looked like an engineer designed it.
The breakthrough came from introducing a constraint: what if this app had to run on a Game Boy Color, a device with two buttons and a tiny screen? Redesigning the app so that everything could be done with two buttons yielded the first version of Niàn that was not just functional, but also nostalgic and fun to use.

Now when I hit a wall mid-sentence, I point Niàn at the page and a pronunciation annotation appears over the words I'm stuck on, leaving the rest of the sentence bare for me to figure out. If I need more help, I can tap again to show more hints, such as the meaning of each word in context. Niàn uses a simple but effective method to adapt to different fluency levels: it keeps its dictionary sorted by frequency, lowers the high-water mark when I ask for more help, and raises it when I don't. In practice, it only takes a few scans for Niàn to learn my skill level, thanks to the magic of binary search.
I have many more bedtime readings to go before my debt to the universe is fully repaid, and Niàn won't read to my son for me, but that was the whole point. Paying the interest on my debt turned out to be rewarding: I learned about the Viterbi algorithm, trained a transformer model, and practiced user interface design. Twenty years of running away from homework, converted into a project with the sweetest payoff: being able to put my son on my lap and open a Chinese book without checking how many pages are left.
Are you also in cosmic Chinese debt? You can get Niàn here.
