Wie schreibt man richtig guten Code

Wie schreibt man richtig guten Code

Meine Blogsoftware entstand in direkter Konkurrenz zu etablierten Systemen wie WordPress und Contao. Natürlich ist der Funktionsumfang meiner Software ein wenig kleiner, aber ich habe TFF3 in erster Linie geschrieben, um ein besserer Programmierer zu werden. Und ich denke, dass mir das gelungen ist.

Doch der Weg dorthin war ein langer Weg. Ist es noch. Denn Programme schreiben ist eine höllische Arbeit. Natürlich macht es Spaß, ein gutes Programm immer mehr zu erweitern, aber es ist eine Tatsache, dass permanente Weiterentwicklung zum Stillstand führt.

Ich kann keine 10 Jahre alten Skripte benutzen und dann eine Software für das Jahr 2018 schreiben. Heute kann PHP viel mehr als vor 10 Jahren und viele Sachen von damals funktionieren heute nicht mehr. Im Jahr 2018 PHP noch ohne OOP zu nutzen ist dämlich. Einfach nur dämlich. Denn trotz größeren Aufwand einer OOP-Entwicklung ist das Endergebnis meistens wesentlich befriedigender. Das Problem einiger Oldschool-Entwickler ist, dass sie das Prinzip von OOP nicht verstehen: Es ist nicht wichtig, WIE die Klasse funktioniert, es ist wichtig, dass die Klasse am Ende das richtige Ergebnis liefert.

Schlechte Programmierung, sogenannter Spaghetticode bekommt bestimmte Parameter mit und kann diese Daten nur auf eine Art und Weise wiedergeben. Ganz schlechter Code mischt HTML und PHP und gibt beides direkt aus. Damit verliert man die Möglichkeit, Daten auch mal als XML, JSON oder PDF wieder zu geben. Wenn ich eine Contentseite wiedergeben möchte, will ich das zwar in erster Linie als HTML tun, aber es kann ja sein, dass ich daraus ein Buch machen will. Der Content darf nicht bestimmen, wie er aussieht. Der Content ist in meinen Augen nur eine Meta-Information.

Code muss funktional sein

Der Satz klingt erstmal wie eine Floskel: Natürlich muss Code funktional sein, darüber muss man nicht nachdenken, aber eigentlich muss man das doch. Gerade, wenn man Spaghetticode schreibt, neigt man schnell zu einem Designschema, das warme Grütze ist: Man schreibt Code, der eine Produktseite darstellen soll, plötzlich soll diese Artikelseite aber auch noch Produktvarianten darstellen. Nicht zuletzt gibt es die Anforderung, hier auch noch News zu schreiben oder Contentseiten einzubinden. In historischer Zeit hat man all das in ein PHP-Skript geklöppelt und das hat funktoniert. Tut es jetzt noch.

Das Beispiel mit Artikelseite, Contentseiten und News sind allerdings drei Programme. Ein „zeig mir einen Artikel“-Programm, ein „zeig mir eine Contentseite“-Programm und ein „zeig mir ein News“-Programm. Das heißt, ich muss drei Klassen zusammenfassen, die am Ende dann die gewünschte Artikelseite generieren. In gutem Code schreibe ich also 3 Klassen, nehme deren Responses und schreibe eine vierte Klasse, die diesen Response beispielsweise in HTML ausgibt.

Das Rad oder warum Frameworks nützlich sind

Egal, ob Du ein Auto fährst, ein Fahrrad oder ein Motorrad. Der Berührungspunkt zwischen deinem Fahrzeug und der Straße ist das Rad. Die Firma VW, Yamaha oder Harley haben das Rad nicht erfunden. Sie nutzen eine Technik, die es schon gibt. Diese Technik ist gut und stellt ein Werkzeug dar, dass dir die Arbeit erleichtert. Du musst das Rad nicht erfinden, wenn irgend jemand das Rad schon erfunden hat. Frameworks sind das Rad. Programmbibliotheken wie jQuery, Symfony, ZFF oder AngularJS wurden von Programmierern erschaffen, von gigantischen Teams hochmotivierter Entwickler, die garantiert mindestens soviel über PHP und Javascript wissen, wie Du. Nutze deren Wissen.

