Difference between revisions of "Wie denken Informatiker"

From ThorstensHome
Jump to: navigation, search
(Rekursion)
(Schichtendenken)
 
Line 82: Line 82:
  
 
Das ist doch in der Informatik genauso. Wenn du Mails uebermittelst, wurden diese vielleicht von voellig unterschiedlichen Computern erstellt, die die Netzwerk-Signale voellig unterschiedlich kodieren. Jedoch das Ergebnis, die Mail in Buchstaben von A bis Z, muss identisch sein. Ansonsten ist das Mail-Programm fehlerhaft.
 
Das ist doch in der Informatik genauso. Wenn du Mails uebermittelst, wurden diese vielleicht von voellig unterschiedlichen Computern erstellt, die die Netzwerk-Signale voellig unterschiedlich kodieren. Jedoch das Ergebnis, die Mail in Buchstaben von A bis Z, muss identisch sein. Ansonsten ist das Mail-Programm fehlerhaft.
 +
 +
Informatiker leben davon, dass sie Komplexitaet reduzieren, indem sie Aufgaben in Schichten einteilen. Im Idealfall erfuellt jede Schicht eine Aufgabe und wird von einem Programm repraesentiert. Das Programm ist dann auswechselbar gegen andere Programme, die dieselbe Schicht betreffen. Beispielsweise ist die Kommunikation zwischen zwei Computern in sieben Schichten eingeteilt, von denen sich eine darum kuemmert, dass ein Datenpaket wieder uebertragen wird wenn es nicht oder nicht richtig angekommen ist.
  
 
= Die Tomaten =
 
= Die Tomaten =

Latest revision as of 15:22, 20 July 2015

  • Meta-Ebenen
    • Escaping
  • Rekursionen
  • Der Mensch als der virtualisierende Affe
  • strong typecasting: "Die Gewinner werden nächste Woche im Schaufenster ausgehängt"
  • Lokalitaet

Contents

Einen Tod musst du sterben

Du kannst nicht jedermanns Freund sein. Entweder du gehoerst zu den 100%igen oder zu den Kompromissbereiten. Entweder du bist bodenstaendig oder romantisch. Zuversichtlich oder abschaetzend. Du kannst nicht zu den einen gehoeren und zu deren Gegenteil. Wenn du es doch versuchst, werden viele dich als Opportunisten sehen und gerade dann wirst du wenig Freunde haben. Dieses Phaenomen, dass du dich entscheiden musst, gibt es in der Informatik zuhauf und man nennt es dort "einen Tod musst du sterben". Ein Programm kannst du auf Vollstaendigkeit optimieren oder auf Einfachheit. Beides zusammen geht, aber eben nur bis zu einem gewissen Ausmass. Ein IT-Projekt kannst du auf Vollstaendigkeit trimmen oder auf Kuerze oder auf Vorhersagbarkeit. Einen Tod musst du sterben.

Nummernschilder

Neulich habe ich mir ein Auto gekauft, und im Autohaus konnte ich mir ein Nummernschild aussuchen. Ich habe verschiedene Vorschlaege gekriegt, welche Nummernschilder noch frei sind und konnte mich per Mausklick fuer eines entscheiden.

Stell dir mal vor, du willst so ein Programm schreiben. Da kommen dann von ueberall im Landkreis Anfragen, ob dieses und jenes Kennzeichen noch frei ist. Ein grosses Problem entsteht, wenn ein Nummernschild zwei Autos zugeteilt wird. Dann kann der eine Autofahrer eine Bank ueberfallen und dem anderen wird es in die Schuhe geschoben. Dies zu verhindern, ist keine triviale Sache. Nehmen wir mal, du machst nichts weiter als ein Programm zu schreiben wie das hier:

1. Lese Nummernschild-Anfrage
2. stelle fest, ob bereits vergeben
3. wenn nicht, erlaube die Nummernschildvergabe und trage Besitzer und Nummernschild in die Datenbank ein

Das wird nicht gehen, denn wenn zwei Kunden gleichzeitig das Nummernschild HD-AB 123 haben wollen, kann es sein, dass der Programmschritt (2) gleichzeitig durchlaufen wird. Zu dem Zeitpunkt ist das Nummernschild noch nicht vergeben und beide gleichzeitig laufenden Programm-Instanzen werden dasselbe Nummernschild vergeben. Diese Problematik wird race condition genannt - zwei "consumer" machen ein "Wettrennen" um eine "Ressource", das Nummernschild.

Rekursion

Ich liebte das Lied das mir meine Mutter vorsang:

