DEV Community

Cover image for Are CSS and HTML programming languages?

Are CSS and HTML programming languages?

Desi on June 11, 2019

Inspired by a recent Twitter thread (and long-running debate anyway): are HTML and CSS programming languages? Is it gatekeep-y to say no? ...
Collapse
 
ben profile image
Ben Halpern

Yes, CSS + HTML are programming languages. Not only is this scenario technically Turing complete, I think these software fit a lot of the principles of the purpose of programming languages: source code in, magic out.

You can create some of the most incredible things coding html against a browser. No, it’s not as flexible as another programming language in terms of practical possibilities, but it’s a highly specialized language for doing really interesting things.

Distinguishing between programming languages and markup languages when nobody asked you to is unnecessary gatekeeping. If you want me to talk about that distinction, than sure.

The notion of what makes computers go bleep and bloop has always been under re-construction. If you could possibly debate whether something could be a programming language, you might as well call it a programming language because.

Collapse
 
deciduously profile image
Ben Lovy • Edited

Yes, it's "source goes in, magic out", but still constrained to a specific context. The type of magic that comes out, while very cool and very vast, is still a small subset of the magic that can come out of something more general-purpose.

I don't understand why it's gatekeeping to acknowledge this distinction. I don't agree that calling something "not a programming language" makes it "lesser than a programming language", but just helps us understand in more specific terms what the tool is and isn't. Why is using multiple categories of language when we talk about our tools dismissive?

Collapse
 
calebwin profile image
Caleb Winston

I agree - good categorization of the languages we have is important.

I think the real problem is when people think or act as if they are superior to others because they know a certain language or category of languages and others don't.

Thread Thread
 
deciduously profile image
Ben Lovy

Of course - those people don't tend to be worth your time anyway.

Thread Thread
 
ben profile image
Ben Halpern

I agree, but I think it’s more truer that markup languages are a subset of programming language vs a different category.

And in this case I think the gatekeeping comes into play when the topic of whether or not these things are programming languages is somewhat unimportant.

So whether the answer is yes or no, pointing it out when it’s unneeded for the conversation is gatekeeping, or could be perceived that way in our imperfect online lack of tone translation.

In a sense, the true gatekeepers have ruined it for anyone coming in with good intentions.

Thread Thread
 
deciduously profile image
Ben Lovy

it’s more truer that markup languages are a subset of programming language vs a different category.

The rest of this thread has me convinced of this as well now.

pointing it out when it’s unneeded for the conversation is gatekeeping

I agree, but in this case it was the conversation! You've got a point, though, the people with emotions about this sort of thing aren't usually coming to these discussions in good faith but for some sort of one-upmanship. At the end of the day, of course it doesn't actually matter - just build things. I still think it's useful to classify languages like this, in the interest of making well-informed choices about the right tool for the right job, but that sentence is so uncontroversial I don't imagine anyone disagrees.

Thanks for your response!

Collapse
 
stephanie profile image
Stephanie Handsteiner • Edited

