Programme in der Technologie (also nicht im Theater oder in der Politik)

Programmierbare Maschinen müssen programmiert werden, damit sie ihre Funktion erfüllen. Ohne Programmierung sind beispielsweise Computer unvollständig, ich bezeichne das entsprechende Halbfabrikat als “Hardware”. Die Hardware alleine kann ich als Computer sowenig brauchen, wie eine einzelne Schraube, die Bestandteil der Hardware ist. Zum Computer gehört, dass er programmiert ist. Die Programmierung und der Computer sind unter diesem Gesichtspunkt der Erfindung dasselbe. Ich kann also uneingeschränkt sagen, wann die Programmierung erfunden wurde. Eine andere Frage ist, ob die Erfinder der Computer deren Programmierung auch Programmierung nannten. Und eine noch andere Frage ist, wie die ersten Computer tatsächlich programmiert wurden.

Hardware ruft nach Software. Als Software erscheint in der Alltagssprache die Menge der Programme, die die Hardware zu einer funktionsfähigen Maschien machen. Mit dem Ausdruck Software bezeichne ich aber auch die programmierte Maschine unter dem Gesichtspunkt, dass die Funktion der Maschine in dem Sinne “soft” ist, als sie leicht zu ändern ist. Ich kann mit einen Klick aus einer Textbearbeitungsmaschine eine Buchhaltungsmaschine oder ein Spielzeug wie etwa einen Flugsimulator machen. Während die Maschine ganz leicht in eine ganz andere Maschine verwandelt werden kann, gilt das natürlich für Programme keineswegs. Schon kleine Änderungen an einem Programm geben sehr viel Arbeit.

Ein Computer ist also “Software” wie eine Black-and-Decker, die sich verändert, wenn man statt einem Bohrer eine Schleifscheibe einspannt. Und wie die Black-and-Decker erst zu gebrauchen ist, wenn das Werkzeug drauf ist, so ist auch der Computer nur zu gebrauchen, wenn er programmiert ist. Ein Programm ist in diesem Sinne also keine “Software”, sondern wie die Hardware ein Halbfabrikat der Software. Und als Halbfabrikat ist das Programm selbst Hard(work)ware, was ich eben am Aufwand erkennen kann, der zu leisten ist, wenn ich ein Programm herstellen oder ändern will. Aber ein Programm ist ach in einem eigentlichen Sinne Hardware. Ich komme darauf zurück.

Von eigentlicher Software spreche ich bei der Black-and-Decker, die ich mit sehr wenig Aufwand umfunktionieren kann, nicht, weil ich bei ihr das jeweilige Werkzeug austausche, das den Sinn der Maschine repräsentiert, während ich beim Computer nicht die Maschine, sondern die Maschienensteuerung verändere. Wenn ich meinen Computer von einer Textbearbeitungs in eine Buchhaltungsmaschine verändere, verändere ich die Steuerung, ich setzte keinen anderen Bildschirm drauf. Von eigentlicher Software und Programmen spreche ich in relativ zur Steuerung von Automaten. Das Programm widerspiegelt das Kriterium “explizite Regelung“, mit welchem ich Maschinen und eigentliche Automaten unterscheide.

Als Steuerung kann ich auch primitive Mechanismen auffassen. Sehr anschaulich ist die “Steuerung” bei Spieldosen, also bei einer Art
primitiver Musik”automaten”, bei welchen Stiftchen auf einer Walze bestimmte Melodien bewirken. Man kann diese Automaten für bestimmte Melodien programmieren, indem man die Stiftchen auf der Walze entsprechend anordnet. Nicht viel weniger anschaulich sind die Lochkarten-Maschinen, die auf verschiedene Lochmuster reagieren. Der Webstuhlbauer Jacquard hat bereits um 1800 entdeckt, dass man entsprechend konstruierte Webstühle mit Lochkarten so “programmieren” kann, dass bestimmte Stoffmuster gewoben werden. Diese Beispiele zeigen, dass man zur Programmierung einer Maschine keine Programmiersprache – und insbesondere auch keine “0”/”1″-Sprache – braucht.

