Ist CSS eine Programmiersprache?

Avatar of Chris Coyier
Chris Coyier am

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

Ich habe eine echte Abneigung gegen diese Frage. Sie mag auf den ersten Blick wie eine unterhaltsame Frage erscheinen, aber die Art und Weise, wie sie in den öffentlichen Diskurs einfließt, scheint selten in gutem Glauben zu geschehen. Es spielen versteckte Motive eine Rolle, die mit Respekt, Schutzinstinkten und dem Wunsch zu tun haben, den Status quo zu brechen oder zu bewahren.

Wenn jemand irgendwie beweisen kann, dass CSS keine Programmiersprache ist (dies ist ein sograuer Bereich, dass es, wenn dies Ihr Ziel wäre, nicht besonders schwer zu tun wäre), dann kann er sich weiterhin über seine „echten“ Programmierfähigkeiten erhaben fühlen und die Tatsache rechtfertigen, dass er (wahrscheinlich) mehr verdient als ein reiner Front-End-Entwickler, der sich auf CSS spezialisiert hat. Das ist die Aufrechterhaltung des Status quo.

Das Gegenteil kann auch zutreffen. Wenn Sie beweisen können, dass CSS eine Programmiersprache ist, können Sie vielleicht Ihr eigenes Unternehmen oder die gesamte Branche zu gleichem Respekt und gleicher Bezahlung für reine Front-End-Entwickler bewegen. Das ist der Bruch des Status quo.

Nehmen wir an, wir könnten uns alle auf ein Boolesches `true` oder `false` einigen, ob CSS eine Programmiersprache ist. Was nun? Wenn `true`, wird die Bezahlung für alle Webentwickler angepasst? Wenn `false`, verdienen CSS-Spezialisten Gehaltskürzungen? Wenn `true`, werden sich alle gegenseitig so respektieren, wie sie es jetzt nicht tun? Wenn `false`, müssen CSS-Leute ihr Mittagessen im Heizungsraum essen? Ich bezweifle, dass sich etwas ändern wird; daher meine Abneigung gegen die Diskussion.

Unabhängig von den Fakten ist es unwahrscheinlich, dass die meisten Leute auch nur die Möglichkeit in Betracht ziehen, dass CSS eine Programmiersprache ist. Ich meine, Programme führen doch etwas aus, oder? Niemand bezweifelt, dass JavaScript eine Programmiersprache ist, weil sie ausgeführt wird. Sie schreiben Code und führen diesen Code dann aus. Vielleicht öffnen Sie ein Terminalfenster und schreiben

> node my-program.js

Sicher, wie Eier Eier sind, wird dieses Programm ausgeführt werden. Sie können „Hallo, Welt!“ mit `console.log("Hello, World!");` im Terminal ausgeben lassen.

Das kann CSS nicht! Ähm, nun ja, es sei denn, Sie schreiben `body::after { content: "Hello, World!"; }` in eine `style.css`-Datei und öffnen eine Webseite, die diese CSS-Datei lädt. CSS wird also auf seine eigene besondere Weise ausgeführt. Es ist eine domänenspezifische Sprache (Domain-Specific Language, DSL) und keine Allzwecksprache (General-Purpose Language, GPL). In diesem Browserkontext ist die Art und Weise, wie CSS zur Ausführung angewiesen wird (`<link>`, normalerweise), nicht einmal so anders als die Art und Weise, wie JavaScript zur Ausführung angewiesen wird (`<script>`, normalerweise).

Wenn Sie nach Vergleichen für CSS-Syntax mit Programmierkonzepten suchen, werden Sie sie wahrscheinlich finden. Was ist ein Selektor, wenn nicht eine Art `if`-Anweisung, die eine Schleife über Übereinstimmungen ausführt? Was ist `calc()` mehr als eine direkte Implementierung von Mathematik? Was ist eine Gruppe von Media Queries mehr als ein `switch`? Was ist eine benutzerdefinierte Eigenschaft mehr als ein Ort zur Speicherung von Zuständen? Was ist `:checked` mehr als ein Boolescher Wert? Eric hat kürzlich darauf hingewiesen, dass CSS typisiert ist, und früher, dass CSS voller Funktionen ist.

Ob zum Guten oder Schlechten, eine Antwort darauf, ob CSS eine Programmiersprache ist oder nicht, beeinflusst die Menschen. Ein Universitätsprofessor hatte seinen Studenten ausdrücklich gesagt, dass CSS nicht Turing-vollständig sei, aber überdenkt diese Position nun, nachdem er erfahren hat, dass es das ist. Ungeachtet der Absicht denke ich, dass die Branche davon beeinflusst wird, was Informatikprofessoren Jahr für Jahr Informatikstudenten erzählen.

Lara Schenck hat sich mit dem Turing-vollständig-Aspekt befasst. Wenn Sie versuchen, dies zu klären, ist die Turing-Vollständigkeit ein guter Indikator. Es stellt sich heraus, dass CSS im Grunde tatsächlich Turing-vollständig ist (indem es das zelluläre Automaten-Argument von Regel 110 löst), wenn auch nicht ganz allein. Es beinhaltet eine etwas komplexe Verwendung von Selektoren und `:checked` (überraschend, überraschend). Lara macht einen klugen Punkt

Allein ist CSS nicht Turing-vollständig. CSS plus HTML plus Benutzereingabe ist Turing-vollständig!

Dennoch, sagen Sie, Sie kaufen es nicht. Sie verstehen es und geben sogar zu: „Okay, fein, CSS ist im Wesentlichen Turing-vollständig“, aber es fühlt sich für Sie einfach nicht wie eine Programmiersprache an (oder HTML übrigens). Es ist zu deklarativ. Zu anwendungsspezifisch. Was auch immer es ist, ich mache Ihnen ehrlich gesagt keinen Vorwurf. Ich hoffe nur, dass die Antwort, zu welchem Schluss auch immer Sie kommen, keine Auswirkungen auf Dinge hat, die wirklich wichtig sind1, wie Bezahlung und Respekt.

Respekt ist angebracht, egal zu welchem Ergebnis wir kommen. „Ich betrachte CSS nicht als Programmiersprache, aber das bedeutet nicht, dass ich es für trivial halte oder dass meine spezialisierten Kollegen weniger wert sind als meine Python-spezialisierten Kollegen.“ Wäre das nicht schön? „Ich denke, es gibt eine interessante Unterscheidung zwischen deklarativen Markup-Sprachen und anderen Arten von Sprachen, aber sie sind alle Code.“ Ach hören Sie auf, Sie wissen, wie nachdenkliche Antworten mich erröten lassen.

Ich würde gerne viel nuanciertere, respektvollere und agendalose Kommentare wie diesen sehen, wenn diese Diskussionen stattfinden.


  1. Ähnlich wie „Website“ vs. „Web-App“. Ob Sie einen Unterschied machen oder nicht, ich hoffe, dass die Leute keine Entscheidungen treffen, die sich auf Benutzer auswirken, basierend darauf, in welchen taxonomischen Eimer Sie Ihre Sache stecken wollen.