Erfahrung

Während meiner Laufbahn als Softwareentwickler hatte ich die Gelegenheit mich an einer Vielzahl von Herausforderungen und Technologien zu beweisen. Um Ihnen einen Eindruck zu ermöglichen, in welcher Form ich Ihnen darum bei ihren Herausforderungen künftig als Freiberufler einen Dienst erweisen kann, versuche ich nachfolgend zu vermitteln, in welchen Bereichen der Produkt- und Projektentwicklung ich in der Vergangenheit bereits tätig war.

  • C# (4-latest)
  • Roslyn
  • WPF
  • NetCore
  • Xamarin Forms
  • Xamarin iOS
  • Xamarin Android
  • ASP WebForms
  • ASP MVC 5
  • ASP WebApi 2
  • ASP NetCore
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • Angular
  • React
  • WCF
  • SAP NCO
  • PHP
  • Delphi
  • Visual Basic
  • MCP (Microsoft certified professional)
  • MCSD (Microsoft certified solution developer)
  • MS Programming in HTML5 with JavaScript and CSS3 Specialist

Angestellter bei der Firma Allatnet Internetsysteme (3 Jahre)

In dieser Firma war die Hauptarbeitslast die Umsetzung von Kundenprojekten, welche in der Regel Werbefirmen waren, welche die technische Umsetzung von Webseiten und Webanwendungen an diese Firma weitergegeben hatten, nachdem sie sich auf ein Design festgelegt hatten.

  • Umsetzung von ca. 30 Projekten für Kunden unter Verwendung von PHP, HTML, CSS, jQuery und xajax unter Verwendung der üblichen CMS Systeme, sowie dem damaligen firmeninternen CMS.
  • Fehlerbehebungen und Weiterentwicklung des firmeninternen CMS.
  • Entwicklung einer Webanwendung, welche den Zweck hatte für Mitarbeiter und Führungspersonen Persönlichkeitsanalysen durchführen zu können, welche dann entsprechend der Notwendigkeiten an Schulungen teilnehmen konnten, oder entsprechend ihrer Fähigkeiten eingesetzt wurden.
  • Entwicklung einer Webanwendung, deren Aufgabe es ist bestehende papier- und kommunikationslastige Arbeitsabläufe innerhalb der Firma technisch zu unterstützen und das Einhalten der Firmenprozesse zu vereinfachen.

Angestellter bei der Firma Solvum GmbH & Co. KG (7 Jahre)

Das Hauptgeschäft bei dieser Firma war die Produktentwicklung einer Software, die die Mitarbeiter der Kunden beim Durchführen von Rollouts unterstützt. Abgesehen davon gab es auch einen Bereich der Individualentwicklung die einen Hauptteil der Erfahrung ausmacht, die ich in der Softwareentwicklung machen durfte, da ich auf Grund meiner Begeisterung dafür, mich in neue Themen und Technologien einzuarbeiten, schnell dazu kam in den Projekten mein Know-How einzusetzen und zu erweitern.

Tätigkeiten und interessante Aufgabenbereiche die ich im Rahmen meines Arbeitsverhältnisses wahrgenommen haben waren unter anderem:

Produktentwicklung der Webanwendung SiteTracker (ASP WebForms, ASP MVC 5 / WebApi 2, WindowsService, Roslyn)

