Coding paradigm

  • programming
  • paradigm
  • german

posted on 14 Jun 2024 under category programming

Post Meta-Data

Datum Sprache Autor Beschreibung
11.12.2023 Deutsch Prüfer, Claus (Chief-Prüfer) Coding Paradigm – Die wichtigsten Grundlagen der Softwareentwicklung

Grundregeln der Programmierung

EmojiScholarEmojiScholarEmojiScholar

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.

EmojiWarning Hinweis: Das Neuschreiben von Software kann zu erhöhtem Zeitaufwand, Ressourcenverbrauch sowie weiteren Herausforderungen führen und sollte sorgfältig abgewogen werden.

Das DNS-Desaster

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.

EmojiShield 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 zehn Grundregeln

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).

Einhaltung der Regeln

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.

Generische Programmierung

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.

Objektorientierte Programmierung (OOP)

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.

Programmiersprache und Umgebung

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.

EmojiBulb Hinweis: PHP und MySQL haben in modernen Projekten zunehmend an Bedeutung verloren; es gibt oft geeignetere Alternativen.

Refactoring

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.

Testing

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.

EmojiWarning Hinweis: Das Selenium-Browser-Testframework befand sich beispielsweise vor etwa sechs Jahren in einem kaum praxistauglichen Zustand.

Dokumentation

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.

EmojiBulb 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.

Backup

Regelmäßige Backups sind Bestandteil eines erfolgreichen Projektkonzepts. Hierbei empfehle ich den Einsatz leistungsstarker Rechner und moderner Virtualisierungstechnologien.

Projektanforderungen

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.

Rahmenbedingungen / Verträge

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.

Service / SOA

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?

Skalierung

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.

EmojiCloud Hinweis: Die Wahl der Cloud-Infrastruktur sollte wohlüberlegt sein und zu den Projektanforderungen passen.

Budget

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.

EmojiWarning 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.

Team / DevOps

Teamaufbau und Kommunikation sind von großer Bedeutung. Die Etablierung grundlegender Kommunikationsstrukturen und regelmäßiger Teamabsprachen ist für eine effiziente Zusammenarbeit wichtig.

Security / Audits

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.

Externe Referenzen