Iromeisters Abenteuerreise

Von einem, der auszog, Vertrauen zu üben

Das Gesetz des Karma ist aufgehoben. Alle Wesen sind frei.
« Ein Regenbogenkrieger holt sich selbstverständlich Unterstützung Videos im Blog jetzt mit 2-Klick-Aktivierung »

Komplexität ist der Feind

2018-08-6

Fefe bringt in seinem Beitrag zu Mozillas Vorstoß, in Firefox DNS over HTTPS zu nutzen und dafür ausschließlich über Cloudflare zu gehen, die übergeordnete Problematik auf den Punkt:

Komplexität ist der Feind. Die Anzahl der Bugs steigt mit der Codegröße. Die Leute stöpseln heute nur noch Komponenten aus Libraries zusammen. Das ist Schönwetter-Programmieren! Ein Programm, das nur beherrschbar ist, wenn es zufällig gerade gut funktioniert, ist wertlos. Wir brauchen Programme, die überschaubar wenig Dinge tun, und dafür vollständig beherrschbar sind. Am besten nicht nur vom Programmierer, sondern auch vom Benutzer. Die Geschwindigkeit, mit der wir uns mit unbeherrschten und unbeherrschbaren Technologien umzingeln, ist aus meiner Sicht ein Vorbote der Apokalypse.

Das ist die Anwendung der Maxime Weniger ist mehr auf die Software- und allgemein die Technik-Welt. Im Angelsächsischen ist dafür auch die Bezeichnung KISS principle verbreitet.

Zur Veranschaulichung der Codegröße schaut einfach mal auf How Many Millions of Lines of Code Does It Take?

"Die Geschwindigkeit, mit der wir uns mit unbeherrschten und unbeherrschbaren Technologien umzingeln" hängt dabei vielleicht schlicht mit der patriarchal-kapitalistischen Geisteshaltung zusammen, also dem ganzen Gegenteil obigen Prinzips: "Mehr ist mehr".

Und ich erinnere in diesem Zusammenhang noch mal daran, dass es eine schlechte Entscheidung der Linux-Community war, nahezu geschlossen zu systemd als Initsystem zu wechseln.

Nachtrag vom 27.08.: Ebenfalls von Fefe verlinkt, ein Artikel über "Ridiculously Complicated Algorithms".

We don’t want an optimal algorithm. We want one simple enough that an expert can look at it and say nothing crazy is happening here.

Nachtrag vom 24.05.2019: Unbedingt sehenswerter Vortrag zum Thema:

Damals im Informatik-Grundstudium wurde uns gesagt, ein Kern des Informatiker-Denkens sei, wenn ich ein spezifisches Problem zu lösen habe, dann am besten gleich die ganze Problemklasse zu lösen; Abstraktion als Allheilmittel sozusagen. Genau dieses Denken hat uns in den Schlamassel überhaupt erst hineingeführt! Es lässt nämlich eine Sache ausser Acht:

Auf jeder Abstraktionsschicht kann etwas schiefgehen.

Wenn ich also eine zusätzliche Abstraktionsschicht einziehe, dann kann ich damit zwar tatsächlich mehr machen als vorher, es kann aber eben auch mehr schiefgehen als vorher.

Dabei kommt es, wie auch Jonathan Blow in seinem Vortrag betont, auf das gesunde Maß an. Natürlich ist es unter dem Strich sinnvoll, dass wir heutzutage nicht mehr alles in Assembler programmieren. Docker-Container für einzelne Programme schiessen allerdings deutlich über das Ziel hinaus.

Dabei ist zu beachten, dass die möglichen Seiteneffekte zwischen den Abstraktionsschichten kombinatorisch ansteigen, weil diese Schichten eben auch miteinander interagieren (direkt oder indirekt).

Nachtrag vom 29.05.2019: Ein Fragensteller nach dem Vortrag weist auf den Artikel The Humble Programmer aus dem Jahr 1972 (!!!) von Edsger Dijkstra hin, in dem dieser vorschlägt:

I now suggest that we confine ourselves to the design and implementation of intellectually manageable programs.

Er führt dazu aus:

The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.

Na, bei wem kommen da keinerlei Schuldgefühle auf?
Ausserdem wünscht er sich auch beherrschbare Programmiersprachen:

Another lesson we should have learned from the recent past is that the development of “richer” or “more powerful” programming languages was a mistake in the sense that these baroque monstrosities, these conglomerations of idiosyncrasies, are really unmanageable, both mechanically and mentally. I see a great future for very systematic and very modest programming languages.

Weiterer Nachtrag vom 29.05.2019: Docker: Lücke erlaubt Root-Zugriff auf Dateien. Merke: Wer dir Virtualisierung als Sicherheitsfeature verkauft, lügt! Qubes OS erfreut sich drum auch nicht gerade flächendeckender Verbreitung…

Nachtrag vom 07.06.2019: Mehr von Fefe, auf der Seite zu seiner dietlibc findet ihr Vortragsfolien zu einem Vortrag Wie man kleine und schnelle Software schreibt. Darin widerspricht er direkt dem, was ich an der Uni über Abstraktion gelernt habe:

Nur generalisieren, wenn es nichts kostet

Und weiter:

Shared Libraries sind die eine Technologie, die am stärksten für den Bloat in der Software-Industrie verantwortlich ist. Denn der Programmierer sieht nicht mehr die tatsächliche Code-Größe.

0 Responses to Komplexität ist der Feind

Feed for this Entry

0 Comments

    There are currently no comments.

Über dich

E-Mail-Adresse ist nicht veröffentlicht

Zur Diskussion hinzufügen

Schenken

Spenden

Suchen

Archiv

Browse Archives