Ist HTML keine Programmiersprache?

Avatar of Alvaro Montoro
Alvaro Montoro am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

HTML ist keine Programmiersprache.

Ich habe diesen Satz schon so oft gehört, und er ist ermüdend. Normalerweise folgt darauf etwas wie: "Es hat keine Logik" oder "Es ist nicht Turing-vollständig". Also... offensichtlich ist es keine Programmiersprache. Als ob das Thema damit erledigt wäre und das Ende der Diskussion.

Sollte es das aber sein?

Ich möchte typische Argumente betrachten, die ich höre, um HTML herabzusetzen, und meine eigenen Gegenargumente anbieten, um zu zeigen, wie diese Behauptungen nicht vollständig korrekt sind.

Mein Ziel ist es nicht, zu beweisen, ob HTML eine Programmiersprache ist oder nicht, sondern zu zeigen, dass die drei Hauptargumente, die dafür angeführt werden, dass es keine ist, fehlerhaft oder falsch sind und somit die Schlussfolgerung aus logischer Sicht ungültig machen.

„HTML ist eine Auszeichnungssprache, keine Programmiersprache“

Diese Aussage allein klingt gut... aber sie ist falsch: Auszeichnungssprachen können Programmiersprachen sein. Nicht alle sind es (die meisten nicht), aber sie können es sein. Wenn wir ein Venn-Diagramm von Programmiersprachen und Auszeichnungssprachen zeichnen würden, wären es keine zwei getrennten Kreise, sondern zwei sich leicht überschneidende Kreise.

Eine Auszeichnungssprache, die mit Variablen arbeitet, Kontrollstrukturen, Schleifen usw. hat, wäre ebenfalls eine Programmiersprache. Das sind keine sich gegenseitig ausschließenden Konzepte.

TeX und LaTeX sind Beispiele für Auszeichnungssprachen, die auch als Programmiersprachen gelten. Es ist vielleicht nicht praktikabel, damit zu entwickeln, aber es ist möglich. Und wir können Beispiele online finden, wie einen BASIC-Interpreter oder einen Mars Rover Controller (der den Jurypreis im ICFP 2008 Programmierwettbewerb gewann).

Auch wenn einige Auszeichnungssprachen als Programmiersprachen gelten mögen, sage ich nicht, dass HTML eine davon ist. Der Punkt ist, dass die ursprüngliche Aussage falsch ist: Auszeichnungssprachen können Programmiersprachen sein. Zu sagen, dass HTML keine Programmiersprache ist, *weil* es eine Auszeichnungssprache ist, basiert also auf einer falschen Aussage, und jede Schlussfolgerung, die Sie aus dieser Prämisse ziehen, wird kategorisch falsch sein.

„HTML hat keine Logik“

Diese Behauptung erfordert, dass wir klären, was "Logik" bedeutet, denn die Definition könnte Sie überraschen.

Wie bei der Turing-Vollständigkeit (auf die wir definitiv noch eingehen werden) scheinen diejenigen, die dieses Argument anführen, nicht genau zu verstehen, worum es dabei geht. Ich habe Leute gefragt, was sie mit "Logik" meinen, und interessante Antworten erhalten wie

Logik ist ein vernünftiger Grund oder eine vernünftige Denkweise.

Das ist nett, wenn wir nach einer Wörterbuchdefinition von Logik suchen. Aber wir sprechen von *Programmier*logik, nicht nur von Logik als allgemeinem Begriff. Ich habe auch Antworten wie diese erhalten:

Programmiersprachen haben Variablen, Bedingungen, Schleifen usw. HTML ist keine Programmiersprache, weil man keine Variablen oder Bedingungen verwenden kann. Sie hat keine Logik.

Das ist in Ordnung (und definitiv besser, als sich mit true/false/AND/OR/etc. zu beschäftigen), aber auch falsch. HTML hat Variablen - in Form von Attributen - und es gibt Kontrollstrukturen, die zusammen mit diesen Variablen/Attributen verwendet werden können, um zu bestimmen, was angezeigt wird.

