Camping_RIDER: Gedanken eines Laien...

Beitrag lesen

Aloha ;)

Als jemand, der weder Informatik studiert hat [...]

Ich sehe: Wir sprechen von gleich zu gleich ;) Auch ich bin nur interessierter Laie - bzw. zumindest im Sinne des Wortes Amateur.

Der Stein des Anstoßes war dabei mein Webseiten-Projekt, dass ich parallel zu meinem eigentlichen Studium verfolge:

Während ich mich mehr oder weniger fröhlich zwischen meinen Editorfenstern hin und her geclickt habe, in denen HTML, CSS und JavaScript zu bearbeiten und zu organisieren sind, hat sich mir der Gedanke förmlich aufgedrängt, dass es doch bedeutend einfacher wäre, wenn man statt in drei, sich inhaltlich überlappenden, die Schwächen der jeweils anderen ausgleichenden Programmiersprachen, den Code nur in einer einzigen Sprache verfassen müsste!

Hmmm... Da sagst du was... Aber bedenke: Von den drei genannten ist nur JavaScript eine Programmiersprache. HTML ist eine Markup Language (Auszeichnungssprache) und CSS ist ein Stylesheet. Wo ich dir Recht gebe: HTML KANN sich mit CSS überlappen - aber nur, wenn man schlechtes HTML schreibt. Inline-Styles und HTML-Eigenschaften wie width und Co. sind des Teufels. Sobald man CSS und HTML aber sinnvoll (wie es gedacht ist) trennt, offenbart sich, warum es sinnvoll ist, unterschiedliche Sprachen zu nutzen. Stell dir mal vor, du müsstest im HTML jedes Tabellenelement einzeln gleich formatieren. Und dann änder mal in einem Designvorschlag eine grundlegende Komponente. Der Aufwand potenziert sich.

Und zum Thema Schwächen: im punkto HTML gibt es imho keine Schwächen mehr, die von CSS/JavaScript ausgeglichen werden müssten. Als statische Auszeichnungssprache tut HTML genau das, was es soll: Statischen Inhalt strukturieren. Die Überschneidung zwischen CSS und JavaScript ist tatsächlich gegeben - das aber auch erst seit CSS3 Animationen erlaubt. Dass das der Fall ist hat aber auch gute Gründe - vielleicht komme ich später darauf zurück.

Okay, ich tus jetzt: Du könntest sagen, dass JavaScript auch in der Lage wäre, CSS und HTML zu ersetzen. Damit hättest du Recht. Es ist aber so, dass man, um mit JavaScript Elemente zu erschaffen, zunächst wirklich profunde HTML-Kentnisse benötigt. Außerdem ist es viel einfacher, statischen Inhalt wirklich statisch darzustellen, statt ihn dynamisch aufzubauen. Wenn ich eine Seite habe, in der die Überschrift und der Text immer gleich sind, dann ist es ungleich aufwendiger, diese nicht statisch sondern dynamisch zu erstellen. Stell dir die Ladezeiten eines Smartphones vor, wenn es das HTML nicht mehr statisch zum Interpretieren bekommt, sondern  zunächst über rechenaufwändiges Javascript erstellen und dann interpretieren muss. Wenn man also HTML als rein statische Sprache und JavaScript als rein dynamische Sprache versteht, dann überschneiden sich diese nicht mehr.

Zwischen CSS und JavaScript ist die Sache seit CSS3 problematischer. Natürlich könnte die Formatierung auch allein durch JS entstehen, da greifen dann aber die gleichen Argumente wie eben. Die Frage ist: Warum muss eine an sich statische Sprache (CSS) auf einmal dynamische Features beinhalten, wenn wir schon eine voll funktionstüchtige dynamische Sprache haben. Die Antwort ist einfach: JavaScript ist zu mächtig. JavaScript kann den Browser durch eine Endlosschleife zum Absturz bringen, JavaScript kann den Anwender mit Popup-Nachrichten und Dialogfenstern bombardieren, JavaScript kann den User auf ungewollte Seiten mit Malware umleiten und so weiter und so fort (einige der Missbrauchsmöglichkeiten werden inzwischen von Browserherstellern unterbunden bzw. mit Abbruchmöglichkeit für den User versehen - darauf kann man sich aber nicht verlassen). Kurzum: JavaScript muss deaktivierbar sein.