Yep, they're declarative programming languages, you can tell the browser what it should do, but you can't tell the browser how it should do it, for that you need an imperative language (whichever one chooses, I'm not going to open this can of worms now).

Collapse
 
toastking profile image
Matt Del Signore

I think the new hot take should be that prolog isn't a programming language.

Collapse
 
skhmt profile image
Mike

Is markdown a programming language?

Collapse
 
desi profile image
Desi

That's another great point! IMO, markdown is not a programming language because it's more for styling text - but that's me coming from a writing background and now I'm thinking about how markdown functions and is built. It's more complicated than I thought at first 🤔

Thread Thread
 
deciduously profile image
Ben Lovy

Seems to me you're rubbing up on the same issue as with HTML. It's a markup language used to program how to generate some output!

Collapse
 
togakangaroo profile image
George Mauer • Edited

Odd that no one has pointed this out

Everyone is focusing on the "language" part, which without a doubt CSS and HTML are. But what about the "programming" part? Well we don't have a definition there so that bit is a lot more difficult. It becomes a matter of what we "feel" like that term means to us.

At the base level it means making a system do what you want it to do. Of course in that case, so is writing an excel spreadsheet, or drag-and-dropping, or customizing your OS with new colors, or creating a new web app account, or even just calling up IT and telling them to fix things "or else".

That feels wrong.

For some, "programming" means "general-purpose programming"- that you not only can, but realistically might, sit down and code some algorithms in it. In that case sure, HTML and CSS are not programming, and neither is Brainfuck, or Arnold, or the more basic usages of Prolog.

You can't really fault those people for being bewildered at the resistance to what to them seems like such an obvious statement. For them, "HTML and CSS are not programming languages" is not gatekeeping, it's an attempt to educate on what seems to them to be an important distinction.

So why can it be so upsetting to hear it?

I suppose there is another definition we can go with: "Things that might be a central part of the job for someone who works professionally as a programmer". In that case, not only of course are HTML and CSS programming, but hearing that phrase - for someone who is primarily engaged in HTML and CSS - sounds like a denial of their entire career and track.

Conclusion? Maybe we all need to be aware when using terms without strict definitions that they might mean different things to different people.

Collapse
 
jhall profile image
Jonathan Hall

By this logic, SVG, PDF, and arguably even JPEG are programming languages.

Collapse
 
itsjzt profile image
Saurabh Sharma • Edited

is HTML and CSS turing complete?

Collapse
 
mortoray profile image
edA‑qa mort‑ora‑y

Yes, they are.

There's no legitimate definition of programming language you can give that would exclude them. I consider any unambiguous language used to control a computer to be a programming language.

Even with narrow definitions, generally HTML and CSS will both fit them, if strained hard enough.

Collapse
 
deciduously profile image
Ben Lovy

This was a great read. I think you've changed my mind, thank you for posting it.

Collapse
 
gn4rk profile image
GN4RK

HTML is a "[M]arkup [L]anguage".
CSS is a "[S]tyle [S]heet language".
SQL is a "[Q]uery [L]anguage".
JavaScript is a "Programming language".
HTML, CSS, JavaScript and SQL are "Computer languages".

Collapse
 
lesha profile image
lesha 🟨⬛️

Why are ppl so obsessed with this question and why is this gate-keepy?

Look, let's say that neither HTML nor CSS are programming languages. So what? Seriously, so what?

Let's assume that you make absolutely static websites using plain HTML/CSS. What now? Well that means that you're not a programmer, but a web designer. Is it worse? I think it isn't.

If you're angry about some dude that says stuff like "html and css aren't real programming languages" on random twitter threads, why do you even care? He has his opinion, you have yours.


Answering this question, yes, HTML and CSS are programming languages because they're turing complete, if you do that stuff, otherwise no. Setting text color and typeface is not programming.

Collapse
 
angeliquejw profile image
Angelique • Edited

Front-end skills are not as valued (in terms of esteem and salaries) as back-end skills. This has real-world consequences and isn't just the stuff of Internet fights.

Collapse
 
desi profile image
Desi

Agree. I think that a lot of people who are so vehemently on the "HTML/CSS ARE NOT PROGRAMMING LANGUAGES!" side don't see that, and don't understand why the question (and thier response) matters in the first place.

Collapse
 
lesha profile image
lesha 🟨⬛️ • Edited

not as valued (in terms of esteem and salaries)

Should they? If so, why? What are your arguments? In my company, iOS dev is valued 1.5x more than web dev. Can we argue that I (the latter) deserve the same salary as the iOS guy? I certainly would like that.

What makes you equalize web dev and web design? Do you think that if you write in every book that "CSS and HTML are programming languages" something would magically change?

Thread Thread
 
angeliquejw profile image
Angelique

What makes you devalue front-end skills?

Thread Thread
 
lesha profile image
lesha 🟨⬛️

What makes you think that I'm devaluing front-end skills?

Collapse
 
moopet profile image
Ben Sinclair

I think that's changed in recent years. Nowadays, front-enders need to know a lot more than they used to, and get a lot more respect in the industry.

Collapse
 
moopet profile image
Ben Sinclair

I think whether people are hung up on it depends on the context. I haven't looked up the thread from the tweet in the post, but I can make some prejudicial assumptions about it based on the style and who got tagged in. That makes it look gatekeepy. A similar comment on a different thread might not be.

I want to take it down to a contrived litmus test:

If someone said they wanted to be a robotics engineer, and wanted to start out with an easy programming language and asked for suggestions... well, I don't think anyone's going to go with HTML or CSS.

Not because there're better alternatives available. Most of use would discount them because they're not the same type of language we all associate with programming things; we'd certainly bring them up if the asker was interested in making a website for their robotics project.

So I think it's not cut-and-dried. Depending on the scenario they are or are not "programming" languages, and as long as people aren't using that distinction to put other people down, then whichever definition's ok.

Collapse
 
bennypowers profile image
Benny Powers 🇮🇱🇨🇦 • Edited

No Twitter hot take will ever match the subtlety and wisdom of these interviews.

You're absolutely correct that it is gate-keepy (and douchebaggy) to tweet that HTML isn't a programming language.

A better argument against these people, IMO, is that they're just factually wrong.

Collapse
 
t_w_lee profile image
Tim Lee

I was going to be super frustrated that I scrolled through this thread, not really learning a lot, until I came across these vids and channel. Ty!

Collapse
 
desi profile image
Desi

These videos are fantastic! Thank you so much for sharing!

Collapse
 
desi profile image
Desi

(cc @peter on this for consideration for next week's best comments post!)

Collapse
 
gypsydave5 profile image
David Wickes • Edited

Can we try shifting the argument, as the dance around Turing completeness is always naff and boring. Let's ask a better question:

Do you perform the act programming when you write CSS and HTML?

And I'd say it depends.

For instance: I've written configuration files in Groovy (which is probably a programming language), and I wouldn't say that was programming. I've written an interpreter for a (sub set) of the English language - is English a programming language? When you write a Google search, is that a programming language? When you ask Siri a question, is that programming?

This whole "is x a programming language" - it's too essentialist for me. There's nothing inherent in a language that makes it a programming language until you write it and it's interpreted by a computer.

Whether a language is a programming language is an effect of what it does to a computer. That's a matter of intent for the writer, and a matter of how it's interpreted by the computer.

Collapse
 
j_mplourde profile image
Jean-Michel Plourde

I've read from some sources that CSS3 + HTML5 is Turing Complete. Someone with the nickname elitheeli proved this with a demo of a Rule 110 cellular automaton which is Turing complete. There is not javascript involved, just a html and css which is quite surprising when you open the repo.

Collapse
 
deciduously profile image
Ben Lovy

While very cool, isn't this an argument against? Neither language is Turing complete on their own, only in combination.

Collapse
 
j_mplourde profile image
Jean-Michel Plourde

You are right and I feel the same. They aren't Turing complete on their own, only when combined. I'd have to look more into it.

Collapse
 
stereobooster profile image
stereobooster

Simply typed lambda calculus is not Turing complete either...

Thread Thread
 
deciduously profile image
Ben Lovy

Right, because (as I understand it) you always get to normal form and terminate. It's not exactly a programming language either, though, right?

Thread Thread
 
stereobooster profile image
stereobooster

Right, because (as I understand it) you always get to normal form and terminate.

Yes. Expressions in typed lambda always terminate (you can't create Y-combinator, for example).

It's not exactly a programming language either, though, right?

Why not? It's not very comfortable to use, but you can write a program in it, to calculate something

Thread Thread
 
deciduously profile image
Ben Lovy

Heh, fair enough :)

I guess my eventual conclusion is that I'm wrong, it doesn't make sense to delineate HTML and CSS as something different, but also as others have noted that the distinction itself isn't all that useful. Calling something one category has no bearing on what you can or cannot do with it.

Thread Thread
 
stereobooster profile image
stereobooster

Scientific approach - given enough evidence one changes opinion

Thread Thread
 
deciduously profile image
Ben Lovy

Gotta love a good ol' fashioned discuss!

Collapse
 
stereobooster profile image
stereobooster • Edited

Yes. They are "Descriptive declarative programming".

We define programming, as a general human activity, to mean the act of extending or changing a system’s functionality.

e.g. any language which can be used for "extending or changing a system’s functionality" is programming language. You have empty page in the browser if html file is empty, you add some tags, and page has some new behaviour, you changed behaviour of the "system". Congrats you did the programming.

The principal programming paradigms

Collapse
 
leoat12 profile image
Leonardo Teteo

No, they are not. That's why Javascript exists, a HTML page without a true programming language is as static as an image, there is not control flow or any dynamism like other programming languages.

Collapse
 
alvaromontoro profile image
Alvaro Montoro

You can have control flow in HTML and CSS by using radio buttons (and event without them). You can create a FSM/automaton with HTML and it will work as well as with JavaScript. It may not be practical, but it can be done.

Collapse
 
leoat12 profile image
Leonardo Teteo

I understand that you are talking about like changing the style of something based on the radio button, right? Together they can do such thing, but each one of them cannot be considered a programming language, HTML or CSS alone cannot do much as far as I know. Unless a FSM/automaton can be done exclusively with HTML, can you tell more about it? I didn't know about that.

Thread Thread
 
alvaromontoro profile image
Alvaro Montoro • Edited

That's a good point. A FSM/automaton could be built using only HTML with links and IDs/anchors... Again, it wouldn't be practical or pretty, but it could be done. But then someone will claim that it is really a simulation, or that they don't like it.

Thread Thread
 
johncip profile image
jmc • Edited

I help out with an after-school program where, early in the curriculum, we teach the students to make HTML "choose your own adventure" games. (I made this one). It's useful for that, at least :P

(We use separate pages rather than links to fragments on the same page.)

And they are roughly like FSMs, though I think of FSMs as having an input vocabulary that's separate from the states. For instance, with a dial-type combination lock, you can pick any number on any step. With a tree of links, you can think of each page's links as representing a 0, a 1, etc., but it's not "the same" 0 leading out of each page. (You can link to the same destination from multiple places, but that's just going to the same state.) Hopefully I'm making sense. Maybe that lack of a separate input vocabulary just means they're more like Mealy machines than Moore machines? I'm not sure.

They also feel like decision trees to me, FWIW. It could be that there's some formal correspondence between the two concepts, but it's sadly not my area :P

You may be interested in the HTML/CSS game The Mine -- the top code comment makes it sound like it might just be a big FSM made out of checkboxes. I haven't tried to confirm that though.

Thread Thread
 
alvaromontoro profile image
Alvaro Montoro

That’s what I was referring: each page is a state, each link is a transition, and the input is the user clicking on a link. And that can be achieved with HTML even without CSS. (Although CSS will make it prettier 😊)

Collapse
 
ben profile image
Ben Halpern

I agree. Mentioned it in case anyone felt like getting overly concerned about that being a criterion. A programming language is really anything you can write a program in, and if the browser is something you can program against, it seems to fit the bill.

And if, for some reason turing completeness is something you care about, it's technically true as well.

I can can click on a something.html file on my computer and it could launch one hell of a program because it will open in a pretty powerful application environment.

Collapse
 
georgecoldham profile image
George
Thread Thread
 
hibritusta profile image
Hibrit Usta

Amazing :)

