Skip to content

How It Feels to Learn JavaScript in 2026

· 6 min read · view as markdown

tags: dev-tools, ai-agents

Ten years ago this month, Jose Aguinaga published How it feels to learn JavaScript in 2016. It was a dialogue: someone who had been away from the frontend for a while asks a veteran for help building a simple page that shows data from a server, and gets buried under React, JSX, Babel, Webpack, npm, Bower, TypeScript, Flow, Redux and two dozen templating engines. It ends with the newcomer giving up and going back to the backend, and the veteran answering with one line: "Ever heard of Python 3?"

I read it when it came out and it stuck with me. It was funny because every name in it was real. Ten years later, I wanted to know what the same conversation sounds like now that so much of the code is written by an agent. Here it is, with apologies and thanks to the original.

How it feels to learn JavaScript in 2026

Hey, I have a new web project, but honestly I haven't written code in a few years. I need a simple page that shows some data from a server. What should I use?

— Nothing. Ask the agent.

The agent?

— An AI coding agent. You describe the page and it writes it. Claude Code, Codex, Cursor, Copilot, Gemini CLI. Pick one.

Okay, but it writes it in what? React?

— Probably. Next.js, most likely. You don't really need to care.

I don't need to know React?

— You need to know enough React to read what it wrote. That's not the same thing.

Fine. So I just tell it "make me a page"?

— No. First you write an AGENTS.md. Or a CLAUDE.md, depending on the agent. It's a file where you explain your project, your conventions and how to run the tests.

I don't have a project yet. That's why I'm asking for a page.

— Then let the agent write the AGENTS.md too. And review it, because that file goes into every conversation.

Every conversation? Isn't that expensive?

— It's cached. Prompt caching. As long as you don't touch the start of the context, the provider charges you a fraction for it.

I... okay. Which model?

— Depends on the week. There's a new frontier model every month or so, each one in a big version and a fast version, and every lab has a benchmark where it's winning.

Which one is winning?

— All of them. According to their own benchmarks.

Got it. The data comes from a server. How does the agent know about my server?

— You connect it with MCP, the Model Context Protocol. It's a standard for giving models tools: your database, your API, your browser, your Slack.

Is MCP a library?

— It's a protocol. There are servers. Thousands of them. Some are official and some were written by someone last weekend, and you should read those before you give them your credentials.

Wait, I'm giving it my credentials?

— Scoped ones. With OAuth. And the agent asks for permission before it runs a command, unless you turn on auto mode.

What's auto mode?

— The mode where it doesn't ask. Everyone ends up there.

And if I need it to follow something specific, like our design rules?

— You write a skill. It's a Markdown file with instructions that the agent loads when it's relevant. Or a slash command. Or a hook, if you want something to happen every single time. Or a subagent, if the task is big enough.

What's the difference between a skill and a prompt?

— A skill is a prompt in a folder.

...

— With a description at the top. The description matters.

I just want to show some data on a page.

— And you will. It already did it while we were talking. Look, a pull request.

It touches 47 files.

— It added tests. They're very good about tests. Also a Dockerfile, a GitHub Action, a dark mode and a README with emojis.

I didn't ask for a dark mode.

— Nobody does. You get one anyway.

Do I have to review all of this?

— Someone has to. You can ask another agent to review it. Or the same agent with a clean context.

An agent reviewing an agent.

— And you reviewing the review. Then CI runs, and it takes longer every week because the agents keep writing tests, so you'll want a merge queue.

Does it work, at least?

— It compiles and the tests pass. Whether it works, you check in a browser. Or you ask an agent with a browser to check.

How do I know the agent didn't just make it look like it works?

— Evals.

What are evals?

— Tests for the things that aren't deterministic. You collect a set of cases, run the model against them and score the answers. Sometimes another model does the scoring.

And who checks that model?

— Next question.

Look, in 2016 I had to learn Webpack. Do I have to learn Webpack now?

— No. Nobody learns Webpack anymore. The agent knows Webpack. It also knows Vite, Turbopack and Rspack, and it will pick one without telling you.

So what do I have to learn?

— To say exactly what you want. To read code you didn't write. To notice when something is confidently wrong. To know when to throw away a whole pull request and start over. And to stay under your token budget.

That sounds harder than Webpack.

— It is. But nobody puts it on a resume.

You know what? I'll write it myself. One HTML file and a fetch().

— Great idea. Open your editor.

Done.

— See that grey text that just appeared?

Yes.

— Press Tab.

What changed, and what didn't

The joke in 2016 was that a simple page was buried under the tools you had to learn before writing a single line. You paid that cost up front, and the stack changed again before you finished paying.

Most of that cost is gone. Nobody I know configures a bundler by hand anymore, and I don't miss it. The churn didn't stop, though. It moved up a layer: models, agents, protocols, context files, skills. The difference is that this layer is about how you instruct and how you check, not how you build. The names change every month, but the questions underneath are the same ones a good lead has always asked: what exactly do we want, and how do we know it's right?

The work also moved. At Selenios a lot of our code is now written together with agents, and the cost didn't show up in typing. It showed up in reviews and in CI, which is the story of why we moved to a merge queue. The simple page appears in minutes. Deciding whether it's correct, safe and worth keeping takes the same judgment it always did.

If you're starting today, my advice is boring: learn enough HTML, HTTP and JavaScript to read what the agent writes, and to notice when it's wrong. The newcomer's instinct at the end of the dialogue, one HTML file and a fetch(), was right in 2016 and it's still right. The agent gets you there faster. It doesn't decide for you.

And if someone writes this again in 2036, I bet the newcomer will still just want a page that shows data from a server.