Der Developers Shame Day

Hinterlasse einen Kommentar

Am 3. November ist Developer Shame Day – eine Erfindung von Cem dem PHP Hacker. Ich bin dabei… mein Scham-Code ist schon in der Pipeline.

Advertisements

„The Social Network“ – ein Film von und für Programmierer

5 Kommentare

Gestern Abend hab ich den Film „The Social Network“ über Mark Zuckerberg den Gründer von Facebook gesehen. Meiner Meinung nach ein Must-Seen für Programmierer, denn es werden darin (unter anderem) 3 Punkte aufgezeigt, warum sein „Webprojekt“ so erfolgreich war:

1. Finde die simple Idee
Wenn man mal erfolgreiche Ideen/Produkte vergleicht, wird man feststellen, das bei den allermeisten eine simple Idee zugrunde lag, mit welcher sich das entsprechende Produkt von allen anderen abgegrenzt hat. Die Betonung liegt hierbei auf „simpel“ – einfach, unkompliziert, selbsterklärend. (=> KISS)
Bei Facebook war es die Exclusivität, die man plötzlich mit einer niedrigeren Einstiegshürde erreichen konnte und mit der „das wichtigste“ des Uni Alltags virtuell und einfach abgebildet wurde.

2. Geh in den Tunnel
Immer wieder war davon die Rede, eine Person ist gerade im Tunnel und darf deshalb nicht gestört werden. Ich behaupte mal, dass wenn man sich in seine Programmierung vertieft hat, sich also alle Sinne ohne Ablenkung um den Code drehen, ist man 3 mal so effizient, wie wenn man „aus dem Schlaf heraus“ loslegen soll.

3. Begib dich in eine kreative Umgebung
Als schon klar war, das Facebook „cool“ ist (Zitat), ziehen die Entwickler nach Kalifornien. Die erste Szene in deren Haus zeigt, wie Sie Blödsinn man machen und vom Dach des Hauses in einen Pool springen – drinnen hockt einer gerade an nem Rechner.
Wenig später (im gleichen Haus) sind zwei Mädls am Party machen: Playstation, Bong, Saufen. Dahinter hocken ne Handvoll Entwickler im Tunnel.
Ok, das mag etwas übertrieben sein und scheint schon fast sogar Punkt 2 zu widersprechen, aber Inspiration ist nun mal etwas, was nicht von alleine kommt. Kreative Umgebung sieht immer anders aus, jeder hat seine eigenen kreativen Bedürfnisse: Musik, Kunst, Natur… aber wohl eher selten grauer Büroalltag!
Was ich damit sagen will: macht aus eurem Arbeitsplatz eine Umgebung in der ihr euch wohl fühlt.

Natürlich sind das nicht alle Voraussetzungen um erfolgreich zu sein, geschweige denn guten Code zu schaffen. Aber so zumindest das Grundlegende, was man oft übersieht.
Mehr Tipps und Tricks findet ihr im CCD-Wertesystem. :)

PS: ich mag Facebook nicht. Ich glaub ich lösch mich jetzt.

MVC Model geht auch ohne Datenbank!

14 Kommentare

Ich möchte mal ganz kurz etwas Frust über die implementierten MVC Pattern in den ganzen Frameworks loswerden, die ich in meinem kurzen Entwicklerleben verwendet habe:
Warum wird in der abstrakten Schicht der MVC Implementierung immer davon ausgegangen, dass hinter einem Model zwangsläufig eine Datenbank liegt. Ein Model ist doch nur die Abbildung irgendwelcher Daten die wo auch immer her kommen können, oder?! Zum Beispiel können Daten aus einem HTTP Request oder einer statischen Datei kommen, richtig?!

Also wenn dann sollte es einen Mapper geben, der aus der Datenbank die Models zaubert. Aber dass das Model seine eigenen Ursprung kennt finde ich äußerst nervig, denn wenn ich dann mal ein Datenbank unabhängiges Model schreibe, muss ich alle Methoden überschreiben, die irgendwas mit der Datenbank anstellen wollen.

So. Hab ich jetzt MVC falsch verstanden oder einfach nur noch nicht die richtigen Frameworks gefunden?

Idee: Fakten filtern

8 Kommentare

