David Stöckl

Enterprise Software Engineer & Senior Web Developer

Meine Leidenschaft ist die Betreuung, Umsetzung und Optimierung komplexer Web- und Software-Projekte. Ich kann Ihnen helfen ihre digitalen Vorstellungen zu realisieren und Ihre Prozesse zu automatisieren. Damit Sie in Zukunft Zeit und Geld sparen, mehr Kunden gewinnen und perfekt nach außen im Web auftreten können.

Seit über 15 Jahren bin ich erfolgreich als Software Engineer, (Web-)Programmierer und Consultant im Bereich Wien und Umgebung tätig. In dieser Zeit habe ich eine große Zahl an mitunter umfangreichen und anspruchsvollen Projekten erfolgreich betreut und/oder in bester Qualität umgesetzt.

Angebot



Web- & Programmierung

Egal ob einfache Websites oder umfangreiche Webangebote wie Shops oder Communities, egal ob Java-Applikationen oder Lösungen für spezielle Endgeräte - ich erschaffe aus Ihren Wünschen und Ideen saubere, effiziente und gut dokumentierte Software.

Beratung & Planung

Durch meinen Einsatz als Entwickler sowie Team-Leiter in sehr unterschiedlichen Software- und Web-Projekten kann ich auf einen reichhaltigen Erfahrungsschatz zur Lösung komplexer Anforderungen zugreifen und den gesamten Lebenszyklus von Software-Projekten von Anfang bis Ende mit meiner Expertise begleiten.

(Web-)Programmierung

Egal ob einfache Website-Projekte oder Enterprise Middleware, E-Commerce Lösungen, API-Integrationen, spezielle Services oder Applikationen - ich erschaffe aus Anforderungen hoch qualitative und gut dokumentierte Software. Sowohl in Einzelarbeit als auch als Teil oder Leiter eines Teams.

Wartung & Optimierung

Erweiterungswünsche, Verbesserungsideen, häufige Updates und Änderungen der Umgebung sind bei vielen Software-Projekten nicht unüblich. Im Zuge der Wartung und Optimierung begleite ich Projekte mitunter über viele Jahre.

Partner-Netzwerk

Mit verschiedensten Experten und Unternehmen aus der IT- und der Medienbranche bin ich gut vernetzt. So kann ich stets geeignet Spezialisten für fast jeden Zweck vermitteln oder zu einem Projekt hinzuziehen.

Ausbildung

Studium Software Engineering & Internet Computing

Master of Science, Informatik

seit 2011

Nebenberuflich studiere ich im Masterstudium "Software Engineerung & Internet Computing" an der technischen Universität Wien. Theoretische Informatik, Algorithmik, Programmierkonzepte & -sprachen, sowie weiteres einschlägiges Fachwissen bilden eine starke Basis für erfolgreiche Software Entwicklung.

Studium Medientechnik

Bachelor of Science

2008 - 2011

Dreijähriges Studium an der Fachhochschule St. Pölten, ausgiebige Beschäftigung mit Informatik-Grundlagen und Web-Entwicklung im Zweig interaktive Medien. Weitere Schwerpunkte der Ausbildung waren Design, Usability, Journalismus sowie Audio/Video.

Berufsweg

Freelancer (Software- und Web-Entwicklung)

2008 - heute

Firmenwebsites, Online-Shops, komplexe Platformen und Speziallösungen. Von Beratung und Planung, über Software-Architektur, Software-Design und Programmierung bis hin zu Deployment, Server-Administration und Wartung.

Brainformance IT-Services GmbH

Senior Fullstack Web Developer (Teilzeit)

seit 2019

Web- und Software Entwicklung im Enterprise Bereich. Hauptsächlich auf Basis von Pimcore welches wiederum auf Symfony basiert (PIM, DAM, MDM, CDP, CMS und eCommerce). Software Engineering, API-Integrationen, DevOps, Prozessoptimierung, Präsentationen und Planung.

ready2order GmbH

Senior Fullstack Web Developer (Teilzeit)

2017 - 2019

Web- und Software Entwicklung bei einem der führenden SaaS Kassensysteme

Calasoul IT Dienstleistungs- & HandelsgmbH

Developer (TZ)

