RxJS Observables – Everything is a stream

Apache Storm war vor einigen Jahre das Framework, in dem ich mich erstmals mit Streams befasst habe. Damals galt das unter Java mit Storm als innovativ, obwohl es die funktionale Programmierung eigentlich schon seit den 1930er Jahren gibt. Es handelt sich hierbei eben um eine Denkweise, die objektorientierten Entwicklern eher fremd vorkommt. Später war die Implementierung mit Google Guava dann doch etwas handlicher, von der die API ja auch größten Teils in Java 8 übernommen wurde. Dennoch merkt man stark, dass Java ursprünglich nicht als funktionale Programmiersprache gedacht war.

RxJS Observables, auf das ich dank Angular 2 gestoßen bin, ist anders – einmal damit angefangen, tendiert man dazu nichts mehr auf konventionelle, rein objektorientierte Art und Weise umzusetzen. Die Herausforderung liegt nun darin, gerade bei funktionaler Implementierung lesbaren CleanCode zu schreiben. Gerade hier ist das besonders wichtig, da es mit Lambda-Ausdrücken sehr verlockend ist, den Code so weit zu kürzen, dass er absolut unverständlich wird. Im besten Fall verbringt man dann selbst Stunden damit zu verstehen, was man da mal getan hat – im schlimmsten Fall muss sich ein Kollege durchkämpfen, der dringend einen Fehler beheben soll und bis dato noch wenig bis keine Kontakte mit funktionaler Programmierung hatte.

Als Schnellstart kann ich in so einem Fall nur „The introduction to Reactive Programming you’ve been missing“ von andrestalz empfehlen, befürchte aber, dass die Umstellung der Denkweise ohne echtes Training eine Mammutaufgabe sein könnte.

Contributed to Angular 2

Merged! Zugegeben, es waren nur Code-Beispiele, wobei ich diese, besonders bei einem Framework für außerordentlich wichtig halte. Ich muss sagen, es ist ein gutes Gefühl an einem Projekt wie Angular mitwirken zu können. Jedenfalls war es eine interessante Erfahrung eine neue Perspektive auf das Projekt kennen zu lernen.

Technisch gab es natürlich einige interessante Punkte:

  • Anlegen eines lokalen Angular 2 Workspaces, in dem die einzelnen Module per Script durch symbolische Verknüpfungen verbunden werden.
  • Der Build-Process über Shell- und Gulp-Scripts
  • Die Quality-Gates über Linting und Tests

Menschlich fand ich es noch interessanter, da ich positiv überrascht war, wie freundlich, offen und hilfsbereit das Team reagiert hat. Und auch wenn die Zeitverschiebung die Kommunikation leicht erschwerte, bekam ich schnell Optimierungsvorschläge, die konstruktiv diskutiert wurden – ein beispielhaft gut geleberter GIT-Prozess eben.

Fazit: Ich konnte einen wesentlich tieferen Einblick in Angular 2 gewinnen und hatte Spaß dabei. Deshalb hoffe ich, dass ich zukünftig öfter oder gar regelmäßig Zeit finde an solchen Projekten mitzuarbeiten.

Jasmine – so dokumentiert man heute

Was ist Jasmine? Offensichtlich ein Test-Framework für JavaScript-Code. Aber schon in der Einführung zeigt es anschaulich, dass es vor allem auch zur Dokumentation von Software genutzt werden sollte.

Grundsätzlich bin ich, als ein Verfechter von CleanCode, ja der Meinung: Dokumentation von Implementierungsdetails sollte nicht notwendig sein, da der Code selbst so gestaltet werden sollte, dass man keine zusätzlichen Kommentare und Beschreibungen benötigt.

Die Herausforderung zusätzlicher Dokumentation von Softwaredetails (wenn denn mal vorhanden) liegt im Allgemeinen ja darin, diese aktuell und verlässlich zu halten. Sobald ich von der Dokumentation in den Quellcode wechseln muss, um zu prüfen ob die Beschreibung noch aktuell ist, wir diese schnell wertlos. Jasmine ist ein Framework mit dem man sehr schnell seine Dokumentation verfassen kann und zugleich die entsprechenden Testfälle integriert, die beweisen, dass die Software auch genau so arbeitet wie es beschrieben ist. Dazu macht es einem die sprechende API von Jasmine sehr einfach, auch die Umsetzung der Beweise lesbar zu gestalten – ein überzeugendes Beispiel hierzu liefert die eingangs erwähnte Einführung.

Fazit: Neben der Tatsache, dass es Spaß macht ein neues Projekt mit dem schreiben eines Jasmine-Tests zu beginnen, ist die Einführung von Jasmine ein herausragendes Beispiel wie man lesbaren Code gestalten kann.

Angular 2.0 – Erstkontakt

Aufbruch in eine neue Welt! Meine viermonatige Elternzeit verging wie im Flug und schon steht die nächste Herausforderung an: neues Projekt, komplett neuer Technologie-Stack. Nachdem ich drei viel zu lange Jahre mit der Architektur eines Softwaregiganten auf Basis von Java 1.6, Oracle SQL, Vaadin 7, jUnit, Mockito, Tomcat und Maven verbracht habe, steht jetzt das Kontrastprogramm mit TypeScript, MongoDB, Angular 2.0, Jasmine, nginx, npm und VisualStudioCode auf dem Plan.

Tour of Heroes titelt das erstklassige Einführungs-Tutorial von Angular. Schade, dass man in der Praxis selten die Zeit findet sich so systematisch in ein neues Thema einzuarbeiten. Ich hatte das Glück nicht nur die „Tour of Heroes“ komplett durchgehen, sondern mir darüber hinaus weitere Themenschwerpunkte wie die Architekturkonzepte, Reactive Forms, Pipes, Routing und vor allem Testing ansehen zu können. Letzteres wäre auch einer der einzigen beiden Kritikpunkte, die sich an der Tour finden lassen (der andere ist die Aufteilung – während die ersten Kapitel in Minuten zu bewältigen sind, brauchen die letzten Tage): ich bin ein großer Fan von TestDrivenDevelopement und habe mich deshalb sehr unwohl gefühlt, die Einführung ohne einen einzigen Test zu starten und bin schnell dazu übergegangen das Kapitel „Testing“ parallel zu bearbeiten. Das ist nicht immer ganz einfach gewesen, hat mir aber einen wesentlich tieferen Einblick in das Framework gegeben.

Fazit: Angular 2.0 hat bei mir einen sehr positiven ersten Eindruck hinterlassen – kein Wunder, dass es inzwischen so weit verbreitet ist. Die Basics sind sehr schnell zu erlernen, man sollte sich aber parallel unbedingt die Tests mit ansehen und es lohnt sich tiefer in die Konzepte zu gucken.