Collapse
 
samosborn profile image
Sam Osborn

Good arguments here so far.

Only addition I see needing to be made is:

If CSS and HTML aren't programming languages then what are they?

Seems like tweeting guy Marion has the ball in his court: if they aren't the thing that we think that they are, what are they?
If Marian wants to attack an essential definition, he ought to suggest an alternative. Epistemology and linguistic understanding aren't democratic, and if any of us tried to explain CSS and HTML to inexperienced person, we'd probably call them "programming languages". This is pretty clearly someone trying to agitate and demean with a tweet rather than a real contribution to understanding.

...or maybe there is a cool word for the category of thing that CSS and HTML are that I don't know?

Collapse
 
desi profile image
Desi

That's a great point, and one I haven't thought of! For people who are adamant that they aren't programming languages, I've never seen them present a note on what they are.

Collapse
 
mjb2kmn profile image
MN Mark

No, HTML is still not a programming language.

This is not about gatekeeping or denying any HTML developers membership into some special club of programmers. Different is not more or less.

If there were someone that really only worked in HTML, I would consider them a designer, developer, writer, or some other term that describes what they actually do with the HTML they're writing.

CSS might be a different case as it can define operations on data. HTML is defining data only.

Collapse
 
desi profile image
Desi

I think in the case of the original tweet it is gatekeep-y - in making fun of someone for being "only" an HTML/CSS coder, or telling them that they aren't a programmer, they might be driven out and not continue on to learn a "real" programming language.