Aber wie kontrolliert man diese Variablen? Man braucht JavaScript!

Wieder falsch. Es gibt einige HTML-Elemente, die eine interne Kontrolllogik haben und kein JavaScript oder CSS benötigen, um zu funktionieren. Und ich spreche nicht von Dingen wie <link> oder <noscript> – das sind rudimentäre Kontrollstrukturen und seit Jahrzehnten Teil des Standards. Ich beziehe mich auf Elemente, die auf Benutzereingaben reagieren und bedingte Aktionen ausführen, abhängig vom aktuellen Zustand des Elements und dem Wert einer Variablen. Nehmen Sie das Tupel <details>/<summary> oder das Element <dialog> als Beispiele: Wenn ein Benutzer darauf klickt, werden sie geschlossen, wenn das Attribut open vorhanden ist, und sie werden geöffnet, wenn es nicht vorhanden ist. Kein JavaScript erforderlich.

Allein zu sagen, dass HTML keine Programmiersprache ist, weil ihr die Logik fehlt, ist also irreführend. Wir wissen, dass HTML tatsächlich Entscheidungen basierend auf Benutzereingaben treffen kann. HTML hat Logik, aber sie unterscheidet sich von Natur aus von der Logik anderer Sprachen, die für die Manipulation von Daten entwickelt wurden. Wir werden ein stärkeres Argument als dieses brauchen, um zu beweisen, dass HTML keine Form des Programmierens ist.

„HTML ist nicht ‚Turing-vollständig‘“

Okay, das ist das Argument, das wir in dieser Debatte am häufigsten sehen. Es ist technisch korrekt (die beste Art von korrekt), zu sagen, dass HTML nicht Turing-vollständig ist, aber es sollte eine größere Debatte auslösen, als es nur als abschließendes Argument zu verwenden.

Ich werde nicht ins Detail gehen, was es bedeutet, Turing-vollständig zu sein, da es dafür viele Ressourcen gibt. Tatsächlich fasst Lara Schenck es schön in einem Beitrag zusammen, in dem sie argumentiert, dass CSS Turing-vollständig ist.

Ganz einfach ausgedrückt bedeutet für eine Sprache oder Maschine, Turing-vollständig zu sein, dass sie das leisten kann, was eine Turingmaschine leisten könnte: jede Berechnung durchführen, auch bekannt als universelle Berechnung. Schließlich wurde das Programmieren erfunden, um Mathematik zu betreiben, obwohl wir heute natürlich viel mehr damit machen!

Da die meisten modernen Programmiersprachen Turing-vollständig sind, nutzen die Leute das als Definition einer Programmiersprache. Aber Turing-Vollständigkeit ist das nicht. Es ist ein Kriterium, um festzustellen, ob ein System (oder sein Regelwerk) eine Turingmaschine simulieren kann. Es kann verwendet werden, um Programmiersprachen zu klassifizieren; es definiert sie nicht. Es gilt nicht einmal ausschließlich für Programmiersprachen. Nehmen Sie zum Beispiel das Spiel Minecraft (das dieses Kriterium erfüllt) oder das Kartenspiel Magic: The Gathering (das ebenfalls das Kriterium erfüllt). Beide sind Turing-vollständig, aber ich bezweifle, dass irgendjemand sie als Programmiersprachen einstufen würde.

Turing-Vollständigkeit ist gerade in Mode, so wie früher der Unterschied zwischen kompilierten und interpretierten Sprachen als gutes Kriterium galt. Ja. Wir müssen uns nicht stark anstrengen, um uns zu erinnern, als Entwickler (hauptsächlich im Backend) die Frontend-Programmierung (einschließlich JavaScript und PHP) herabwürdigten, als sei sie keine "echte Programmierung". Das hört man immer noch manchmal, wenn auch verblasst, gemurmelt und nuschelnd.

