Psycho-Test für Programmierer

von Alfred Jaeger, Markus Konopka, Jürgen Plate Dieser Test sagt Ihnen mehr über Ihren Programmierstil als Sie es wünschen. Dieser kurze Test kann Ihren Standort als Programmierer feststellen. Wählen Sie einen Lösungsvorschlag durch Anwählen der Lösungsnummer:

Aufgabe:

Eine Variable I (Definition: PL/1-DEC FIXED (2,0); COBOL-PIC 99 COMP-3) enthalte die Werte 1 oder 2. Erstellen Sie einen Code, der den Wert von I ändert. Enthält I den Wert 1, so wird er in 2 geändert.

Lösungsvorschläge:

[1] IF I = '2' THEN I = 1       [2] if i = 2 then i = 1;
    ELSE I = 2;                     if i = 1 then i = 2;

[3] IF I = 1 THEN GO TO         [4] j = 2;
    SKIP;                           if i = 2 then j = 1;
    I = 1;                          i = j;
    GO TO DONE;
    SKIP: i = 2;
    DONE:

[5] DCL switch label;           [6] dcl onetwo (2);
    if i = 1 then switch one;       fixed binary (31);
    if i = 2 then switch two;       initial (2,1);
    go to switch;                   i = onetwo (i);
    one: i = 2;
        go to done;
    two: i = 1;
    done:

[7] i = 3 - i                   [8] i = i - ((i/2)*2) + 1
                                          

[9] if i = 2                   [10] if i = 1 then i = 2;
    then do;                        else do;
      i = 1;                          if i > 2 then put list
      end                                ('i falsch, wird auf 1 gesetzt');
    else do;                          i = 1;
      i = 2;                          end;
      end;

[11] i = ( i and 1 ) + 1


Auswertung:

1. Absolventen eines Programmierkurses

Wahrscheinlich verstehen nur 10% der Absolventen von Programmierlehrgängen den Unterschied zwischen 2 und '2'. Es ist ein Geheimnis, wie man erfolgreich programmieren kann, ohne ein so grundsätzliches Prinzip zu verstehen.

2. Programmier-Instruktor

Die Lösung ist ebenso falsch wie die vorhergehende. Es ist fraglich, wieviele Instruktoren irgendwelche bedeutenden Programme entworfen, codiert und getestet haben.

3. FORTRAN-Programmierer, der eben einen PL/1-Kurs absolviert hat

"Man kann einem alten Hund keine neue Tricks zeigen." Die Lösung ergibt ein angemessenes Resultat; mehr kann man dazu nicht sagen.

4. Assemblerprogrammierer, der denselben Kurs besucht hat

An sich ist die Lösung recht gut lesbar, aber nicht gerade sehr zielgerichtet und effizient; wahrscheinlich ein Resultat des PL/1-Trainings. Immerhin ist es bemerkenswert, daß die Lösung keinen sich selbst modifizierenden Code enthält.

5. Systemanalytiker

Diese Lösung beleuchtet eine Denkweise, in der es die Pflicht eines Systemanalytikers ist, ein Programm in einem Maße zu zu verkomplizieren, daß sogar ein guter Programmierer unfähig aussieht.

6. Informatiker

Wahrscheinlich die cleverste Lösung. Da sie jedoch nicht erläutert wird, haben normale Sterbliche einige Verständnisschwierigkeiten.

7. Mathematiker

Ähnlich wie die vorhergehende Lösung ist diese auch ziemlich elegant, aber ohne zusätzliche Erklärung nur schwer zu verstehen. In diese Gruppe fallen auch Lösungen von C-Programmierern wie z. B.:
   if (i == 1) i++; else i--;

8. Auf Arbeitsplatz-Sicherung bedachter Programmierer

Dies ist eine sehr kunstvolle Loesung und natürlich wird sie auch nicht erläutert. Sie funktioniert tatsächlich, aber wie Lewis Carrol sagt: "Ich hätte dies sehr viel komplizierter machen koennen, sagte die rote Königin ungeheuer stolz."

9. Fan der strukturierten Programmierung

Man könnte dies als billige Polemik gegen STP bezeichnen. Zu viele diskutieren jedoch darüber, wieviele Spalten man einrücken müßte, anstatt die Technik richtig anzuwenden.

10. Guter Programmierer

Haben Sie bemerkt, daß keine der anderen Lösungen I daraufhin über- prüft, ob die Variable I Werte ausserhalb der angegebenen Grenzen enthält? Dies ist sehr gefährlich, trotzdem allgemein üblich. Unglücklicherweise helfen alle Programmiertechniken, trickreiche oder elegante Lösungen nicht, wenn I zu Beginn einen anderen Wert als 1 oder 2 enthält.

11. Code-Hacker

Der Ausdruck "i and 1" verwandelt jede gerade Zahl in 0 und jede ungerade in 1. Dazuzählen von 1 invertiert dann das Ergebnis.
Das Ergebnis liegt - fast wie bei [10] - unabhängig von der Eingabe jederzeit im definierten Bereich. Nur erfährt der User niemals, dass der Mist eingegeben hat.


Copyright © FH München, FB 04, Jürgen Plate,18/01/96