A Systematic Review of HTML’s Unfitness To Be Considered a Programming Language

Cole Kraten
4 min readOct 17, 2020
I chose the most generic HTML image possible to make the article look more legit

As long as there are discussion forums like 4chan /t/ and stack overflow, there will be those that will assert that HTML is a language. These people are categorically wrong and pose a potential threat to the gene-pool. Satirical and politically incorrect eugenics humor aside, explaining the reasoning behind my assertion that HTML is not a programming language reveals some interesting aspects about the nature of programming languages that you may never have considered. Hopefully by the end you will walk away knowing something you didn’t when the day began.

Proponents of this fallacy typically cite the fact that the ‘L’ in “HTML” stands for Language. In response to this I say that technically the D in DPRK (Democratic people’s republic of Korea A.K.A North Korea) stands for democracy. Just as Shakespeare quipped that a rose by any other name would smell just as sweet, HTML by any other name would still not be a programming language. The primary point of contention between these two philosophically different ideologies comes down to the precise definition of a programming language. The generally accepted broad definition of a programming language as provided to us the Mariam-Webster dictionary is, “any of various high-level languages used for computer programs”. In a more technical light, Programming languages are sets of instructions that detail the methods through which a computer should solve a problem. In the Church–Turing thesis, the mathematical concept of Turing Completeness is described as the ability of machines (like computers) to calculate any solution to a problem that can be solved by way of an algorithm assuming that the machine had both infinite time, and infinite memory. In reality no system can have infinite time or memory, a limitation imposed both monetarily and as a function of the finite amount of energy in the universe; However, it is generally considered that a system is turing complete when it is capable of satisfying 3 criteria.

1.) The system has the ability to write data to some form of memory. This could be in the form of Binary states in an electrical circuit (i.e RAM), physical symbols on a tape, or the orientation of cups (Mouth up/Mouth Down) on an infinitely long table. As Long as you can encode data in an array of discrete states you can satisfy this requirement.

2.) The system has the ability to read values previously written to memory. This just means that the system can look at data stored in the memory and determine the state of that data, for example 0 or 1 / mouth up or mouth down

3.) The Ability to perform a specific action in accordance with some list of predefined instructions, that is dependent on the state of the memory cell being read. This is often referred to as conditional logic and it is where the real magic happens. Keep with our cups analogy, an example of this could be an instruction that tells the system whenever you see a two cups turned mouth up, turn the cup immediately to the right of those cups mouth down. This simple ability is what truly unlocks problem solving computation and this alone disqualifies HTML

Turing completeness is a mathematical concept that no real life machine can achieve, but if we waive the limitations of finite time and memory, any system that can satisfy the above criteria is theoretically capable of computing any problem that can be computed, and is therefore considered turing complete. It is necessary for a system to display the property of being turing complete in order to be defined as a programming language, as in the absence of this complete the language can not be used programmatically. It is mathematically certain that HTML is not turing complete as HTML lacks the ability to perform conditional logic. This deprives HTML not only of the ability to solve all solvable problems, but of the ability to solve ANY solvable problem. The only function HTML can serve is to describe the manner in which a web page renderer should display content. It can not in of itself be used for the computation of any issue. Basically, HTML lacks the ability to make decisions, and therefore is not a programming language. HTML offers no more functionality that the CSV specification does. It is simply a method of storing data that can later be interpreted by another higher order system. It can not be used to manipulate data, calculate, take input, or deliver output.

Lastly, I would like to address those that argue that HTML when combined with CSS satisfies the properties of turing completeness. This notion is ridiculous for two reasons. Firstly in early 2011 it was proven that CSS on its own (as a specification) is turing complete. That argument is therefore logically the same as saying you can make a megaphone out of little more than a squirrel, a stick, some twine, and a megaphone. Secondly even if CSS was not in of itself turing complete, but rather enabled HTML to become turing complete, that would still not qualify HTML as a programming language. Take for example Conway’s game of life. 4 simple rules, all of which (on their own) are not turing complete, come together to create a system that is. The qualification of a system displaying a property can not be used as justification that its components display the same property. Just because a car is capable of self movement against the force of gravity does not mean that its wheels alone are. In summary, The notion that HTML is a programming language is built upon a mountain of incorrect assumptions and logical fallacies and therefore is false. If you disagree, you can fight me on it. My twitter handle is @cole_kraten (ColeTheScienceDude) and I welcome any rebuttal you feel must be made.

--

--

Cole Kraten

Cannabis Scientist, Science Educator, Reader & Writer of Philosophy, Occasional Citizen Journalist