Florian Cramer on Mon, 3 Feb 2003 00:50:02 +0100 (CET)


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [rohrpost] In bash ist Wahrheit (war: Nachtrag zum bootlab)


Danke an den anonymus für die interessante Rückmeldung!

> Das Wesen einer Maschine die Hardware? Das passt offensichtlich       
> nicht.  Eine kleine Umfrage unter Bekannten nach der differentia      
> specifica zwischen Macs und PCs bringt sicher nicht "G4/Pentium" aufs 
> Tablett, sondern "Ist schöner / hab ich auch im Büro".                

Klar, wenn Du die pragmatische und ästhetische Brille aufsetzt, und
nicht eine ontologische.

> Eben weil beim Sprechen über Computer-Wesen Ontologie-Emphase völlig 
> krude wäre, kann es nur um das gefühlte Wesen einer Bedienoberfläche 
> gehen. 

Einverstanden, wenn wir "gefühlt" noch um "gedacht" ergänzen. Es geht
nicht nur um Empfindung, sondern auch darum, daß man den Computer auf
intelligente oder sogar intellektuell elegante Weisen nutzen kann, die
Bedienoberfläche also dem schnellen Denken so wenig wie möglich im Weg
steht. Daß es dafür keine Pauschallösungen geben kann, unterschreibe ich
aber sofort.

> >regredieren heutige GUIs den Computer zu einem recht stupiden, nur
> >manuell bedienbaren Werkzeug.
>
> Im Gegensatz zu früheren Computern, wo man Lochkarten mit den Füssen  
> oder reinem Geist stanzte?                                            

Nein, diese Position (und auch die o.g. Ontologie) vertrete
ich nicht, wie aus meiner vorigen Antwort hoffentlich klar
geworden ist. Vielmehr: Im Gegensatz zu einem Login- oder
Hintergrund-Skript, das beim Rechnerstart automatisch ausgeführt wird
und in einem Rutsch erledigt, wozu man auf einem GUI zwei dutzend
Cursor-Feinpositionierungen und Mausklicks braucht. (Hier etwa: ssh-Keys
initialisieren, einen verschlüsselten Tunnel zum POP3-Server aufbauen,
alle E-Mail abholen und danach im 3-Minutentakt überprüfen und durch
Sortier- und Spamfilter schicken, diverse Nutzerprogramme mit neuen
Standardoptionen versehen und ggfs. starten...) Meine persönliche
Definition von Nutzerfreundlichkeit.

> Eigentlich sind die meisten Werkzeuge nur 
> manuell bedienbar. Aus gutem Grund.

Da war meine Wortwahl nicht ganz glücklich. Also probiere ich
es so: Ein Werkzeug ist dann gut, wenn es möglich wenig Handgriffe
erfordert bzw. redundante/stupide Handarbeit eliminiert. Computer sind
dafür bestens geeignet, es sei denn, sie stellen keine schlechten Interfaces in den Weg.

> >Der springende Punkt eines Computerinterfaces (zu denen ich auch
> >Programmiersprachen zähle) ist für mich deshalb nicht die Abstraktion
> >vom Maschinencode, sondern die Frage, ob es algorithmisch 
> >programmierbar
> >bzw. Turing-vollständig ist.
> 
> Unglücklicherweise entfesselt Turing-Vollständigkeit die ganze 
> Komplexitätshölle der theoretischen Informatik. Nicht nur, dass sich 
> nicht alles in endlicher Zeit machen lässt, von den Sachen, die sich in 
> endlicher Zeit machen lassen, sind nicht unbedingt viele gerade sehr 
> sinnvoll. 

