Praktikumsbericht (1)

Nun, heute ist der dritte Tag des Praktikums, und bisher unterscheidet es sich sehr von dem, was ich mir vorgestellt hatte.

Ich habe mich bereits über das Netzwerk und die Internetgeschwindigkeit hier beschwert: Im Wohnheim gibt es überhaupt kein Netz, und am Unterrichtsort ist die Verbindung eher schlecht. Diese Umstände haben mir plötzlich klar gemacht, wie internetabhängig ich bin. Ich persönlich halte das aber für kein Problem. Das Internet kann durchaus zu einem “Kala” werden, das den Geist der Menschen erleuchtet und unsere Spezies schließlich zu einer hoch entwickelten…

Kommen wir zum Thema. In den letzten beiden Tagen habe ich das Spring Framework kennengelernt, was sich wie ein frischer Wind anfühlt. Als Neuling muss ich feststellen, dass Java-Code auch so elegant sein kann.

Diese Erkenntnis verrät natürlich, wie unerfahren ich bin. Andererseits, welche Sprache kann nicht elegant sein? Eleganz ist das Ergebnis sorgfältigen Nachdenkens und durchdachten Designs, eine kristallisierte Weisheit, die scheinbar wenig mit dem Trägermedium zu tun hat.

RESTful

Die Verwendung des Spring Frameworks dient momentan hauptsächlich dem Aufbau von Webanwendungen. Nachdem ich dem Tutorial auf der offiziellen Website gefolgt bin, habe ich gleichzeitig die Vorteile der RESTful-Architektur wiederholt. Zusammenfassend lassen sich folgende Punkte nennen:

  • Entkopplung von Frontend und Backend: Da diese Architektur ressourcenorientiert ist, werden formatierte Texte (meistens JSON?) und nicht ganze HTML-Seiten als Antwort gesendet. Dies ermöglicht eine vollständige Trennung von Frontend und Backend.
  • Klarer Ausdruck: RESTful nutzt die Eigenschaften des HTTP-Protokolls voll aus. Es verwendet URIs, um Ressourcen anzufordern, anstelle langer, durch & getrennter Query-Strings. Dies spiegelt den Entwurfsgedanken von HTTP (Hypertext Transfer Protocol) wider und behandelt es nicht nur als reines Übertragungsprotokoll, auf dem dann willkürlich aufgesetzt wird. Es definiert streng die CRUD-Operationen für Ressourcen und setzt sie mittels HTTP-Verben um.

Ich bin selbst erst vor kurzer Zeit aus dem “alten” Webentwicklungsdenken herausgekommen, daher ist mein Verständnis wahrscheinlich noch nicht vollständig durchdrungen. Falls ich mich irren sollte, bitte ich um Korrektur!

Spring als Web-Framework

Es ist genau ein Jahr her seit der großen Java-Web-Aufgabe im zweiten Studienjahr. In dieser Zeit habe ich einige Webentwicklungstechnologien kennengelernt. Ich erinnere mich noch an die Aufregung, als ich meine erste Anwendung auf einem Server deployt und erfolgreich vom Handy aus darauf zugegriffen habe :) Neugierig zu sein und dieser Neugier zu folgen, um unbekannte Gebiete zu erkunden, das ist wirklich etwas Schönes.

Von JSP in Java zu Django in Python, dann zu Flask und schließlich zurück zu Java – dort traf ich auf Spring.

JSP ist eine wahrhaft antike Technologie, deren Verwendung äußerst umständlich ist. Besonders in späteren Entwicklungsphasen, wenn man für eine bestimmte Funktion hin- und herändern muss, wird ein Servlet zu einem riesigen, aufgeblähten Monster. Und wenn JavaBeans Datenbankverbindungen und Paginierung erfordern, ist es fast unmöglich, Eleganz zu erreichen. JSP-Seiten, die eigentlich hohe Wiederverwendbarkeit demonstrieren sollten, werden durch verschiedene <%if(...)%>-Anweisungen bis zur Unkenntlichkeit entstellt, sodass ich Code schreiben konnte, der mich am Leben zweifeln ließ. Ich sollte wahrscheinlich einen separaten Artikel schreiben, in dem ich über diese schweren Sünden reflektiere. Übrigens, ich wüsste nicht einmal, wie man mit JSP einen RESTful-Webdienst schreiben sollte.

In Python wurde die Sache viel klarer. Ob es nun die mächtigen Fähigkeiten von Django oder die klare Einfachheit von Flask sind – jedenfalls sind Frameworks im Vergleich zu den grundlegendsten, wegbereitenden Technologien viel übersichtlicher. Wenn man Entwickler in Ebenen einteilt, wobei die erste Ebene die Pioniere der Technologie sind und die letzte Ebene die Anwender der Programme (also die rein pragmatischen Entwickler), dann befinden sich die Entwickler von Frameworks meiner Meinung nach auf der zweiten Ebene. Sie fassen die Entwicklungsprozesse einer häufig verwendeten Technologie zusammen, extrahieren die gebräuchlichsten, grundlegendsten und essenziellsten Teile und schreiben sie zu wiederverwendbaren Komponenten um – so entsteht ein hervorragendes Framework. Aus diesem Grund haben sich auch exzellente Frameworks aus echten Anwendungsprojekten herausgelöst, so wie Django und Spring.

Letztendlich finde ich Spring jedoch Flask ähnlicher. Beide sind sehr leichtgewichtig und setzen dem Entwickler kaum Grenzen. Vielleicht haben die Flask-Entwickler sich ja bei Spring inspirieren lassen.

Interessanter Punkt – das Symbol @

Während des Lernens ist mir aufgefallen, dass das Routing der Controller in Spring durch die Java-Spracheigenschaft “Annotation” realisiert wird. Diese Eigenschaft muss ich noch genauer lernen. Zufälligerweise wird in Flask eine ähnliche Form verwendet, nur heißt @ in Python “Dekorateur” – ein syntaktisches Zuckerwerk zum Verpacken von Funktionen. Nach dem Durchsehen einiger Materialien scheint es sich bei dieser Eigenschaft tatsächlich um eine von Python von Java übernommene, aber funktional komplexere Sprachfunktion zu handeln.

Da ich Flask ohnehin sehr schätze, hat mich diese Entdeckung bei Spring noch sympathischer gestimmt.

Zusammenfassung

Zusammenfassend ist mein derzeitiges Niveau noch lange nicht ausreichend, daher habe ich auch keine der Kernfunktionen von Spring wie IoC, DI etc. erwähnt. Aber es hat mir bewusst gemacht, warum Java, diese scheinbar betagte Sprache, immer noch so langlebig ist, und gleichzeitig meine Sympathie für Java deutlich erhöht.

Ich freue mich darauf, mehr zu lernen. Das ist wirklich aufregend.

Lassen Sie mich mit einem klassischen Tagebuch-Abschluss enden: “Heute war wirklich ein sinnvoller Tag.”

/Alltag/