2015 - 2017

Fullstack Development für Online Marketplaces und Shops im E-Commerce Umfeld

SiriusHawk Software GmbH

Developer

2014 - 2015

Single-Page Web Application Development & CMS Websites

Visual Propaganda (TZ)

Developer

2009-2013

Entwicklung von Webplattformen und Business-Websites

Limesoda

Developer

2011

WordPress & Web-Projekte

Weitere

Verschiedene weitere einschlägige Berufserfahrungen aus selbstständigen Projekten, Mitarbeiter bei der Desaio GmbH, sowie als Assistent der Fachhochschule St. Pölten und Praktikant der Werbeagentur Kuse waren ebenfalls eine Bereicherung.

Software Lebenszyklus

Ein Software-Projekt besteht in aller Regel nicht nur aus Programmierung. Für eine erfolgreiche Projektumsetzung ist eine geordnete Vorgangsweise in der keine kritischen Phasen übergangen werden unabkömmlich. Die hier beschriebenen Phasen laufen nicht unbedingt strikt sequentiell ab (im klassischen "Wasserfall-Modell" war das der Fall). In modernen Projekten - insbesondere in solchen die auf agile Software-Entwicklung (beispielsweise SCRUM) setzen - können die Anforderungen während eines Projekts regelmäßig dynamisch angepasst und erweitert werden.

Planung

Projekte starten meist mit einer Idee, vagen Anforderungen oder ungefähren Zielen. Oft steht nicht fest was am Ende erreicht werden soll oder welche Vorteile eine Umsetzung bietet. Die Planungsphase ist sehr wichtig und wird häufig unterschätzt. Zu diesem Zeitpunkt geht des darum Sie vor möglichen Fehlinvestitionen oder Fehlern zu schützen welche später teuer werden können. Viele Unternehmer investieren zu wenig Zeit in die Planungsphase. Es geht darum herauszufinden welches Potential ein Projekt hat und was damit erreicht, eingespart oder verbessert werden kann.

Anforderungsanalyse

Sobald die Vorstellungen zu einem Projekt konkreter sind und man sich sicher ist, dass man es auch wirklich umsetzen will beginnt die Phase der Anforderungsanalyse. Je nach Projektgröße kann das eine kurze oder bereits sehr intensive Phase sein. Im Enterprise-Umfeld gibt es eigene Stellen allein für das "Requirements Engineering". Es geht darum genau festzuhalten was mit einem Projekt erreicht werden soll und welche "Success Metrics" ein Projekt hat.

Software Architektur

Die Software Architektur beschreibt die grundlegenden Komponenten und deren Zusammenspiel innerhalb eines Software-Systems. Bei größeren Projekten ist eine wohlüberlegte Software Architektur manchmal der Schlüssel zum Erfolg. Viele Projekte scheitern oder werden mühsam weil Fehler in der grundlegenden technischen Planung gemacht wurden.

Im weiteren Sinne ist auch die Auswahl der Technologien, Systeme und Programmiersprachen Teil der Software Architekturphase. Oft werden bestimmte Technologien, Tools oder bestimmte Software für die Umsetzung schon vor der Anforderungsanalyse festgelegt was sich nicht selten als Fehler entpuppt. Mit einem solchen Vorgehen beraubt man sich selbst der Möglichkeit die bestmögliche Wahl zum richtigen Zeitpunkt zu treffen.

Software Design

Die Software Design Phase bzw. Software Engineering Phase ist bereits sehr technisch und konkret. In dieser Phase werden die Anforderungen auf Basis der Anforderungsanalyse und die bereits teilweise recht konkreten Entscheidungen der Software Architektur in noch konkretere kleine Probleme aufgeschlüsselt die es zu lösen gilt - ganz nach dem Prinzip "Divide and Conquer".

Es wird nach bestehenden Modulen und Bibliotheken gesucht um Probleme optimal zu lösen, konkret zu implementierende Module werden festgelegt. Ein wichtiges Prinzip in dieser Phase ist das Prinzip "lose Kopplung, hoher Zusammenhalt". Module in einer wohlüberlegten Software sollten möglichst einen ganz bestimmten Zweck erfüllen und wenig Abhängigkeiten zu anderen Modulen haben. So sind sie bei Bedarf am ehesten austauschbar und wiederverwendbar.

