7. August 2017 | | gespeichert unter Karriere.

Interessant, lehrreich, spaßig, familiär, umfangreich. Das sind die ersten Worte, die mir in den Sinn kommen, wenn ich darüber nachdenke, was mein Praktikum bei PLUSPOL interactive am besten beschreibt. Was die Zeit so toll gemacht hat, will ich in diesem Artikel versuchen zu erläutern.

Wissen, Wissen, Wissen

Schon vor Beginn des Praktikums bekam ich eine Liste mit Links zu Tutorials von Tools und Technologien, die ich im Laufe des Praktikums benötigen würde. Der Großteil davon war mir bereits bekannt oder ich hatte zumindest etwas davon gehört. Einige Begriffe waren mir jedoch völlig neu (Gulp? Vagrant? NodeJS?).

Dies sollte sich jedoch als kein Problem herausstellen, da ich ein Ticket zum Selbststudium bekam, mit dem ich mich in den ersten zwei Wochen ausgiebig beschäftigen konnte. Das Ticket umfasste eine nochmals ausführlichere Liste der Technologien und Kompetenzen, die ich bereits vor Beginn des Praktikums erhalten hatte, sowie Einführungen zu firmeninternen Dingen wie Coding-Standards. Außerdem erhielt ich mehrere Technologie-Crashkurse.

Gutes Miteinander

Hat das alles immer noch nicht geholfen und ging es an einer Stelle einfach nicht weiter, konnte ich jederzeit einem Kollegen oder meinem Mentor kostbare Zeit rauben. Es gab sogar Momente, in denen mir der Hilferuf buchstäblich von den Augen abgelesen wurde und die nötige Unterstützung von allein kam.

Diese Hilfsbereitschaft und gute Kommunikation zieht sich über die beiden Stockwerke der Agentur und bildet eine freundliche und lockere Arbeitsatmosphäre, welche durch die tollen Büros und Besprechungsräume und den großen Holztisch als Sammelstelle für Mittagspause und Geburtstagsrunden nur verstärkt wird.

Benötigt man dann doch mal einen freien Kopf, kann man dienstags zum Sporttreff gehen, sich mittwochs massieren lassen, oder einfach zwischendurch 5 Minuten abschalten und den Kattarshians zuschauen. 😉
http://nutiminn.is/kattarshians/

Meine Learnings

Während des Praktikums habe ich eine Menge neuer Dinge gelernt und ausprobieren können. So konnte ich mit verschiedenen Frontend-Frameworks wie Angular, React und NodeJS Bekanntschaft machen oder Erfahrungen mit dem Build-Prozess in der Webentwicklung und dem Schreiben von Build-Tasks mit Gulp sammeln. Ich durfte Webseiten testen, Banner erstellen, ein Spiel entwickeln, für eine Online-Umfrage eine Slideshow programmieren, einen Showroom vom Grundgerüst bis zum fertigen Design erstellen, und noch vieles mehr.

Abschließend kann ich sagen, dass meine Erwartungen an das Praktikum bei PLUSPOL interactive voll und ganz erfüllt, ja sogar übertroffen wurden. Ich hatte eine schöne und lehrreiche Zeit in einer tollen Agentur mit tollen Kollegen und spannenden Aufgaben.

10. August 2016 | | gespeichert unter Coding, Programmierung.

Ihr habt es ja wahrscheinlich schon mitbekommen: Unser Entwickler Florian hat einen gut besuchten Vortrag an der HTWK Leipzig gehalten und gezeigt, wie ein moderner Webentwicklungs-Workflow funktioniert.

Falls ihr nicht dabei sein konntet, euch aber brennend dafür interessiert, wie ihr CSS-Dateien mit Autoprefixer verarbeitet oder JS-Features mit Babel kompiliert: Schaut doch einfach mal bei Slideshare vorbei, wir haben euch die Folien online gestellt. Viel Spaß beim Durchklicken! Weiterlesen »

16. Januar 2015 | | gespeichert unter Coding, Programmierung.

Noch etwa zur Zeit, als Apple seine ersten Entwicklerwerkzeuge für das iPhone veröffentlichte oder als Google mit Android daherkam, war es relativ schwer vorstellbar, HTML, CSS und JavaScript für die Entwicklung von Apps zu nutzen. Zu schwach war noch die Hardware oder zumindest der interne Browser. Doch das hat sich mittlerweile enorm gewandelt. Weiterlesen »

20. Juni 2014 | | gespeichert unter Coding.

JavaScript hat in den letzten Jahren einen enormen Aufwind bekommen. Unzählige Frameworks und Bibliotheken sprießen aus dem Boden und bereichern uns in der Webentwicklung mit allerhand Bequemlichkeiten. jQuery hilft uns mit DOM-Manipulationen und Ajax-Requests, Ember oder AngularJS vereinfachen das Entwickeln skalierbarer Web-Applikationen, underscore oder Lo-Dash unterstützen uns bei der Arbeit mit Listen und anderen Datentypen. All das wird begünstigt durch das Programmierkonstrukt der Funktion. Was macht die JavaScript-Funktion also so besonders?