Vor CSS3 war es so, dass all die hübschen, modernen Navigationsmenüs per JS realisiert werden musste und der, der JavaScript aushatte, hatte halt ein hässliches Fallback. Wenn etwas schön, animiert und modern sein sollte, musste der Webentwickler über gute JavaScript-Kenntnisse verfügen. Jetzt ermöglicht CSS (das so gut wie nicht oder zumindest nicht einfach abschaltbar ist) einfachste dynamische Möglichkeiten. Und verdrängt damit JavaScript ein wenig. Der Vorteil liegt auf der Hand: Ermöglichung einfacher Dynamik, ohne Missbrauch zu ermöglichen. Es ist eigentlich wünschenswert, wenn das mächtigste der Tools (also JavaScript) nur dann ausgepackt werden muss, wenn seine Macht auch in vollem Umfang nutzbar sein muss.

Übrigens: Von allen drei Sprachen ist CSS auch mit CSS3 noch am unausgereiftesten / unfertigsten. Es gibt noch deutlichen Raum für elementare Funktionalitäten innerhalb des Rahmens oberhalb der Statik und unterhalb der Missbrauchsschwelle (Variablen, Pseudoklassen für "toggle"-Effekte, Stylen von Scrollbars etc...). Da wird sicher noch einiges kommen. Die Entwicklung von CSS läuft ja auch auf Hochtouren weiter.

Mir ist natürlich klar, dass die Situation wie sie ist, schlicht auf die historische und bis heute andauernde Entwicklung auf dem Gebiet zurück zuführen ist, aber nichtsdestoweniger stellt sich für mich als Amateur doch die Frage nach einer neutralen, davon unabhängigen Bewertung. Also die Frage, ob die Situation aus inhaltlichen Gründen, die mir aufgrund meiner Fachfremde verborgen geblieben sind, tatsächlich alternativlos ist, um mal ein Unwort zu bemühen, oder ob es nicht eine lohnenswerte Perspektive gibt oder wenigstens geben sollte, hier für mehr Einheitlichkeit zu sorgen?

Alternativ los ist das Ganze sicher nicht - aber dennoch ohne sinnvollere Alternative. Stell dir vor, du hast eine komplett zusammenhängende Seite mit den vereinten Möglichkeiten von HTML, CSS und Javascript, dazu noch Flash usw. usf. Nicht nur, dass es vollkommen utopischnist, einen Standard zu finden, der all das abdeckt und dann auch noch einfach zu lernen und effizient ist. Aber stell dir mal vor, wem und was das bezüglich Miasbrauch Tür und Tor öffnet. Da doch lieber ein modularer Aufbau, dessen Verwendung ab einer gewissen Mächtigkeit (JS, Flash...) vom User unterbunden werden kann.

Und wenn ich so darüber nachdenke, könnte man den Gedanken ja noch weiter verfolgen und fragen, wozu überhaupt dutzende verschiedene Programmiersprachen, die dauernd hin- und herübersetzt werden müssen, um irgendwie miteinander kompatibel zu sein?

Ich meine, wir reden alle mit Computern, richtig? :)

Nullen und Einsen!