Noch konkreter wird die Software Design Phase mit beispielsweise ER-Diagrammen oder Klassendefinitionen welche einen direkten Plan für die Implementierung darstellen. Auch die Erstellung eines visuellen Designs durch professionelle GrafikerInnen ist Teil dieser Phase falls eine visuelle Benutzeroberfläche vorgesehen ist.

Implementierung / Entwicklung

Sofern die vorherigen Phasen wohlüberlegt und gewissenhaft ausgeführt wurden, ist die Implementierung selbst oft das geringste Problem. Hier ist vor allem wichtig sich an "Clean Code"-Richtlinien zu halten, logisch zu denken und keine typischen Fehler zu begehen. Programmcode sollte leicht lesbar, verständlich und gut wartbar sein. Funktionen und Objekte sollen immer einen bestimmten Zweck erfüllen und bei Bedarf wiederverwendet werden können. Das Prinzip "lose Kopplung, hoher Zusammenhalt" ist auch bei der Implementierung von essentieller Bedeutung.

Saubere Programmierung bedeutet am Anfang meist einen etwas höheren Aufwand, kann aber im späteren Projektverlauf nahezu endlos Zeit und Geld sparen. In großen Projekten die schlampig programmiert wurden fließen mitunter ganze Jahre in sogenanntes "Refactoring" - manche müssen sogar komplett neu entwickelt werden. Daher ist Qualität und Sauberkeit in der Implementierung von herausragender Bedeutung. Wichtig ist auch insbesondere eine ordentliche Versionsverwaltung - beispielsweise mit Git.

Testen / Qualitätssicherung

Ein Programm sollte für jeden möglichen Input einen entsprechend sinnvollen Output liefern. Tut ein Programm das nicht - indem es beispielsweise abstürzt, endlos weiterläuft oder schlicht und einfache falsche oder unerwünschte Ergebnisse liefert - nennt man das einen "Bug". Das kann im Produktiveinsatz sehr ärgerlich sein und mitunter erheblichen Schaden anrichten.

Aus diesem Grund ist das Testen ein wichtiger Prozess im Lebenszyklus einer Software. Umso fahrlässiger ist es, das Testen aus Zeit- oder Budgetgründen zu vernachlässigen. Automatisiertes Testen kann weitaus mehr mögliche Fälle abdecken als manuelles Testen. Im "Test-driven development" schreiben Programmierer manche Tests sogar noch vor der Implementierung.

Deployment

Ist eine Software oder ein bestimmtes Feature schließlich entwickelt kann es in den Produktiv-Einsatz gehen. Auch die Auswahl der richtigen Infrastruktur spielt eine wichtige Rolle. Möglichst hohe Ausfallsicherheit, Backups, und gute Performance spielen beim Deployment eine wichtige Rolle.

Moderne Deployment Strategien wie "Continous Integration / Continous Delivery" - kurz CI/CD - benötigen ebenfalls anfangs einen Mehraufwand der sich später aber in vielerlei Hinsicht lohnen kann.

Wartung / Monitoring / Live-Betrieb

Mit dem Deployment eines Projekts ist es meist noch nicht vorbei. Zum einen unterliegen IT-Infrastrukturen und Projekte einem ständigen Wandel, sie müssen mit neuer Software kompatibel sein und mehr oder weniger häufig modernisiert werden. Außerdem muss der laufende Betrieb regelmäßig überwacht werden, für den Fall dass ein Fehler auftreten sollte.

In dieser Phase sollte man die Belohnung dafür erhalten dass man in den vorherigen Phasen sauber und wohlüberlegt gearbeitet hat. In diesem Fall sind die Wartungskosten meistens verhältnismäßig gering, es treten möglichst keine Fehler auf und unter Umständen gewünschte Erweiterungen und Verbesserungen können problemlos implementiert werden. Ein reibungsloser Betrieb ist meiner Meinung nach ein Kernziel von jedem Software-Projekt.

Sprachen & Frameworks