This happens more to women than men so maybe we just see it more and are more aware that it happens.

Collapse
 
mjb2kmn profile image
MN Mark

Yes, the tweet did have that tone to it. No doubt people use the "HTML is not a programming language" stance to belittle others. Which is ridiculous and unacceptable. I just don't think it needs to be called "programming language" to be considered useful and a worthy skill.

"Programming" is really a specific area of Software Development.

Collapse
 
jmcp profile image
James McPherson

I think that in the early days it would have been a stretch to say that either CSS or HTML were significant programming languages. Of course, if I'd looked more deeply and reminded myself of another "mere markup language" (TeX and LaTeX) then OF COURSE they are programming languages. It's snobbery to suggest otherwise (and yes, I was guilty of that).

However, with HTML5 and CSS2+ at least, we've now got to the point where github.com/kkuchta/css-only-chat is a thing.

I'm also going through Flavio Copes' CSS handbook (flaviocopes.com/css/) and if you look at the pseudo-element section, CSS is most definitely a programming language.

I'm quite keen to start putting what I've learned just in the last hour from Flavio's book into action with some projects I have.

Collapse
 
renegadecoder94 profile image
Jeremy Grifski

Personally, I would say yes, but my definition of a programming language is more fluid. For instance, you could ask a similar question for esoteric languages like brainf*ck or data languages like yml or json. As long as the content of the text is being interpreted/ compiled by a computer, it’s a programming language.

