{"slug": "the-hard-way-has-changed", "title": "The hard way has changed", "summary": "A new analysis argues that while large language models can generate code, beginners must deliberately choose to engage with the underlying concepts rather than relying on AI to remove all obstacles, because friction is essential for learning. The author, who previously advised beginners to ignore AI, now suggests they can use it from day one if they actively read explanations, break applications on purpose, and take responsibility for real deployments. A small study of novice programmers found that AI helped some move faster while confusing others, but the long-term effects of learning entirely with coding agents remain unknown.", "body_md": "After I wrote that [programming experience is no longer a\nmoat](/software/2026/07/22/programming-experience-is-no-longer-a-moat.html),\nmany people told me that experience was still the real moat.\n\nLLMs can produce code, they said, but they cannot compress judgment. You only get that by spending years debugging systems, making mistakes, and suffering with the compiler.\n\nI think they are right about the first part.\n\nI am less sure about the second.\n\n## We don’t know yet\n\nThe technology is too new.\n\nNobody has spent ten years learning programming with a capable coding agent because capable coding agents haven’t existed for ten years. We cannot examine the careers of people who learned entirely this way. Those careers have barely started.\n\nMaybe some beginners have already compressed five years of learning into two. Maybe they only look competent because the machine is doing the work. A working application doesn’t tell us which one happened.\n\nOne [small study of novice\nprogrammers](https://doi.org/10.1145/3632620.3671116) found exactly this split.\nAlmost everyone completed the task, but some students used AI to move faster\nwhile others became even more confused.\n\nIt is interesting, but it doesn’t answer the bigger question. Only time will.\n\n## Two kinds of beginner\n\nThe first beginner asks the LLM to build an application.\n\nIt works. They ask for another feature. That works too. When something breaks, they paste the error back into the chat and apply the next patch.\n\nAfter six months, they may have shipped a surprising amount of software. They may also understand very little of it.\n\nI know how addictive this is because [I tried vibe-coding an entire\ngame](/projects/2025/07/02/i-vibe-coded-tech-debt-a-game-written-in-pure-html-css-js.html).\nThe incentive to stop and read the code is almost nonexistent when the next\nprompt can keep you moving.\n\nThe second beginner does not start by reviewing architecture and rejecting bad abstractions. They cannot. They are still a beginner.\n\nThey start smaller.\n\nThey ask what each file does. They try to predict what the code will do before running it. They ask for a hint before asking for the patch. After the LLM fixes a bug, they revert the fix and try to reproduce it themselves.\n\nThey break their small application on purpose. They change the input, delete a record, add latency, or make an API return nonsense. Then they watch what happens.\n\nAt first, they will ask bad questions and misunderstand the answers. That is normal. The important part is that they stay with the problem after the code starts working.\n\nEventually, they can read the generated architecture. Eventually, they can compare two approaches and notice that one of them is a mess. Eventually, they can refuse the first working answer.\n\nThose are not skills the beginner starts with. They are what this process is supposed to produce.\n\n## Friction still matters\n\nI previously wrote that beginners should [learn to code, ignore AI, then use AI\nto code even\nbetter](/software/2025/03/28/learn-to-code-ignore-ai-then-use-ai-to-code-even-better.html).\n\nI am no longer sure about the “ignore AI” part.\n\nA beginner may be able to use AI from the first day and still learn properly. They just cannot let it remove every obstacle.\n\nThe LLM can finish the exercise, or it can help you understand the exercise. Those uses look similar from the outside because both may produce working code.\n\nOnly one of them requires much thinking.\n\nThe old route included friction automatically. The compiler refused to cooperate. Documentation was unclear. Answers were difficult to find. You had no choice but to sit with the problem.\n\nNow the easy answer is always one prompt away.\n\nThat means the beginner has to choose the hard part deliberately.\n\nBuild something small enough to understand. Read what the model writes. Ask for explanations, not only fixes. Work without it occasionally. Break things in a safe environment. Put something real online and take responsibility when it fails.\n\nExperienced programmers should not pretend that our old learning route is the only route that can produce judgment. Beginners should not pretend that shipping AI-generated software means they have already developed it.\n\nIf I were learning today, I would use AI from the beginning. But if the code worked and I couldn’t explain why, I would not consider the lesson finished.", "url": "https://wpnews.pro/news/the-hard-way-has-changed", "canonical_source": "https://kyrylo.org/software/2026/07/23/the-hard-way-has-changed.html", "published_at": "2026-07-22 16:00:00+00:00", "updated_at": "2026-07-23 03:38:23.941293+00:00", "lang": "en", "topics": ["artificial-intelligence", "large-language-models", "ai-tools", "developer-tools"], "entities": [], "alternates": {"html": "https://wpnews.pro/news/the-hard-way-has-changed", "markdown": "https://wpnews.pro/news/the-hard-way-has-changed.md", "text": "https://wpnews.pro/news/the-hard-way-has-changed.txt", "jsonld": "https://wpnews.pro/news/the-hard-way-has-changed.jsonld"}}