Archiv für den Monat: November 2010

Pattern? Sowas mache ich nicht!

Der PHP Hacker fragt „Haben Pattern versagt?“ und hier ist mein Senf dazu.

Mag jetzt auch mal ein wenig den Stil der „anonymen Programmierer“ haben, aber ich programmiere nicht mit dem Ziel, ein bestimmtes Pattern umzusetzen, sondern mit dem Ziel, ein bestimmtes Problem zu lösen. Dies mache ich auf dem – für mich – besten Wege und der Weg ist für jedes Problem, sogar für jeden Kunden, anders. Meist weiß ich gar nicht, dass ich gerade ein bestimmtes Pattern umsetze oder dass der Weg, wie ich etwas mache, schon einen „XY Pattern“ namen hat.

Schande über mich – ich würde bei dem im Artikel genannten Recruiter wohl keinen Job bekommen – aber meine Fragen wären wirklich:

  1. Muss man Pattern (auswendig) kennen, um gut programmieren zu können?
    Sicher sind Kentnisse über „best practices“ – und aus diesen sind die Pattern ja entstanden – hilfreich, aber muss ich deswegen gleich „in Pattern denken“? Sicher nicht.
  2. Ist es sinnvoll, auf Biegen und Brechen ein Pattern umzusetzen, auch wenn die Problemlösung darunter leidet?
    Ganz klar: Nein! Das Pattern sollte sich immer der Problemlösung unterwerfen! Was nützt es mir, dass mein Code in 2.000 Zeilen das XY Pattern sauberst umgesetzt hat, die Problemlösung aber nur 20 Zeilen lang gewesen wäre (und kein Spagetthi-Code ist!).
  3. Muss ich mich nun schämen weil ich das XY Pattern nicht kenne oder bin ich etwa kein guter Programmierer?
    Ich denke, es kommt drauf an. Wenn man die „best practices“ versucht umzusetzen und sauberen, lesbaren, skalierbaren und funktionsfähigen Code schreibt, dann muss man nicht unbedingt sagen können, dass dies nun teilweise X, Y und Z Pattern darstellt. Es kommt IMHO drauf an, dass der Code die o.a. Kriterien erfüllt und nicht zwanghaft Punkt 2 umsetzt.

Das wäre mein – wie gesagt – mein Senf dazu. Was denkt ihr darüber?

Mein Beitrag zum Developers Shame Day

Mein Beitrag zum Developers Shame Day am 03.11.2010:

Oh, wie ich mich schäme, der Code ist von Oktober 2002, stammt aus einem Teil, der für ein Onlinerollenspiel vorgesehen war (damals gab es das Wort Browserspiel noch gar nicht – trotzdem wollte ich sowas bauen; leider war das Projekt damals viel zu groß für mich).

Im Großen und Ganzen habe ich allerdings grade dadurch, dass ich diesen Code geschrieben habe, davon genervt war, wieviel „Arbeit“ das immer wiederkehrende Tippen von < und > überdrüssig war und hiermit erste, zarte Schrittchen im Bereich PHP und Klassen getätigt habe überhaupt erst näher zu OOP in PHP 3+4 und Verwendung von Template Engines (direkt im Anschluss war es FastTemplate, kurz dannach Smarty … bis heute) … soviel zum Thema „sich weiterentwickeln durch schlechten Code“!

Hab sowas mal bei thedailywtf gesehen, hatte es aber in dem Moment doch schon zu sehr verdrängt, als dass da was geklingelt hätte.


class pageproducer
{
function getDoctypeInfo()
{
return "\n\n";
}

function getStartingTag($tagname)
{
return "<".$tagname.">\n";
}

function getEndingTag($tagname)
{
return "\n";
}

function getMetaTagEquiv($name,$content)
{
return "";
}

function getTitle($name)
{
return "".$name."";
}

function getCSS($cssurl)
{
return "";
}

function getHeader()
{
$header = $this->getMetaTagName( "keywords", "") . "\n";
$header .= $this->getMetaTagName( "description", "") . "\n";
$header .= $this->getMetaTagName( "robots", "") . "\n";
$header .= $this->getMetaTagName( "revisit-after", "") . "\n";
$header .= $this->getMetaTagEquiv( "Content-Type", "text/html; charset=iso-8859-1") . "\n";
$header .= $this->getMetaTagEquiv( "expires", "0") . "\n";
$header .= $this->getTitle(HEAD_NAME) . "\n";
$header .= $this->getCSS("rpg.css") . "\n";
return $header;
}

function getHeadSection()
{
$head = $this->getStartingTag("head");
$head .= $this->getHeader();
$head .= $this->getEndingTag("head");
return $head;
}


}

Ich persönlich finde das Konstrukt wirklich schlimm und oberpeinlich; ich komme also heute mit Papiertüte über dem Kopf zur Arbeit 😉 Aber was soll’s, mittlerweile sieht mein Code nicht mehr so aus; mittlerweile übergebe ich das Charset als Parameter #muhaha 😉

Mal ernsthaft: Ich finde die Idee des Ganzen „Developers Shame Day“ sehr gut. Gut für Newbies, dass auch wir „Pros“ mal „Newbies“ und „Script-Kiddies“ waren; gut für uns „Pros“, um unsere eigenen Wurzeln zu reflektieren und nicht zu vergessen.