Now, there are definitely levels to this as some languages can accomplish a lot more than others, but that’s a different discussion.

Collapse
 
downey profile image
Tim Downey

PowerPoint is turing complete is a fun watch. 😛

Collapse
 
ahferroin7 profile image
Austin S. Hemmelgarn

Define 'programming capabilities' though. There are known functional keyloggers in pure CSS, somebody wrote a chat system that only uses HTML+CSS on the client side (it still needs the server to talk to, but it handles 100% of the API translation for that), and the combination of HTML and CSS is Turing complete (not that that means much, so is the card game Magic the Gathering, but it's enough to prove that they can compute mostly arbitrary functions).

Collapse
 
louislow profile image
Louis Low • Edited

How do you like my joke?

<style>
  if[state="true"] > return { color: blue }
  if[state="false"] > return { display: none }
  if[state]:not([state="true"]) > return:after { color:red; content: "Invalid Boolean!" }
</style>

<if state="true">
  <return>
    Hello World!
  </return>
</if>
Enter fullscreen mode Exit fullscreen mode
Collapse
 
themoviemadman profile image
Eliseo D'Annunzio

Loouis, that is actually quite logical code there!

You may want to change:

if[state]:not([state="true"])

to

if[state]:not([state="true"]):not([state=“false”])

Collapse
 
johncip profile image
jmc • Edited

Sure. But they only allow declarative programming, and within specific domains. TeX & SQL are similarly restricted. And like (the combination of) CSS & HTML, they're technically Turing-complete but impractical outside of their intended purpose.

Other languages are general-purpose. To what extent is hard to quantify, and arguably none are purely so, but if you can code an OS in it (C, Java), you're likely at that end of the spectrum. (But no language is an island. C programs typically lean on OS behavior. Machine code targets an ISA. We're all sharecropping.)

Many sit in the middle: PostScript, Prolog, Max/MSP, and others are powerful while still intended for use in a specific domain.

Note that domain-specificity and power aren't necessarily linked. Languages like PHP, ASP, and Elm are more expressive than e.g. PostScript, but still specifically designed for building web apps.

Collapse
 
brob profile image
Bryan Robinson

I've often said "no." And that's with my primary skillset revolving around HTML and CSS.

The thing that kind of changed my mind though, was the idea that really HTML and CSS are programming languages that utilize very high abstraction through the browser's API. So in reality, we're doing a lot of programming, just via this very specific interface.

At this point, I don't remember where I first read that take on it, but it changed my mind.

Either way, the question feels like gatekeeping. I think you're a "Real" developer if your languages of choice are HTML and CSS even if they're not "real" programming languages. Either way, you provide code that makes something happen.

Collapse
 
jdforsythe profile image
Jeremy Forsythe

CSS isn't a programming language. Show me an example of something written in CSS only that doesn't require anything else (HTML, SVG, etc.). That's dead simple for any programming language.

HTML is not a programming language. It's an object definition.

Collapse
 
comaldave profile image
David Skinner

Smalltalk is a language, you only define objects with Smalltalk. With Go you can call C++ or RPC to Python or Haskell. With pure Html5 you can create a form with variables, calculations, evaluation that RPCs to JS or anything on WebAssembly or submits to server. no CSS required.

the other mans job is always easier, a real Html or CSS programmer will blow your socks off with what looks like a simple language. you best respect their expertise.

Collapse
 
jdforsythe profile image
Jeremy Forsythe

