CSS-Metasprachen: Hilfe oder Verlagerung des Problems auf abstraktere Ebene?
Silly con Valley: Die Verrücktheit ist mit denen im Tal
Es gibt eine sehr große Anzahl von professionellen Tools und Methoden, die Webdesignern das Leben vereinfachen sollen.
Dazu gehört auch eine stärker werdende Fraktion von CSS-Metasprachen. In syntaxtisch sauberer Umgebung kann man hier selbst sehr komplexe CSS-Regeln für eine oder mehrere Websites einfach auf Knopfdruck erzeugen, wenn man diese erstmal programmiert hat.
Da liegt meiner Meinung nach der Hund begraben: Die zugegeben schönen Möglichkeiten der CSS-Metasprachen lassen sich natürlich nur ausschöpfen, wenn man diese Metasprache auch beherrscht. Kommen als nächstes also wieder vereinfachende Tools, die wiederum die Metasprachen erzeugen, die wiederum die CSS-Dateien mit ihren Regelsätzen erzeugen?
Versteh mich nicht falsch: Viele Entwickler haben auf CSS-Metasprachen gewartet und werden diese dankbar in ihre Toolsammlung aufnehmen. Und ich kann mir selbst auch viele sinnvolle Einsatzmöglichkeiten dafür vorstellen. Daß es so etwas überhaupt gibt, zeigt die Notwendigkeit, über CSS (und wie es sein sollte) ganz neu nachzudenken.
Aber meiner Meinung nach sollte man ein Problem nicht unendlich elaborieren und abstrahieren. Es wäre nicht verkehrt, wenn all die Programmierer, die GUIs bauen sollen, sich auch endlich mal die Hände schmutzig machten und etwas über Typographie, Farben und Formen lernten.
Es gibt wirklich schöne OpenSource Lösungen, die ich mit Begeisterung einsetze, wie z.B. Zen Cart. Diese gesamte eCommerce Lösung ist so clever und unendlich erweiterbar geschrieben, aber wenn man sich den CSS-Code der Templates anschaut, erfasst mich das kalte Grauen...
Man kann effektiven CSS-Code schreiben. Oder eben auch nicht. Es ist wie mit BASIC. Auch der bekloppteste Spaghetticode kann toll funktionieren. Nur weil CSS unglaublich unübersichtlich und schlecht geschrieben werden kann, muß man nicht zu einer anderen Sprache springen. Man könnte CSS selbst weiterentwickeln und um striktere Syntax erweitern.
Dies hat mit der Transformation von C zu C++ bzw. Objective-C hervorragend funktioniert. Denn C ist - genau wie CSS - im Grunde sehr gut geeignet, eine Vielzahl von Problemen zu lösen und sehr effektiven Code zu erzeugen. Und zwar (sehr wichtig): für alle Stufen auf der Lernkurve.
Selbst sehr Fortgeschrittene können aus C immer noch ungeahnte Lösungen zaubern. Und Anfänger können schon nach kurzer Zeit professionelle Programme damit erzeugen. Eine Syntax sollte diese beiden Aspekte berücksichtigen: Unausschöpflichkeit (damit niemand an Grenzen stößt) und superleichten Einstieg durch überzeugend einfache Logik.
Nicht umsonst wurde/wird z.B. PASCAL an Schulen gelehrt, um den Einstieg in die Programmierung zu ermöglichen. Aber auch LOGIC (das mit der Schildkrötengrafik) ist vom logischen Ansatz her sehr schnell zu erfassen, während der Sourcecode von SMALLTALK hingegen nicht ohne weiteres verstanden werden kann.
Die philosophische Nasenscheidewand
Noch ist nur ein Niesen zwischen den beiden philosophischen Ansätzen, die verschiedene Webentwickler verfolgen. Zum Einen gibt es die CSS-Metasprachen Partei, zum Anderen diejenigen, die CSS selbst verbessern möchten.
Die Erfahrung hat gezeigt, daß sich aus solchen anfänglich noch winzig kleinen Entfernungen schnell große, unüberbrückbare Distanzen aufbauen können, bei der früher oder später eine Lösung auf die Müllkippe der Geschichte kommt.
Ich nehme das zum Anlaß, nochmals den Niedergang von Beta gegenüber VHS zu betrauern... das Schlechtere, aber besser Vermarktete hat sich durchgesetzt und uns viele ruckelnde Bilder mit viel Schnee beschert... Seufz.
Noch ist es nicht zu spät. Beide Ansätze lassen sich zu einer großartigen Lösung verbinden. Ich hoffe, daß auch andere Leute dieses Potential sehen und entsprechend darauf hinwirken.
Die Einen: CSS-Metasprache
Hier gibt es z.B. less und haml, wobei sass (syntactically awesome stylesheets) der Part von haml ist, der sich um die Stylesheets kümmert. less, haml und damit auch sass kommen aus der Ruby on Rails Ecke, das ist sowieso ein ganz eigenes Völkchen von Entwicklern ;-)
Die Anderen: Object Oriented CSS
oocss von Nicole Sullivan verfolgt den Weg der reinen Lehre und versucht, mit den Bordmitteln von CSS einen rationalen Umgang mit den Möglichkeiten von CSS selbst zu erreichen.
Die Zukunft? - Wer weiß..?
Ich persönlich bevorzuge den Ansatz von Nicole Sullivan mit dem oocss. Es gibt durchaus Wege und Möglichkeiten, sauberen CSS-Code zu schreiben, der auch für einen Dritten sofort pflegbar und erweiterbar ist. Die Ordnung im CSS lässt sich durch Wiederverwendbarkeit von CSS-Klassen, Aufteilung auf Dateien und viele andere Möglichkeiten herstellen.
Was meinst Du? - Wie organisierst Du Deinen CSS-Code für Kundenprojekte? Nutzt Du wiederverwendbare Module, die Du anpasst oder entwickelst Du immer alles vom weißen Blatt aus?
Software-Entwicklung ist teuer, da man erstens Spezialisten benötigt und zweitens, da sie Zeit kostet: die Entwicklungszeit. Durch Low-Level-Einstiegssyntax wird es mehr "Spezialisten" geben, die ein gegebenes Problem lösen können. Und durch wiederverwertbaren Code (recylce this!) sinkt die Dauer der Entwicklungszeit, wenn man den Sourcecode nur noch modulartig zusammensetzen muß.
Die mit Abstand beste Modularchitektur, die ich bisher bei einem OpenSource Projekt gesehen habe, ist bei Drupal zu finden. Dort gibt es Leute, die APIs als Module für wiederum andere Module bereitstellen. Das nenne ich perfekte Zusammenarbeit. Es gibt dort weitaus weniger konkurrierende Module (die alle dieselbe Funktionalität bereitstellen). Und die Modul-Autoren empfehlen teilweise sogar das Modul des anderen für bestimmte Konditionen. Hut ab.
Vielleicht wäre die Lösung für das "Problem" CSS einfach ein Compiler mit Debugger, der Warnungen und Fehler auswirft und dem Autor direkt anzeigt, was wirklich nicht geht und was nicht "so schön" ist. Und letztlich optimierten CSS-Code in komprimierter Form ausspuckt, der superschnell geladen werden kann.
Vielleicht liest dies ja jemand und setzt diese Idee in die Tat um ;-)