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