Das stimmt - aber nicht bezogen auf die Websprachen HTML/CSS/JS. Bezogen auf richtige Programmiersprachen stimmt das alles. Und soll ich dir was sagen? Da kam schonmal jemand drauf. Du hast soeben Java neu erfunden - und stehst damit vor genau den Problemen, die Java daran hindern, sich großflächigst durchzusetzen. Java mangelt es an Effizienz, da es auf verschiedensten Systemen mit denselben kompilierten Dateien funktionieren muss. Die Computer sprechen nämlich auch nicht alle mit derselben Sprache, obwohl sie intern nur Nullen und Einsen kennen. Auf der Ebene von Nullen und Einsen ist nicht an Effizienz zu denken, man braucht immer Vermittlertools - und die sind dann wieder vom Betriebssystem etc. abhängig. Du siehst: Die Angelegenheit ist komplexer als man auf den ersten Blick denkt.

Warum also überhaupt Dateien in unterschiedlichen Formaten abspeichern, die danach erst mühsam auseinandergenommen und wieder zusammengesetzt werden müssen? Wäre es nicht sehr viel effizienter, wenn man den Übersetzungsprozess nur beim Schreiben oder Lesen des Codes durch Menschen bräuchte, und ansonsten alles direkt in einer einzigen Sprache verfasst wäre?

Auch hier: Das könnte man tun. Das würde aber bedeuten, dass jegliche Effizienz (auch speicherplatztechnisch) vor die Hunde geht. In einer idealen Welt mit unendlich großem Speicher und unendlich großer Rechenkapazität würde man das machen wie du vorschlägst. Wir sind aber unseren realen Restriktionen unterworfen und darauf angewiesen, Daten effizient zu speichern - und möglichst effizient ist das nur dann möglich, wenn ich die Vor- und Nachteile des jeweiligen Einsatzgebietes nutzen kann - wenn ich also für verschiedene Verwendungszwecke verschiedene Dateiformate zur Verfügung habe. Natürlich gibt es mit ZIP und Co. Kompressionen für alle Dateitypen. Die sind aber deutlich weniger effizient als die typspezifischen Kompressionen.

Letztlich ist doch ohnehin alles nur Mathematik! 2+2=4 gilt in jeder Übersetzung, oder nicht?!

Im Gegensatz zur Informatik bin ich in der Mathematik studierter Profi. Und ich kann dir sagen: Mathematik ist alles andere als 2+2=4. Im Körper F4 ist 2+2=0. In der Mathematik ist i=i+1 auch eine falsche Aussage. Informatik benutzt lediglich Aspekte der Mathematik. Und davon eigentlich auch nur das Teilgebiet der reelwertigen Numerik. Intern sind sogar nur natürliche Zahlen in Binärdarstellung realisierbar. Jede negative Zahl oder Kommazahl ist nur eine Illusion, die durch den Rechner aufwendig interpretiert werden muss. Ursprünglich wurde die Informatik erfunden, um Teile der Mathematik nachzubilden und einfache (!) Berechnungen zu automatisieren. Computer rechnen eben auch nicht 2+2=4 sondern 0100 + 0100 = 0010.  Alles andere muss dem Computer erst durch geeignete Sprachen beigebracht werden. Schon Multiplizieren ist für einen Computer ohne geeignete Zwischenvermittler eine ziemliche Herausforderung. Ganz zu schweigen von den elektronischen Mechanismen, die Computer überhaupt zum Addieren mit persistenten Zahlen befähigen.

Informatik ist immer, auf bestehenden Systemen aufzubauen. Und die bestehenden Systeme können die unterschiedlichsten Vor- und Nachteile besitzen. Einen ganzheitlichen Ansatz kann es da in einer realen Welt nie geben, weil man sich grundsätzlich auf ein bestimmtes Set an Prioritäten fokusieren muss.

Hat es mal einen Versuch gegeben, eine so angedachte universelle Programmiersprache zu entwickeln?

Wie gesagt - Java. Zumindest was die Lauffähigkeit unter unterschiedlichen Systemen angeht.

Und falls ja, woran ist es gescheitert? :D

An allen oben genannten Gründen.

Grüße,

RIDER

--
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller
ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[