Smalltalk isn't "only" objects. There are other parts of the language, like message passing, operators, and flow control. HTML is only object definition. It requires something external, like JS or WASM, for the other things. Smalltalk can do it all by itself.

Your assumption that it's the "other man's job" is wrong. I'm a full stack developer and system architect but I also write HTML and CSS by hand. I understand their power and usefulness and don't discount their worth or the worth of specialists in them. But just because they're powerful doesn't make them programming languages.

Collapse
 
toastking profile image
Matt Del Signore

I think with html 5 you could argue html turned into a declarative programming language. For a specific domain at least.

The discourse around this has become incredibly muddied by the heated discussions that programmers have in defense of "their" technology. If you look at how something like LaTex is lauded but html is looked down upon its easy to see that many people aren't discussing this in good faith.

Collapse
 
comaldave profile image
David Skinner

I say it is a language some people are very fluent. SCSS 4.6+ has conditionals and computations and variables, what more do you want from a language. GoHtml5 templates lets you add shortcode to your HTML, put header in one file footer in another, what more do you want. GoHugo MarkDown you are just typing text, and specifying class and variable and parameters and database values, even Go shortcode if you are a bit crazy. I think that makes it a language.
TOML is a very simple language defined in maybe 100 lines. Go is a simple language requiring 100 pages simple compared to C++ which requires an encyclopedia.

Forth is not a language, it is a compiler that lets you create your own language that no one else can read 🤓

Collapse
 
themoviemadman profile image
Eliseo D'Annunzio

The only problem there is that pre-processors like SCSS and SASS require a third-party piece of software to act as the compiler. The same goes with HTML add-ons like HAML which sit on top of HTML, HAML being written in Ruby...

So, while The Mine may compile into CSS and HTML they were written using non-CSS/HTML extras on top of the original HTML/CSS application...

Having been in the industry for 25 years, I’ve seen HTML and CSS evolve over that time. CSS3 now having CSS custom properties (aka “CSS variables”) and HTML having more flexibility since it made its debut. With a little creativity and “use and abuse” of the way CSS works, you can do a lot with CSS and HTML to make them work programmatically.

I’m currently in the process of taking a proof of concept for a BCD to LCD converter I created to create a CSS/HTML Calculator (codepen.io/zerosumgames/pen/axrxMV for the converter)

Here I make use of the concept of a 4 bit register and Boolean equations to convert the 4 bits needed to represent the digits 0 to 9 and created an LCD circuit capable of displaying the number as you would on a calculator.

To extend this further will require taking this concept for 32 bit numbers, I’ve yet to decide whether I’ll be going with an integer based calculation or considering decimals overall, but the concept is possible using logic gates and algorithms over a 32 bit register system. But I believe this to be possible. HTML may only be seen as a structural placement language and CSS may be seen as only a design-orientated presentation language, but given what they are when they come together, they can be seen as a programming language when working symbiotically. It’s just a matter of working within the limits of what they are able to do together.

CSS and HTML may not necessarily be programming languages on their own but nowadays they are more than capable of working together as a programming language system.

Collapse
 
leandroreschke profile image
Leandro Reschke • Edited

I like to think that CSS, HTML and ETC.. are programming languages specific not to PC but to some program. Like writting a program on minecraft with redstone. You see, CSS and HTML are equivalent programming languages to BROWSER, you are actually programming how the page is going to be displayed by a browser. Different browsers will respond not the same way to your code. the insane need of some people to say that it is not a programming language have nothing to do with CSS or HTML being or not being something, but reflection of the weakness of a weak programmer. If you do something that change a behaviour, that's programming.

Collapse
 
ahferroin7 profile image
Austin S. Hemmelgarn

C++ templates aren't a good example though, people do way too damn much with them (see for example Boost or Webkit, both take way too long to build on even a good modern system because they are almost more C++ templates than they are actual C++).

If you're going for a good example of Turing completeness being essentially meaningless for deciding if something is a programming language or not, I would encourage you to instead look at Magic The Gathering.

Collapse
 
jhall profile image
Jonathan Hall

The answer to the question depends entirely on your definition. They are both languages, obviously. So the question is whether writing CSS and HTML constitutes "programming."

Neither is Turing complete, so a strong argument can be made that they are not "complete" programming languages. But there are other programming languages that aren't Turing complete, too.

At the other extreme, a programming language may be defined as any language that allows you to specify instructions to a computer. In the broadest sense, these languages do that, although they're more declarative than imperative, which may matter to some definitions.