SiteTracker ist ein Hybrid aus ASP Webforms und einigen Bereichen die mittlerweile unter ASP MVC entwickelt werden. Es handelt sich um eine technisch abstrakte Anwendung, da es dem Benutzer ermöglicht wird dynamische Datenstrukturen anzulegen und zu warten.

  • Planung, Koordinierung und Implementierung von neuen Modulen
  • Fehlerbehebungen und Implementierungen von dynamischen Controls in WebForms
  • Entwicklung von eigenem ORM der den firmeninternen Entwicklungsaufwand neuer Module reduziert und die alte Datenschicht abgelöst hat (Dapper war zu dieser Zeit noch nicht bekannt und andere Alternativen zu langsam)
  • Abstraktion der Datenbankebene um mehrere Platformen unterstützen zu können
  • Beseitigung von Speicherlecks
  • Buildautomatisierung über C# BuildTasks, PowerShell und MSBuild Skripte
  • UnitTests für Kernmodule
  • Entwicklung von Kopiermodul, welches die Daten der Template-Logik dupliziert und ein systemverträgliches Kopieren ermöglicht, um dem Kunden Arbeit bei der Verwaltung seiner Datenstrukturen zu ersparen
  • Entwicklung von Roslyn Compileranalysern um die Codequalität zu steigern und Fehler in der Entwicklung zu verringern und bereits beim Buildvorgang erkennen zu können z.B Implementierungsstellen welche Speicherlecks verursachen können oder zu Threading deadlocks führen.
  • Konzeptionierung und Entwicklung einer versionierbaren API-Schicht für externe Clients
  • Entwicklung einer Expression-basierten Library, die eine Codetrennung und Verwendung von API Funktionen in externen Clients vereinfacht
  • Entwicklung einer dynamischen Layout Engine, die es Endanwendern erleichtert ohne HTML-Kenntnisse benutzerdefinierte Ansichten zu erstellen
  • Rewrite der originalen Windows-Dienststruktur um eine parallele Ausführung von Dienstaufgaben zu gewährleisten
  • Performanceanalysen und entsprechende Optimierungen sowohl im C#- als auch im MSSQL-Bereich
  • Entwicklung und Integration von ServiceLocator um ursprüngliche Singletons im Code zu reduzieren
  • Allgemeine Planung und Konzeptionierung von kleineren, erweiterbaren Modulen wie z.B. Validierungsfilter die bestimmte Daten sowohl serverseitig als auch clientseitig vor dem Speichern überprüfen

Projektentwicklung SiteTracker Offline (WPF, Basic, Handscanner)

Diese Anwendung ist für eine Interaktion mit der Webanwendung konzipiert und ermöglicht es Endanwendern Anhand eines fest definierten Workflows, welcher unter anderem die Arbeit mit Barcodes mit einbezieht, Bearbeitungsvorgänge durchzuführen und diese dann im Anschluss mit der Hauptanwendung zu synchronisieren und Datenkonflikte entscheidungsbasiert aufzulösen.

  • Konzeptionierung und Entwicklung der Hauptanwendung
  • Konzeptionierung und Entwicklung der Konfliktauflösung auf der Seite der Webanwendung
  • Wartung und Weiterentwicklung des Visual Basic Moduls welches über die gerätespezifische Komponente Daten austauscht und das Gerät steuert

Produktentwicklung SiteTracker Mobile (Xamarin Forms, Xamarin iOS, Xamarin Android)

Diese Anwendung wurde entwickelt um Endanwendern zu ermöglichen Daten in die Hauptwendung zu übertragen und typische Vorgänge direkt durchführen zu können, statt umständlich über Importe/Exporte arbeiten zu müssen.

  • Entwicklung von Prototyp basierend auf Xamarin Forms
  • Entwicklung und Konzeptionierung der Hauptanwendung
  • Implementierung von CustomRenderer für iOS und Android um plattformspezifische Funktionalitäten zu verwenden, sowie ein Maximum an Renderingperformance nutzen zu können
  • Integration der ExpressionApi, die zu diesem Zweck geschaffen wurde, um mit der Web API, auf eine fehlersichere und abwärtskompatible Art arbeiten, kommunizieren zu können
  • Integration von Analytics sowie Auswertung und Behandlung von Problemen die auf den jeweiligen Geräteversionen entstanden sind
  • Entwicklung von Buildmechanismus, der automatisiert bei Release Modus an Analytics Symbole hochlädt, damit jeder Fehler einer veröffentlichten Version nachvollzogen werden kann

Projektentwicklung Mobile Client zur Kommunikation mit Delphi WebAPI (ASP NetCore, Xamarin iOS, Xamarin Android)