Bei technologisch entwickelten Steuerung, bei welcher ich eigentliche Programme verwende, unterscheide ich Daten und Programme. Ueberdies beruhen solche Steuerungen auf Fallunterscheidungen, die in den Programmen als if-then-Formulierungen erscheinen. Ich will aber zunächst anhand der primitiven Steuerung einer Spieldose über den materiellen Charakter des Programmes nachdenken. Die Melodie der Spieldose wird bestimmt durch die Anordnung der Nocken auf der Walze. Die Walze muss also in einer ganz bestimmten Form hergestellt und mithin materiell sein. Die Nockenwalze passt zu einer Konstruktion mit Tonzungen, die durch die Nocken in Schwingung versetzt werden. Es gibt auch Spieldosen, die mit Lochscheiben gesteuert werden und natürlich in sehr viele Varianten Lochkarten. In all diesen Fällen geht es um die Anordnung der Löcher analog zur Anordnung der Nocken auf der Walze. Jede Lochkarte muss also in einer ganz bestimmten Form hergestellt und mithin materiell sein. Die

Lochkarten verlangen einen anderen Steuerungsmechanimus, auch da gibt es sehr verschiedene Varianten. Bei Jaquards Webstuhl werden die Lochkarten mit Nadeln “gelesen”, die durch ein Loch fallen – oder wo kein Loch ist eben nicht -, bei elektrischen Lochkartenlesern wird durch ein Loch ein elektrischer Kontakt erzeugt.

Schliesslich kann das Programm auch als Text geschrieben werden. Dabei wird eine Graphitstruktur anstelle von Löchern “gelesen”, wobei die Graphitstruktur genau gleich wie die Nockenwalze oder die Lochkarte in einer ganz bestimmten Form hergestellt und mithin materiell sein muss. Und natürlich verlangen Graphitstrukturen einen anderen Steuerungsmechanimus als Lochkarten, auch da gibt es sehr verschiedene Varianten, wie etwa einen Scanner. Und ganz zum Schluss kann der Programm-Text natürlich auch mit einem Computer geschrieben werden. Wenn ich auf einen Harddisk schreibe, magnetisiere ich – bei einer entsprechenden Konstruktion mit einem Schreibkopf bestimmte Stellen in der Eisenoxidschicht auf der Disk.

Wie auch immer, das Programm stelle ich als materiellen Teil der Maschine her. Welche Form das Programm hat, hängt von der Konstruktion der Steuerung ab. Aber es ist in jedem Fall eigentliche Hardware, mit welcher ich die Maschine zur Software machen kann. Im entwickelsten Fall sage ich, dass ich das Programm schreibe, weil ich einen Text herstelle. Was es mit der Programmiersprache auf sich hat, werde ich im nächsten Beitrag erläutern.

Advertisements
Post a comment or leave a trackback: Trackback URL.

