Auf dem Radio habe ich letzte Woche gehört, dass eine Studie ergeben hat, dass nur 10 Prozent der Bevölkerung wissen, was ein Algorithmus ist.
Dieses Ergebnis veranlasst mich, in meinen eigenen Worten und hoffentlich verständlich zu erklären, was Algorithmen sind (obwohl ich den leisen Verdacht habe, dass meine Leser eigentlich durchaus zu diesen zehn Prozent gehören).
Unter einem Algorithmus versteht man eine Folge von Anweisungen, deren Befolgung ein definiertes Problem löst. Häufig meint man damit auch die Formulierung dieser Anweisungen so, dass sie für Computer verständlich sind und von diesen ausgeführt werden können. Diese Erstellung der Anweisungen und deren computergerechter Formulierung ist Aufgabe von Softwareentwicklern, die dazu Programmiersprachen nutzen.
Im Alltagsleben lassen sich beispielsweise Bastelanleitungen oder Kochrezepte als Algorithmen begreifen, auch wenn nicht jeder einzelne Handgriff detailliert beschrieben wird. Die Anleitung, wie man für eine bestimmte Speise etwa Kartoffeln schält oder Eischnee schlägt, wäre dann eine Subroutine.
Wenn man weiß, wie man Kartoffeln für Kartoffelpüree schält, dann kann man den gleichen Algorthmus auch nutzen, um Kartoffeln für Pommes frites zu schälen (mal davon abgesehen, dass man für letzteres große Kartoffeln bevorzugen sollte – aber das ist wieder ein anderes Thema). Diese Teilaufgabe ist nämlich identisch.
Und so setzen sich Algorithmen oft aus mehreren Teilen zusammen, die einzeln auch in anderen Kontexten wiederverwendet werden können.
Auch wenn das Ergebnis eines Rezeptes grundsätzlich reproduzierbar sein soll, ist es dennoch bisweilen nötig, Anpassungen an die äußeren Bedingungen zu machen. So kann es sein, dass man eine Auswahl aus optionalen Zutaten treffen muss, oder die Mengenangaben auf die tatsächlich benötigte Anzahl der Portionen umrechnen muss.
Als Entwickler von Algorithmen hat man zunächst die Vorgabe (bzw. Spezifikation), welches Ziel erreicht werden soll. Dann macht man sich Gedanken über das Wie.
Beispielsweise habe ich ja das Progrämmchen, mit denen ich Blogstatistiken erstellen kann. Der Algorithmus sieht vor, dass eine (oder mehrere) WordPress-Export-Dateien geladen werden. Dann wird der XML-Text geparst. Auf bestimme Token hin werden die einzelnen Kommentatoren identifiziert und ein Zähler für jeden abgegebenen Kommentar hochgezählt.
Wie das im Einzelnen geht, muss haarklein im Sourcecode geschrieben sein. Man muss dem Computer wirklich jede Kleinigkeit erklären, was er machen soll. Die Zusammensetzung der Anweisungen und Subroutinen bildet den Algorithmus ab.
Naja, aber ob wir Leser mit geparst und Token und Sourcecode etwas anfangen können?
Ansonsten: Nicht schlecht, Herr Specht.
LikeGefällt 1 Person
Ich schon, dachte mir aber ähnliches 🙂
LikeGefällt 2 Personen
Eine gewisse Betriebsblindheit kann ich wohl nicht abstreiten. 😳
Immerhin wären das mögliche Begriffe für weitere breakplaining-Posts.
LikeGefällt 1 Person
😉
LikeLike
Und dann gab es noch den Landtags-Abgeordneten in einem ungenannt bleiben sollenden Bundesland, der in einem Presse-Interview vorgeschlagen hat, dass man über eine Kennzeichnungspflicht von Software, die Algorithmen enthält, nachdenken sollte.
Der schuldet mir eine Tasse Kaffee und einen 27-Zoll-Monitor.
LikeGefällt 1 Person
Nachdem ich „Kennzeichnungspflicht“ gelesen habe, musste ich mich erst mal beruhigen. Das ist auch so ein Thema. 🙄
Also wäre algorithmusfreie Software nicht kennzeichnungspflichtig? Softiger geht’s wohl nimmer.
LikeLike
Der Algorithmus, des sich der Rhythmus, wo jeder mitmuss.
Pardon.
(Frei nach meinem Mathelehrer damals in der Schule, bei dem war‘s der Logarithmus.)
LikeGefällt 1 Person
Nun hat die Autokorrektur aus „isch“ ein „sich“ gemacht …
LikeLike
Ja, mit dem Logarithmus kannte ich diesen Spruch auch.
LikeLike
Klar und verständlich für mich, der zu den 90 % gehört, die das nicht so einfach erklären können.
Kartoffeln für Pommes zu schälen ist unnötig, da bei der Verwendung grosser Kartoffeln der Anteil Pommes mit Haut nicht derart gross ist, dass er stört.
LikeGefällt 1 Person
Dann darfst du dich jetzt auch zu den 10% rechnen.
Mit den großen Kartoffeln hast du näherungsweise recht. Der Schalenanteil geht gegen 0, wenn die Kartoffelgröße gegen ∞ geht. Der Absolutanteil der Schalen bleibt jedoch erhalten.
Auf meiner Ideenliste steht ja schon lange ein (noch nicht geschriebener) Eintrag über Kartoffelmathematik, bei dem es gerade um solche Fragen gehen sollte.
LikeGefällt 1 Person
Ich kenne nur die Beschreibung von Pringles-Stapelchips
https://www.google.ch/amp/s/amp.interestingengineering.com/geometry-of-pringles-crunchy-hyperbolic-paraboloid
LikeGefällt 1 Person
Cool!
Einmal gepoppt, nie mehr gestoppt.
LikeLike
Kannst du das in einem Flowchart etwas genauer darstellen ? 🙂
Folgt dann auch noch eine Erklärung von Variablendeklarationen, pre- und postchecked loops, Sprungmarken und Breakpoints ? Peeks und Pokes lasse ich mal weg …
LikeLike
Speculative execution nicht vergessen. Und mehrstufige Caches.
LikeGefällt 2 Personen
Cache as cache can ! 🙂
LikeGefällt 1 Person
Da gibt’s sicher noch genug Feinheiten, über die ich schreiben könnte.
Aber ich wollte hier nur kompakt darstellen, was man unter Algorithmus versteht, keinen tl;dr Roman schreiben.
LikeGefällt 1 Person
Müsste es nicht eher heißen:
„Unter einem Algorithmus versteht man eine Folge von Anweisungen, deren Befolgung ein definiertes Problem lösen soll.“
Also wenn man so die Umsetzung so vieler sieht ..
LikeLike
Wollen wir jetzt so spitzfindig werden?
Du hast schon recht, dass Soll- und Ist-Zustand von einander abweichen können (und meistens auch tun), aber das Ziel des Algorithmus ist es ja, das Problem tatsächlich zu lösen. Wenn er das nicht schafft, so ist er fehlerhaft, und eben kein richtiger Algorithmus.
LikeLike
Spitzfindig? Ich? Nienimmernich! 🙂
Ja, die Umsetzung vieler lässt zu wünschen übrig.
LikeLike
Je komplexer ein Algorithmus, desto mehr Fehlermöglichkeiten.
Isso.
LikeLike
Pingback: breakplaining: Fourier //1876 | breakpoint
Pingback: Registriert am falschen Ort //1882 | breakpoint
Pingback: Up .. Down .. //1888 | breakpoint
Pingback: Wenn die Glocken erklingen //1908 | breakpoint
Pingback: Twitteropia //2058 | breakpoint
Pingback: Zum #PiTag: Ein Weg zu pi //2074 | breakpoint
Pingback: breakplaining: Hex //2111 | breakpoint
Pingback: 29 h..ust* //2112 | breakpoint
Pingback: Die Formel //2158 | breakpoint
Pingback: Fortschritt. Oder nicht? //2289 | breakpoint
Pingback: Theorie und Praxis des Zufalls //2306 | breakpoint
Pingback: Die Körbe von Hanoi //2347 | breakpoint
Pingback: Wieder Ärger mit PHP //2675 | breakpoint
Pingback: Die Rückseite des Möbiusbandes //2679 | breakpoint
Pingback: #Blogparade: Werte und Handeln //2807 | breakpoint
Pingback: (Kein) Fraktionszwang //2846 | breakpoint