In 2017, a stack was a short conversation. You learned HTML, CSS, and JavaScript, added jQuery when the DOM got tedious, and graduated to a framework when someone told you to. Mine was Angular 1: two-way binding, $scope, a Gulpfile I copied from a classmate and never fully read. I've been away from web development since then, and coming back this fall I expected new tools. I didn't expect "what should I learn first" to be a research question.
These are the notes from that research, and where it landed. The criteria are a returner's. I have evenings, not workdays, so I want the option with the most help available when I'm stuck at 10pm. I want something that will still be maintained in five years. And it has to eventually carry the products I came back to build. [DETAIL: which product idea? one, even vaguely.]
The front doors
The official entrances were the first surprise. React's documentation currently exists twice: reactjs.org, where some pages still teach class Component extends React.Component, and beta.reactjs.org, a rewritten hooks-first version that the old site points to with an apologetic banner. The new docs are better than anything that existed in 2017. They also live at a subdomain labeled beta, which is a strange thing to find when you're deciding whether to trust a tool with a year of your free time.
The scaffolding command splits the same way. The legacy docs say npx create-react-app. Nearly everyone else, in tutorials and threads from this year, says npm create vite@latest. Create React App still works, but it sits on webpack and hasn't moved much, while Vite starts its dev server before I can reach the browser. I ran both. The difference isn't subtle. Nobody has deprecated CRA; it just feels like a building with the lights off.
One change in the room deserves its own sentence: GitHub Copilot went on general sale this summer at ten dollars a month, and it autocompletes whole functions from a comment. In 2017 autocomplete finished variable names. I haven't decided whether paying for it helps or hurts while I'm relearning fundamentals.
The field
Angular would have been the sentimental pick, since it's the one framework I've actually shipped with. But today's Angular is on version 14 and shares a name with what I learned and almost nothing else; the rewrite happened the year I started, and my $scope knowledge transfers to nothing. Starting over in Angular costs the same as starting over anywhere, with a smaller crowd to ask for directions.
Vue 3 reads well and is documented well, and I have no criticism of it that survives scrutiny. What I noticed instead is volume: when I search a problem, the React material is from last month and the Vue material is good but thinner. For a professional that might not matter. For someone learning alone, the depth of the pile of prior confusion is a real feature.
Svelte is the one I wanted to pick. Its components are the closest thing in 2022 to the plain HTML-and-JavaScript I started with, and every comparison I read agreed it's the most pleasant to write. But SvelteKit, the framework you'd actually build an application in, is still pre-1.0, and its APIs have kept shifting this year. I have maybe ten hours a week. Spending them on a moving target is a bet for someone with more hours.
React 18 shipped in March with concurrent rendering, createRoot, and automatic batching, none of which I need yet. What I need is the thing React has by accident of scale: every confusion I'm going to have has already been had, publicly, by thousands of people. Even its current most famous beginner trap, useEffect firing twice in StrictMode, has a small literature of its own. At 10pm with a broken component, that's worth more than elegance.
Rendering, deferred
There's a whole vocabulary that didn't exist on my last pass: SSR, SSG, ISR, hydration, the SPA-versus-MPA argument. Next.js, at 12.3 as of last month, is the React framework that answers all of it, and the pull toward it in every tutorial and job listing is obvious. Remix, the year-old framework from the React Router team, answers it differently and has its partisans. But rendering strategy is a problem you have when you have users, and I have a blank editor. A client-rendered Vite app is the smallest honest unit of modern React, and it keeps the lesson on components and state rather than a framework's routing conventions. Next is where I expect to end up. It isn't where I need to start.
Where it landed
The backend was the realer decision. The 2022 menu for a React developer who'd rather not write a server is generous: Firebase, Supabase, serverless functions on Vercel or Netlify. Any of them would get me to a working product faster. But I spent a decade on the data side of an operations business, and the part of every product idea I care about is the data model. Renting that out to a backend-as-a-service defers the half of the stack I've never touched, and deferring it is exactly how it stayed untouched the first time. So when the first frontend needs data, it gets Node and Express, the boring canonical pair, and I learn what's actually down there.
So: React 18, scaffolded with Vite. Plain JavaScript until React itself stops being the hard part, then TypeScript, which tutorials now assume in a way nothing did in 2017. Next.js when a project earns it. Node and Express behind it. The best part of deciding is that I can stop reading comparison posts and go write some code.
— Lo