Jedes Projekt ist anders und daher müssen auch für jedes Projekt individuell die besten Werkzeuge, Techniken und Technologien gewählt werden. Gerne stelle ich eine kleine Auswahl der von mir häufig genutzten Programmierspachen & Frameworks vor.

PHP

Die populäreste aller Skriptsprachen für die Web-Entwicklung hat sich von einer einfachen Template-Sprache zu einer voll funktionsfähigen objektorientierten Programmiersprache weiterentwickelt. Mittlerweile lassen sich mit PHP und modernen Frameworks (z.B. wie beispielsweise Symfony oder Laravel) fantastische Ergebnisse in vergleichsweise kurzer Zeit erzielen.

Die meistgenutzten CMS sind allesamt PHP-basiert. Bei größeren PHP-Projekten braucht man allerdings vor allem talentierte Programmierer, da PHP sich durch vergleichsweise lasche Regeln auszeichnet und daher auch schlechten und schwer wartbaren Code erlaubt.

Java

Die Programmiersprache Java ist ein starker Allrounder, der sowohl im Web- als auch für Desktop-Zwecke plattformübergreifend für die Entwicklung eingesetzt werden kann. Java hat vergleichsweise strenge Regeln und setzt stark auf Objektorientierung.

Web-Projekte die mit dem beliebten auf Java basierenden Spring-Framework umgesetzt werden sind stabil, skalierbar und in der Regel gut wartbar. Da ein gewisser Aufwand hinter großen Java-Projekten steckt, wird Java häufig im Enterprise-Bereich eingesetzt.

Python

Python ist eine sehr schöne Allzweck-Programmiersprache und laut Tiobe-Index die Sprache mit der am schnellsten wachsenden Benutzerzahl. Python legt wie Java viel wert auf schönen und lesbaren Code, ist allerdings von den Regeln her nicht ganz so streng.

Man kann Python also quasi als Kompromiss zwischen Java und PHP betrachten. Für Python Web-Projekte wird am liebsten das Django-Framework verwendet das sich selbst als "Framework für Perfektionisten mit Deadlines" bezeichnet.

Haskell

Die funktionale Programmiersprache Haskell ist funktional und unterscheidet sich daher grundlegend von den objektorientierten Sprachen. Da viele funktionale Elemente auch in Sprachen wie PHP, Java und Python Einzug gehalten haben ist es unbedingt empfehlenswert auch eine funktionale Sprache zu beherrschen, da es einem über Projektgrenzen hinweg viel flexibler in der Implementierung bestimmter Anforderungen macht.

SQL

Hinter fast jeder Anwendung/fast jedem Web-Projekt befindet sich eine Datenbank, die für das Speichern der Daten verantwortlich ist. Die Datenbank wird durch ein Datenbank Management System verwaltet (DBMS). Dieses zeichnet sich in der Regel dadurch aus, dass es für die Einhaltung bestimmter Prinzipien in der Datenspeicherung sorgt wie beispielsweise das AKID-Prinzip (Atomarität, Konsistenz, Isolation und Dauerhaftigkeit).

Um mit der Datenbank zu kommunizieren braucht es eine Abfragesprache, für die meisten Datenbanken ist das nach wie vor SQL (Structured Query Language). SQL ist standardisiert und ist für die unterschiedlichen DBMS (MySQL, PostgreSQL, Oracle, MSSQL) in unterschiedlichen Dialekten implementiert. Auch wenn Datenbanken immer öfter hinter ORMs (objektrelationalen Mappern) wie Doctrine (PHP) oder Hibernate (Java) liegen, gehören fortgeschrittene SQL Kentnisse zum Grundwerkzeug jedes Backend-Programmierers.

HTML 5, CSS 3 und SASS

Virtuoser Umgang mit HTML und CSS sind eine Grundvorraussetzung für das Erstellen sauberer Web-Interfaces. Und das ist schließlich das, was Benutzer in aller Regel zu sehen bekommen. HTML 5 & CSS 3 sind im engeren Sinn keine Programmiersprachen, sondern deklarative "Domain-spezifische" Sprachen.

