There's no such thing as the fundamentals of web development

Nine months ago I gave a talk about how there is no such thing as the fundamentals of web development. It's a thing I have been saying for years but keep getting pushback on, and when that happens it's time to write a proper blog post about it rather than just arguing with people one at a time.

What is a fundamental?

If I'm going to argue that there's no such thing as the fundamentals of web development, there's two ways you can disagree with me: you can disagree with me about what "a fundamental" is, or you can disagree about what web development is. I apologize for reaching for a dictionary definition of fundamental, but it is "forming a necessary base or core; of central importance" and the key point of disagreement I have with other people here is the stipulation that it be necessary.

There are lots of things that are valuable to know. There are lots of things that are important to understand. There are lots of things that are best practices. But a skill can be all of those things without being necessary. Fundamental to driving a car is understanding how to operate it: what the accelerator does, what the brakes do, and what effect turning the steering wheel will have. Important, but not fundamental, is knowing traffic laws. You can operate a car just fine without knowing how to operate it safely, as anyone who's ever driven in traffic will attest. So obvious is it that knowing traffic laws isn't fundamental to driving that you can arrive in a foreign country and rent a car without having taken the local driving test, you literally don't know what the laws are and yet away you go.

Also not fundamental is understanding how brakes and accelerators and steering wheels work: it can be helpful to know about motors and gears and brake discs and whatnot, but you don't need to understand them to operate the car. They are therefore not, by definition, fundamental because they are not necessary.

That doesn't mean knowing how a car works and knowing what the traffic laws are isn't useful, or not important, or not a good idea. You'll certainly drive better if you do. But they're not necessary, and therefore they aren't fundamental. If you disagree with this definition you're free to claim things are fundamental but dictionaries are not on your side.

So that leaves the remaining possible source of disagreement:

What is web development?

If you say that "putting together HTML, CSS and JavaScript" is the definition of web development then, tautologically, there are some fundamentals of web development: HTML, CSS and JavaScript. But I have been a web developer since before CSS and JavaScript were invented, and I promise I was still making web pages then, so I don't buy a definition that includes any specific technology. When I started web development, knowing how a physical web server worked was essential to getting a website online. Knowing how HTTP worked at the protocol level was also considered vital, because you were going to have to write code to parse those headers yourself. What's necessary to put together a website today is not the same as what's going to be necessary to put together a web site tomorrow. So if those skills change, are they really fundamental? My position is that they are not. So then what is web development?

My working definition is that web development is creating a site that can be viewed in a web browser. So that software I wrote to parse HTTP headers and spit out plain HTML? Web development. That PHP I wrote? Web development. That Ruby I wrote? Still web development. The JavaScript and CSS? Also web development. But likewise, somebody who is configuring WordPress and installing a pile of plugins to get a website out to the world? They are also a web developer. Somebody who draws a website in Webflow, or customizes a template on SquareSpace? Also a web developer. Web development is the product, not the method.

"But $skill is fundamental!"

It's at this point in the conversation that somebody will haughtily tell me that you can't be a web developer if you don't know how some specific thing works, and all I can say is that's bullshit. Whatever skill it is you've mentioned -- is it JavaScript? CSS? HTML? Design? Deployment? Testing? Performance? Responsiveness? Accessibility? -- I can point to thousands upon thousands of working web developers who don't know that thing and yet are getting web pages out into the world. They're often terrible web pages, user-hostile nightmares, especially for those who discard accessibility, and yet there they are, out in the world, existing. The developers who don't know whatever pet skill it is you think is fundamental exist whether you respect them or not, but I respect them. They're doing their best, and like all of us they will slowly get better.

"If you only learn a framework, you'll never be a real web developer"

This is just the same as the last argument. Says who? If somebody only knows React or only knows Rails or only knows PHP they are still getting web pages out into the world, they are still a web developer. Without learning more will they sometimes make bad designs, or run into problems they can't solve? Sure. But that doesn't make them not a web developer.

"When you learn web development, you should start with $skill"

The answer is still no. The place to start in web development is whatever lets you get a website up. Where you started when you learned web development has no special significance that others should be required to learn it first.

Gatekeeping is for the weak

"Okay, but you're not a real web developer unless..." Stop. As long as a web page exists at the end of your work, you're a real web developer. Gatekeeping is a mechanism used by the weak to reinforce their power, by excluding others, and I'm not here for it. Web development is a broad, deep field and there is room for an enormous diversity of developers who know different things and work different ways.

"Eventually you'll have to learn $concept, so it's fundamental"

Again, whatever concept it is you think you've found that every web developer learns eventually, I am happy to point you to somebody who's been happily churning out web pages for years unaware of that concept. Web technologies are incredibly powerful and flexible, and you can get enormous amounts done without venturing up or down the stack from where you started. You can often certainly get more done if you go up or down the web technology stack. There will certainly be some things you can't do unless you climb down to a certain level of the stack. But not every web developer needs to be able to make a web page that can do everything a website can do, in fact there are hardly any who can claim that because there's just so much to know.

"But accessibility!"

A strong pushback I get in my mission to prove that nothing is fundamental to web development is the argument that understanding of accessibility is necessary, and that treating accessibility as "optional" is malpractice (some people also think this about performance, or mobile responsiveness). But you don't have to understand accessibility to produce accessible web pages. If you just write plain HTML it's accessible by default, whether or not you've heard of accessibility. If you're using a good component library, your components will likewise be accessible without you needing to understand accessibility. The existence of lots of terrible web pages put together in frameworks that ignore accessibility doesn't mean frameworks can't get accessibility right without intervention.

"Well they have to know HTML at least"

Do they? This is usually the last stop on somebody's tour of things they think people need to know, after I've shown them sites put together by people who've never heard of HTTP, don't know what a form is, don't care about JavaScript, or style things without any knowledge of CSS. HTML, foundation of the web... surely, surely HTML is a fundamental?

But it's not. If I can draw a web page in a GUI tool without knowing HTML, if I can install WordPress plugins that do what I need without knowing HTML, then I can get web pages out into the world without knowing HTML. It's useful, it's important, it's powerful, but it's not necessary. It's already been unnecessary for years, and as tooling continues to evolve and increase in power it will become ever less necessary. Will it always be useful to understand HTML even if you're not hand-coding it? Probably, just like it will always be useful to understand HTTP status codes and what they mean. But not essential. Not necessary. HTML, much as I love it, is just as un-fundamental as every other thing.

Embrace the chaos

If you've spent a career becoming an expert in some technology, being told that technology isn't fundamental can be discouraging. It can sound like I'm saying your skills aren't important, or valuable. Of course they are, and you don't need me to prove that. Are you using your skills to make web pages? Then they are vital to your type of web development, and they're good skills and you should be proud of them. But you don't need to draw a line in the sand that says everybody else has to have your skills.

The joy and the power of web development, since its inception, has been how accessible it is, in the sense of accessible to new developers. It's always been the case that you can learn enough in an afternoon of messing around to get a web page (a terrible, messy web page) out into the world. Getting a web page up is a great feeling, it's a rush of power and possibility that creates the feedback loop of satisfaction that has us all learning more and building better every single day. Drawing lines in the sand, getting cranky about people who don't know some particular thing, does nothing to help you or them experience that joy. If it's important for them, they'll get there eventually, and if they don't, you don't need to worry about it, they're still a web developer and so are you.

Web development is fun, it's fast, it's incredibly powerful, and it's constantly evolving. A bigger web is a better web, and the way we get there is by welcoming everyone who wants to play, no matter what they learn first or how they get the job done. There's no such thing as the fundamentals, and that's fine.