QIAOPANG.COM · SELECTED ESSAYS (2013–2026) · 260 ESSAYSBrowse Chronologically (2013 → 2026) ↗
QiaoPang · Programmers LifeSelected Essays · Systems, Craft & Agentic Era
Timeline ↗

How to Master a Technology Quickly

How to Master a Technology Quickly

In our own present circumstances and the goals we want to achieve, there always lies a great river called “prerequisites,” and it seems there is no way across except to expend enormous effort swimming it. Unfortunately, most people are swept away by the turbulent current before they can get close to their goal. Yet a small minority seem to have boarded Aladdin’s magic carpet and arrive on the far shore without delay, as if learning any technology is not so hard for them. What is going on?

Learning a new language or a new technology is less a capability than a method. Ask yourself: what kind of person, or at what stage of life, has the highest learning efficiency and the best results? The answer is obvious: infancy. My daughter, not yet two, has probably mastered only a few dozen nouns, a dozen or so verbs, and three to five adjectives and prepositions, yet she produces hundreds of sentences a day. Think about how many years we studied English before we could say a complete sentence like “hello everybody, so glad to see you”—middle school? High school? College? Think about what level of communication we could manage when we had a vocabulary of 3,000 words.

If you observe carefully, you’ll find that an infant’s learning method is pragmatism at its most extreme. Imitation, trial and error, practice—with no regard for so-called “authoritative” grammar or morphology; use is everything. Take my daughter again: her utterances are mostly phrases and sentences:

“Daddy, hug Little Bao.” — seeking comfort

“Little Bao wants her milk.” — hungry

“What if Little Bao doesn’t behave?” — after learning to ask rhetorical questions, she checkmates you from time to time when you talk to her

“Mommy, Mommy, come home quick, let me kiss you.” — learned from the singing machine; acting cute

“goodbye so long farewell my friend” — learned in music class; acting cute

In most of the sentences she says, she does not know the precise meaning of each word, but she knows the approximate meaning of the sentence, and from adults’ reactions she can tell whether her understanding is correct. In this way, again and again—imitating, making mistakes, getting feedback—she continuously accumulates “knowledge” she can use directly.

This is the pragmatist’s learning method: bypass obstacles, go straight to the subject, and focus on what you need to learn right now. A few years ago, before I started learning something, I would search the internet for almost every book I could find, from beginner to advanced to expert. After reading a pile of reviews, I would contentedly select the so-called “best” ones and buy them, then stack them in front of my desk, as if this were a necessary ritual before learning. But all this did was make Douban and Amazon richer; the piled-up books were often consigned to the shelf after I grandly read to chapter X of the first book (X <= 5). Later I realized I had been trapped by the notion that “learning requires systematically laying a solid foundation first.” I kept sinking into the swamp of “basics,” deeper and deeper, studying harder and more bitterly, struggling all the way. In 80% of cases, that struggle ended in giving up.

In fact, I did not need to worry about those “basics” at all. Set them aside and learn only as much as you need. For example, if I want to learn Rails, I start directly with Rails. When I hit a Ruby syntax obstacle, I go back and look at the relevant content in the Ruby documentation, clear the obstacle, and immediately return to Rails itself—rather than gnawing through Ruby first. After all, the Ruby features used in Rails may account for less than 20% of Ruby’s total language and library features! Starting from Ruby is taking a detour.

Software development is a craft. Learning it is not the wholesale accumulation of knowledge that may rarely be used; we cannot wait until all theoretical knowledge is ready before we begin. When criticizing Java’s inefficiency, the creator of Scala once said that Java turns programming into a ceremony, and therefore deprives it of all fun. So when we pile books from beginner to expert in front of our desk, don’t we also turn learning into a grand, solemn ritual? What matters is not how much knowledge we stack up, but putting learning to use.

Focusing and going straight to the subject is still far from enough. In the learning process, you need a great deal of practice and feedback. Infants do not wait until they have accumulated 3,000 words before speaking; they open their mouths on the first day their body and brain are ready. And even though they speak with countless mistakes, they grow braver with every setback, fighting on after every failure. By the same token, if you learn Python without using ipython to try out various techniques in the REPL, or learn Django without starting by building a runnable web project, your learning efficiency will certainly be low and the results inevitably mediocre. At the gym, even if you watch a trainer’s movements a hundred times instead of trying them yourself and accepting his corrections, you still won’t master proper form. I have seen people type every example from a book into an editor, run them all correctly, and then complacently believe they have “mastered” the technology. Little do they know that this kind of “practice” is not valuable practice. We need trial and error, like a baby learning to walk: imitate, step, fall, get up, step again. Making mistakes is part of learning. After you finish a tutorial and grasp what it covers, conceive an app or use case of your own and write it from scratch. You will discover many problems and deepen your understanding of the tutorial. For questions you cannot answer yourself, seek help from the community; most development-related questions can be solved on Stack Overflow. By practicing and getting feedback continuously, your development skills will improve quickly. Much unsystematic knowledge and ability (even insight) is learned subconsciously in this way, through constant practice and trial and error—it arrives so quietly that, to everyone but you, it looks like a natural gift.

So when do you need systematic study? When you already have the skills and experience needed for practical work and need to elevate your knowledge on a macro level, or when your practical ability hits a bottleneck. As the saying goes: You don’t need to be an excellent Ruby engineer to use Rails well, but if you want to be an excellent Rails engineer, you must have a good command of Ruby. Unfortunately, many beginners’ problem is this: they want to get up to speed quickly with a technology, but they use a systematic-learning approach; before they even get started, they collapse on the hard road of ascetic practice.

MORE IN Languages & Craft

Further Reading in This Column

View all essays in “Languages & Craft” →

Time to Meet jj: Git's Next Evolutionary Step

Git has ruled version control for twenty years, but its staging area, brittle rebases, and blocking merge conflicts are becoming liabilities in the AI era. jj rebuilds the mental model from the ground up — while staying fully Git-compatible. Here's why it deserves your attention.

New Hope (2025–2026)5,588 chars · 12 min read