Stop Telling Junior Devs to Avoid AI
Building judgment while you ship, not before
The advice keeps surfacing in developer communities, conference talks, and mentorship conversations: don’t use AI tools until you’ve learned the fundamentals. Build the muscle memory first. Understand what’s happening under the hood before you let a machine do it for you.
The research tells a surprising story. A study from MIT, Princeton, and the University of Pennsylvania found that junior developers saw 21-40% productivity gains from AI coding assistants, compared to 7-16% for seniors. The boost was strongest where developers lacked prior context and used AI to scaffold unfamiliar territory. Exactly the junior situation.
But productivity isn’t the whole story. In 25 years of shipping software, I’ve watched developers stumble when they skipped foundational understanding, and the instinct to protect that learning process isn’t misguided. The evidence backs it up: IT Pro reports that industry observers see new developers unable to explain how or why their code works, while FinalRoundAI warns of “pseudo-developers” who can generate code but can’t maintain it. The concern is real.
But the conversation tends to treat “AI tools” as a monolith. What juniors actually encounter on engineering teams today is more specific: coding agents. Claude Code, Cursor, Copilot. These aren’t autocomplete suggestions. They’re collaborative tools that write, refactor, and test code across entire codebases. Agent-assisted engineering is becoming the default workflow, and telling a junior to opt out of the team’s toolchain isn’t practical advice.
The job market data deserves a closer look too. Entry-level postings dropped 60% between 2022 and 2024. Stack Overflow reports that 70% of hiring managers believe AI can handle intern-level work. Those numbers are real, but they describe classically-defined entry-level roles. Meanwhile, Carta’s data shows solo-founded startups rose from 24% to 36% of all new startups. Y Combinator is betting on 10-person billion-dollar companies. The signal isn’t that the work is disappearing. It’s that smaller teams are doing more, sooner in their careers. The shape of the work is changing.
When the Baseline Shifts
Every major abstraction layer in computing history has redefined what “fundamentals” means. When high-level languages replaced assembly, programmers worried the next generation would never understand registers and memory management. They were right about the atrophy. They were wrong about what it meant for the profession.
Vivek Haldar traces how compiler adoption in the 1950s triggered the same three objections we hear about AI today: performance concerns, loss of control, and anxiety that easier tools would devalue expertise. Grace Hopper faced colleagues who believed “automatic programming” (her term for compiler-generated code) would make programmers obsolete. Instead, compilers expanded who could program and what programming meant.
This pattern repeated with garbage collection, IDE tooling, and now AI-assisted development. Each time, skills at one layer atrophied while skills at the next layer emerged. If history is any guide, the more interesting question isn’t whether certain coding skills will atrophy. It’s what skills are emerging as the new baseline.
But This Is Different
You’ve probably been reading the last few paragraphs thinking “but compilers are deterministic and AI is not.” You’re right. The analogy has limits. As Martin Fowler observes, with LLMs we’re not just moving up the abstraction levels. We’re moving sideways into non-determinism. You can’t store prompts in version control and expect identical behavior each time.
Vivek Haldar argues this non-determinism is manageable, pointing out that modern computing already combines unreliable components into reliable systems through validation and feedback loops. But it shifts where the risk sits. With a compiler, you could examine source code and determine correctness before compilation. With an LLM, you need to understand architecture and risk well enough to evaluate what the agent produces. This is fundamentally about risk mitigation: knowing what to look for, what to test, and where the failure modes live.
What the Data Suggests
The productivity gains aren’t automatic though. METR’s randomized controlled trial found that experienced developers expected AI to speed them up by 24%. It actually made them 19% slower. Even after experiencing the slowdown, they estimated AI had helped by 20%. The perception gap is striking and worth sitting with.
The 2025 DORA Report offers a framework for understanding why. Surveying nearly 5,000 technology professionals, DORA found that AI acts primarily as an amplifier of existing process quality. Faros AI’s analysis showed that AI coding assistants boosted individual output, but organizational delivery metrics stayed flat. Code review time increased. Bug rates climbed.
This is the clearest signal in the data:
Poor process plus AI equals accelerated chaos. Good process plus AI equals genuine acceleration.
Teams that hand juniors coding agents without investing in ground truth are running the poor-process playbook. The chaos isn’t the tool’s fault. It’s the absence of engineering discipline around the tool. For juniors, the question shifts: not only “will AI atrophy your skills?” but “does your team have the process to help you benefit from it?” That’s a learnable skill, not a permanent limitation of experience level.
Building Judgment While You Ship
So if the answer isn’t “avoid AI entirely,” what does productive use look like for someone still building foundations?
Advice like “no AI code generation for your first three months” (as Frontend Mentor suggests) doesn’t survive contact with a real engineering team. When your team’s workflow runs through coding agents, opting out isn’t a learning strategy.
The investment that matters is in context engineering: structuring what agents receive so their output is reliable. AGENT.md files that encode your team's architectural decisions, coding standards, and domain context. Agent Skills that interrogate the developer about requirements before generating code: "Did you consider edge cases for authentication? What happens when this service is unavailable?" This is the mentorship layer, curated by seniors and embedded in the toolchain. I've written about one approach to this in the Ralph Wiggum Agent Loop, where iterative specification and fresh context windows are deliberate design choices that enforce the discipline that makes agent output reliable. Context engineering is the new baseline competency. Without it, you're running DORA's poor-process playbook with a faster engine.
The classic learning check still applies: if you can’t explain it, you don’t understand it. But the bar has shifted. The question isn’t whether you can trace code line by line. Even before agents, many developers weren’t reading every line in review. A better question is: can you explain the tests? Tests are informed clients of your codebase. They map to user requirements and system integration points. If you understand what the tests are verifying, including the negative cases, you understand the contracts. You can trust the agent to implement code that meets those contracts, and you know where to look when something breaks.
This has always been about risk mitigation. That framing is more honest than blanket mandates for human review of every line. And for domains where every line genuinely matters, like safety-critical systems and financial infrastructure, AI is enabling formal verification methods that were previously prohibitive. Proof checkers catch invalid logic regardless of how confident the LLM was. The rigor increases, not decreases.
The same agents that help you ship can help you build the domain expertise that makes you more valuable. Go deeper in the problem space you’re working in. Understand the business vertical, the user needs, the edge cases that only show up in production. This is how T-shaped expertise forms: not through separate study, but through using AI to accelerate both delivery and understanding. The structured learning loop (attempt a concept, ask for explanation when stuck, implement from understanding, verify, explain back) applies here, in the work itself, building the judgment that compounds over time.
The research supports deliberate use. A Harvard study found that students using a carefully designed AI tutor achieved more than twice the learning gains compared to traditional methods. The key: the tutor was built around pedagogical principles, not answer generation. CodeAid, deployed to 700 students, deliberately avoids generating direct code solutions, providing explanations instead. And an academic study of 234 students found that AI-assisted pair programming increased motivation but didn’t fully match the collaborative depth of human pairing. AI supplements mentorship. It doesn’t replace it.
No one has this fully figured out (beware of those who say they do). The research is early, the landscape is shifting, and we’re all learning how to work with these tools.
The definition of “fundamentals” has always been a moving target. Every major abstraction layer deprecated some skills and elevated others. The question for juniors isn’t whether to use AI. It’s whether you’re building judgment or outsourcing it.
The advice to avoid AI isn’t wrong. It’s incomplete. The better path, in my experience, is to use agents as tools for building judgment. Understand the architectural approach, which tells you what to test for. Invest in ground truth that makes agent output reliable. Build the discernment to recognize when the agent is confidently wrong, because it will be. And go deeper in what interests you, forming the expertise that no tool can substitute.
That’s a harder path than either “avoid it” or “let it do everything.” It’s also a more honest one.



I think my own lack of interest in learning specific languages, syntax and conventions, has made adoption of AI-assisted coding much easier for me. Obviously I do know a lot about a number of languages, after using them for years, but I've never cared to learn more than I needed to. The specifics of a language seemed way less important than the architecture of the system, how it's tested, and the patterns best for the domain or service I was working in. I have vivid memories from earlier in my career, where more senior engineers would almost shame me for not knowing I could use some native feature of a language - while I built a virtually identical function and would probably compile down to the same efficiency. I'm happy to worry more about managing the higher level now and only checking over when necessary.
I mentor juniors and one thing I have noticed is how fast they learn to use AI compared to seniors. Many seniors are still reluctant to use AI because they are confident they can code better than LLMs