-
Wahrnehmung des Makefile-Effekts
- Der Makefile-Effekt bezeichnet das Phänomen, dass komplexe oder unvertraute Werkzeuge nicht von Grund auf neu geschrieben werden, sondern dass zuvor gut funktionierende Beispiele kopiert und angepasst werden.
- Dieser Effekt tritt häufig auf, wenn verschiedene Ingenieurinnen und Ingenieure Werkzeuge wie Make verwenden.
- Wenn in der Vergangenheit eine ähnliche Aufgabe ausgeführt wurde, kopieren Ingenieurinnen und Ingenieure das frühere Makefile und passen es an die neue Situation an.
-
Probleme und Auswirkungen
- Probleme in der Entwurfsphase: Das Werkzeug ist zu komplex oder von Grund auf zu umständlich zu verwenden.
- CI/CD-Konfiguration: In GitHub Actions oder GitLab CI/CD werden YAML-Konfigurationen häufig kopiert und angepasst.
- Konfiguration von Lintern und Formattern: Standard-Regelsätze werden projektübergreifend kopiert und je nach Bedarf verschärft oder gelockert.
- Build-Systeme: Alles, was nicht trivial ist, beginnt dem vorherigen Build-System zu ähneln.
-
Warum dieses Phänomen wichtig ist
- Mangelnde Unterstützung bei Diagnose und Debugging: Werkzeuge müssen wiederholt ausgeführt werden, liefern dabei aber nur wenige Informationen.
- Behinderung des Lernens: Nur einige Expertinnen und Experten kennen das Werkzeug wirklich gut, während andere mit minimalem Wissen kopieren und anpassen.
- Sicherheitsprobleme: Sicherheitsarbeit erfordert tiefes Fachwissen, und Systeme mit dem Makefile-Effekt können zu einer Vermischung von Code und Daten führen.
-
Worauf man beim Entwurf von Werkzeugen achten sollte
- Ob das Werkzeug konfigurierbar sein sollte.
- Ob eine eigene Syntax erforderlich ist.
- Ob sich bestehende Syntaxen oder Idiome wiederverwenden lassen.
- Ob Copy-and-Paste häufig vorkommt.
-
Dem Makefile-Effekt ähnliche Phänomene
- Ähnlich wie Cargo Culting oder die Normalisierung von Abweichungen, doch der Makefile-Effekt betrifft die Folgen eines bestimmten Designs.
- Der Makefile-Effekt ist nicht grundsätzlich ineffizient oder schlecht. Er ist etwas, dessen man sich beim Entwurf von Werkzeugen und Systemen bewusst sein sollte.
1 Kommentare
Hacker-News-Kommentar
Komplexe Systeme entwickeln sich oft aus einfachen Systemen. Systeme, die von Anfang an komplex entworfen werden, funktionieren meist nicht gut; man sollte mit einem einfachen System beginnen.
Make und Makefiles sind sehr einfach, solange sie nicht von autoconf automatisch erzeugt werden. Wenn sie von autoconf erzeugt wurden, sollte man sie nicht bearbeiten und nach Möglichkeit autoconf gar nicht verwenden. Stattdessen schreibt oder kopiert man etwas Code und verwendet ihn im Projekt, verbessert ihn bei Bedarf, kopiert diesen Code später in andere Projekte und passt ihn dort an, und übernimmt Änderungen wieder zurück ins ursprüngliche Projekt. Über mehrere Projekte hinweg kann man ihn zu einer Bibliothek herauslösen und als Open Source veröffentlichen.
Etwa 10 % der Entwickler sind in der Lage, etwas von Grund auf neu zu beginnen. 40 % erledigen ihre Arbeit durch Copy-and-Paste von Code, und 50 % kennen sich außerhalb von LeetCode-Rätseln kaum aus. Viele Makefiles bestehen aus Copy-and-Paste.
Cargo-Cult-Development bezeichnet eine Art der Entwicklung, bei der die zugrunde liegenden technischen Prinzipien nicht verstanden werden und nur Oberflächenmerkmale nachgeahmt werden. Man kopiert, fügt ein, probiert aus, passt an und hofft, dass es funktioniert.
Das Makefile könnte eine falsche Analogie sein. Viel Code wird aus dem Web kopiert, und davon wird vieles gar nicht verwendet. Unnötige Teile zu löschen ist eine gute Gewohnheit.
Werkzeuge oder Systeme, mit denen Entwickler interagieren müssen, werden oft als nicht wert wahrgenommen, sie im Alltag wirklich zu lernen. Dinge wie CI-Konfiguration gelten als „einmal einrichten und dann vergessen“, und die komplizierten Teile werden von anderen Teams übernommen. Man sollte geeignete Werkzeuge und Dokumentation bereitstellen, damit Entwickler leicht damit arbeiten können.
Bei Werkzeugen wie LaTeX beginnt man oft mit Copy-and-Paste, weil man sie so selten benutzt. Werkzeuge mit niedriger Nutzungsfrequenz sind schwer im Gedächtnis zu behalten.
Make ist gut dokumentiert, und wer die Dokumentation liest, kann es leicht verstehen. Viele andere Werkzeuge sind jedoch schlecht dokumentiert, was es Nutzern erschwert, sie zu verstehen.
Komplexe Werkzeuge sind notwendig, aber wenn bei einfachen Anwendungen der Makefile-Effekt auftritt, bedeutet das, dass das Werkzeug zu komplex ist. Für kleine Projekte kann ein Makefile gut geeignet sein.
„Copy-Pasta Driven Development“ weist auf Probleme hin, die durch das Kopieren und Einfügen von Code entstehen. Werkzeuge wie Copilot könnten diese Probleme verschärfen.