Building websites is programming. Writing HTML and CSS is programming. I am a programmer, and if you’re here, reading CSS-Tricks, chances are you’re a programmer, too.
The thing is, the details in programming layout with CSS are different, for example, than the details in programming API endpoints with Ruby. Or machine learning with Python. Or programming a browser engine with C++.
But those differences are details! A lot of details, but still… details. It’s all programming.
I see programmers like this:

Where do HTML and CSS fit into this weird and cute universe? What is it to program user interface on the web?
Programming boxes, I like to say. Everything is a box, and as HTML/CSS programmers, we program boxes within the domain of the browser. Like this:

Cute. So?
So…I believe that we, both as individual programmers and together, as the web slice of the tech industry, need to arrive at a more holistic and inclusive understanding of what it means to be a programmer. This outlook not only makes tech a more welcoming place, but it makes us programmers more powerful and more adaptable.
To me – well, me in 2019 – programming is writing1 instructions for computers that other programmers, such as your future self, are able to read and maintain. As a programmer, I am confident that, once I know one language well, I can learn another one2. At the end of the day, it’s all made of the same stuff.
And yet…
I have been a programmer in this sense for around eight years, but up until about two years ago, I didn’t see myself as one. In fact, I was actively opposed to calling myself a programmer, and in recent times I’ve heard the same sentiment from others. Why, exactly? Is this a reaction to the “not real programming” phenomenon? Is that still happening? What are the impacts? What were the impacts, for me and for others?
Yes, I know ‘gatekeeping’ – that is, the self-inflating exclusion of others from a community or identity – is a thing, and that some people are just jerks, but I think there is more to this story.
So, what’s interesting to me3 about building websites this year? Talking to others who build websites4 and beginning the process of answering these burning questions.
- I highly recommend reading Programming is writing is programming, a post and research paper by Felienne. ↩
- Box programmers: Do they know things? What do they know? Let’s find out!! In 2020, my goal is to learn learn Rust, a low-level programming language similar to C++. Correction: my goal is to start learning Rust – that is more than a one year undertaking. Why Rust? Keep an eye on my blog, I’ll write more about this soon enough. ↩
- It was hard to choose what to write about for this post! I’m interested in a lot of things, specifically unit testing CSS, my job as a Design Engineer, and exploring/sharing more about CSS algorithms.
- What do you think, CSS-Tricks reader? Do you call yourself a programmer? Why, or why not? Have you experienced this “not real programming” phenomenon? How did it impact you? Feel free to write me a Twitter message or send me an email.
I agree, and being a front end developer only for a time, I often got the feeling that the Java people thought we weren’t programmers. I think that feeling still permeates to this day, at least until you are on a true full stack team and the Java people start having to write JS and CSS, then they know.
Also, this reminds me a of a talk from ServerlessConf this year, topic was yaml but he brings up the “aren’t a real programmer” topic, starts around 1:00 in
https://acloud.guru/series/serverlessconf-nyc-2019/view/yaml-better
Thank you for sharing this, Kelly!! I’m really interested in where else this comes up.
Related topic, and reasons why I see this as such an important conversation to have – https://speakerdeck.com/heathermiller/the-times-they-are-a-changin
“Why, exactly?”
Let me share my insight with you. HTML is a description language that is powerful for describing static data structures (trees, lists, tables) and statically mark-up text, giving hints on how fragments of text should be interpreted. CSS was appended to HTML for statically describing styling data, so it still is only a description language.
Programming languages describe dynamic things, processes, changes from one static status to another static status. Not only that, the text written in a programming language can be feed to a compiler or an interpreter and add new behavior to the computer. It’s possible to describe mathematical functions in a programming languages and make the computer do the calculations.
PDF is a description language (it describes to a printer what a document is and how it should be printed), but I wouldn’t call those that manually write PDF files “programmers”.
Isn’t “web developer” a good description for those that use HTML and CSS? I don’t think fighting for the word “programmer”, which already has established expectations regarding what a “programmer” is supposed to do, is worth it. That would raise confusion and misunderstanding.
It’s not about gatekeeping. It’s about proper expression of what the job of a “programmer” is. By making the word banal, you would mislead a lot of people into believing they are programmers when they are not, and things like this one, as documented in 2007, would happen:
Why can’t programmers… Program?
According to wiktionary.org programmer:
And program:
So, writing HTML/CSS seems to fit those definitions.
But what about someone who does spreadsheets? They seem to be programmers too. What about someone that writes a document and tells it to be bold in certain areas and to center a picture all with a GUI, that seems to be getting into gray area. But if they do it with LaTeX? Maybe they would be programmers?
Programmer seems to be a fairly ambiguous term.
I can’t really agree with the premise here. If you’re only writing html and css, then all that’s happening is describing layout.
Unless there’s some kind of flow control, you’re not really programming anything.
And that’s fine. Design is hard too! However…
If I put out a site with strictly default bootstrap setup, and called myself a designer, would you be upset? I mean, why do us java script jockeys and backend developers need designers if we can’t just use bootstrap or something? See design is super easy! I’m a designer!
Yeah, kind of belittles all those art school degrees and hard work learning how to design well, doesn’t it?
“If I put out a site with strictly default bootstrap setup, and called myself a designer, would you be upset?”
That depends. Are you calling yourself a designer on your resume, to a co-worker, or simply by coming to a conference for designers? Respectively I’d find that dishonest, mildly irritating, or perfectly acceptable.
When this conversation comes up, what I see developers wanting is inclusion. Not one-upmanship. I never see the conversation including anything reminiscent of “why do we need backend programmers?”
What about declarative languages? They do not have flow control by definition. Nice overview here: https://www.youtube.com/watch?v=4A2mWqLUpzw
That video really failed to convince me. Especially in terms of the root argument.
I want to point out again, that design and layout is hard. It’s ok to be a designer, and a designer on a project should be carrying as much importance as any given programmer.
That said, if you call yourself a programmer, and then apply for a programming job, you will most likely get laughed at if ALL you can do is CSS and HTML. Either that, or you’ll find yourself in over your head very quickly.
Being a ‘programmer’ is a lot more than just the code as well. It’s being able understand systems and logic. You should be able to see a language and be able to at least start picking it up by looking at good code examples.
Another analogy. Being able to change your oil does not make you a mechanic. You can call yourself one, open up a garage, but as soon as someone brings you their car with a faulty transmission, what are you going do?
I’ve always felt that I was cheating if I said I was a programmer. But the CSS world has changed a lot in recent years, and it has become something more powerful and complicated, that now I feel we have the right to call ourselfs programmers or developers.
HTML and CSS were designed to be forgiving. One could be a total non-programmer and still write HTML&CSS that in the end will be turned into something consumable. The source code would be a hell to maintain, but ordinary users will not be “punished” for coder’s mistakes.
Add the layer of complexity from a “programming language” and the environment becomes less forgiving. There is no “oh you did not close this tag, but I am pretty sure you would have wanted to do it, let me do that for you” or “oh, you used some property that I cannot recognise, well, I guess I will just ignore it and continue parsing styles as nothing has happened”. There is more like “ERROR! ERROR! ERROR! Unrecognizable error code and error message that does not tell you anything, but in the end means that you made a stupid typo that your IDE did not recognize and now you will spend hours contemplating your life choices”.
Whenever something like this comes up, I tend to see specific definitions of words used as arguments, as though the dictionary were the word of some deity handed down on etched tablets, not a living document that is written by people for the purpose of better communication- which often contains multiple definitions based on context.
To me it comes down to the “tomatoes are fruit to biologists, but vegetables to salad chefs” argument. In a discussion on whether or not we as web developers write what can technically be considered programs or programmatic code, things get complicated and nuanced and meta, and certainly change with time. (Personally I think that the answer is yes at this point, but I see no problem with further dissecting that.) But there is no reason for that depth of definition to be brought into a discussion on whether or not developers are real programmers. In most cases “programmer” there is not used for its technical meaning but to indicate someone whose intelligence is of value, who can communicate with computers, whose knowledge entitles them to respect. And in that regard, people who code websites are and always have been real programmers.
Would I call myself a programmer? That depends. Am I standing in front of a room of computer science grads who write BASIC? Then no, I write markup, stylesheets, and scripts for browsers. Am I deciding whether I have the right to make a blog post on a site for programmers? Then yeah, probably. Am I explaining my job to my great-aunt who grew up talking to live operators to make a phone call? Then absolutely, whatever term gets her to imagine what I actually do for a living is valid.
Programming is writing instructions that a computer can understand in a programming language. By definition, a programming language is a language that allows recursion, loops, comparisons etc. HTML and CSS are markup languages, since they are not as capable as languages such as Python or C++. Hence, someone only knowing CSS and HTML is not called a programmer. Though, if you incorporate dynamic elements into a website by scripting in a programming language, such as JavaScript or PHP or Python or Golang etc., then you are called a programmer.
Additionally, if you use software that handles that aspect of your site (i.e. WordPress) you are simply a user. But, if you modify the software to suite your needs then you can be called a programmer. And by modify I mean writing plugins and extending functionality in a programming language, not modifying a stylesheet or adding a sidebar in HTML.
With all due respect, why do people care so much about this? Are peoples’ sense of self so fragile that they see this as a crisis?
Be confident in what you do, be the best you can be, give value and experience to those you serve, and you’ll see titles mattering less and less.
I care a lot about this because I suspect that the “not real programming” criticism turns many folks away from learning more about programming when early in their careers (or perhaps young kids, in school), and perhaps turns them away from entering the tech industry at all.
Caring about this topic, to me, is equivalent with caring about making programming more accessible to more people. A person’s sense of self has a lot to do with that, for sure, especially since not everyone has access to confidence in the same way.
We care because as humans we are a social species using both spoken and written language as a way to convey meaning.
We must trust each other to use the correct word to convey the correct meaning, this help us make deductive and inductive reasoning.
If I need a programmer and I am willing to pay for it to get the job done, I don’t want to waste my time interviewing people who may do a really good job but in something I don’t need.
If I want to hire a designer, I want to hire a creative person, someone who knows color theory, someone who understands how negative space works, someone who understand that round and straight shapes do not appeal to the same emoitions. If I want to hire a designer I don’t need someone who can use bootstrap.
Words are important, that’s all we have.
The word developer does not exclude anyone. The word developer just imply the common definition the majority industry agreed on.
That’s how we build trust.
I understand the point but think it’s misguided.
Is CSS real designing? Is HTML? Is JavaScript?
They’re all that and much more. It’s not so much what something is but how it’s used that matters.
Much more than a programming language they are tools of creation, and I can’t think of a higher, more exciting purpose than that.
If connecting boxes is programming, then opening the options panel in any software is toggling booleans with checkboxes would be programming too.
If CSS is programming, then opening any JSON configuration file and changing it would be programming too.
HTML and CSS are declarative specifications of what certain parts of a document are and what they should look like (respectively). Declaratively specifying a piece of text is not programming.
That’s like saying sending an email is programming if you asked someone to color the background of the website red. You can literally tell him in the email “background: red”, and there you have it.
Programming would be making a graphical engine which parses the CSS file and follows developer’s declarative instructions. Writing such a file on its own is not programming.
You need to know HTML and CSS to be a web developer, but knowing only that doesn’t even make you a developer. You’re just writing content using a few special signs here and there with HTML and just listing a bunch of config parameters with CSS. CSS is no different than opening a config setting panel in a graphical program and choosing “color” from a dropdown, and then “red” from another that appears.
LOL. This entire site literally proves otherwise.
I fundamentally disagree with this idea.
dictionary.com defines a program as:
1) a plan of action to accomplish a specified end:
2) a plan or schedule of activities, procedures, etc., to be followed.
So the word, in its origin even before being used to describe anything remotely computer-related, already implies a certain algorithmic aproach; a listing of steps to do in order.
Coming from the oposite perspective, it’s not like they’re functionally comparable either. The tools of actual algorithmic programming are vastly different than those layout design. Even among the different programming paradigms like OOP, FP, etc. there’s certain shared concepts like loops, recursion, scope, etc. that aren’t a thing in HTML or CSS.
Lastly, I don’t see a point in letting go of this distinction. A “programmer” isn’t in any way better or worse than a designer, they’re just different disciplines with lots of overlap. They can all be broadly be classified as software development. Saying they’re the same though will, at best, confuse people and at worst drive people with no programming experience to believe they can just jump right into C because it’s the same thing. It’s not.
Mind you, I’m all for inclusivity. I will gladly go out of my way to help anybody get into programming if they’re really interested and I consider non-programmers that do HTML or CSS part of the developer in-group. I just don’t think we need to play make-believe so people who are one thing can call themselves another. That’s just dishonest towards people who put in the effort of actually learning.
I absolutely agree here. I also think it is a self deflated ego that has to constantly try and convince themselves otherwise. What’s wrong with being a “developer” or a “uiux specialist” or anything else? Do what you do and call it what it is. When you start writing programs on a substantial level you’re a programmer. I know lots of solid programmers that don’t know a lick about layout and CSS, and they don’t try to horn in and take the mantle of anyone elses dicipline and practice.
Precisely. Naming everyone who works with a computer “a programmer” or “a developer” would result in these words losing every meaning in a few decades when using an electronic device becomes as common as using piece of paper.
We’re not yet there, but you can already clearly see that we’re approaching that state. More and more people are tinkering with declarative settings (either through a config file or a GUI that just maps the config file into checkboxes, input fields and dropdowns).
These people are as much as programmers as we’re all swimmers for just knowing how to swim, chefs for boiling eggs or painters for using the whiteboard.
It’s always a blurred line on the distinction between “someone who does X occasionally” and “some whose occupation is doing X professionally”, and it highly depends on the context. What precisely do you need to know to cook in order to “deserve” the title “chef”? There’s no single line. It’s a bunch of things that, depending on the context, will mean one thing or another.
But with CSS it’s clear that you’re not even programming. Writing in a syntax highlighted file doesn’t make you a programmer. Way of thinking and understanding problems does. As you said, CSS doesn’t even have loops!
I never understand why CSS practitioners are so hung up about this… I have never in decades in the industry heard anyone saying “CSS is not programming”. Really, who cares? CSS programmers’ inferiority complex is cute at first, but after a while it gets tedious.
Nowadays CSS is usually a generated result of code written in Sass (Less or other) that has variables, functions, flow control, data types, etc.
BTW CSS also has variables.
We should focus on what we do the best, being specialists in our field, and gain respect by the work we do.
Let’s not be like kids who are just saying who they are, let’s show who we are, either programmers or not, it really doesn’t matter.
Calling yourself a programmer is nothing special, not more than developer or designer.
You are good at CSS, great, you will earn more than many PHP developers, who would call themselves a programmer.
Title doesn’t matter but your work does.
“I care a lot about this because I suspect that the “not real programming” criticism turns many folks away from learning…”
This is what you suspect, in reality I don’t think this is true at all. If you turn away from learning because of some random folks different view on things, you have to ask yourself how bad you want to learn it.
Pulling up a the psychology rant card on why people respond the way they do on your opinion just gave me a taste of salt honestly.