In the long run, the only way to answer the question is according to a specific definition. There is no universally correct answer.

Collapse
 
jasperhorn profile image
JasperHorn

I know this post is pretty old, but this site keeps linking me to it and since I disagree with the bias in the question, I get the urge to write a response every time. I finally gave in.

No, I don't think html and css are programming languages. I also don't consider it gatekeep-y to say this. That's because I don't think they're less than programming languages, and saying they aren't programming languages changes that. Well, saying it out of the blue may imply that they're less, so that can be gatekeep-y. Saying it when the question is whether they are programming languages isn't. Neither is saying it when asking someone for their programming experience in order to determine the level at which you're going to explain them about something (though I'd probably make it "aren't really programming languages").

I consider programming to be about instructing a computer what to do. I do realize that html and css together are often seen as a way to tell the computer what to display on the screen (where displaying on a screen is definitely a subset of doing) but I don't think that's what they are really about. Html is about giving structure to a document. A good html document can be read by a screen reader which doesn't display things at all. Css is about establishing how you want your structures to be displayed. Good css has very little specific to a single page and has a lot that can be reused. It's more about adding your style to your site than about telling the computer what to put on the screen. At least in theory, in practice it's often less clear-cut.

Personally, I do both write html & css and program in what I consider programming languages and I like both. They feel like different activities to me, though. The difference between programming in one language and programming in another language is much smaller in my opinion, even when the one language is imperative and the other is functional.

I do have one experience writing css that felt like programming, though. I was using very recursive css to display a family tree. However, that was not at all a way in which css is typically used, I feel it was more coincidence than intentional that css could do this at all and it was not at all how it is meant to be used. The result was still really awesome, though.

Collapse
 
molecula451 profile image
Paul

The Fact that HTML/CSS are not considered as programming language it's because either both perform any calculations just like any other languages do. And they do not work with

  • Strings
  • Numbers (Intengers - Floating)
  • Conditionals (Boolean [True or False])
  • Calculations

And they also do not solve any computing problem. Instead they purpose were to share information and to style that information you sharing.

But instead they are use for what they are primary been designed for which is in the case of HTML is sorted it out complex and extended/loss of information in a well-formatted readable document. And in CSS, the styles with all have in life. Do you imaging life without colors?? CSS is there to give that style to that important information that might have been shared thru an awesome HTML document.

Collapse
 
khrome83 profile image
Zane Milakovic

It better be... I tell people I am a programmer. Don’t take this away from me!

I do other languages, but HTML and CSS are the ones my non programming friends can relate too. Almost all of them have had a elective that has used it in some level of college or high school.

Collapse
 
holywar20 profile image
Bryan Winter • Edited

Technically, they are.

But this is more a question of human language than a technical question. If your only skill is HTML, you can't call yourself a programmer in a human setting talking to other humans without other humans thinking that your a liar. Likewise many designers know only only HTML and CSS, and while they are often quite bright people doing extremely valuable work , they don't consider themselves programmers, or what they are doing programming.

This is less about gate-keeping, and more about how technical and human idioms don't map exactly on each other.

Collapse
 
naamanews profile image
News Naama

Yes, I read many articles is Html a programming language HTML is a programming language “HyperText Markup Language” which is the most basic building block of the web page.

Collapse
 
raddevus profile image
raddevus

Consider this: Computer programming is about automation (computer automation).
So when someone says, programming language a set of people think, "Hmmm...this must be a language that enables automation."

HTML is defined as a markup language and doesn't contain language elements to enable automation directly.
You can see this at work because later, people who were working in static HTML came up against its limits. That's when Brendan Eich of (then) Netscape created JavaScript and added it to HTML (browser's really) to enable automation (dynamic content).

Now, of course, many people will say, HTML allows the automation of static documents. It allows browsers to render a document and that is a kind of automation.
So, this is the real distinction and why certain people hear someone say HTML is Programming Language and balk, because it doesn't really enable automation the way they feel a programming language does.

Collapse
 
pentasis profile image
Bert

I'm late to the discussion but I always considered HTML and CSS scripting languages. A program is code that results in an application (user interaction), and a script is code that is used by an application (to perform a task, change or add functionality).
HTML and CSS are code used by an application (browser/server) to provide an interface.
So are HTML & CSS Programming languages? Imo no, they are Scripting languages.