D'accord, auch Kittler schreibt dies in seinem Aufsatz "Hardware, das
unbekannte Wesen". Am Begriff der Turing-Vollständigkeit interessiert
mich aber nicht die Idee n-komplexer Berechnungen, sondern ganz
simpel und pragmatisch die Unterscheidung von Computersprachen bzw.
Softwareumgebungen, in denen man programmieren kann und solchen, mit
denen das nicht oder nur begrenzt geht; also BASIC/Pascal/C/Java/Unix
Shell/Perl/Python/LISP/Logo... versus z.B. HTML und eben die heute
üblichen GUIs. (Auch das Ur-Smalltalk-GUI von Alan Kay erzwang einen
medialen Bruch von der graphischen Oberfläche zur Texteingabe, wenn
man programmieren wollte. Die Vorstellung, daß Programmieren eine
esoterische Insider-Angelegenheit sei, enstand erst durch diese
künstliche Grenzziehung zwischen "Bedienung" und "Programmierung". Gegen
objektorientierte Programmierung könnte man noch eine Menge anderer
Dinge sagen - z.B. daß sie Software in "Dependency-Höllen" treibt und,
wie von Windows bekannt, instabil macht - so daß sich mir jedesmal die
Fußnägel aufrollen, wenn Kay von Medientheoretikern als "Vater des
modernen Computers" tituliert und mit Kunsthochschul-Preisen versehen
wird.)

> Und wenn man Computer als Werkzeuge begreift, frage ich mich, 
> warum es regressiv sein soll, aus dem weiten Raum des Machbaren das 
> Sinnvolle vorzuselektieren. 

Die Frage ist nur, wer selektiert, was "sinnvoll" ist, und wem dies
vorgeschrieben wird. 

Ein Beispiel für mitlesende Nicht-Unixer: In GUIs läßt man sich den
Inhalt eines Dateiverzeichnisses per Ordner-Fenster anzeigen, auf der
Unix-Kommandozeile mit dem Befehl "ls". Will man die Dateiliste nicht
nur auf dem Bildschirm betrachten, sondern auch ausdrucken, muß man in
einem GUI darauf hoffen, daß der Programmierer ein Druckmenü in den
Dateimanager eingebaut hat. Wenn nicht, hat man Pech gehabt (oder muß
Screenshots anfertigen und ausdrucken, was aber spätestens dann nervt,
wenn der Bildschirm zu klein ist, um alle Dateien anzuzeigen). In Unix
lautet der Druckbefehl "lpr".  Um die Dateiliste auszudrucken, muß
lediglich die Ausgabe von "ls" an "lpr" geschickt werden, und zwar
so: "ls | lpr". Alternativ kann man die Ausgabe auch in eine Textdatei
sichern: "ls > dateiliste.txt".

Will ich als Benutzer die Ausgabe von "ls" als HTML mit Hyperlinks für
jede Datei codieren, muß ich dafür nicht "ls" umprogrammieren und mit
einem HTML-"Feature" versehen, sondern lediglich seine Ausgabe durch 
einen Suchen-und-Ersetzen-Filter schicken: 
ls -1 | sed -e "s/.*/<a href=\"&\">&<\/a><br>/" > dateiliste.html

In einem GUI müßte der HTML-Export als Funktion extra einprogrammiert
werden, und um je mehr solcher "Features" es wüchse, desto
unübersichtlicher und resourcenhungriger würde es werden, wie von
Macintosh, Windows, KDE und Gnome hinlänglich bekannt.

> Genau darum geht es bei Werkzeugen: Ein 
> Ding zu haben, das eine Aufgabe erfüllen kann. Ein wirklich 

...und in der Kombination mit anderen Werkzeugen und sinnvollen
Kontrollstrukturen (wie Schleifen, Pipes etc.) multifunktional zu
werden.

> Allerdings, das freimütig zugegeben: WAS uns die heutigen 
> Point&Click-GUIs anbieten, wozu sie Werkzeuge sind, ist scheusslich: 
> Büro, Büro. Ordner und Mülleimer und Schreibtische und Dokumente und 
> all dieser graue lebensfeindliche Altherrenkram. Büroknechtschaft ist 
> angesagt, unsere GUI-Hersteller, ganz egal wie frei oder GPL, lassen 
> keinen Zweifel aufkommen. Desktopmetapher und kein Ende abzusehen. Wo 
> bleiben die guten Alternativen?

Wie wäre es mit einem System, mit dem die Nutzer auch ihre eigenen
Metaphern und Werkzeugkombinationen bilden könnten, egal ob in
Gestalt der Unix-Kommandozeile oder nach dem Modell graphischer
Programmierumgebungen wie z.B. den Musik-Kompositionssystemen MAX und
PD?

