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

How to Learn a New Language — and a Framework for Learning Anything

How to Learn a New Language — and a Framework for Learning Anything

It’s been a long time since I’ve posted one of my internal adRise talks — partly because I’ve been sharing less often lately (my colleagues have shouldered a lot of the sharing), and partly because some of those talks cover internal systems I can’t discuss publicly. But today’s talk has nothing to do with our internal systems: it’s about a framework — a framework for learning.

Although the title is “How to Learn a New Language” and every slide revolves around learning a new language, as the two head fakes at the end make clear, my goal isn’t to teach you elixir (though I use it as the running example), nor is it really to teach you how to learn a new language (though the whole talk unfolds from that premise). The deeper subject is how to distill a methodology for learning anything new.

Lomonosov said: “Without learning, life is not worth living.” Confucius also said: “Without learning, one cannot know the DAO.” For most professions, learning isn’t a matter of life and death. But computing — software development — really is a game in which, without continuous learning, you’re obsolete in the next minute. So how do you learn more effectively? The lecture runs why → what → how, and under “how” I offer a framework that I’ve found genuinely effective.

In short, the why layer is about finding the benefit of learning a given thing. Comrade Deng told us: “A cat that catches mice is a good cat.” In software, far too many “cats” are born every day; wildflowers gradually dazzle the eye, and deciding which to anoint and which to dismiss is genuinely hard. So what are the factors for judging whether something is a good cat? I highlighted these:

  • paradigm shift. Does it help raise your level of understanding? If you only ever learn similar things, your understanding improves slowly and incrementally; you never get the leap.
  • alternative solutions. Is it a genuinely good alternative to solutions that already exist? We learn things in order to apply them, to solve real-world problems better. The more methods you have, the more room you have to trade off.

Through why, you filter down to a set of candidates worth learning; next comes what. For language learning I listed a number of directions, but ultimately it comes down to one idea: step out of your comfort zone and pick the direction you’re worst at. If everything you touch is an interpreted language, then a compiled language will teach you a great deal. If you’ve used NoSQL databases (MongoDB, say) till you’re blue in the face, go back and dig deep into an RDBMS (PostgreSQL, say) — the payoff will be enormous.

Once you’ve clarified the why (your motivation) and settled the what (to learn), next comes how. How is the crux of this framework; different methods produce very different learning efficiency and results. In outline:

  • First, get a feel for it: spend a few hours quickly absorbing the programmatic, high-level content (much like reading a book).
  • Then understand its history — especially why it came into being, and how. Emperor Taizong of Tang said: “With bronze as a mirror, one can straighten one’s cap and gown; with history as a mirror, one can perceive the rise and fall of dynasties.” “Knowing rise and fall” is an important process: understanding a technology’s origin and evolution lets you grasp its strengths and weaknesses more deeply, and understand why those strengths and weaknesses exist.
  • Then get familiar with its ecosystem — all the surrounding tools. The ecosystem has a huge influence on a technology’s fate.
  • Then learning by practicing. The Master said again: “To learn, and at due times to practice what one has learned” — that’s a pretty good feeling. Don’t envy the programmer who flips jianbing as expertly as a Wudaokou street vendor, or who steams baozi no worse than a veteran at the Qingfeng Baozi Shop — that’s all trained.
  • Then spar and compare notes with others. In the world of software, the best place to spar is github. First read the code of the masters, study their every move, and while despising your own puniness, be like your silly Jing gege: it doesn’t matter if you don’t understand — Kang Long You Hui, Kang Long You Hui, Kang Long You Hui, strike it from Monday to Friday, a few hundred times over, and practice makes perfect; in the end the move is yours. Once you’ve mastered the moves, it’s time to cross swords with others. At work, in your studies, you’ll spot problems in every project you use; you can wait for someone else to fix them, or you can fix them yourself and send a pull request, getting others’ review and seeing whether you’re on the right track. Pull request (and code review) is quite possibly the best master-apprentice method in this world: the broader your reach, the more masters you’ll have.
  • Next comes comparison and corroboration. Your existing body of knowledge and the body you’re acquiring make excellent references for each other; by comparing and corroborating, you deepen your understanding of both. It’s like being raised in Wudang, well versed in its inner techniques from childhood, then by some stroke of luck taking up the Yijin Jing: what you know of Wudang illuminates the Yijin Jing, and the Yijin Jing in turn deepens your grasp of Wudang. Studying things in comparison is all but the only way to go deep.
  • Finally, teaching — learning by teaching. Confucius was his disciples’ master, but he kept learning through dialogue with them. Take the question of what a junzi is: Zilu asked, Ran You asked, many people kept asking, and Confucius talked all the way from the three cautions and the nine thoughts to “ashamed that his words exceed his deeds,” “first act, then speak,” “not anxious, not confused, not afraid.” Confucius’s views kept changing — you can call it teaching to the student’s aptitude, but little did they know the old man was himself advancing through those very questions. When we learn, the worst thing is You don’t know that you don’t know — not knowing that one does not know. At that moment, teaching what you know to others deepens your understanding; in summarizing, you fill in the missing pieces of the puzzle; and in others’ seemingly foolish questions, you have sudden insights.

OK, that’s enough from me. I’d meant to hit three hundred words; the floodgates opened and I couldn’t stop. What follows is the slideshow — look at the pictures. You’re welcome.

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