Die Basics

In der Mathematik entspricht die Funktion der Abbildung einer Menge von Objekten auf eine neue Menge von Objekten. Ist das bei JavaScript anders? Sie muss nicht zwangsläufig etwas zurückgeben. In diesem Fall spricht man meist von Prozeduren. Ist die Funktion an ein Objekt gebunden (z.B. Math.sin()) spricht man von einer Methode. In jedem Fall kann die Anzahl der übergebenen Argumente beliebig sein. Probieren wir es doch gleich mal aus (alle Beispiele können mit der Konsole im Browser oder auf der Kommandozeile mit Node.js getestet werden.):

Gehen wir einen Schritt weiter. JavaScript ist durchaus eine vollwertige Programmiersprache, auch wenn das nicht jeder so sehen mag:

JavaScript ist objektorientiert

Die objektorientierte Programmierung ist eine der wesentlichen Prinzipien in der Entwicklung von Software-Systemen. Sie hilft, Aspekte und Programmteile zu strukturieren und die Entwicklung effizienter zu gestalten. Ein wichtiges Konzept ist das der Klassen. Für einen Aspekt (z.B. ein User-Objekt) schreibe ich also eine Klasse, welche ich in Zukunft ganz einfach wiederverwenden kann. Java und C++ sind dafür wohl die bekanntesten Beispiele aus der Lehre. Bei JavaScript spricht man von „objektbasiert“. Ohne wirklich auf die Unterschiede einzugehen, sei nur gesagt, dass JavaScript an sich keine Klassen kennt.1 Diese können aber dank des flexiblen Objekt-Modells nachgebildet werden:

Grundlegend ist die Funktion in diesem Fall ein sogenannter Konstruktor. Wird er mit dem Schlüsselwort new vorangestellt, erzeugt (konstruiert) die Funktion ein neues Objekt. In objektorientierten Sprachen kann ich eine neue Klasse erzeugen, die ihre Eigenschaften von einer anderen erbt. Dafür bietet JavaScript zwei sehr einfache Wege:

Die erste Variante nutzt das sogenannte Prototyping.2 Jede Funktion hat eine Eigenschaft prototype, die mit jedem beliebigen Objekt versehen werden kann. In diesem Fall wird dem prototypevon Snake ein neues Objekt Animal angehängt. Dadurch erbt Snake automatisch von Animal. Dass aber die Eigenschaft kind den Wert snake hat, liegt an der sogenannten Prototype-Chain. JavaScript hangelt sich auf der Suche nach dem Wert einer Eigenschaft durch diese Kette, bis ein Prototype-Objekt gefunden wurde, das eine solche Eigenschaft enthält. In der letzten Zeile ist name undefined, da der Animal-Instanz kein Wert dafür übergeben wurde.

Nun die zweite Möglichkeit:

Auffällig ist die erste Zeile unseres Konstruktors: Hier wird Animal aufgerufen, aber anders als vielleicht erwartet. Dazu sei erwähnt, dass jede Funktion neben der prototype-Eigenschaft auch zwei Funktionen call() und apply() besitzt. Auf die Unterschiede möchte ich im Moment nicht eingehen.3 Es sei lediglich erwähnt, dass sie die Funktion dazu bewegen, auf ein spezifisches Objekt (in diesem Fall this) angewandt zu werden.

Der Unterschied zum vorangegangenen Beispiel ist jeweils in der letzten Zeile der Code-Schnipsel ersichtlich. Während die prototype-Variante dort ein Animal-Objekt zurückliefert, ist das in Variante zwei nicht der Fall. Im letzten Beispiel wird die Vererbung händisch mit jedem Aufruf des Konstruktors vollzogen. Das kommt später zum Tragen, wenn man in den Konstruktoren sogenannte private4 Eigenschaften einführt. Gleichzeitig wird dadurch verhindert, dass die Prototype-Chain durchlaufen wird, was durchaus einen minimalen Performance-Gewinn bedeuten kann, wobei dann aber die Erzeugung des neuen Objekts kostspieliger ist.

Das soll’s erst einmal dazu gewesen sein. Im zweiten Teil beleuchte ich den Einsatz von Funktionen als Closures/Callbacks und gehe auf die sogenannten Promises ein. Stay tuned!

Nutzt Ihr auch Klassen in Euren Projekten? Schreibt uns dazu einen Kommentar.


  1. noch nicht
  2. Prototypenbasierte Programmierung
  3. call() erwartet zu allererst den this-Kontext und dann kommasepariert die weiteren Funktionsargumente (fun.call(this, arg1, arg2, ...)). apply() jedoch erwartet nach dem this-Kontext eine Liste von Argumenten (fun.apply(this, [arg1, arg2, ...])).
  4. Eigenschaften, die nur innerhalb des erzeugten Objekts verfügbar sind, aber nicht außerhalb. Private Variablen dienen der Kapselung, interne Logik wird nach außen nicht freigegeben.