Heutzutage gibt es viele Tools und Angebote die fertiges HTML & CSS generieren. Das ist nur bedingt empfehlenswert, da häufig nur ein geringer Teil des Codes genutzt wird und die Projekte Gefahr laufen unflexibel, überladen und schwer wartbar zu sein. Sauberes HTML & CSS von Anfang an ist bei größeren Projekten unabdingbar, ansonsten kann die Wartung der Projekte später sehr teuer und aufwändig werden. Im Gegensatz zu visuellen Generatoren sind CSS Preprocessors wie beispielsweise SASS durchaus empfehlenswert. Sie ermöglichen kompakteren und flexibleren Code, sowie mehr programmiererische Freiheit.

JavaScript (ES6)

JavaScript ist nach wie vor alternativlos für dynamische Programmierung in Web-Browsern (abgesehen von CSS-Animationen). JavaScript eignet sich sowohl für ganz kleine Aufgaben als auch für die Erstellung komplexer Single-Page Web Applikationen. Auch JavaScript (von Java abgeleitete Skriptsprache) hat sich von einer vergleichweise "eingschränkten" Sprache zu einer relativ mächtigen Sprache weiterentwickelt (ECMAScript 6). ECMAScript 6 kann zu klassischem JavaScript umgewandelt werden, so dass alle wichtigen Webbrowser damit umgehen können.

Viele große Projekte (oder zumindest deren Frontend) basieren auf modernen JavaScript Frameworks wie Angular oder React, während für kleine Aufgaben oft das jQuery Framework verwendet wird. Bei JavaScript ist der Einsatz von Frameworks je nach Aufgabe grundsätzlich empfehlenswert.

CMS & DXP

Pimcore (DXP inkl. CMS)

Pimcore ist eine auf Symfony basierende Digital Experience Platform mit der Software Entwickler auch die komplexen Strukturen großer Unternehmen digitalisieren und automatisieren können. Es ist dabei derart flexibel, erweiterbar und performant, dass es mitunter mehrere andere Systeme komplett ersetzen kann.

Sollten Sie ein größeres Web- oder Automatisierungsprojekt planen können Sie sich gerne an mich wenden. Auf Basis meiner langjährigen Erfahrungen berate ich Sie gerne. Je nach Projektgröße setze ich ihr Projekt direkt um oder vermittle Sie an meinen derzeitigen Arbeitgeber Brainformance IT-Services GmbH.

Pimcore Developer Senior - Zertifizierung 2020
Pimcore Developer Junior - Zertifizierung 2020

WordPress (CMS)

WordPress ist das meistgenutzte Content Management System der Welt, angeblich basiert fast ein Drittel des gesamten WWW auf WordPress. Der Grund dafür ist, dass WordPress für fast alle kleineren und mittelgroßen Projekte eine gute Basis bildet, mit der Projekte in Rekord-Zeit umgesetzt werden können. Als WordPress-Experte habe ich viele Erweiterungen geschrieben, Bücher gelesen, ein eigenes Shop-System implementiert und sogar eine wissenschaftliche Arbeit über WordPress verfasst.

Für WordPress gibt es aufgrund der weiten Verbreitung viele "Out-of-the-Box"-Lösungen, weswegen sich technisch unerfahrene Personen oft als "WordPress-Entwickler" bezeichnen. Dadurch ist das System teilweise zu Unrecht in Verruf geraten. Man muss aber ehrlicherweise auch sagen dass die Firma Automattic, die hinter dem Open-Source CMS steht, gelegentlich Entscheidungen trifft die professionelle Entwicklung nicht gerade begünstigen.

Sprecher am WordCamp Vienna 2020

Weitere

Grundsätzlich arbeite ich auch mit weiteren CMS. Beispielsweise Shopware (für Shops) oder October CMS. Unterschiedliche Projekte haben unterschiedliche Anforderungen und anhand der Anforderungen sollte das passende Tool ausgewählt werden. Manche Projekte benötigen überhaupt kein CMS und werden allein mithilfe bestimmter Frameworks umgesetzt.

Über Software-Entwicklung

Ein erfolgreiches Projekt benötigt gutes Projektmanagement, koordinierte Arbeitsabläufe und eine sinnvolle, realistische Zeitplanung. Gute Kommunikation zwischen allen beteiligten Parteien ist unabdingbar. Bei Bedarf unterstütze ich Sie gerne.