Warum Laravel?
Warum fiel die Wahl für dieses Projekt auf Laravel?
Hinweis: Dies ist ein technischer Beitrag.
Nachdem ich Monica auf Hacker News vorgestellt hatte, erreichten mich viele Fragen, warum ich das Werkzeug mit PHP und insbesondere mit Laravel geschrieben habe. Ich war überrascht, dass es so viele Fragen dazu gab, denn ich finde, die Sprache spielt keine Rolle. Es zählt nur, was man damit macht.
In diesem Beitrag erkläre ich, warum ich PHP und Laravel gewählt habe und welche Schwierigkeiten ich beim Bau der ersten Version überwinden musste. Der Text soll keinen Krieg zwischen Sprachen anzetteln.
PHP hat eine interessante Geschichte. Viele großartige Webentwickler, die PHP heute vermutlich nicht mehr nutzen, haben damit die Grundlagen des Programmierens gelernt. Es war so einfach zu benutzen und einzusteigen, und obwohl es keine elegante Sprache war, ebnete es den Weg für Karrieren in der Webentwicklung. Mit der Zeit wurde PHP dann weniger geliebt, bis es fast schon peinlich war, PHP zu verwenden oder auf einem Meetup zu sagen, dass die eigene Firma es einsetzt. Andere, wohl elegantere Sprachen gewannen dank großartiger Frameworks stark an Beliebtheit (Python, Ruby). Zugleich erschienen neue PHP-Frameworks, Symfony zum Beispiel. Doch Symfony war weiterhin schwer zu erlernen und zu benutzen. Und dann starb PHP. So hieß es jedenfalls, wobei offenbar ignoriert wurde, dass sehr viele Unternehmen es weiterhin einsetzten und schätzten. Dann kam PHP 5.5, gefolgt von PHP 7, und ein neues Framework mit einem seltsamen Namen tauchte auf: Laravel. Und die Einstellung der Leute änderte sich vollständig. PHP ist immer noch nicht so elegant wie andere beliebte Sprachen, aber vieles ist deutlich besser geworden. Und schnell ist es obendrein.
Trotzdem ist PHP nach wie vor die Sprache, die man liebend gern hasst, besonders auf Hacker News. Es heißt, PHP skaliere nicht. Vermutlich deshalb setzen Facebook und Mailchimp, neben anderen großen Namen, heute PHP ein, und zwar in großem Maßstab.
Warum habe ich mit diesem Hintergrund PHP und Laravel gewählt?
- PHP ist leicht zu lernen und leicht zu benutzen.
- Es gibt viele PHP-Entwickler, und wenn Menschen mit mir am Projekt arbeiten wollen, ist der mögliche Pool an PHP-Entwicklern zumindest dort, wo ich lebe, größer als der an Ruby- oder Python-Entwicklern. Außerdem nutzen viele Leute auf GitHub PHP, und wenn dieses Open-Source-Projekt Zuspruch finden sollte, musste ich es in einer Sprache schreiben, in der Menschen mit ganz unterschiedlichem Kenntnisstand leicht beitragen können.
- Das Wichtigste bei der Wahl eines Technologie-Stacks für ein neues Projekt ist, wie leicht es sich auf lange Sicht warten lässt. PHP ist einfach. Es ist leicht zu debuggen (auch wenn das besser sein könnte) und leicht zu skalieren (auch wenn das derzeit überhaupt nicht mein Thema ist).
- Laravel ist mit Abstand das beste PHP-Framework, das ich je benutzt habe. Es macht komplexe Dinge sehr einfach. Man merkt, dass es entworfen wurde, um neue Webanwendungen wirklich schnell zu starten, und es macht große Freude. Seine herausragende Stärke ist jedoch die Qualität der Dokumentation, verglichen mit anderen PHP-Frameworks und sogar mit vielen Frameworks anderer Sprachen. Alles ist ausgesprochen gut dokumentiert. Ich kann gar nicht genug betonen, wie wichtig gute Dokumentation ist (was mich daran erinnert, dass ich Monica noch besser dokumentieren sollte).
- Rund um PHP und besonders Laravel gibt es eine riesige Gemeinschaft: Laracasts, Forge, Envoyer und eine starke Slack-Gemeinschaft, um nur einige zu nennen. Wenn Sie Hilfe brauchen, stehen viele Menschen bereit.
Welche Herausforderungen hatte ich bei der Entwicklung dieses Projekts?
Insgesamt hatte ich bei der Entwicklung der aktuellen Version von Monica nicht allzu viele Herausforderungen. Es ist keine komplexe Anwendung, und ich habe keine Skalierungsprobleme, da die Nutzerbasis noch recht klein ist (rund 7800 Nutzer insgesamt, 4300 aktive). Doch es gibt Umsetzungsdetails, die ich falsch gemacht habe. Nicht, weil es schlechte Praxis war, sondern weil meine technischen Fähigkeiten nicht ausreichten, um diese Probleme kurzfristig zu lösen. Hoffentlich hilft diese Liste anderen, die Fehler nicht zu wiederholen, oder nette Menschen schreiben mir, wie ich sie hätte beheben können.
- In früheren Versionen habe ich viele Events und Listener benutzt. Das Konzept ist großartig, doch wegen ihnen hatte ich große Probleme beim Unit-Testen der Basisklassen. Zudem geschah, je mehr ich sie einsetzte, umso mehr Magie im Hintergrund. Ich dachte, wer in die Codebasis einsteigt, würde sich schwertun zu verstehen, warum beim Erzeugen eines Objekts bestimmte Dinge passieren. Aus meiner Sicht machten Events und Listener die Anwendung schwerer verständlich, also habe ich sie alle entfernt (nun ja, 99 Prozent davon, zwei Listener muss ich noch loswerden).
- Anfangs war die Datenbank vollständig verschlüsselt. Aus Gründen, die ich bis heute nicht verstehe, gab es hin und wieder Fehler beim Entschlüsseln, was zu Daten führte, die ich nicht wiederherstellen konnte. Da ich mich zu diesem Zeitpunkt nicht damit befassen wollte, habe ich die Verschlüsselung entfernt. Außerdem machten verschlüsselte Daten jede Art von Sortierung oder Suche in meinen Abfragen unmöglich, was auf Dauer problematisch geworden wäre. Sicher gibt es Lösungen für beide Probleme, aber ich wollte mich auf neue Funktionen konzentrieren, statt dieses eine Problem zu lösen.
- Ich habe vor dem Start der Anwendung keine Unit-Tests geschrieben. Das hat sich bitter gerächt. Ich glaube nicht, dass wir 100 Prozent Testabdeckung anstreben sollten, aber zumindest sollte es Tests für die Hauptfunktionen der Seite geben. Sonst landet man bei einem Berg von Fehlern, an die man nie gedacht hat, und während man sie behebt, sind andere Teile der Anwendung von der Korrektur betroffen. Das wird schnell zum Albtraum. Laravel macht Unit-Tests sehr einfach. Ich hätte das ernster nehmen sollen. Ab der nächsten Version wird kein Pull Request mehr übernommen, wenn keine Unit-Tests und vielleicht sogar funktionale Tests dabei sind.
Fazit
Das sind einige Gründe, warum ich Laravel gewählt habe. Wie eingangs gesagt: Bei Ihrem Projekt geht es nicht um die Sprache. Sofern es in Ihrem Projekt nicht gerade darum geht, eine neue Sprache zu lernen, sollten Sie keine Wochen mit der Wahl einer Sprache oder eines Frameworks verbringen. Bleiben Sie bei dem, was Sie kennen, und bauen Sie einfach etwas. Ihren Nutzern ist es egal, ob Ihr Code hässlich ist oder ob Sie Python statt Ruby gewählt haben.