Collapse
 
gpapadopoulos profile image
George Papadopoulos

This debate reminds me the "if you have a hammer, everything looks like a nail". Just because we, developers, know "programming languages", that doesn't mean everything coming from our world is a programming language. They're used with a programming language(JS) but that doesn't mean they are! For example, is Visual Studio a programming language? HTML/CSS is a tool(plus many other things, for example, technology is another term that comes to mind) but it's not a full-blown programming language per se. May be what we need here is to define another category for these types of technologies, for example one can ask the same question about XAML/XML. Of course the only purpose of doing this is to help people understand them better and nothing else, otherwise this debate is meaningless.

Collapse
 
deciduously profile image
Ben Lovy • Edited

No, but it's not a value judgement, they just don't have control flow. They're powerful languages, just not programming languages. They're specialized tools designed for specific purposes.

Collapse
 
fredray88 profile image
fredray88

NO, HTML AND CSS ARE NOT REAL PROGRAMMING LANGUAGES. Just because somebody can use a text editor to code "Hello World," doesn't make the code a "programming" language. HTML/CSS are mostly used for displaying and formatting web pages much like a word processor controls paragraphs and fonts.

The colloquial use of these words implies they are programming languages; but neither is used for "real" programming like that of RPG or SQL that actually does something besides display text and pictures on a web page.

Just because you used a text editor to code something that uses syntax rules does not make the code a "programming" language. Just call it code.

HTML is mostly being used to display and format the results.
CSS is imbedded in the HTML and is only used for final styling.

For the last few decades the millennials have showed up with HTML and CSS and got everybody to call them "Software Engineers" (for crisake.) Before the internet the only tag oriented coding was in word processors to control fonts and paragraphs and then it got pushed over into the browser area to display stuff on web pages.

Comparing RPG/SQL to HTML/CSS is like comparing a professional filmmaker with a millennial that shows up with his iphone and says he's the new "photographer."

By this logic then everybody who can use a text editor and code "Hello World," is a Software Engineer! It's a semantic argument that will upset low level coders.

Collapse
 
256hz profile image
Abe Dolinger

I don't really see any core to this. Do they not have syntax? Do they not require study to use well? New CSS has built-in variables, and can pass them back and forth to JS for processing.

Yes, someone who codes Hello World has started down the road to being a programmer. No one would pay them yet, but that's where the journey begins. Did you birth fully formed applications from a crevice in your forehead, like the mighty Zeus? Or start with something humbler?

They are languages, with syntax, used to build applications. What would you call that? Are low-level engineers so fragile that this notion would ruin them?

Collapse
 
cryptoquick profile image
Distributed Hunter Trujillo

Of course CSS and HTML are programming languages. Aside from discussions of computational theory, such as grammars, Turing-completeness, expressivity, etc... Even assembly instructions sent to a CPU are just configuring the target to run certain functions.

Besides, they have a formal spec. HTML has the word 'Language' in the name, for goodness sake!

Collapse
 
jerodsanto profile image
Jerod Santo

Meta-question: Is it gate-keepy to elect yourself the arbiter of which internet comments are (or are not) gate-keepy? 🤔

Collapse
 
desi profile image
Desi

Well, I wasn't, but thanks for the feedback!

Collapse
 
jerodsanto profile image
Jerod Santo

I know you weren't. Sorry, I should have clarified: I was just making a general statement/thought experiment after reading your post and a few of the other comments.

Otherwise, I'd be making myself the meta-gatekeeper over the gatekeepers of gatekeeping! 😆

Collapse
 
holywar20 profile image
Bryan Winter • Edited

I remember reading an article about a guy who made a complete RPG in excel.

Excel scripting is Turing Complete.

Collapse
 
vlasales profile image
Vlastimil Pospichal

No. HTML is a markup language, CSS is a style language.

Collapse
 
leoat12 profile image
Leonardo Teteo • Edited

I don't know Ruby, but using Ruby in anything doesn't defeat the purpose of being CSS only? Like, if he uses something other than CSS, it is not CSS-only anymore.

 
leoat12 profile image
Leonardo Teteo

So it is like any other web application that has a programming language with a server that serves HTML and CSS?

Collapse
 
iceorfiresite profile image
Ice or Fire

Nope because they don't allow for logic (css variables don't count)

Collapse
 
desi profile image
Desi

Genuinely curious - why don't they count?