Learn to Adjust the Friction in Learning
When people talk about learning efficiently, they often try to make everything faster. AI has strengthened that impulse. Yet smoother learning is not always better learning. Some friction makes us think; some merely wears us out.
If You Want to Code with AI, Start by Taking the Old Route
Many people want to use AI to build websites, apps, and products, then stall over whether to learn prompting, Python, language models, Java, front ends, back ends, or databases first. Students in particular can consume every new model and product story without ever opening an editor.
The useful answer is plain: learn one programming language first. Follow the pre-AI boot-camp sequence—variables, types, conditionals, loops, functions, classes, interfaces, exceptions, and collections—then build small projects and learn databases and front-end/back-end communication.
Java can add productive friction. A path through Java fundamentals, MySQL, Maven, Spring, Spring MVC, MyBatis, and Spring Boot forces questions about types, dependencies, interfaces, databases, and logs. It is slower, but teaches how programs fit together, run, and fail—the judgment needed to assess AI-generated code.
The official Java tutorial’s Bicycle class contains fields, a constructor, and methods. A beginner still has to understand private, int, this, and the constructor. Type it, then change its fields and methods. That is useful friction.
Bilibili has many complete free courses. Choose one with substantial use, complete chapters, and recent maintenance, then finish it instead of continually comparing options. Type the code, change parameters, and delete a line to observe the error. Read the message yourself; ask AI only after ten or fifteen minutes if you remain stuck.
Handwriting code builds familiarity with syntax; investigating errors reveals how a program runs. Once you understand how a request reaches a Controller, passes through a Service, and enters a database, AI can productively fill in boilerplate, explain errors, and draft features. Fundamentals in variables, functions, data structures, interfaces, databases, and debugging also transfer if you later switch from Java to Python or TypeScript.
When Learning a Foreign Language, Remove Unproductive Friction
Language learners often spend more time preparing than studying: looking up a word, finding examples, copying a translation, fixing formatting, and making a card. Ten minutes later they have processed two words but barely read aloud or recalled either one.
Languages require exposure and repetition. Search, copying, and formatting are preparation; polished preparation cannot replace reading, listening, and review.
Tools should shorten that preparation. In DuoCards, for example, a learner can save words encountered in articles, subtitled videos, or web pages. The software supplies definitions and examples, schedules repetition, and carries the same card into listening, fill-in-the-blank, reading, and dialogue practice. The learner avoids searching, copying, and arranging material, but still has to recognize, recall, and use each word.
Judge such features by the step they remove. Generating examples, scheduling review, and preparing exercises reduce tool switching and organization. Pronouncing words, understanding sentences, and actively recalling them remain the learner’s work. The preparation is shorter; the target skill is still exercised.
Ask What This Step Is Actually Training
To decide whether friction should stay, ask whether the step forces you to use the skill you are learning. Writing Java by hand exercises syntax and types; tracing an error develops debugging. Keep that resistance. Ten minutes spent finding one example sentence mainly trains search and copying; half an hour formatting cards does not teach the word. Hand those steps to tools.
Next time a step feels slow, name the ability it actually exercises. If the answer is grammar, debugging, recall, or expression, preserve the friction. If it is only searching, copying, or formatting, automate it.