Ein Hund kam in die Kueche, und stahl dem Koch ein Ei.
Da nahm der Koch 'nen Loeffel
Und schlug den Hund entzwei
Da kamen viele Hunde 
Und gruben ihm ein Grab
Drauf setzten sie 'nen Grabstein
Worauf geschrieben ward:
  Ein Hund kam in die Kueche, und stahl dem Koch ein Ei.
  Da nahm der Koch 'nen Loeffel
  Und schlug den Hund entzwei
  Da kamen viele Hunde 
  Und gruben ihm ein Grab
  Drauf setzten sie 'nen Grabstein
  Worauf geschrieben ward:

Offensichtlich ist dabei, dass es nie endet. Es enthaelt sich selbst. In der Informatik nennen wir das Rekursion - eine Funktion ruft sich selbst auf bis zu einer definierten Abbruchbedingung. Interssant ist dies zum Beispiel bei Baumstrukturen wie hierarchischen Listen:

Um diese Liste abzuspeichern, wird eine Funktion geschrieben, die zunaechst den Listpunkt abspeichert und dann alle untergeordneten Listpunkte wenn es welche gibt. Die Abbruchbedingung hier ist, dass es keine untergeordneten Listpunkte mehr gibt. Die Funktion aber zum Abspeichern eines untergeordneten Listpunkts ist die gleiche wie die zum Abspeichern eines uebergeordneten.

Ein echter Informatiker ist fasziniert von dem Reim ("ein Hund kam in die Kueche") weil es sich nicht nur wiederholt, sondern immer tiefer geht. Die erste Strophe ist einfach nur so da. Die zweite Strophe ist die Inschrift auf einem Grabstein in der ersten Strophe. Die dritte Strophe ist die Inschrift auf einem Grabstein in der zweiten Strophe, also die Inschrift auf einem Grabstein, der auf einem Grabstein zitiert wird.

Voellig fortgeschritten wird es, wenn man sich vorstellt, dass die erste Strophe nach der Inschrift noch weiter gehen koennte. Zum Beispiel mit der Zeilen "dann gingen sie nach Hause". Dieser Text wuerde nie erreicht werden, weil es eine abbruchslose Rekursion geben wuerde, ich deute sie mal mit Punkten an:

Ein Hund kam in die Kueche, und stahl dem Koch ein Ei.
Da nahm der Koch 'nen Loeffel
Und schlug den Hund entzwei
Da kamen viele Hunde 
Und gruben ihm ein Grab
Drauf setzten sie 'nen Grabstein
Worauf geschrieben ward:
  Ein Hund kam in die Kueche, und stahl dem Koch ein Ei.
  Da nahm der Koch 'nen Loeffel
  Und schlug den Hund entzwei
  Da kamen viele Hunde 
  Und gruben ihm ein Grab
  Drauf setzten sie 'nen Grabstein
  Worauf geschrieben ward:
    [...]
  und dann gingen sie nach Hause
und dann gingen sie nach Hause

das Interessante ist hier, dass jede Geschichte eine Ebene ist, und dass der Satz am Ende fuer jede Ebene zitiert werden muesste. Es handelt sich also bei den Strophen nicht um Wiederholungen da sie eine Information mehr haben als eine Wiederholung: Die Information, auf welcher Ebene der Textvortrag sich befindet.

Rekursionen machen bestimmte komplexe Problemstellungen elegant und einfach loesbar, z.B. das Problem der Tuerme von Hanoi:

(c) WikiPedia

Und ausserdem haben die Menschen mit dem Computer zum ersten Mal ein System geschaffen, das sich selbst reproduzieren kann. Wir nehmen Computer, um Computer zu bauen, und, im rein geistigen Raum verwenden wir Betriebssysteme, um Betriebssysteme zu kopieren und weiter zu entwickeln. Wir verwenden Virtualisierung, um einen Computer in einem Computer zu simulieren. Wenn wir von Emulation sprechen, ist da bei einer Ebene nicht Schluss - technisch kann ich einen Computer in einem Computer in einem Computer emulieren. Das ist alles sinnvoll, weil die Aktionen eines simulierten Computers natuerlich sehr viel genauer eingegrenzt und ueberwacht werden koennen als die eines physischen Computers.

Schichtendenken

Ich finde es immer faszinierend, mit einem Menschen Schach zu spielen, dessen Sprache ich nicht kenne. Normalerweise ist das Lernverhalten so: 1. Lerne die Sprache 2. Nutze die Sprache, um die Schachregeln zu lernen