Da das Web immer größer und unüberschaubarer wird, wäre es doch an der Zeit eine Anwendung zu schreiben, mit der man einzelne Fakten zu ausgewählten Themen zusammenfassend sammeln könnte. Über solche Channels würde man also nur die Infos bekommen, für die man sich interessiert und dazu auch noch so extrem zusammengefasst, dass man schnell einen Überblick bekommt und dadurch mit Leichtigkeit viele Themen im Blick hat. Interessiert man sich für einen gewisse Information mehr, kann man sich die Quelle der Information genauer anschauen und erhält Links zu weiteren ähnlichen Quellen.
Ein Themenchannel wird über definierte Keywords gesteuert und bezieht seine Informationen automatisch aus allen möglichen Datenquellen: Twitter, Blogs, News, Delicious etc.
Also im Prinzip ist das sowas wie ein Feedreader, nur das die Informationen automatisch anhand von Keywords gesammelt werden und extrem kompakt und übersichtlich präsentiert werden.

Was haltet ihr von der Idee? Gibt es sowas viellecht schon?

Stärken und Schwächen von PHP

4 Kommentare

Bei uns in der Firma gibt es „Entwickler-für-Entwickler“ Vorträge. Dabei soll man Einblick in Bereiche der IT bekommen die man eben sonst nicht hat. Diese Woche habe ich als einer der wenigen PHP Entwickler aus der technischen Abteilung meinen anderen Kollegen PHP präsentiert.

Es war ein grober Überblick über den Hintergrund, die Funktionsweise und Syntax der Sprache. Mein Ziel war es, die Vorurteile gegenüber PHP auszuräumen, also habe ich vor allem die objektorientierte Sytax von PHP präsentiert.

Ich glaube kaum, dass ich jemanden der Java und .NET Entwickler von PHP „überzeugen“ konnte, aber ich hatte schon das Gefühl, mit so manchem Vorurteil aufzuräumen.

Zuletzt gab es noch einen Überblick über die Schwächen und Stärken der Sprache, den ich im Folgenden nun etwas ausführlicher Kommentieren möchte.

Ehrlich gesagt ist es schwer die einzelnen Punkte absolut als Stärke oder Schwäche von PHP zu bezeichnen, es ist meistens beides gleichzeitig, eben worauf man bei einem Projekt wert legt:

Die meistgenannte und eindeutigsten Schwäche von PHP ist die Geschwindigkeit oder eher die Langsamkeit. Im Vergleich zu anderen Sprachen soll sie deutlich langsamer sein. Ich habe es noch nie gemessen, aber ich bezweifle es nicht, schließlich muss jede einzelne PHP Datei vor jeder Ausführung interpretiert werden.
Mittlerweile gibt es Code Caches, die ohne großen Aufwand „angeschaltet“ werden können und eine Anwendung beschleunigen.
Seit neustem gibt es ja auch HipHop für PHP, aber das Konzept find ich irgendwie seltsam. Jemand von meinen Kollegen meinte, dass man damit PHP Entwickler einstellen könnte, um C++ Code zu produzieren. :)
Mich wundert vor allem, das so große Anwendungen wie „Facebook“ und „Magento“ auf PHP aufsetzen und damit derart erfolgreich sind. PHP kann also nicht so langsam sein.

Die große Stärke von PHP ist die leichte Erlernbarkeit. Bei meinen Recherchen habe ich folgende Auflösung der Abkürzung PHP gefunden: „People Hate Perl“. Fand ich gut, den Spruch, denn mit Perl kann ich mich nicht anfreunden. ;)
Natürlich sind auch andere Sprachen leicht erlernbar, aber PHP hat sich als interpretierte Sprache extrem gut durchgesetzt [Quelle].
Gleichzeitig ist diese „Stärke“ auch ein Schwäche: man trifft viel zu oft auf Code der einfach gruselig ist. Jeder hat mal solchen Code als Anfänger geschrieben, aber ein Anfänger greift eben eher zu PHP als zu einer anderen Sprache.

Auch ziemlich super finde ich in diesem Rahmen, dass diese eine Sprache für OOP, Skripte und Templates verwendet werden kann. Das heißt, man lernt nur eine Sprache. Smarty, JSPs (für Java) und sonstige separaten Templatesprachen gehn mir auf die Nerven.

