Coding paradigm
posted on 14 Jun 2024 under category programming
| Datum | Sprache | Autor | Beschreibung |
|---|---|---|---|
| 11.12.2023 | Deutsch | Prüfer, Claus (Chief-Prüfer) | Coding Paradigm – Die wichtigsten Grundlagen der Softwareentwicklung |



Betrachtet man den Quellcode aktueller Softwaregenerationen, so fällt auf, dass häufig eine einheitliche Struktur, generische Programmieransätze sowie eine konsequente und nachhaltige Methodik fehlen. Dies ist ein Bereich, der Verbesserungspotenzial bietet.
Oftmals herrscht Zeitdruck, das Projektmanagement fordert schnelle Ergebnisse oder private Verpflichtungen beeinträchtigen die Konzentration. Dennoch ist es sinnvoll, eine eigenständige, durchdachte Arbeitsweise anzustreben und beizubehalten.
Gleichzeitig ist „100% Do-it-yourself“ nicht immer der optimale Ansatz. Ein wohlüberlegter Mittelweg – gemäß Aristoteles’ Lehre von der goldenen Mitte – führt häufig zu praxistauglichen Ergebnissen. Nach meiner Beobachtung profitieren viele aktuelle Softwareprojekte von einer ausgewogenen Balance zwischen Eigenleistung und der Nutzung etablierter Lösungen.
Hinweis: Das Neuschreiben von Software kann zu erhöhtem Zeitaufwand, Ressourcenverbrauch sowie weiteren Herausforderungen führen und sollte sorgfältig abgewogen werden.
Daniel Julius Bernstein setzte ein Preisgeld von 1.000 US-Dollar für denjenigen aus, der eine Sicherheitslücke in seiner Software djbdns findet – einer Software, die weltweit bis zum Jahr 2008 ohne nachgewiesene Schwachstelle betrieben wurde.
Da die vom Internet Consortium entwickelte DNS-Software „Bind“ (CNS und ANS) regelmäßig mit Sicherheitslücken behaftet war, entschied sich Bernstein, djbdns zu entwickeln, um die Sicherheit des Internets maßgeblich zu verbessern.
Hinweis: Bis heute wurde kein Remote-Code-Exploit bekannt, der einen erfolgreichen Angriff auf djbdns ermöglicht hätte. Lediglich eine grundlegende Schwachstelle im DNS-Protokoll erlaubte DNS-Cache-Poisoning.
Die wichtigsten zehn Regeln der Programmierung lauten:
* KISS: Keep it simple, stupid!
* Verwende bestehende, durchdachte und umfassend getestete Bibliotheken.
* Nutze git als Versionskontrollsystem.
* Setze agile Kollaborations- und DevOps-Tools ein (z. B. Kubernetes, GitLab, Stackfield).
* Erstelle zunächst ein Request for Proposal (RFP) und beginne erst danach mit der Entwicklung.
* Verwende gut strukturierte Datenmodelle für deine API (z. B. XML, JSON).
* Entwickle stets am geeigneten Punkt des Softwareprozesses.
* Schreibe ausreichend Tests (Unit- und Integrationstests).
* Dokumentiere das Projekt umfassend und verständlich.
* Wähle den Weg der goldenen Mitte (Aristoteles).
Das Känguru aus Marc-Uwe Klings „Die Känguru-Chroniken“ formuliert im Umfeld seines Boxclubs bemerkenswerte Wahrheiten, die sich auch auf die IT übertragen lassen. Die wichtigsten Lektionen sind:
1. Lektion: Wir wollen nicht programmieren. Wir müssen!
2. Lektion: Mitdenken!
Die konsequente Einhaltung von Regeln in der Praxis gestaltet sich jedoch oft schwierig. Insbesondere in großen Projekten – vor allem im Banken-, Versicherungs- und Serviceprovider-Umfeld – sind gute kommunikative Fähigkeiten und politisches Geschick hilfreich.
Eine unzureichend geführte Kommunikation oder mangelndes Verhandlungsgeschick können zu Frustration führen. In manchen Projekten spielen neben der technischen Sache auch politische Entscheidungen, persönliche Befindlichkeiten oder firmeninterne Hierarchien eine Rolle.
Auch hier zeigt sich: Habe ich mich an meine selbstgesetzten Regeln gehalten? Eine fundierte Argumentation kann selbst den kritischsten Projektleiter überzeugen, sofern sie nachvollziehbar und sachlich begründet ist.
Für eine saubere Code-Basis ist es insbesondere bei größeren Projekten unerlässlich, von Beginn an generische Ansätze zu verfolgen. Der Grad der Abstraktion sollte bereits in der Planungsphase wohlüberlegt festgelegt werden.
Für viele Projekte empfiehlt sich eine objektorientierte Grundlage, da sie zahlreiche Vorteile bietet. Die Gründe hierfür werden im Folgenden näher erläutert.
Die Wahl der geeigneten Programmiersprache ist ebenfalls von großer Bedeutung. Ist das Zielsystem Windows, Linux, Unix oder MacOS? Es ist sinnvoll, die Präferenzen und Expertise des Teams zu berücksichtigen – einer Java-orientierten Gruppe sollte man nicht unbedingt Python oder C++ als Grundlage vorschlagen.
Hinweis: PHP und MySQL haben in modernen Projekten zunehmend an Bedeutung verloren; es gibt oft geeignetere Alternativen.
Ein objektorientiertes Grundgerüst erleichtert das Refactoring erheblich und trägt zur Kostenersparnis bei. Wie so oft gilt: Eine solide Investition in die Basis ist das A und O für hochwertige Software.
Die Auswahl eines oder mehrerer geeigneter Testframeworks ist essenziell. Die korrekte Funktionsweise und Stabilität der Frameworks sollte vor ihrem Einsatz sorgfältig überprüft werden.
Hinweis: Das Selenium-Browser-Testframework befand sich beispielsweise vor etwa sechs Jahren in einem kaum praxistauglichen Zustand.
Die Wahl eines passenden Dokumentationssystems ist entscheidend. Ich habe mich nach längerer Evaluierung für das Sphinx-Framework entschieden, obwohl der Markt zahlreiche moderne Alternativen bietet.
Hinweis: Doxygen eignet sich besonders für C/C++-Projekte, während Sphinx flexibler ist und mit entsprechender Konfiguration auch für ansprechende C++-Dokumentation genutzt werden kann.
Regelmäßige Backups sind Bestandteil eines erfolgreichen Projektkonzepts. Hierbei empfehle ich den Einsatz leistungsstarker Rechner und moderner Virtualisierungstechnologien.
Viele Entwickler übersehen, dass nicht nur die technische Seite zu einem gelungenen Gesamtkonzept gehört. Schwächen in der Organisation können ein Projekt rasch zum Scheitern bringen.
Die folgenden Punkte unterstützen eine strukturierte Organisation und Kommunikation im Projektumfeld.
Freelancer oder Festanstellung – das ist hier die Frage. Als Freelancer kann man projektbezogen hohe Honorare erzielen; gleichzeitig trägt man Verantwortung für Akquise und Haftung.
Eine Festanstellung bietet hingegen ein sicheres Einkommen, fällt im Vergleich zur Freelancer-Vergütung jedoch meist deutlich geringer aus.
Folgende Aspekte sind beim Aufbau einer serviceorientierten Architektur zu berücksichtigen:
* Auf welche Web-Services ist das Projekt angewiesen?
* Werden die Services gemietet oder Inhouse bereitgestellt?
* Welche Kosten entstehen?
* Erfordern die Anforderungen eine Skalierung der Services?
* Welche Provider werden für externe Services gewählt?
* Welche Tools für das Cloud-Infrastruktur-Management kommen zum Einsatz?
* Bestehen weitere spezielle Service-Anforderungen?
Für umfangreiche Projekte ist der Faktor Skalierung von zentraler Bedeutung. Es gilt, die passende Cloud-Infrastruktur auszuwählen: AWS, Google Kubernetes oder vergleichbare Plattformen.
Hinweis: Die Wahl der Cloud-Infrastruktur sollte wohlüberlegt sein und zu den Projektanforderungen passen.
Zu Beginn ist die Klärung des Budgets entscheidend. Die Höhe des Budgets bestimmt, welche Regeln und Maßnahmen angewendet werden können. Bei unzureichendem Budget sollte kritisch geprüft werden, ob das Projekt unter diesen Rahmenbedingungen sinnvoll umgesetzt werden kann.
Renommierte Unternehmen sind oft bereit, in Qualität zu investieren, sofern nachvollziehbar dargelegt wird, inwiefern Investitionen dem Unternehmen langfristig zugutekommen. Auch „hohe“ Servicegebühren werden in solchen Fällen häufig akzeptiert.
Hinweis: Dies bedeutet jedoch nicht, dass Budgets unkritisch ausgegeben werden sollten. Alle Ausgaben müssen sorgfältig in den Projektplan integriert und betriebswirtschaftlich gerechtfertigt werden.
Teamaufbau und Kommunikation sind von großer Bedeutung. Die Etablierung grundlegender Kommunikationsstrukturen und regelmäßiger Teamabsprachen ist für eine effiziente Zusammenarbeit wichtig.
Externe Perspektiven können wertvoll sein. Security-Audits sollten in regelmäßigen Abständen durchgeführt werden, da sie zur Verbesserung der Softwarequalität beitragen können.