Die Definition dessen, was Programmierung ist (oder nicht ist), ändert sich mit der Zeit. Ich wette, jemand, der Lochkarten sortierte, beschwerte sich darüber, dass das Tippen von Code in Assembler keine echte Programmierung sei. Es gibt nichts Universelles oder in Stein Gemeißeltes. Es gibt keine tatsächliche Definition.

Turing-Vollständigkeit ist ein fairer Standard, das muss ich sagen, aber einer, der voreingenommen und subjektiv ist – nicht in seiner Form, sondern in der Art und Weise, wie er ausgewählt wird. Warum wird eine Sprache, die eine Turing-vollständige Maschine erzeugen kann, als "Programmiersprache" gepriesen, während eine andere, die eine Zustandsmaschine erzeugen kann, nicht? Es ist subjektiv. Es ist eine Ausrede wie jede andere, um zwischen "echten Entwicklern" (denen, die die Behauptung aufstellen) und denen, die ihnen unterlegen sind, zu unterscheiden.

Um dem Ganzen die Krone aufzusetzen: Es ist offensichtlich, dass viele der Leute, die das Mantra "HTML ist nicht Turing-vollständig" nachplappern, nicht einmal wissen oder verstehen, was Turing-Vollständigkeit bedeutet. Es ist kein Preis und kein Qualitätssiegel. Es ist kein Ehrenzeichen. Es ist nur eine Möglichkeit, Programmiersprachen zu kategorisieren – um sie zu gruppieren, nicht um sie zu definieren. Eine Programmiersprache kann Turing-vollständig oder nicht sein, genauso wie sie interpretiert oder kompiliert, imperativ oder deklarativ, prozedural oder objektorientiert sein kann.


Also, ist HTML eine Programmiersprache?

Wenn wir die Hauptargumente entkräften können, die behaupten, dass HTML keine Programmiersprache ist, bedeutet das dann wirklich, dass HTML eine Programmiersprache ist? Nein, das tut es nicht. Und so wird die Debatte weitergehen, bis der HTML-Standard sich weiterentwickelt oder sich die "aktuelle Definition" von Programmiersprache ändert.

Aber als Entwickler müssen wir dieser Frage gegenüber wachsam sein, denn in vielen Fällen wird sie nicht verwendet, um eine ernsthafte Debatte anzustoßen, sondern um Kontroversen zu schüren, während sie hinterhältige Motive verbirgt: von einfachen Internet-Reaktionen bis hin zur gefährlichen Herabwürdigung des Beitrags einer Gruppe von Menschen zum Entwicklungsökosystem.

Oder, wie Ashley Kolodziej es in ihrer Ode an HTML wunderschön zusammenfasst:

Sie sagen, du bist keine echte Programmiersprache wie die anderen, dass du nur Markup bist, und technisch gesehen hast du wohl recht. Technisch gesehen sind JavaScript und PHP Skriptsprachen. Ich erinnere mich, als es nicht cool war, JavaScript zu kennen, als es auch keine "echte" Sprache war. Manchmal habe ich das Gefühl, dass diese Unterscheidungen bedeutungslos sind, als ob wir Vokabular aufgebaut hätten, um dich (und damit auch uns als Entwickler) zurückzuhalten. Du hast als Auszeichnungssprache deinen eigenen einzigartigen Wert und deine Stärken. Zu wissen, wie man am besten mit dir umgeht, ist eine wahre Expertise, die zu oft übersehen wird.

Unabhängig von der Haltung, die wir zur Diskussion "HTML ist/ist keine Programmiersprache" einnehmen, lasst sie uns feiern und ihre Bedeutung nicht leugnen: HTML ist das Rückgrat des Internets. Es ist eine schöne Sprache mit umfangreicher Dokumentation und einer ausgedehnten Syntax, aber so einfach, dass sie an einem Nachmittag gelernt werden kann, und so komplex, dass ihre Beherrschung Jahre dauert. Programmiersprache hin oder her, was wirklich zählt, ist, dass wir HTML überhaupt haben.