Einführung in Anti-Patterns

Anti-Patterns sind das genaue Gegenteil von Patterns. Denken Sie daran, dass Entwurfsmuster Beispiele für gute Programmierpraktiken sind, also Muster zur Lösung bestimmter Probleme. Aber Anti-Muster sind ihr komplettes Gegenteil, also Muster von Fehlern, die bei der Lösung verschiedener Probleme gemacht werden.

Zur guten Programmierpraxis gehört gerade die Vermeidung von Anti-Patterns. Denken Sie nicht, dass dies ein so unverständlicher theoretischer Müll ist – das sind spezifische Probleme, auf die fast jeder Entwickler gestoßen ist. Wer weiß, er ist bewaffnet!

Schauen wir uns einige Anti-Patterns an, die bei Anfängern häufig vorkommen:

  • Magische Zahlen und Zeichenfolgen
  • Gott-Klasse
  • Vorzeitige Optimierung
  • die Erfindung des Fahrrads
  • Erfindung des Einrads

Magische Zahlen und Zeichenfolgen

Eine magische Zahl ist eine Konstante, die im Code für etwas verwendet wird (meistens für die Datenidentifizierung), deren Zahl selbst ohne einen entsprechenden Kommentar keinen Sinn ergibt. Zahlen haben absolut keine Semantik.

Wenn im Code Ihres Projekts Zahlen auftauchen, deren Bedeutung nicht offensichtlich ist, ist das sehr schlecht. Ein Programmierer, der nicht der Autor eines solchen Codes ist, wird Schwierigkeiten haben, zu erklären, wie er funktioniert. Mit der Zeit wird es selbst dem Autor des Codes mit magischen Zahlen nicht mehr möglich sein, ihn zu erklären.

Zahlen erschweren das Verständnis und die Umgestaltung von Code. Die Hauptgründe für diesen Fehler sind die Eile bei der Entwicklung und mangelnde Programmierpraxis. Dieses Anti-Pattern sollte im Keim erstickt werden, indem vor Beginn der Entwicklung die Verwendung numerischer Konstanten festgelegt wird.

Um dieses Problem zu lösen, müssen Sie eine Variable erstellen, deren Name den Zweck der numerischen Konstante erklärt, und ihr den gewünschten Wert zuweisen.

Gott-Klasse

Das göttliche Objekt ist ein Anti-Pattern, das unter OOP-Entwicklern weit verbreitet ist. Ein solches Objekt übernimmt zu viele Funktionen und/oder speichert fast alle Daten. Dadurch haben wir einen nicht portablen Code, der zudem schwer zu verstehen ist.

Darüber hinaus ist ein solcher Code ziemlich schwierig zu warten, da das gesamte System fast ausschließlich von ihm abhängt. Gründe für diesen Fehler: Inkompetenz des Entwicklers, ein Entwickler übernimmt einen großen Teil der Arbeit (insbesondere, wenn der Arbeitsumfang das Erfahrungsniveau dieses Entwicklers übersteigt).

Es ist notwendig, mit diesem Ansatz umzugehen, indem Aufgaben in Teilaufgaben aufgeteilt werden, die von verschiedenen Entwicklern bearbeitet werden können.

Vorzeitige Optimierung

Eine vorzeitige Optimierung ist eine Optimierung, die durchgeführt wird, bevor der Programmierer über alle Informationen verfügt, die er benötigt, um fundierte Entscheidungen darüber zu treffen, wo und wie sie durchgeführt werden soll.

In der Praxis ist es schwierig vorherzusagen, wo ein Engpass auftreten wird. Optimierungsversuche vor Erhalt empirischer Ergebnisse führen zu einer Komplexität des Codes und dem Auftreten von Fehlern, bringen jedoch keine Vorteile.

Wie vermeiden? Schreiben Sie zunächst sauberen, lesbaren und funktionierenden Code mit bekannten und bewährten Algorithmen und Tools. Verwenden Sie bei Bedarf Profiling-Tools, um Engpässe zu finden. Verlassen Sie sich auf Messungen, nicht auf Vermutungen und Annahmen.

Beispiele und Funktionen

Caching vor der Profilerstellung. Verwendung komplexer und unbewiesener Heuristiken anstelle mathematisch korrekter Algorithmen. Eine Auswahl neuer, ungetesteter Frameworks, die sich unter Last möglicherweise nicht richtig verhalten.

