I subscribe to a variety of newsletters, as do most developers. And, regularly, the content in those newsletters just depresses the shit out of me. I truly despair that we will ever grow up as a species. We seem determined not to.
It only takes a brief look at the utter horror we have made of our world to see that the vast majority of humans are shrieking infants busy smearing shit on themselves and anyone foolish enough to get within range. A world of infants led by the worst infants.
Don’t get me started.
But the world of programming is itself a microcosm of our infantile planet. Most developers, programmers, testers, designers, architects, product owners, and, yes, managers are utterly infantile. No, really.
Infantility is marked by urges to do stupid, destructive things and an inability to discipline oneself to avoid doing them. It is marked by selfishness, narcissism, foolishness, ignorance, arrogance, apathy, laziness, and—oh, joy!—tantrums.
Look around. It’s everywhere.
Adults, in contrast, always do the right thing. Because it’s the right thing. Infants require parental figures (sadly, in this world, usually themselves infants). Adults can take care of themselves. They do the right thing without having to be told.
They don’t even have to exert discipline or effort because they lack any urge to do the wrong thing. Someday I’d like to be an adult.
People ought to know better
It is doubly sad, then, when people who seem almost on the cusp of maturity fall into the same infantile trap.
So it was when I saw a newsletter this morning claiming that CSS is a programming language.
Well, yes, yes it is, but so what? To be fair, the subject line included, “Who the f*ck cares!” The author has difficulty spelling “fuck”, but his heart is in the right place. And for once he managed to be a bit cantankerous, which elevated his status in my eyes.
The comment was a response to the author, Chris, having seen somewhere some infant whining that HTML and CSS were not “programming languages”. Or seeing it around a million times, more likely.
“CSS is not a real programming language! If you only use HTML and CSS, then you’re not a real programmer.”
“Am too! I am too a real programmer!”
Sigh… will no one rid me of these troublesome infants?
It. Don’t. Matter.
Web applications (and sites) are constructed primarily of HTML, with CSS for styling and layout (and now, sometimes, animations) and JS primarily for behavior. The best sites keep JS to a minimum, and the best apps use JS only where needed.
HTML was initially created as a somewhat broken SGML-based language. Later, XML was created as a simplified subset of SGML and attempts to turn HTML into valid XML (remember XHTML?) were essentially foiled by infantile browser makers and lazy, ignorant developers, so now we’re stuck with HTML5, which don’t validate for shit.
But HTML5 is still a pretty complex language with key semantic features. And together with the DOM and web APIs, it has grown into a complex—perhaps too complex—ecosystem.
There are few, very few, “front end developers” who can write HTML worth a shit. For decades I’ve watched as arrogant cunts who describe themselves as “programmers” foam at the mouth about standards-compliant, elegant code and then treat HTML with utter derision.
For many years, and possibly still, that was the rule not the exception.
Ditto for CSS. Most devs still can’t write CSS to save their lives, still can’t manage semantic HTML, and simply can’t be arsed to make their applications accessible to everyone. Incompetent shits braying about being “programmers”. It would be comical if it wasn’t so fucking tragic.
And then they get on their soapboxes and loudly proclaim that anyone who doesn’t use a “real programming language” isn’t a “real programmer” as if a real programmer was something anyone should aspire to be.
Which is doubly hilarious because the vast majority of them have never written a “real” program in their entire careers. They aren’t “programmers”. They are coders. They write “code”, but code is not programming. It’s just code.
And the majority of “code” they write is just rehashing code that has been written a million times or more, and usually better. Even when they don’t simply copy and paste from StackOverflow.
Programmers, my ass. They are code monkeys.
My apologies to simians everywhere who probably didn’t deserve that.
I am a developer
I develop websites and web applications. In twenty-five years as a professional web developer (and some forty-five years since I first learned to program in PL-C on an IBM mainframe with punch cards), I probably haven’t written anything resembling a program in more than twenty years.
I write lots of code. Generally hundreds of lines a day, sometimes thousands.
I’ve written code in more than thirty languages, and that includes HTML, XML, XSLT, XQuery, CSS, RDF, OWL, and SHACL, as well as C, C++, C#, Java, Scala, Ruby, JavaScript, TypeScript, SQL, PL-SQL, and many more. Even PHP, gasp!
The “programmers” bashing CSS and HTML might want to stop for a moment to consider that, technically, PHP is a programming language. Turing complete, too. Still bragging?
I’ve also taught most of these languages.
But I am not really a programmer, and neither, probably, are you. So what is the big fucking deal about “programming” languages? In my experience, it is much easier to write a decent script in JavaScript than to write accessible, meaningful, standards-complaint HTML or CSS.
Bad foundation, house fall down
When I build a web application, I begin by creating simple HTML pages. I work with those until I get the structure and the semantics right. This is the foundation of any good web app, and if you get it wrong, all the fancy “programming” code in the world can’t save it. And doing it well is damned difficult, even after all these years.
Then I look at the design system and I write the CSS in the simplest way I can to make the app look (and work) exactly according to the design. I use the cascade properly.
I don’t waste my time with useless extensions such as Sass or LESS—I gave up on those years ago when CSS advanced to the point where they no longer added value.
Neither do I waste my time with abominations such as Tailwind or component libraries, whether Bootstrap or the abhorrent MUI. I can write my own components and my own CSS, thank you. If I need help, EveryLayout usually is enough.
Then, and only then, if I’m writing a web application, will I decide whether I am best served with a JS library or framework. I do prefer to write statically-typed code, so until TC-39 stops fucking around and adds a nice, optional, Hindley-Milner type system to JS, I generally use TypeScript and pay the tax. It’s less onerous than Eric thinks.
Lately, I have been having fun with Astro, though it’s still a bit buggy, and integrating SolidJS when I need a bit of reactivity. Frankly, Ryan Carniato is a genius and one of a small set of “true” programmers, IMO. But so what? SolidJS is either useful or it isn’t. If it isn’t useful, then I have no use for it.
That said, easily more than ninety percent of the code I write with Astro and Solid is effectively HTML and CSS. Because that’s what web applications are made of. If you are writing more than a smattering of TypeScript, then you’re probably doing it wrong.
Tools are tools
Tools are tools. Use the right tool for the job. But the job isn’t about the tools. The tools are just a means to an end. The end is the working application. And not the application code, but the application itself.
The application is not the code, as Swizec Teller reminded me this morning, not that I needed reminding. It is something that emerges from the code.
And our job—if you, too, are a developer of web applications—is to create the app, not to write the code. If we could do it with no code at all, that would be lovely.
YES! If I can build the app equally well with a reliable no-code solution, then why the hell would I spend weeks or months writing it out from scratch?
I am a firm believer that enterprises that build their own software should build their own libraries as well. You only need to build them once! And then they can precisely address your needs with no extra cruft. And your people know them inside out.
But if you build them well, then you’ve eliminated the need for most coding. It’s easy enough to work up to a data-driven (or data-centric) application, and then you may rarely need any new code at all.
Most enterprises have way, way too many dependencies on frameworks, libraries of code, and services. They’ve complicated their applications out the wazoo, and for what? This is one reason I prefer exitprise to enterprise. Homie goin’ home.
Build the app once. Keep a few devs around for maintenance, but for the rest, simply hire mercenaries.
It’s the application, stupid.
Infants will be infants
The absurd ego games among insecure infants in the world of tech should not be encouraged just as you should never feed trolls. Or vote parasites into office.
Adults get busy making a better world and pay no attention to the insane infantility around them, acting only when necessary to remove an obstacle to progress, and setting the example without worrying whether anyone will follow.
Think you’re hot shit? Then shut your fucking mouth and let your work speak for itself.
Now… can we move on, please?