Mein Spezialgebiet ist das effiziente Programmieren, sowohl für Desktopprogramme als auch im Embedded-Bereich. Effizient heißt für mich dabei:
Effiziente Ausführung der App bzw. des Programms
- schnell ausführbar (Zeitkomplexität, statische Speicherverwaltung, Cacheausnutzung, …)
- geringer Ressourcenverbrauch (Speicher, Handles, …)
- möglichst keine Wartezeiten bei Benutzerinteraktionen (z.B. unmittelbare Reaktion in GUIs)
- paralleles Rechnen sinnvoll ausnutzen
- dynamisches Erzeugung von Maschinencode vs. Optimierung durch moderne Compiler und CPUs
- spezielle, z.T. eigene Implementierungen von Bibliotheksfunktionen
- …
Effizientes Implementieren
- Nutzung der richtigen Programmiersprache(n)
- Nutzung von Versionsverwaltungs- und Vergleichs-Tools
- saubere Projektstruktur
- Trennung von allgemeinen Aufgaben (Bibliotheksfunktionen) und eigentlichen Algorithmen
- Code-Guidelines verwenden
- Clean Code (wo möglich, nach Robert C. Martin)
- sauberer Code (einheitliche Formatierung, …)
- verständliche Benennungen (für Module, Funktionen, Variablen, …)
- Kommentare im Code, um Ideen/Hintergründe zu beschreiben
- Rapid Prototyping
- Refactoring
- KI-gestütztes Implementieren (z.B. Nutzung von KI-basierter Autovervollständigung)
- Nutzung automatischer Code-Snippets
- Nutzung von Code-Metriken
- …
Effizientes Testen
- Test-Driven-Development (TDD)
- häufiges Kompilieren (Erkennung von Syntaxfehlern und Code-Warnungen)
- Codeanalyse
- Unit-Tests
- Test-Automatisierung
- unabhängige Tests (z.B. alternative Algorithmen, Invarianten, …)
- Nutzung von Leistungsanalyse- und Profiling-Tools
- Statistiken
- …
Effiziente Fehlersuche
- Vermeidung von Fehlern durch saubere Implementierung und Asserts
- spezielles Assert- und Exceptions-Konzept
- zusätzliche Asserts im Debug-Modus
- Ausnutzung der Möglichkeiten moderner Debugger
- automatische und konfigurierbare Brerakpoints
- Debuggen im Release-Mode
- aktivierbare Anpassungen und Erweiterungen von Datentypen im Debug-Modus
- spezielles Vorgehen bei rekursiven Algorithmen
- …