Was ist die Schwierigkeit?

Es ist nicht einfach festzustellen, wann eine Optimierung verfrüht ist. Es ist wichtig, im Vorfeld Raum für Wachstum zu lassen. Sie müssen Lösungen und Plattformen wählen, die Ihnen eine einfache Optimierung und Wachstum ermöglichen. Manchmal wird auch eine vorzeitige Optimierung als Entschuldigung für schlechten Code verwendet. Beispielsweise verwenden sie einen O(n2)-Algorithmus nur, weil der Algorithmus O(n) schwieriger wäre.

die Erfindung des Fahrrads

Der Sinn dieses Anti-Patterns besteht darin, dass der Programmierer seine eigene Lösung für ein Problem entwickelt, für das es bereits Lösungen gibt, und oft auch viel erfolgreichere.

Der Entwickler hält sich für schlauer und versucht daher, trotz der Erfahrung seiner Vorgänger, für jede Aufgabe eine eigene Lösung zu finden. Meistens führt dies nur zu einem Zeitverlust und einer Verringerung der Effizienz des Programmierers. Schließlich dürfte die Lösung, wenn sie überhaupt gefunden wird, suboptimal sein.

Natürlich kann man die Möglichkeit einer unabhängigen Lösung nicht völlig ausschließen, da dies auf direktem Weg zur Copy-Paste-Programmierung führt. Der Entwickler muss sich durch die möglicherweise vor ihm liegenden Aufgaben navigieren, um sie kompetent zu lösen, indem er vorgefertigte Lösungen verwendet oder eigene Lösungen erfindet.

Der Grund für dieses Anti-Pattern ist sehr oft schlichter Zeitmangel. Und Zeit ist Geld.

Erfindung des Vierkantradfahrrads

Dieses Anti-Pattern hängt sehr eng damit zusammen, das Rad einfach neu zu erfinden – die Schaffung einer eigenen schlechten Lösung, wenn es eine bessere Lösung gibt.

Dieses Anti-Pattern nimmt doppelt so viel Zeit in Anspruch: Zuerst wird Zeit für die Erfindung und Implementierung Ihrer eigenen Lösung aufgewendet und dann für die Umgestaltung oder den Ersatz dieser.

Der Programmierer muss sich der Existenz verschiedener Lösungen für bestimmte Aufgabenbereiche bewusst sein und sich an deren Vor- und Nachteilen orientieren.

Alle Probleme, mit denen Sie als Programmierer konfrontiert werden, lassen sich in zwei Teile unterteilen:

  • Kluge Leute haben dieses Problem vor 30 Jahren gelöst
  • Kluge Leute haben dieses Problem vor 50 Jahren gelöst

Die meisten Programmierprobleme wurden bereits vor Ihrer Geburt erfolgreich gelöst . Sie müssen nichts erfinden – studieren Sie einfach die Erfahrungen anderer Menschen (dafür sind Bücher geschrieben).

Im Jahr 2022 können wir folgende Geburtstage feiern:

  • Programmiersprachen
    • C-Sprache wird 50 (1972)
    • Die Java-Sprache wurde 27 (1995)
    • Python wird 31 (1991)
  • Verbindung
    • Das Internet wurde 39 (1983)
    • Das Mobiltelefon wurde 49 (1973)
    • Die erste SMS wurde vor 30 Jahren (1992) verschickt
  • Muster
    • Das MVC-Muster wurde 44 (1978)
    • SQL wurde vor 48 Jahren (1974) erfunden
    • Java Beans wurden vor 26 Jahren (1996) erfunden.
  • Bibliotheken
    • Hibernate wurde vor 21 Jahren (2001) erfunden.
    • Der Frühling wurde vor 20 Jahren erfunden (2002)
    • Tomcat wurde vor 23 Jahren veröffentlicht (1999)
  • Betriebssystem
    • Unix wurde vor 51 Jahren (1971) veröffentlicht.
    • Vor 37 Jahren (1985) erblickten Fenster das Licht der Welt.
    • Mac OS wurde vor 21 Jahren veröffentlicht (2001)

Und all diese Dinge wurden nicht nur erfunden, sondern als Lösungen für Probleme entwickelt, die zu dieser Zeit sehr verbreitet und relevant waren.