Comments

  • PeterB  On March 25, 2012 at 1:59 PM

    Hi Rolf,

    schöner Artikel – gefällt mir gut! Hier noch einige Ergänzungen:
    1) M.E. ist Hardware “ohne” Software möglich – und zwar dann, wenn die “Programmlogik” bspw. direkt in Schaltkreise umgesetzt wird, so wie das
    im Atari-Spielklassiker “Breakout” in den 1970er Jahren der Fall gewesen ist:
    “Das erste Atari-Breakout-Spiel war wie viele frühe Videospiele noch kein echtes Computerspiel, da es sich nicht um einen Computer mit einem darauf ablaufenden Programm handelte, sondern um einen das Spielprinzip direkt umsetzenden elektronischen Schaltkreis.” [http://de.wikipedia.org/wiki/Breakout_(Computerspiel)].
    Allerdings wäre das eine “Prä-Computer-Hardware”.

    2) Zudem ist die Grenze zwischen Hard- und Software “nicht fest” (systemtheoretisch kann hier mit der Unterscheidung “notwendig – kontingent” kontextrelativ operiert werden):
    a) Softwarefunktionen können in Hardware direkt implementiert werden (analog zu Punkt 1)
    b) Es gibt Software- / Hardware-Emulatoren (http://de.wikipedia.org/wiki/Emulator#Hardware-Emulatoren) und Virtualisierungslösungen bei Betriebssystemen:
    “Werden die Betriebssysteme häufig gleichzeitig genutzt, bietet sich u.U. eher eine Virtualisierungs-Lösung an. Zu unterscheiden sind hierbei das Host- und Gast-System. Ersteres ist tatsächlich physisch auf der Hardware installiert. Innerhalb dessen kommt eine Virtualisierungssoftware wie bspw. VirtualBox oder KVM zum Einsatz. Diese emuliert für das Gast-System die gesamte erforderliche Hardware oder bietet durch ein Sicherheitssystem direkten Zugriff auf die tatsächlich vorhandene Hardware des Computers” [http://de.wikipedia.org/wiki/Linux-Distribution#Virtualisierung]

    3) Programme haben m.E. einen “dual-use”-Charakter (den wir einst in der Luhmann-Liste schon festgestellt haben):
    a) Sie fungieren als “maschinelle Steuerungsanweisungen” – wenn sie denn von Computern ausgeführt werden -> hier käme Dein Symbol-Ansatz wohl zum Tragen
    b) Sie haben “Text-Charakter” (den ich freilich auf “Form-Beobachtung und soziale Anschlüsse beziehe -> zumindest in dieser Beziehung unterscheiden sich Programmtexte nicht von sonstigen Texten)

    4) Beide Aspekte in 3) verweisen auf “Operationen”: Programme fallen nur “operativ” an:
    * Sei es, daß sie von Computer(n) [= single processor, multi-processor in einem Host-Rechner bzw. Multi-Host-Rechner = distributed computing] exekutiert werden (maschinelles Operieren)
    * Sei es, daß sie von Form-Beobachtern (Bewußtseinsprozessoren und als soziale Anschlüsse in der Kommunikation) operativ erzeugt werden (gelesen / geschrieben)
    * Eine weitere Möglichkeit: sie werden in Computernetzwerken als Daten übertragen

    5) Die Programm-Daten-Unterscheidung erhöht den “Freiheitsgrad” nicht nur mit Blick auf Hardware (s.o. Punkt 1: direkte Umsetzung in Schaltkreise), sondern auch mit Blick auf “re-entries” sowie die Unterscheidung “kontingent / notwendig”:
    a) Re-entry 1 – Daten (Programme / Daten): Programme können als Daten angesehen werden, die als “notwendig” (= relativ invariant) ausgezeichnet sind. Während Daten als “kontingente” (= variable) Daten aufzufassen sind.

    b) Re-entry 2 Programme (Programme / Daten) bei der Meta-Programmierung: Hier können Meta-Programme andere Programme (oder sich selbst!) als “Daten” verarbeiten (nur introspezieren oder ggf. auch modifizieren, indem der Programmablauf beeinflußt bzw. sogar der Quelltext verändert werden). Das heißt: Notwendige Daten als Programme werden ihrerseits “kontingent” gesetzt.

    Herzlich
    ~Peter

  • kybernetiks  On March 25, 2012 at 2:42 PM

    hmmm … gefällt mir, dass es Dir gefällt :-))
    den “dual-use” will ich als nächstes als sogenannte Programmiersprache ins Spiel bringen.
    Wie ich Deine Unterscheidung notwendig/kontingent hier anbringen könnte, ist mir noch nicht recht klar, weil ich ja Hard- und Software nicht im Sinne eines Begriffspaares unterscheide. Als Software erscheint mir eine Hardware, deren Funktion “soft” (also durch einen kleinen und vorgesehenen Eingriff in die Steuerung, etwa ein Klick) gewechselt werden kann.

    > einen das Spielprinzip direkt umsetzenden elektronischen Schaltkreis

    auch das verstehe ich noch nicht so recht, das müssen wir techno-Logisch auch noch etwas auseinander nehmen – ich werde gelegentlich einen Vorschlag machen, wenn Du nicht schneller bist.

    • Peter Bormann  On March 25, 2012 at 3:11 PM

      Nur noch kurz (ich muß jetzt erst einmal etwas essen und dann “richtig” programmieren):
      “Als Software erscheint mir eine Hardware, deren Funktion “soft” (also durch einen kleinen und vorgesehenen Eingriff in die Steuerung, etwa ein Klick) gewechselt werden kann”
      Aber entspricht auch das nicht der Unterscheidung “notwendig (hier: invariant) / kontingent (hier: variabel)”? Also:
      * Hardware = (relativ) invariante (= notwendig gesetzte) HW (“relativ” bedeutet: Bauteile sind austauschbar)
      * Software = Hardware, die (relativ) variabel (= kontingent) ist -> wg. direkterer Veränderungsmöglichkeiten [und hier wären nicht nur die Optionen “innerhalb” eines exekutierten Programms, sondern auch die Möglichkeiten anzuführen, die die “Meta-Programmierung” offeriert].

      > ich werde gelegentlich einen Vorschlag machen, wenn Du nicht schneller bist.
      Du produzierst so viel, daß ich kaum mit dem Schreiben eigener Blog-Posts hinterherkomme. So, don`t worry: you`ll be always faster than yours truly :-)
      CU Peter

      • kybernetiks  On March 25, 2012 at 4:04 PM

        variabel/nicht variabel (relativ) scheint mir eine andere Unterscheidung als notwendig/kontingent – aber vielleicht nur mir.
        Und variabel/invariabel würde für mich schon gehen, aber ich meine, dass meine Formulierung noch enger (weniger abstrakt) ist. Wir werden noch sehen.
        – Nobody was faster (S. Leone)

        • Peter Bormann  On March 26, 2012 at 8:49 PM

          “Nobody was faster (S. Leone)” – außer Lucky Luke: der Mann, der schneller schießt, als sein Schatten :-)

  • mariusmeinhof  On March 29, 2012 at 8:41 PM

    Ein verspäteter Kommentar dazu: Ich stimme zu, dass die hier vorgestellte Unterscheidung Hardware/Software nicht mit Notwendig/Kontingent gleichgesetzt werden sollte:
    M.W. kann bei Luhmann alles (auf diesen Aspekt hin betrachtet) entweder als Notwendig oder Kontingent beobachtet werden, und nur als eines von beidem – wer z.B. etwas als “Notwendig” beobachtet, unterstellt in dem Moment, dass es nicht “Kontingent” sei.
    Eine solche Beziehung wurde für Hardware / Software in dem Text nicht unterstellt. Vielmehr schien es mir eine eher graduelle Unterscheidung: Software ist eben “softer” als Hardware – aber auch Hardware kann u.U. mit mehr Mühe geändert werden.
    Kulturwissenschaftlich interessant wäre aber m.E. die Frage, ob und inwieweit beim alltäglichen Umgang mit Technik “Hardware” mit “Notwendig” gleichgesetzt wird – und auch im öffentlichen Diskurs, etwa in den zahlreichen Metaphern, in denen irgend etwas (z.B. der Körper, das Gehirn etc.) als “Hardware” bezeichnet wird.

Trackbacks

  • […] ein, dass sein Schaltungszustand ganz bestimmte Sequenzen durchläuft. Als primitivste Form eines Programmes betrachte ich die Nockenwalze einer Musikdose. Wenn ich eine solche Nockenwalze herstelle, schreibe […]

  • By Die Tätigkeit der Ingenieure « kybernetics on April 21, 2012 at 11:03 AM

    […] Texte von E. Dijkstra und C. Hoare, zwei Taylors der Informatik, die erkannt haben, dass Programmieren “wissenschaftlicher Behandlung und Darlegung zugänglich ist” und damit ein […]

Feedback ist erwünscht!

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: