Wie macht man gute Software?

Wie macht man gute Software? IMS Blog

Wie macht man gute Software? Abgesehen davon, dass auch frau gute Software macht (jedenfalls hier bei IMS) ist die Frage gar nicht so einfach zu beantworten. Denn Software ist komplex. Und gute Software?  Ist paradoxerweise weniger komplex. Sie zu erstellen ist allerdings  komplexer. Denn für gute Software ist viel mehr zu tun als einfach nur Code zu schreiben.

Erst denken

Ein bisschen ist es mit der Software wie überall im Leben: Erst denken, dann handeln – und natürlich auch coden. Damit Code sauber und möglichst flexibel bleibt, sind im Vorfeld jeder Entwicklung allerhand Überlegungen anzustellen:

  • Was soll die Software leisten?
  • Was macht den Kern der Lösung aus?
  • Welche Elemente müssen möglichst robust programmiert werden?
  • Welche Elemente müssen möglichst flexibel programmiert werden?
  • Was ist anzubinden, einzulesen, auszugeben?
  • Wie füge ich die verschiedenen Elemente am sinnigsten zu einer funktionalen Einheit zusammen?

Mit Fragen dieser Art beschäftigt sich jeder Software-Entwickler ausgiebig, bevor er die erste Zeile schreibt. Im Team lassen sich diese Fragen übrigens noch besser beantworten, dann das Vier- (oder Sechs- oder Acht-) Augen-Prinzip hilft schon im frühen Stadium, mögliche Stolperfallen im Design zu erkennen und zu beseitigen.

Der Kopf als Werkzeug

Der Programmierer benötigt natürlich Werkzeuge. Ein guter Programmierer kann mit jedem Werkzeug Meisterschaft erlangen. Das Prinzip ähnelt dem des Universalhandwerkers: Der kann auch mit jedem Werkzeug arbeiten, muss aber ebenfalls für jedes Werkzeug die entsprechende Kenntnis haben.

Das eigentliche Werkzeug aber ist der Kopf. Hier werden die abstrakten Konstrukte jeder Software geschaffen. Und gute Konstrukte sind schön! Die Freude an der Schönheit der Software ist ein rarer Bonus im Berufsfeld des Software-Entwicklers.  Wichtig sind also sowohl Sprachenkenntnis auf der einen Seite als auch Fähigkeiten zu Mustererkennung und Abstraktionsvermögen auf der anderen. Das bedeutet im Detail:

Sprachen

Ob C#, Java, Python, HTML5, Basic, Ruby – wer programmieren will, muss seine Sprache(n) kennen. Das ist wie im Urlaub: Ohne Worte keine Brötchen. Sprachkenntnis ist somit elementar. Was ich nicht kenne, kann ich nicht ausdrücken. Was ich nicht ausdrücken kann, kann ich nicht programmieren.

Muster erkennen

Sitzt das Vokabular, kommt als nächstes die Mustererkennung. Muster gibt es in vollkommen verschiedenen Ausprägungen. Ein ganz einfacher, aber sehr wichtiger Punkt heißt z.B. "Wiederhole dich nicht"! Alles, was gleich oder ähnlich ist, braucht nur einmal programmiert zu werden, muss dann aber so gestaltet sein, dass es von allen Elementen, die diese Funktion benötigen, auch erreicht und genutzt werden kann.

Abstraktionsvermögen

Ebenfalls zur Mustererkennung gehört, zusammenhängende Funktionsfolgen zu erkennen und entsprechend umsetzen zu können. Das fordert zugleich das Abstraktionsvermögen, also die Fähigkeit, die Struktur des gesamten Produkts im Kopf aufbauen zu können. Denn nur, wer seine Aufgabe vollständig überblickt, ist auch in der Lage, die beste Lösung  zu definieren.

Logik mit und ohne Mathe

