Juli 2015

Spencer Johnson: Die Mäuse-Strategie für Manager
Anhand einer Parabel beschreibt Spencer Johnson in seinem Ratgeber, wie man mit Veränderungen am besten umgeht. Das Buch erhielten meine Azubi-Kollegen und ich zum Abschluss unserer Ausbildung vom Geschäftsführer des Unternehmens. Ich stelle den Ratgeber vor und notiere meine Eindrücke.
Stadt der Pferde mit Flügeln
Von einer Rundwanderung durch Neustadt (Dosse) unter bedecktem Himmel brachte ich einige Bilder mit. Der Weg führte Janko, Migo und mich zunächst vom Bahnhof nach Nordwesten zum Landgestüt, dann nach Süden durchs Hauptgestüt nach Neu-Amerika und von dort durch Köritz wieder zum Bahnhof. Zu diesen etwa 10 Kilometern kam ein Stück hinzu, als wir uns vor der Heimfahrt zum Pizzaessen noch einmal zum Ihlenweg begaben.
Kuchengerechtigkeit in n Dimensionen
Kennst Du das auch? Du hast einen leckeren 5-dimensionalen Kuchen gebacken und stehst kurz vor dem Eintreffen Deiner Gäste plötzlich ratlos vor der Frage, wie Du Deinen Kuchen zu gleichen Teilen in Rand- und Mittelstücke schneidest. Verzage nicht, denn ich helfe mit Python!
Warum man gigantische Langspielplatten bewegen, aber nicht richtig abspielen kann
Besonders schade ist dies, wenn man bedenkt, dass bei Schallplatten gewöhnlicher Größe gilt, dass die Musikqualität umso besser ist, je weiter außen der Tonabnehmer Klänge abgreift …

Grundschulpädagogik

Kämpfen statt Kuscheln, Golm, 11. Januar 2015

Kein Weg vorbei

Wir müssen das Hindernis umfahren – daran führt kein Weg vorbei.

Drei Dinge, die mich an Python stören

An Python mag ich nicht, dass für den Anfang eines Bereiches ganzer Zahlen zwar die kleinste Zahl im Bereich angegeben wird, fürs Ende aber nicht die größte Zahl im Zahlenbereich, sondern die darauffolgende. Um die Liste der Zahlen 2 bis 7 zu erhalten, würde man in Python also range (2, 8) eingeben.

Ich mag auch nicht, dass Python je nach Typ mit Standardparametern von Funktionen unterschiedlich umgeht und dass x += y meist, aber nicht immer äquivalent zu x = x + y ist. Man schaue sich die folgenden Funktionen an. Die erste Funktion foo arbeitet mit ganzen Zahlen, die zweite Funktion bar mit Listen ganzer Zahlen:

def foo (a = 0, b = 0):
    print (a)
    print (b)
    a = a + 1
    b += 1
    print (a)
    print (b)

def bar (a = [0], b = [0]):
    print (a)
    print (b)
    a = a + [1]
    b += [1]
    print (a)
    print (b)

Wenn ich die Funktion foo () ohne Parameter aufrufe, erhalte ich als Ausgabe wie erwartet:

0
0
1
1

Wenn ich die Funktion foo () noch einmal ohne Parameter aufrufe, erhalte ich als Ausgabe wie erwartet dasselbe Ergebnis:

0
0
1
1

Egal wie oft ich die Funktion aufrufe – bei gleicher Eingabe erhalte ich die gleiche Ausgabe. Nun rufe ich die andere Funktion bar () ohne Parameter auf und erhalte wie erwartet das Ergebnis:

[0]
[0]
[0, 1]
[0, 1]

Schauen wir mal, was passiert, wenn ich dieselbe Funktion bar () noch einmal ohne Parameter aufrufe:

[0]
[0, 1]
[0, 1]
[0, 1, 1]

Noch einmal:

[0]
[0, 1, 1]
[0, 1]
[0, 1, 1, 1]

Etwas Merkwürdiges passiert hier. Bei jedem Aufruf kommt ein anderes Ergebnis heraus, weil Python sich die Liste b merkt. Andererseits startet a immer wieder mit dem Standardwert – offenbar löst x = x + y im Hintergrund etwas anderes aus als x += y, obschon das Ergebnis bei einmaliger Anwendung zunächst identisch ist. Dies erinnert mich ans Arbeiten mit Zeigern in Programmiersprachen wie C++, was einen schon mal in die Irre führen kann – aber zumindest weiß man dort, dass man mit Zeigern arbeitet, wenn man es tut.

Drei Dinge, die ich an Python mag

Ich mag, dass es in Python im Vergleich zu PHP relativ viele arithmetische Operatoren gibt. So steht der Potenzoperator ** für „hoch“, sodass zum Beispiel 2**4 sechzehn ergibt. Der Operator // dient der Division mit Abrunden auf eine ganze Zahl.

Ich mag die Listen-Abstraktion, englisch list comprehension. Nehmen wir eine Liste L = [2, 3, 5]. Dann ergibt [a + 1 for a in L] die neue Liste [3, 4, 6]. Für jedes Element a der Liste L wird a + 1 gerechnet und dies als Element einer neuen Liste genutzt.

Ein etwas komplexeres Beispiel: [b**2 for b in range (1, 11) if b % 3 > 0] erzeugt eine Liste mit den Quadraten all der Zahlen aus dem Bereich 1 bis 10, die nicht durch drei teilbar sind: [1, 4, 16, 25, 49, 64, 100]. Mengen von Zahlen oder anderen Dingen lassen sich so sehr leicht und kompakt definieren.

Außerdem mag ich negative Listenindizes. Nehmen wir eine Liste L = [2, 3, 5]. Dann ergibt L[-1] den Wert 5, denn mit dem Index −1 kann immer das letzte Element der Liste angesprochen werden. Man muss also nicht wissen, wie viele Elemente in der Liste sind, um auf dieses zuzugreifen.

Auf dem Mond geht die Erde nicht unter: alternativer Schluss

„Ja mei!“, sagte der Küstenschutzminister, „Der Meeresspiegel steigt nur um siebzig Meter? Dann sind mir Bayern ja safe!“
Sanft legte die Außenministerin ihre rechte Hand auf die linke des Küstenschutzministers. Mit ruhiger Stimme sagte sie: „Franz, wenn das Meer Norddeutschland überschwemmt, überschwemmen die Norddeutschen Bayern.“
Der Küstenschutzminister quiekte: „Saupreißen in Bayern?! Mir brauchen sofort das Raumschiff!“