Ein Kunde hatte die Anforderung, dass es eine ASP WebApi Aufrufe an eine DelphiAPI delegiert und wiederum eine Webanwendung, sowie externe mobile Clients diese Daten verwenden können um Auswertungen anzuzeigen. Die DelpiAPI wurde hierbei vom Kunden zur Verfügung gestellt.

  • Konzeptionierung sowie Koordination von Entwicklungsaufgaben mit Mitarbeitern im Bereich der Webanwendung
  • Entwicklung des nativen iOS Clients, welcher mit der NetCore API kommuniziert
  • Konzeptionierung und Entwicklung von Modulen welche in beiden Bereichen die Datenbereitstellung vereinheitlichen

Projektentwicklung an einer Silostatik Anwendung (WPF)

Diese Anwendung ist eine Individualentwicklung für einen Kunden der mit Hilfe der Anwendung Zeit und Kosten in der Planung und Entwicklungsphase sparen will. Die ursprüngliche Variante der Berechnung wurde hierbei voll ersetzt und auf eine benutzerfreundliche UI reduziert.

  • Entwicklung von ViewModels die abhängig von Einstellungen ausgetauscht werden
  • Entwicklung der Views
  • Abstraktion der Datenbankebene um mehrere Platformen unterstützen zu können
  • Integration von mehreren Datenbanktypen
  • Beseitigung von Speicherlecks
  • Entfernen von UI Freezes
  • Erstellung von Reflection-Logik für Kernprozesse um den Bereich der Models/ViewModels wartungsfreundlicher zu machen

Projektentwicklung einer SAP-Schnittstelle

Hierbei handelt es sich um eine bestehende Dienstanwendung, die auch andere Aufgaben erledigt, welche um eine generische SAP Schnittstelle erweitert wurde. Die Anforderung war es einen Datenaustausch mit einem SAP Endpunkt zu ermöglichen und sowohl als Client als auch als Server zu fungieren. Sinn und Zweck der Schnittstelle ist es, den alten Dienst, welcher in Delphi implementiert ist, zu ersetzen, da die Performance der alten Implementierung unzureichend ist.

  • Integration von SAP .NET Connector 3.0
  • Laden und Speichern von Übertragungsdaten
  • Implementierung von qRFC, tRFC und bgRFC Logiken
  • Transaktionshandling
  • Asynchrone Interaktion mit der Komponente um das Maximum an Performance herauszuholen und parallele Vorgänge zu ermöglichen
  • Beseitigung von Speicherlecks in der Bestandsanwendung

Schulungen

Auf Grund des hohen Lernspektrums, die sich bei allen meinen Aufgaben und Projekten ergeben haben, hat es sich angeboten andere an meinen gemachten Erfahrungen Teil haben zu lassen.

  • Schulung interner Mitarbeiter im Bereich der Softwareentwicklung mit den Bereichen MVVM, WPF, MVC, CSS, HTML, C# latest, asynchrounous programming, Dependency Injection uvm.
  • Schulung externer Entwickler in Kundenauftrag in den Bereichen MVVM, C# basics+advanced, WPF, DataTemplating, Control basics
  • Vermittlung von Know-How im Bereich modularer Entwicklung, Clean Code Principes, DRY, SPM und andere
  • Vermittlung von Know-How für effizienten Umgang mit Jetbrains ReSharper
  • Diagnose von Performanceproblemen mit Hilfe der entsprechenden Redgate Tools

Open Source Projekte (5 Jahre)

Als ich während meiner Laufbahn als C#-Entwickler die Open-Source Entwicklung für mich kennengelernt habe, ergab sich für mich ein weiterer Bereich in dem ich mich unabhängig von meinem täglichen Geschäft für diesen Beruf weiterbilden konnte.

Ein Auszug an nennenswerten Projekten wäre hierbei:

PCRemoteController (Windows Service, UDP/TCP, Xamarin Android)

Hierbei handelt es sich um eine Server-/Clientanwendung, wobei der Server auf einem PC als Dienst läuft und unter Verwendung von UDP+TCP eine Kommunikation mit einer Xamarin App auf dem Handy ermöglicht.

VisualStudio ProjectTemplates (Visual Studio Extension)