Die nächste ähnliche Stärke und Schwäche ist die relativ große Community. Man findet schnell Antwort auf Probleme und auch die Sprache wird stetig weiterentwickelt. Übrigens sehe ich mittlerweile das Zend Framework als ein Teil von PHP, welches eigentlich fast schon als eigene „Stärke“ von PHP durchgehen könnte.
Die gleichzeitige Schwäche ist (ähnlich wie beim vorherigen Punkt), dass oft Code veröffentlicht wird, der im Sinne des „CCD“ schlecht ist. Aber meiner Meinung nach schützt eine „Typsichere“ oder noch sonst so tolle Sprache nicht vor schlechtem Code.

Aufgrund der zwei letzten Punkte, ist PHP eine der Sprachen, die so gut wie bei jedem Webhoster angeboten wird. Daneben gibt es noch eine Menge Freehoster, die das Erlernen der Sprache weiter unterstützen.

Wann also sollte bzw. kann man PHP verwenden?
Ich denke, gerade die letzten Punkte zeigen, dass PHP vor allem bei kleiner Projekten zu einem einfachen und schnellen Ergebnis führen. Kleinere Web-Tools würde ich auf jeden Fall in PHP umsetzen (natürlich auch weil ich es schon erlernt habe) und bei größeren Projekten nur dann, wenn das Budget stark begrenzt ist oder ich eine breite Masse erreichen möchte (Top-Beispiel: Magento).

Ansonsten würde ich mir auf jeden Fall mal andere Sprachen anschauen!
Was ich momentan zum Beispiel an Java cool finde, ist das in Java verwendbare GWT. Es ist einfach umwerfend, wie mit reinem Java Code eine komplette Webanwendung mit AJAX Unterstützung geschrieben werden kann!

Statischen Aufruf von Instanzaufruf unterscheiden … geht nicht

4 Kommentare

Gerade hatte ich die Idee mit „if(isset($this))“ zu unterscheiden, ob eine statische Method über die Klasse oder über ein Objekt aufgerufen wurde.
Beispiel:

class Foo {
    public static function bar() {
        if (isset($this)) {
            echo "i am an object. ";
        } else {
            echo "this is a static call. ";
        }
    }
}

// beispiel verwendung
Foo::bar();
$f = new Foo();
$f->bar();

Erwartet hatte ich, dass dabei „this is a static call. i am an object. “ rauskommt, das war aber nicht der Fall. In beiden Fällen wird „this is a static call. “ ausgegeben.
Das bedeutet also, dass eine statische Methode immer statisch aufgerufen wird, selbst wenn der Aufruf über ein Objekt stattfindet.

Objekte dynamisch instantiieren

5 Kommentare

Gestern bin ich auf das Problem gestoßen, dass ich Objekte nicht dynamisch instantiieren kann, so ähnlich wie es bei Funktionen und Methoden mit „call_user_func_array“ funktioniert.

Also hab ich eine eigene Funktion geschrieben, die den Klassennamen und ein Array aller Parameter übergeben bekommt. Daraus wird dann der Codeschnipsel erzeugt, der das Objekt erstellt. Dieser Codeschnipsel wird dann mit eval ausgeführt und das neue Objekt zurückgegeben.
Das ganze sieht dann so aus:

function createInstance($className, array $arguments = null) {
	if ($arguments == null) {
		$arguments = array();
	}
	
	// generate instantiate code
	$instantiateCode = '$object = new '.$className.'(';
	if (sizeof($arguments) > 0) {
		foreach($arguments AS $key => $arg) {
			$instantiateCode .= '$arguments["'.$key.'"], ';
		}
		$instantiateCode = preg_replace('/, $/', ');', $instantiateCode);
	} else {
		$instantiateCode .= ');';
	}
	
	// instantiate and return object
	eval($instantiateCode);
	return $object;
}

Falls jemand eine coolere Idee hat, dann her damit. :)

Der Anwendungszweck ist übrigens folgender:
Ich hab eine Library mit der ich gewisse Basisfunktionalitäten anbiete. Wenn jemand nun etwas verändern möchte, ohne die Updatefähigkeit zu verlieren, erstellt er eine neue Klasse mit der neuen Logik und lässt diese von der entsprechende Standardklasse erben. Damit die neue Logik jetzt auch an allen anderen Stellen im Code verwendet wird, müsste man überall den neuen Klassennamen eintragen, das will aber keiner.
Also hab ich die genannte „createInstance()“ Methode gebaut, die vor dem instantiieren überprüft ob eine Klasse mit dem Präfix „Custom_“ existiert. Wenn dem so ist, wird das Objekt der Kindklasse erzeugt. (Das Präfix muss vorher definiert sein.)

Older Entries Newer Entries