> >Zuviel Abstraktion (Beispiel Java) führt zu absurd lahmer, 
> >speicherfressender
> >Bloatware, zuwenig (Assembler) zu nichtportablem, CPU-proprietärem
> >Code. Wäre alle heutige PC-Software in x86-Assembler geschrieben,
> >würde sie zwar schneller laufen.
> 
> Veto. Nicht mal das. Wenn sie je fertig würden, wären sie so 
> bugverseucht, dass sie nur sehr kurz schneller laufen würden.

Es sei denn, es handelt sich um _sehr_ überschaubare Programmgrößen. Zu
einem gewissen Grad gilt, was Du beschreibst, ja schon für den
Mainstream von in C und C++ geschriebener Software.

> Es gibt die Abstraktion von der Hardware nur beim Erzeugen des Codes, 
> nie bei der Ausführung. 

Einspruch. Ein GUI-Programm z.B. malt auf dem Window-Server
(Windows: GDI, MacOS X: Quartz, Linux: X11), der von der Hardware
der Graphikkarte abstrahiert, indem er sich als virtuelle
Einheits-Graphikkarte verhält. Das ganze Betriebssystem ist eine
Abstraktionsebene von der Hardware, die der Software einheitliche (und
somit vom individuellen abstrahierte) Input-/Output-Kanäle zur Verfügung
stellt. Sobald der Code ausgeführt wird, passiert er alle Schichten des
Betriebssystems und seiner aufgesattelten Software-Layer und wird nach
unzähligen Umcodierungen schließlich an die Hardware durchgereicht. Nur
dies erlaubt es ja, z.B. eine Audiodatei auf jeder vom Betriebssystem
unterstützten Soundkarte auszugeben, und zwar egal, mit welchen Chips
sie arbeitet.

Im Falle einer JVM abstrahiert die Laufzeitumgebung nicht nur von der
Hardware, sondern auch vom individuellen Betriebssystem und vom GUI,
so daß z.B.  Graphikausgaben erst auf das Graphik-Interface der JVM
(also Swing/AWT) geschickt werden, dann von JVM in die Routinen für den
Graphik-Abstraktionslayer des drunterliegenden Betriebssystems und erst
dann in die Hardwarebefehle der Graphikkarte übersetzt werden.


> den APIs. Aber das nur nebenbei. Abstraktion ist ohnehin kein Argument, 
> weil GUIs keine Abstraktion von der Hardware sind, sondern ein 
> Ausschnitt aus deren Funktionalität.

Das hängt davon ab, ob man als GUI nur die Bedienoberfläche
betrachtet oder auch das graphische Subsystem. Legt man zweitere
Definition zugrunde, so abstrahieren alle mir bekannten GUIs von der
Graphikausgabe und in den meisten Fällen (MacOS und Windows) auch
von der Druckerausgabe, so daß Programme keine Hardware-spezifischen
Graphik- und Druckroutinen mehr enthalten müssen. Für viele Anwendungen
(Desktop Publishing z.B.) ist diese Abstraktion auch sehr nützlich.

> >Die Regression heutiger Interfaces zeigt sich nicht in der Abstraktion
> >der Software von der Hardware, sondern vielmehr darin, daß das
> >Benutzerinterface die Sprache des Computers auf ein vorsprachliches
> >Zeigen auf Objekte reduziert.
> 
> Nur mit Zeigen ist kein Computer zu bedienen. Deswegen neigen die 
> Dinger dazu, Tastaturen zu haben und Beschriftungen an den 
> Ordnersymbolen, also Elemente, die so sprachlich sind, dass sie auf 
> Buchstaben basieren. Aber selbst wenn da keine Buchstaben wären: 
> Vorsprachlich sind GUIs nicht. Sie sprechen eben, anders als die pure 
> Mathematik turingvollständiger formaler Sprachen, nicht alle Sprachen 
> gleichzeitig, sondern nur ihre eigene, graphische.

