Difference between revisions of "Wie denken Informatiker"

From ThorstensHome
Jump to: navigation, search
(Rekursion)
m (Rekursion)
Line 38: Line 38:
 
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:
 
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:
  
<pic src="http://www.staerk.de/thorsten/images/1/15/Ktimetracker.png" width=30% align=left />
+
<pic src="http://www.staerk.de/thorsten/images/1/15/Ktimetracker.png" width=30% align=auto />
  
 
= Die Tomaten =
 
= Die Tomaten =

Revision as of 13:27, 5 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:

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

See also