Veröffentlicht: 03.11.2010

Ich schäme mich ... am Developers Shame Day

Jeder Programmierer hat mal klein angefangen und dabei Code produziert, für den er sich im Nachhinein schämt, und von dem er hofft, dass er nie an die Öffentlichkeit gerät.

Doch heute ist alles anders.

Der PHP Hacker ist aus der Versenkung zurückgekehrt und hat alle Entwickler dazu aufgerufen ihren schlimmsten Code Schnipsel am Developers Shame Day zu veröffentlichen. Neueinsteiger sollen sehen, dass auch die Profis von heute mal klein angefangen haben und es keine Schande ist, wenn der Code am Ende doch nur Murks ist.

Ich habe mich also daran gemacht und meine Archive der letzten 10 Jahre durchforstet um das richtige zu finden. Und nach langem Suchen habe ich nun endlich den passenden Code Schnipsel gefunden, bei dem ich alles falsch gemacht habe, was man nur falsch machen kann. Er ist aus dem Jahr 2001 und gehört zu einem meiner ersten PHP Projekte.

function shoutbox ($messages,$info,$id,$ip_test) {
    global $template, $ip, $PHP_SELF, $werbeart_1,$werbeart_2, $appurl, $appname, $admin_email, $admin_name;
    while (list($key,$value) = each($info)) {
        $$key = $value;
    }
    if (!$css)
        $css_file = "no_css.css";
else
$css_file = $id . ".css";
    $i = 1;
    for ($z=0; $z<count($messages); $z++) {
        $thx = $messages[$z];
        $thx[name] = replace($thx[name]);
        $thx[url] = replace($thx[url],1);
        $datum = get_time($thx[datum],1,1);
        if ($thx[url]) {
            $uname = "<b title="Geschrieben: $datum"><a href="$thx[url]" target="_blank">" . $thx[name] . ":</a></b>";
        } else {
            $uname = "<b title="Geschrieben: $datum">" . $thx[name] . ":</b>";
        }
        $thx[chat] = replace($thx[chat]);
        $time = time() - $deletetime;
        if ($thx['datum'] > $time && $thx[ip] == $ip && $ip_test) {
            $thx[chat] = $thx[chat] . "<br><a href="" . $PHP_SELF . "?id=$id&action=$action&mode=delete&mid=" . $thx[id] . "">Nachricht löschen</a>";
        }
        if ($smilies) {
            $thx[chat] = smile($thx[chat],$smilietheme,$smiliecolor);
        }
        $color = $info[('table_' . $i)];
        @eval ("$entry .= "".$template->get("shoutbox_entry")."";");
        if ($i == 1) $i++; else $i--;
    }
    if ($newpost)
        $scroll = 999999;
    else
        $scroll = 0;
    if ($werbeart_1 && $werbung) {
        $werbung_1 = @implode("",@file("./temp/banner_1.htm"));
    }
    if ($werbeart_2 && $werbung) {
        $werbung_2 = @implode("",@file("./temp/banner_2.htm"));
    }
    if ($hp)
        @eval ("$hp_feld = "".$template->get("shoutbox_hp")."";");
    if ($rbutton)
        @eval ("$reset = "".$template->get("shoutbox_reset")."";");
    if ($old && !$help)
        @eval ("$links = "".$template->get("shoutbox_links_1")."";");
    if (!$old && $help)
        @eval ("$links = "".$template->get("shoutbox_links_2")."";");
    if ($old && $help)
        @eval ("$links = "".$template->get("shoutbox_links_3")."";");
    if ($reload)
        @eval ("$reload = "".$template->get("shoutbox_reload")."";");
    else
        unset($reload);
    @eval ("$inhalt = "".$template->get("shoutbox_view")."";");
    return $inhalt;
}

Auch wenn die Fehler eigentlich offensichtlich sind, will ich sie dennoch einmal auflisten, allein der Vollständigkeit wegen.

  1. Keine ordentliche Formatierung. Für den Beitrag habe ich den Code nachformatiert. Im Original sieht er so aus. (Der restliche Code des Projekts ist eigenartigerweise ordentlich formatiert)
  2. Keine einheitliche Klammerung
  3. Vermischung von Deutsch und Englisch
  4. (Kein OOP)
  5. Verwendung von global
  6. Ein übergebenes Array ohne Prüfung in reguläre Variablen verwandelt (mit while!)
  7. Variablen ohne Prüfung auf ihre Existenz verwendet
  8. count im Schleifenkopf
  9. Array Schlüssel ohne Häkchen verwendet
  10. Keine ordentliche Konkatenierung von Strings und Variablen.
  11. eval is evil
  12. Fehlermeldungen mit @ unterdrückt.

Mit dem Code Schnipsel dürfte ich wahrscheinlich an der Spitze aller Negativbeispiele liegen, aber jeder fängt mal klein an und wird mit der Zeit immer besser. Damals habe ich noch für mich persönlich programmiert, heute mache ich es beruflich. So kann sich die Zeit ändern.

Weitere Beiträge zum Developers Shame Day

Das Bild wurde der Seite sxc.hu entnommen und stammt vom Benutzer ”dreamer07