...die aber - in ihrer heutigen Mainstream-Form - restringiert ist,
weil sie keine anständigen syntaktischen Verknüpfungen kennt.  (Ok, ich
korrigiere "vorsprachlich" zu "babysprachlich", was ich auch so gemeint,
aber nicht präzise genug ausgedrückt hatte.) Das Problem ist, daß diese
vermeintliche Vereinfachung in Wirklichkeit zu Komplexitätswucherungen
führt. Weil es keine fähige Syntax gibt, mit der man wenige Wörter
(bzw.: Desktop-Objekte) für alle möglichen Anwendungsfälle kombinieren
kann, muß man für jeden Anwendungsfall ein neues Wort (bzw. Objekt)
erfinden.

Dieses Dilemma des objektorientierten Interfaces wurde schon vor
fast 300 Jahren von Jonathan Swift erfaßt und im Lagado-Kapitel von
"Gulliver's Travels" wie folgt beschrieben:

   Viele der Gelehrtesten und Weisesten sind jedoch
   Anhänger des neuen Projekts, sich mittels Dingen zu äußern; das
   bringt nur die eine Unbequemlichkeit mit sich, daß jemand, dessen
   Angelegenheiten sehr umfangreich und von verschiedener Art sind, ein
   entsprechend größeres Bündel von Dingen auf dem Rücken tragen muß,
   falls er es sich nicht leisten kann, daß ein oder zwei starke Diener
   ihn begleiten. Ich habe oft gesehen, wie zwei dieser Weisen unter
   der Last ihrer Bündel fast zusammenbrachen, wie bei uns die
   Hausierer. Wenn sie sich auf der Straße begegneten, legten sie ihre
   Lasten nieder, öffneten ihre Säcke und unterhielten sich eine Stunde
   lang; dann packten sie ihre Utensilien wieder ein, halfen einander,
   ihre Bürden wieder auf den Rücken zu nehmen, und verabschiedeten
   sich.

   Für kurze Gespräche aber kann man das Zubehör, um sich hinlänglich
   auszustatten, in den Taschen und unter den Armen tragen, und zu
   Hause kann man nicht in Verlegenheit kommen. Deshalb ist auch das
   Zimmer, wo Leute zusammenkommen, die diese Kunst ausüben, voll von
   allen griffbereit daliegenden Dingen, die erforderlich sind, um
   Material für diese Art künstliche Unterhaltung zu liefern.
   [...]

> Das Klicki-Bunti-Argument war mir nie einsichtig. Wir sind optische 
> Tiere, keine aufrecht gehenden Taschenrechner. Schon eine simple Sache 
> wie das Verschieben eines Verzeichnisses können wir, egal wie sehr wir 
> unseren Unixprompt mögen, nicht anders denken denn als ein 
> "Verschieben", ein räumliches Bewegen von A nach B. 

...weswegen sie ja auch auf dem Unixprompt "mv" für "move" heißt (man
sie als eingefleischter Unixer aber dennoch mit dem Umbenennen von
inodes assoziiert). Gegen Buntheit und Klicken ist nichts zu sagen,
nur gegen Syntax-Verkrüppelungen in ihrem Namen. 

Warum sollte ein Interface jemanden daran hindern, die räumliche
Vorstellung vom Verschieben z.B. mit der des Suchens logisch zu
verknüpfen, etwa durch ein Verschieben aller Dateien, die größer sind
als 1 Megabyte und in den letzten 24 Stunden verändert wurden, in einen
Ordner "xy":

mv `find -mtime 1 -size +1000k` xy/

> Den Turingmaschinenfreund möchte ich sehen, der beim Verschieben
> eines Verzeichnisses darauf besteht, ausschliesslich an
> Dateizuordnungstabellen zu denken.

S.o. - Der Turingmaschinenfreund könnte aber auf die Idee kommen,
die o.g. Aktion wiederholt in bestimmten Intervallen und unter
bestimmten Bedingungen auszuführen, und dafür braucht er algorithmische
Kontrollstrukturen, vulgo eine Programmiersprache. (Auch wenn man sie
nicht so nennt und sie nicht als Schriftsprache auf dem Bildschirm
erscheint.)

> Die interessante Frage ist doch: Muss man, um mit Computern zu
> arbeiten, /sehen/, dass algorithmisch Instruktionen ausgeführt werden,
> um nicht regressiv zu sein?