Die Sprache sehen wir Informatiker in diesem Beispiel als die untere Schicht, denn sie ermoeglicht die obere Schicht, das Lernen der Schachregeln. Die untere Schicht kann aber eben auf unterschiedliche Arten implementiert sein - unterschiedliche Woerter haben unterschiedliche Bedeutungen in unterschiedlichen Sprachen. Wenn ich also mit einem Auslaender Schach spiele, sind die Regeln die gleichen, die Sprache, die verwendet wurde, um die Regeln zu uebermitteln, aber nicht.

Das ist doch in der Informatik genauso. Wenn du Mails uebermittelst, wurden diese vielleicht von voellig unterschiedlichen Computern erstellt, die die Netzwerk-Signale voellig unterschiedlich kodieren. Jedoch das Ergebnis, die Mail in Buchstaben von A bis Z, muss identisch sein. Ansonsten ist das Mail-Programm fehlerhaft.

Informatiker leben davon, dass sie Komplexitaet reduzieren, indem sie Aufgaben in Schichten einteilen. Im Idealfall erfuellt jede Schicht eine Aufgabe und wird von einem Programm repraesentiert. Das Programm ist dann auswechselbar gegen andere Programme, die dieselbe Schicht betreffen. Beispielsweise ist die Kommunikation zwischen zwei Computern in sieben Schichten eingeteilt, von denen sich eine darum kuemmert, dass ein Datenpaket wieder uebertragen wird wenn es nicht oder nicht richtig angekommen ist.

Die Tomaten

Es gibt Fleischtomaten, Tomaten und Cherrytomaten. Das Problem ist - was sind jetzt Tomaten? Genau genommen gibt es jetzt zwei Bedeutungen: Tomaten als Gattungsbegriff fuer Fleischtomaten, Tomaten und Cherrytomaten UND Tomaten als Gegensatz zu Cherry und Fleischtomaten. Wenn ich jetzt frage, wie viele Tomaten liegen auf dem Tisch, habe ich Ambiguitaet: Wenn da zwei Tomaten liegen und eine Cherrytomate so ist sowohl "zwei" als auch "drei" eine richtige Antwort, je nachdem, wie man Tomate versteht.

Wie ich putze

Wenn ich putze, empfinde ich das als vergaenglich. Ich tue nichts weiter als Schmutz vom Boden in das Wischtuch zu bringen. Ich entferne den Schmutz nicht, und ich raeume ihn nicht auf. Global gesehen vergroessere ich die Unordnung. Statt ein wenig Schmutz in der Wohnung gibt es nach dem Putzen mehr Schmutz: Schmutzige Wischtuecher auf der Muellhalde oder grosse Mengen Abwassers - auf jeden Fall mehr Abwasser als der Schmutz, der zu beseitigen war.

Solche Gedanken machen mich zu einem schlechten Raumpfleger, aber zu einem guten Informatiker. Es ist das Denkmuster, immer alles zu hinterfragen und nach Quelle und Ziel zu analysieren. Das Producer/Consumer Prinzip funktioniert genauso: Wo kommen die Daten her und wie werden sie zu was verarbeitet? Wo kommen sie hin?

Wie ich im Garten arbeite

per Anhalter durch die Galaxis

Das Buch "Per Anhalter durch die Galaxis" wird von Informatikern aufgrund seines besonderen Humors typischerweise sehr geschaetzt. Es geht darin nicht um Ausserirdische, Planeten oder den Praesidenten der Vereinigten Galaxieen. Es geht um Kausalitaet. Und um Kausalitaet und ihre absurden Auswirkungen im Falle dass die Dinge so unverrueckbar feststehend verstanden werden wie ein Computer es tut. Beispiel: In einem Band sagt einer "Am Bildschirm siehst du, dass wir im Dromedar-Nebel* sind" und bekommt zur Antwort "Ich sehe nur einen schwarzen Bildschirm" worauf der andere "Der Dromedar-Nebel ist der einzige Ort in der Galaxis, wo du nur einen schwarzen Bildschirm siehst". Oder, am Anfang des fuenften Buches der vierteiligen Trilogie versucht ein Raumschiff, festzustellen, ob ein Meteorit eingeschlagen ist. Die zustaendige Einheit meldet keinen Fehler also geht das Raumschiff davon aus, dass kein Meteorit eingeschlagen ist, was zur Katastrophe fuehrt: ein Meteorit ist eingeschlagen, und zwar in die Einheit, die feststellen soll, ob ein Meteorit eingeschlagen ist.

Wer sich von diesem Humor ermuedet fuehlt, sollte die Strapazen eines Informatik-Studiums nicht aufnehmen. Wer sich gut unterhalten fuehlt, wird in der Informatik noch viele weitere Beispiele dieses Humors finden; meistens unfreiwillig ;)


  • Disclaimer: mit den Namen bin ich mir nicht ganz sicher, es kommt aber auch nicht darauf an.

See also