Hier wäre noch ein  Stichwort zu erwähnen: Logik. Wer programmieren will, muss logisch denken können, denn über allem  schwebt ja immer die Frage: Welche Aktion hat welche Folgen? Die Grundstruktur des logischen Denkens erlernt man schon in der Schule im Fach Mathematik, das deshalb für Software-Entwickler wichtig sein kann – aber nicht zwingend ist, denn obwohl das Denken ähnlich ist, ist es nicht gleich. Und komplexe Logik gibt es beispielsweise auch in der Philosophie (und da auch nicht bloß in Ludwig Wittgensteins Tractatus logico philosophicus).

Designprinzipien

Im nächsten Schritt folgen die Designprinzipien. Diese Prinzipien für das Design guter Software haben sich über die Jahre trotz gewaltiger technischer Veränderungen und Fortschritte kaum  gewandelt Ein allgemeingültiger theoretischer Ansatz wurde bereits in der objektorientierten Programmierung gefunden, und viele der Erkenntnisse treffen auch auf die Arbeit mit nicht-objektorientierten Sprachen zu.

Einige Beispiele sind:

  • Kapsele, was sich unterscheidet.
  • Adressiere Schnittstellen, statt eine Implementierung zu programmieren.
  • Jede Klasse deiner Anwendung sollte nur einen Grund haben, sich zu ändern.
  • Klassen sollten offen für Erweiterungen sein, aber Modifikationen ausschließen (OCP).
  • Vermeide Duplikate im Code, indem du abstrahierst, welche Kernfunktion erfüllt sein muss (DRY-Prinzip)
  • Jedes Objekt sollte nur eine einzige Funktion haben und jede Methode eines Objektes sollte hauptsächlich darauf abzielen, diese Funktion zu erfüllen (SRP)
  • Unterklassen sollten als Objekte ihrer Basisklasse verwendbar sein (LSP)

Das größte Don’t in diesem Kontext heißt bis heute: Schreibe keinen monolithischen Block. Das größte Do heißt entsprechend:  Schreibe strukturiert und in sinnvollen Funktionseinheiten.

Und noch ein Prinzip ist wesentlich beim Software-Design:  Sei geschmeidig gegenüber Änderungen! Änderungen finden ständig statt. Daher ist beim Entwurf einer Software von vorneherein darauf zu achten, welche Teile sich ändern werden und welche nicht. Die, die sich ändern werden, müssen so gestaltet sein, dass die Änderungen leicht zu implementieren sind und ihre Funktionalitäten robust gegenüber Änderungen sind.

Darum:

Es gibt nichts Gutes, außer man tut es, heißt es. Das gilt auch für Software – je komplexer, desto mehr. Und wie ist das jetzt mit der guten Software?

Bei IMS halten wir immer die Augen offen, damit unsere Software möglichst verlässlich funktioniert, optimal performt,  leicht anzuwenden ist und langfristig Nutzen stiftet.

Moderne Programmier-Standards sind dabei ebenso im Blick wie die jüngsten Entwicklungen bei Sprachen und Fremdsystemen. Eine 3-Tier Architektur ist genauso Pflicht wie Usability. Und mobile-friendly Design gehört ebenso dazu wie Weboptimierung und vieles andere mehr.

Vermutlich ist IMSWARE darum auch so erfolgreich im Markt.

 

Beste Grüße

Wie macht man gute Software? ksc RIB IMS

P.S. Software-Entwicklung ist Dein Ding? Dann schau´ doch mal bei unseren aktuellen Stellenangeboten vorbei...

 

IMS Team Kai-Uwe Schiffer
Beitrag erfasst von: Kai-Uwe Schiffer

Kai-Uwe Schiffer ist Leiter der Software-Entwicklung. Mit seinem Team verantwortet er die Umsetzung von Kundenanforderungen und Innovationen in robuste und attraktive Lösungen. Ständige Modernisierung der aktuellen Produktlinien ist sein besonderes Anliegen.

News Blog
Previous reading
IMS auf der ServParc im Juni 2019
Next reading
51. Jahrestagung der ATA