Nein, aber man muß die Algorithmen zumindest als Option auch selber
bauen dürfen, anstatt nur vorgefertigte Algorithmen als Blackbox
"nutzen" zu dürfen. Und dafür sollte im Interface keine künstliche
Schranke eingebaut sein. Das Interface selbst sollte den Bau von
Algorithmen ermöglichen, und zwar so, daß "Programmierung" eine
quasi natürliche Erweiterung der "Bedienung" ist. Mit klassischer
Schriftsprache, die nunmal syntaktisch besonders ausgefeilt ist und
Abläufe gut abstrahieren kann, geht dies - siehe Unix oder z.B.
LISP-Maschinen - zwar besonders einfach, effizient und elegant; aber das
schließt ja andere Ansätze nicht aus.

Mit der LOGO-Programmiersprache gibt es z.B. ein gutes Konzept,
und in alten Homecomputer-Zeiten war selbst BASIC keine Hürde für
Computerlaien. Ich erinnere mich gut an Computerabteilungen von
Kaufhäusern in den 1980er Jahren, in denen nachmittags Kinder
herumhingen und die ausgestellten C64, Atari 800XL, ZX Spectrum (wie
sie jetzt gerade in jodis Berliner Ausstellung zu sehen sind) und
MSX-Computer per BASIC bunte Graphiken generieren ließen. Diese Kinder
waren keinen Deut gebildeter, klüger oder sozial privilegierter als
jene, die heute in denselben Abteilungen Konsolenspiele spielen.

Das Problem ist, daß heutige Mainstream-Benutzerinterfaces keine simplen
Programmiermöglichkeiten bieten. Es gibt nur in sich abgeschlossene
Programmierumgebungen, die einem beim Maßschneidern und Verbessern der
Betriebssystemumgebung, mit der man täglich arbeitet, wenig oder gar
nicht helfen.

> Ist es nicht weit interessanter, Sachen zu beschreiben, die keine 
> Algorithmen sind, und trotzdem kommt am Ende ausführbare Software 
> heraus? Wie kriegt man Übersetzer hin, die die Art, wie Menschen 
> Probleme lösen, in Computercode übersetzen, anstatt einfach von den 
> Menschen zu verlangen, in Perl (oder bash) zu denken? Zugegeben, keine 
> besonders originellen Fragen.

Ich halte sie für nicht wirklich lösbar. Formale Sprachen unterscheiden
sich nun einmal von nichtformalen Sprachen wie Deutsch. Ich finde es
nicht hilfreich, dies zu kaschieren und den Computer pseudo-menschlich
agieren zu lassen (wie etwa Eliza oder ein programmgewordenes Ärgernis
wie Microsoft Word, das mir hartnäckig unterstellt, ich wolle "Fontäne"
statt "Fontane" schreiben). Was aber nicht heißt, daß man formale
Sprachen nicht so konstruieren kann, daß sie für Menschen gut verwendbar
sind. 

(Und wer glaubt, Assembler sei die "Sprache der Maschine", ist sowieso
gründlich auf dem Holzweg. Es ist nur eine arbiträre Programmiersprache,
die die Ingenieure des jeweiligen Chipherstellers entworfen und mit
der Hardware verdrahtet haben. x86-Assembler z.B. korrespondiert mit
der internen Architektur heutiger Intel- und AMD-Chips schon seit
langem nicht mehr und ist bloß eine Abstraktionsschicht, die die Chips
kompatibel zu ihren Vorgängern macht).

Gruß,

-F
-- 
http://userpage.fu-berlin.de/~cantsin/homepage/
http://www.complit.fu-berlin.de/institut/lehrpersonal/cramer.html
GnuPG/PGP public key ID 3200C7BA, finger cantsin@mail.zedat.fu-berlin.de
-------------------------------------------------------
rohrpost - deutschsprachige Liste zur Kultur digitaler Medien und Netze
Archiv: http://www.nettime.org/rohrpost http://post.openoffice.de/pipermail/rohrpost/
Ent/Subskribieren: http://post.openoffice.de/cgi-bin/mailman/listinfo/rohrpost/