Eine VisualStudio Extension die es mir vereinfachen sollte Desktopanwendungen, Windows Services und Entity Framework Projekte schneller erstellen zu können ohne immer wieder Boilerplate Code für Logging und Anwendungshandling zu duplizieren.

VisualStudio MultiProjectTemplateGenerator (WPF, Tooling)

Da es beim Anlegen von Templates für Visual Studio Extensions einen recht hohen manuellen Aufwand gibt, wenn es sich um eine Solution handelt welche mehrere Projekte umfasst, habe ich mir zu diesem Zweck eine Desktop Anwendung erstellt, die diesen Prozess vollständig automatisiert und das Anlegen von Konfigurationen ermöglicht um die Generierung anhand gewisser Parameter zu erlauben und einem die manuellen Schritte in Visual Studio erspart.

NugetUnlister (dotnet global tool)

Bei dieser Anwendung handelt es sich um ein dotnet global tool, welches die Funktionalität von Nuget erweitert und für mich zum Zweck der Buildautomatisierung existiert, da es zumindest zum Zeitpunkt der Erstellung keine automatisierte Möglichkeit gab ältere Alpha Versionen von Nuget-Packages die Veröffentlichung zu entziehen.

Amusoft.UI.WPF (WPF)

Bei diesem Projekt handelt es sich um eine WPF-Control-Library, welche dem Zweck dient, häufig von mir verwendete Controls sowie Converter, Commands und andere Helpermethoden bereitzustellen.

svgToMobile (Tooling, Konsolenprogramm)

Bei svgToMobile handelt es sich um eine Konsolenanwendung die als Eingabe SVG-Dateien akzeptiert und sie in gewünschte Formate und Auflösungen in eine Ordnerstruktur transformiert, die jeweils unter iOS und Android so üblich ist.

MovieManager (WPF, Web Parser+Crawler)

Bei MovieManager geht es um eine Desktopanwendung die es vereinfacht den Überblick zu behalten, wann neue Folgen einer Serie herausgekommen sind und ob man diese ggf. bereits gesehen hat. Hierbei verbindet sich das Tool mit einem konfigurierbaren Portal um Informationen über Serien/Filme aus dem Internet zu laden.

Amusoft.EventManagement (Library)

Bei diesem Projekt handelt es sich um eine Control library, welche eine andere Variante anbietet .NET events zu verwenden, ohne der Gefahr ausgeliefert zu sein, dass durch das Anbinden an Events ein potentielles Speicherlecks entsteht. Der Knackpunkt an diesem Projekt sind dynamisch kompilierte Methoden, um das Maximum an Performance zu ermöglichen.

Amusoft.Reflection (Library)

Bei diesem Projekt handelt es sich um eine Control library, welche häufig verwendete Reflection Aufgaben vereinfacht. Die bedeutendste Erfahrung in diesem Projekt war das Erstellen von IL-Code zur Laufzeit, welche mir ein tieferes Verständnis daran ermöglicht hat, wie .NET unter der Haube funktioniert.

VolumeScanner2 (WPF, Tooling)

Bei diesem Projekt handelt es sich um eine Desktop Anwendung, welche es einem einfach macht herauszufinden auf welchem Pfad eines Laufwerks wieviel Speicherplatz verbraucht wird.

DynamicCodeGenerator (Build, Codegenerierung)

Dieses Projekt ist aus der Frustration über T4 Templates entstanden. Es ermöglicht während des Buildvorgangs unter Verwendung von Reflection des aktuellen Projekts neue Dateien zu erzeugen, was unter T4 mit erheblichen Schwierigkeiten verbunden war.

AjaxHub (ASP Webtooling)

Bei AjaxHub handelt es sich um eine neu erstellte Funktionsportierung von xajax, welches früher unter PHP weit verbreitet war. Der Vorteil hierbei ist, dass man auf dem C# Servercode einer Webanwendung eine API hatte, welche in HTML Bereiche neue Inhalte anhängen oder austauschen kann und roundtrips, sowie eine benutzerfreundliche UI einfacher umzusetzen macht.