Das ist keine hohle Floskel: Es ist wichtig, dass Du Dich auf das Wissen von fähigen Leuten verlässt. Diese Klassensammlungen sind kein Schrott. Symfony und Co. ersparen dir Entwicklungszeit. Eine einfache Emailvalidierung ist super simpel per Regex zu machen. Ein Framework hat garantiert irgendwo eine Funktion, die nicht nur den Regex macht, sondern gleichzeitig auch noch den MX-Record prüft. Eine Programmierung, die im Formular dem User sagt: „Du hast da was vergessen“ ist garantiert in jedem größeren Framework hinterlegt.

Ganz superwichtig ist auch die Validierung von Input. Willst Du bei jedem langweiligen Formular ein Skript basteln, dass die Stringlänge prüft? Oder verwendest Du eine Klasse, die ein Textfeld generiert, dass die Länge vorgibt und direkt prüft, was mit dem Inhalt passieren soll? Genau das machen die Frameworks. Also benutze sie.

Übersicht

Guter Code ist übersichtlich und hat exakt eine Aufgabe: Funktionieren. Ich denke, dass das Prinzip von KISS auch im Code greifen sollte. Keep it simple, stupid. Schreibe deine Programme so, dass sie maximalen Gewinn bei minimalem Aufwand bedeuten. Du brauchst eine Methode, die irgend etwas macht? Dann gib dieser Funktion so wenig Parameterisierungen wie möglich. Alles mit mehr als 2 oder 3 Funktionsparametern ist sinnlos. Denn keiner kann sich das merken. Wenn du eine Funktion mit Heuhaufen und Nadel hast, und dann noch eine andere Funktion mit Heuhaufen und Nadel, macht es den Code wahnsinnig unübersichtlich, wenn der eine Funktionsaufruf dosomething(haystack, needle) und der andere Aufruf doanotherthing(needle,haystack) lautet.

Sprechende Variablen sind auch pures Gold. Ich weiß nicht, wie oft ich schon Code gesehen habe, in der Variable A abgefragt wird. Ich SCHEISSE auf Variable A. Nenne die Variable wie das, was sie macht. Nenne die Variable Kunde oder Abfrageergebnis oder sonstwas. Selbst simple Zähler kann man Counter nennen. Das ist auch mehr Schreibarbeit, aber jeder andere Coder versteht wenigstens, was du willst.

Schleifen und Bedingungen

Eine Programmiersprache kann wenn...dann-Bedingungen. In 90% aller Programmiersprachen wird dies mit IF/ELSE durchgeführt. Das ist auch okay, aber die meisten Programmiersprachen lassen auch verschachtelte IF/ELSE-Bedingungen zu. In gutem Code verschachtelst Du dies bitte NICHT. Und wenn es sich nicht vermeiden lässt, dann verschachtele bitte auf gar keinen Fall mehr als 2 IF-Bedingungen. Nur, weil etwas funktioniert, sollte man das nicht machen. Nachlesende Programmierer werden es dir danken.

Arbeite auch immer nach einem Ausschlußverfahren: Zuerst ist jede Bedingung gültig. Sachen, die nicht mehr gültig sind, werden entfernt, sodass am Ende nur noch ein Ergebnis korrekt ist.

Fazit

Guten Code schreiben kann jeder. Die Regeln sollten nur eingehalten werden. Dabei geht es aber eben nicht unbedingt um das Coden sondern viel mehr darum, verständlich zu bleiben. Code muss einfach und verständlich sein. Beherzige das und Du wirst super!


Getagged unter: coding,
1