When I started learning web development, every tutorial, roadmap, and Twitter thread was telling me the same thing: learn React, learn Next.js, learn Tailwind, and start building. I chose not to listen — and it was the single best decision of my career.
The Rush to Frameworks
There's an understandable urge among beginner developers to reach for frameworks immediately. Frameworks are what companies ask for in job descriptions. They're what people talk about on social media. They make you feel like a "real developer" building "real apps."
The problem is that frameworks abstract away the very things that make the web work. When you start with React, you don't learn how the browser parses HTML, renders the DOM, or computes CSS styles. You learn React's model of those things — and when something breaks (and it will), you're helpless without the framework's abstractions.
I didn't want to be a developer who could only build things if a library existed for it. I wanted to understand the foundation.
What I Learned from the Fundamentals
I spent months writing raw, vanilla HTML, CSS, and JavaScript. No build tools. No npm packages. No preprocessors. Just an index.html, a style.css, and a script.js file open in VS Code with a browser window next to it.
Here's what that approach taught me:
- How the DOM actually works. I learned how elements are created, manipulated, traversed, and removed natively. I understood event bubbling, event delegation, and why attaching 500 event listeners is a bad idea.
- How CSS actually calculates styles. The cascade, specificity, inheritance, stacking contexts, and layout algorithms (flexbox, grid, block, inline). Once you understand the cascade, CSS stops feeling "random" and starts feeling like a precise layout engine.
- How JavaScript executes in the browser. The event loop, call stack, microtask queue, asynchronous programming with Promises, and browser APIs like IntersectionObserver, ResizeObserver, and Fetch.
- How performance actually works. Critical rendering path, repaint, reflow, compositing, script loading strategies (defer, async), asset optimization, and Core Web Vitals.
How It Helps Me Now
Today, I use React and Next.js professionally. But I use them differently than I would have if I'd started with them:
- I know when NOT to use a framework. Not every project needs a heavy SPA. A static HTML site with vanilla JS is often faster, more accessible, and cheaper to host.
- I debug faster. When an application re-renders unexpectedly or causes a layout shift, I can trace it directly to the browser DOM engine.
- I make better architectural decisions. I can evaluate whether a problem needs a library or if a native web platform API already solves it better.
- I communicate better with designers. Understanding CSS deeply means I can faithfully recreate typography, micro-interactions, and fluid grids without fighting framework constraints.
Advice for Beginners
If you're just starting out, here's what I'd tell you:
- Spend 2-3 months on pure HTML, CSS, and JavaScript. Build 5-10 small projects without any frameworks. A landing page. A portfolio. A weather dashboard using the Fetch API.
- Read MDN Web Docs. MDN is the definitive resource for web developers. It's accurate, up-to-date, and written by engineers who build browsers.
- Learn semantic HTML and accessibility from day one. Accessibility isn't an advanced optional add-on — it's fundamental engineering.
- Then, learn frameworks with confidence. When you do, you'll understand why they exist, what problems they solve, and when to use them.
I'm Umaer Islam, a full stack developer and creative designer based in Dhaka, Bangladesh. Follow my work on GitHub or connect with me on LinkedIn.