Abstraktion und Komplexität
Verfasst: 18. Dez 2011, 15:07
TL;DR: Dafür ist das Problem zu komplex, ich kanns nicht zusammenfassen.
Ich stoße in letzter Zeit immer wieder darauf, dass ich in bestimmten kreativen Prozessen auf Grenzen treffe, die mir Schwierigkeiten beim Überwinden bereiten. Als ich heute Morgen noch im Bett lag hab ich eine Weile darüber nachgegrübelt und mich entschlossen mal einen Thread dazu aufzumachen, in der Hoffnung das er für irgendwen interessant oder gar nützlich ist. Das größte Problem meiner Frage ist wie bei so vielen Fragen, dass ich nichtmal genau formulieren kann was die Frage eigentlich ist. Man könnte sagen, ich habe ein sehr konkretes Problem und tue mich schwer damit es zu abstrahieren. Konkret betrifft mein Problem Schaffensprozesse in verschiedenen Disziplinen. Ich programmiere, ich komponiere Musik und ich male Bilder, und bei allem hab ich früher oder später das Gefühl nicht weiter zu kommen mit einem Problem und ich sehe da interessanet Parallelen.
Es soll in diesem Thread also um Abstraktion und Komplexität gehen, sowie um Strategien die den Zustand eines Systems zwischen abstrakt und komplex/konkret verschieben. Meine erste Beobachtung dazu ist, dass diese Prozesse in unterschiedliche Richtungen laufen können und unterschiedlich viele mögliche Zielzustände haben können.
Beispiele:
Abstrakte Malerei
Skizze -> fertiges Bild
abstrakt -> komplex
Hier wird etwas einfaches komplexer gemacht, aber nicht zwingen konkretisiert im inhaltlichen Sinne. Vielmehr fällt es schwer bei einer vielzahl möglicher Lösungen genau zu sagen welche denn "die richtige" ist. Das ist vielleicht auch der Grund, warum viele diese Art von Problem/Lösung nicht sehr hoch wertschätzen.
Gegenständliche Studie
Modell -> Skizze -> Bild
komplexer Ausgangszustand (Modell) -> abstrahierte Skizze mit großer Beliebigkeit (wird eh übermalt) -> komplexer und sehr konkreter Zielzustand
Hier wäre theoretisch nichtmal eine Abstraktionsleistung notwendig, man könnte auch links oben Anfangen und das Bild wie ein Plotter runtermalen. So oder so bleibt die Anforderung an den Abstraktionsprozess geringer, je näher das Ergebnis wieder am Ausgangszustand ankommen soll.
Aktskizze
Modell -> fertige Skizze
konkret -> abstrakt
Hier haben wir einen konkreten Ausgangszustand und einen abstrahierten Zielzustand. Die Abstraktionsleistung ist hierbei schon ziemlich schwer, denn es kann theoretisch zwar eine unendliche Zahl an Lösungen geben, doch es gibt immernoch sehr viele Faktoren die man benutzen kann um 2 Bilder qualitativ zu vergleichen. Und es gibt in der Vorlage wenig Information die einen konkret auf die Lösung führen würde bzw. die Informationen sind schwer zu lesen, wie mans nimmt...
generisches Speedpainting
Skizze -> fertiges Bild
unkonkret -> konkreter
Hier läuft der Abstraktionsprozess mehr oder weniger rückwärts. Entweder es besteht im Kopf ein konkretes Bild das dann beim Malen den Prozess durchläuft konkret ausformuliert zu werden (oder abstrahiert, wenn die vorstellung detaillierter ist als das fertige Bild), oder es besteht kein Bild im Kopf und aus abstrakten Formen wird in einem suchenden Prozess eine der möglichen konkreteren Lösungen ausgewählt. Das Maß an Komplexität im Bild lässt sich leicht steigern, indem man zufällig gewählte Elemente und Strukturen einbaut (so hab ich fast immer Speedpaintings gemalt).
"gekonntes" Speedpainting
Skizze -> fertiges Bild
konkreter -> sehr konkret
Wenn man sich mal Speedpaintings von z.B. Mullins ansieht, dann stellt man fest, das sie auch in den frühen Phasen oft schon verkleinert aussehen wie ein aufwändiges fertiges Bild. Hier werden Dinge früher konkret entschieden und der Grad der komplexität des Systems ist zu jedem Zeitpunkt höher als wenn z.B. ein Anfänger ein Speedpainting malt. Anfänger Bilder haben öfters ja nichtmal einen Hintergrund, geschweige denn ein kompositorisches Konzept.
Hypothetisch formuliert erlaubt der zahllos wiederholte Prozess der Abstraktion (Studie: konkret -> abstrakt) beim rückwärts geführten Abstraktionsprozess, nämlich dem konkretisieren, ein durchweg höheres Maß an Komplexität im System zu kontrollieren (nicht nur zu erzeugen, sondern auch bewusst einzusetzen).
Jetzt haben wir Beispiele aus der Malerei für beide Richtungen des Prozesses, jetzt wechseln wir zur Musik:
"lärm" komponieren
zufällige Geräusche -> ausgewählte Geräusche
Hier muss nicht wirklich abstrahiert werden, solange nicht der Anspruch besteht etwas gewisses zu transportieren.
Punkrock/Grindcore/Blackmetal komponieren (jeweils in ihren simplen Ausprägungen)
abstrakte Idee oder intuitiv gewählte Elemente -> fertiges "System" mit einfacher Struktur und einfachen Elementen
Hier wirds schon konkreter, doch die Komplexität der Aufgabe das gewünschte Ergebnis zu erzielen ist noch überschaubar, da alle 3 Musikstile ziemlich "in your face" sind und auch die thematisierten Inhalten zumeist simpler sind.
komplexere progressive Musik komponieren (Deathmetal/Jazz/Progressive-irgendwas)
"Chaos" -> geordnetes "Chaos"
Hier ist der Zielzustand wesentlich komplexer und einzelne Elemente gehen stärker außeinander. Rythmen verschieben sich gegeneinader und Instrumente spielen seltener Unison. Als Ausgangszustand kann vieles dienen: mathematische System, harmonische Systeme wie Skalen und Akkorde oder Zufall/Intuiton. Je nach Genre gibt es im Zielzustand auch noch relativ wenige "zwingende" Regeln weil so viel erlaubt ist. Die Schwierigkeit im Schaffensprozess besteht (u.a. und imho) im beherrschen der Komplexität und konkretisieren zwischen zahllosen Möglichkeiten. Sowas fällt mir z.B. extrem schwer (will heißen ich kanns nicht).
orchestrale bombast Musik komponieren (Soundtrack, Trailermusik, ich meine NICHT Klassik weil ich mich damit nicht auskenne)
abstrakte Idee -> konkrete Umsetzung
Hier besteht oft in der Ausgangsitation schon eine klare Intention zu einem Gefühl, das man erzeugen will. Z.B. wenn man einen Film vertont werden bestimmte Abschnitte und Stimmungen suggeriert, die man dann ausformuliert auf mehr oder weniger komplexe weise. Der Grad der Komplexität schwankt stark. Manche Sachen die krass und episch klingen sind kompositorisch in Wirklichkeit sehr simpel (sowas gelingt auch mir dann manchmal:D) und manche sind wiederum sehr komplex, vor allem wenn man sich aus dem Regelgerüst der konsonanten Harmonien herauswagt und die Regeln bricht: Disharmonie, Polyrythmen usw.. Hier komm ich immer ganz schnell nicht weiter, weil ich keine Strategie habe um den rückwärts gedachten Abstraktionsprozess auszuführen. Ich kann nicht von grob nach fein arbeiten, weil ich schon nichtmal verstehe wie man fein nach grob abstrahieren könnte. Die Dissonanz und Spannung entsteht ja meist erst aus der Komplexität.
Nochmal Themenwechsel, jetzt zum Programmieren
Abstraktion und das verbergen von Komplexität sind in der Informatik extrem wichtige Grundsätze. Je komplexer die Lösung einer Aufgabe, um so wahrscheinlicher ist es eine schlechte Lösung. Ziel ist den zur gleichen Zeit überblickbaren Bereich zu jeder Zeit möglichst klein zu halten. Beim programmieren in einer Sprache wie C befindet man sich ja schon auf einer Abstraktion der Abstraktion. Ohne Abstraktion würde man binäre oder hexadezimale Zahlen schreiben, die nächst höhere Stufe ist Assembler Code den auch noch kein normalsterblicher lesen kann und dann erst kommen die Sprachen wie C. Innerhalb der Sprachen verwendet man dann wiederum Schnittstellen die komplexe Prozesse abstrahieren und nach außen hin einfacher Nutzbar machen. Wenn ich eine standard Applikation schreiben würde, würde ich nicht erst einen Button erfinden müssen, den Button gibt es schon in einem von vielen Grundgerüsten das man benutzen kann.
Bei der Entwicklung eines Programmes explodiert die komplexität des zu überblickenden Systems dennoch rasend schnell, sonst gäb es nicht so viel verbuggte Software.
Das Problem sehe ich dabei in der meist geringen Zahl der möglichen Lösungen (je komplizierter das Problem, je weniger funktionierende Lösungen gibt es (bzw. umgekehrt)) und der Richtung des Prozesses. Ich gehe von etwas abstraktem aus, das ich erreichen will, z.B. ein Kommando-Zeilen Programm das einen Parameter nimmt und dann ausgibt ob der Parameter ein gültiges Datum ist oder nicht um mal ein relativ simples Beispiel zu nehmen. Da ist nicht die Abstraktion des Problems das Problem, sondern die Konkretisierung. Hier muss erstmal erkannt werden, dass es einen Eingabeparameter gibt, dann muss erkannt werden ob es ein Datum ist (gesondert zu betrachtendes Problem, sowas ist auch immer einfacher als vernetzte Probleme) und dann nur noch die Antwort ausgegeben werden.
In der Praxis von z.B. Spieleprogrammierung ist so etwas simples, dass man in einzelne Elemente und einen klaren Ablauf gliedern kann aber eher selten.
In meinem iPhone Spiel z.B. tue ich mich gerade schwer damit Achivements einzubauen. Da muss erstmal ein online User Account für Gamecenter authentifiziert sein, wenn er das nicht ist, muss alles zwischengespeichert werden, damit man was speichern kann muss man erstmal wissen welche Achivements erreicht werden, das sollte idealerweise an einer zentralen Stelle passieren, die wiederum muss aber informationen von verschiedenen Teilen des Programms bekommen (welche Mission erreicht, wie lang gespielt, wie oft neu gestartet, wie viele Abschüsse, und und und....). Hier seh ich keine klare Richtung, das Problem sitzt fieß vernetzt in mitten anderer Probleme und ich komm nicht weiter, weil ich nicht schaffe eine Abstraktion zu finden die simpel genug ist, dass ich sie als Ganzes betrachten kann. Bzw. das wäre vielleicht nichtmal das Problem, wenn ich denn das Problem umfassend überblicken könnte.
Ich hab Gestern an etwas anderem gearbeitet und angefangen einem bestehenden Partikelsystem aus einer Grafikengine die Funktion hinzuzufügen das einzelne Partikel frame Animationen durchlaufen. Das Problem war auf unterster Ebene, der konkreten Implementierung in den Funktionen viel komplizierter, aber auf hoher Ebene viel einfacher, weil ich nur an wenigen Stellen überhaupt was ändern musste und die Richtung des Informationsflusses simpel war.
Um da jetzt einen Vergleich zum Malen zu ziehen würde ich sagen das Achivement Problem ist ein kompositorisches Problem (Beziehung von vielen Elementen zu vielen anderen Elementen) und das Partikel Animations Problem ist ein Problem der Perspektive eines komplexen Gegenstandes (einfache Beziehung aber trotzdem knackig zu lösen). Und hier schließt sich wieder der Kreis, denn kompositorische Probleme (obgleich spannend) finde ich in den ersten Phasen der Bildentstehung oft unheimlich frustrierend. Vor allem dann, wenn die Aufgabe die Zahl der möglichen Lösungen schon stark einschränkt (z.B. gewünschter Bildinhalt einer Auftragsillustration bzw. in einem Programm wär es die konkrete gewünschte Funktion des Programmteils). Ich hab nicht selten das Problem in den ersten Phasen eines Bildes ziellos rumzuprobieren und mit allem unzufrieden zu sein, oder wenn mir ein Teil gefällt, passt er nicht zum Rest, oder ich seh zu lange nicht was nicht funktioniert und mir fällt es erst viel zu spät auf. Beim komponieren wäre die Entsprechung, dass ich relativ leicht einzelne Teile komponieren kann, die mir gefallen, aber nie etwas längeres, das ein sinnvolles Ganzes bildet. Und beim Programmieren verliere ich mich entsprechend eher in spannenden Teilproblemen die nicht komplex ins Ganze eingebettet sind, oder bin planlos und baue Dinge irgendwie in die Gesamtstruktur ein, und muss sie dann irgendwann neu schreiben, weil die suboptimale Vernetzung die Komplexität der gesamten gleichzeitig zu betrachtenden Ebene des Systems zu weit nach oben geschraubt hat, und ich auf der Ebene entweder nichts neues machen kann oder zu viele Fehler erzeuge, weil ich den Überblick verliere.
Diese Momente, wo ich das Gefühl habe die Komplexität übersteigt das was ich fassen kann, fucken mich immer total ab. Das ist so frustrierend weil man auf einmal nur noch Bahnhof versteht oder merkt das alles was man macht nicht funktioniert. Der TL;DR zu diesem Post ist einerseits wörtlich korrekt, fasst andererseits aber sehr treffend das Problem zusammen.
Die Frage ist jetzt zu welchen Schlussfolgerungen man nun kommt. Die Antwort der Informatik wäre (gemäß dem Buch "code complete" und einem Blogpost den ich neulich gelesen habe) solange die Betrachtungsebene zu komplex ist, ist die Abstraktion und Kapselung nicht gut gelöst. Es gilt nach Möglichkeit immer die Komplexität des Problems zu senken, nicht die Komplexität des Denkens zu erhöhen.
Doch wie sieht es in der Malerei aus? Und wie beim komponieren von Musik? So viele Ähnlichkeiten es auch gibt, die Möglichkeiten und Richtungen der Abstraktion haben zwischen den Medien - ja sogar innerhalb einzelner Medien - doch oft unterschiedliche Ausprägungen.
Und jetzt bin ich gespannt was eure Gedanken zu dem Thema sind.
Ich stoße in letzter Zeit immer wieder darauf, dass ich in bestimmten kreativen Prozessen auf Grenzen treffe, die mir Schwierigkeiten beim Überwinden bereiten. Als ich heute Morgen noch im Bett lag hab ich eine Weile darüber nachgegrübelt und mich entschlossen mal einen Thread dazu aufzumachen, in der Hoffnung das er für irgendwen interessant oder gar nützlich ist. Das größte Problem meiner Frage ist wie bei so vielen Fragen, dass ich nichtmal genau formulieren kann was die Frage eigentlich ist. Man könnte sagen, ich habe ein sehr konkretes Problem und tue mich schwer damit es zu abstrahieren. Konkret betrifft mein Problem Schaffensprozesse in verschiedenen Disziplinen. Ich programmiere, ich komponiere Musik und ich male Bilder, und bei allem hab ich früher oder später das Gefühl nicht weiter zu kommen mit einem Problem und ich sehe da interessanet Parallelen.
Es soll in diesem Thread also um Abstraktion und Komplexität gehen, sowie um Strategien die den Zustand eines Systems zwischen abstrakt und komplex/konkret verschieben. Meine erste Beobachtung dazu ist, dass diese Prozesse in unterschiedliche Richtungen laufen können und unterschiedlich viele mögliche Zielzustände haben können.
Beispiele:
Abstrakte Malerei
Skizze -> fertiges Bild
abstrakt -> komplex
Hier wird etwas einfaches komplexer gemacht, aber nicht zwingen konkretisiert im inhaltlichen Sinne. Vielmehr fällt es schwer bei einer vielzahl möglicher Lösungen genau zu sagen welche denn "die richtige" ist. Das ist vielleicht auch der Grund, warum viele diese Art von Problem/Lösung nicht sehr hoch wertschätzen.
Gegenständliche Studie
Modell -> Skizze -> Bild
komplexer Ausgangszustand (Modell) -> abstrahierte Skizze mit großer Beliebigkeit (wird eh übermalt) -> komplexer und sehr konkreter Zielzustand
Hier wäre theoretisch nichtmal eine Abstraktionsleistung notwendig, man könnte auch links oben Anfangen und das Bild wie ein Plotter runtermalen. So oder so bleibt die Anforderung an den Abstraktionsprozess geringer, je näher das Ergebnis wieder am Ausgangszustand ankommen soll.
Aktskizze
Modell -> fertige Skizze
konkret -> abstrakt
Hier haben wir einen konkreten Ausgangszustand und einen abstrahierten Zielzustand. Die Abstraktionsleistung ist hierbei schon ziemlich schwer, denn es kann theoretisch zwar eine unendliche Zahl an Lösungen geben, doch es gibt immernoch sehr viele Faktoren die man benutzen kann um 2 Bilder qualitativ zu vergleichen. Und es gibt in der Vorlage wenig Information die einen konkret auf die Lösung führen würde bzw. die Informationen sind schwer zu lesen, wie mans nimmt...
generisches Speedpainting
Skizze -> fertiges Bild
unkonkret -> konkreter
Hier läuft der Abstraktionsprozess mehr oder weniger rückwärts. Entweder es besteht im Kopf ein konkretes Bild das dann beim Malen den Prozess durchläuft konkret ausformuliert zu werden (oder abstrahiert, wenn die vorstellung detaillierter ist als das fertige Bild), oder es besteht kein Bild im Kopf und aus abstrakten Formen wird in einem suchenden Prozess eine der möglichen konkreteren Lösungen ausgewählt. Das Maß an Komplexität im Bild lässt sich leicht steigern, indem man zufällig gewählte Elemente und Strukturen einbaut (so hab ich fast immer Speedpaintings gemalt).
"gekonntes" Speedpainting
Skizze -> fertiges Bild
konkreter -> sehr konkret
Wenn man sich mal Speedpaintings von z.B. Mullins ansieht, dann stellt man fest, das sie auch in den frühen Phasen oft schon verkleinert aussehen wie ein aufwändiges fertiges Bild. Hier werden Dinge früher konkret entschieden und der Grad der komplexität des Systems ist zu jedem Zeitpunkt höher als wenn z.B. ein Anfänger ein Speedpainting malt. Anfänger Bilder haben öfters ja nichtmal einen Hintergrund, geschweige denn ein kompositorisches Konzept.
Hypothetisch formuliert erlaubt der zahllos wiederholte Prozess der Abstraktion (Studie: konkret -> abstrakt) beim rückwärts geführten Abstraktionsprozess, nämlich dem konkretisieren, ein durchweg höheres Maß an Komplexität im System zu kontrollieren (nicht nur zu erzeugen, sondern auch bewusst einzusetzen).
Jetzt haben wir Beispiele aus der Malerei für beide Richtungen des Prozesses, jetzt wechseln wir zur Musik:
"lärm" komponieren
zufällige Geräusche -> ausgewählte Geräusche
Hier muss nicht wirklich abstrahiert werden, solange nicht der Anspruch besteht etwas gewisses zu transportieren.
Punkrock/Grindcore/Blackmetal komponieren (jeweils in ihren simplen Ausprägungen)
abstrakte Idee oder intuitiv gewählte Elemente -> fertiges "System" mit einfacher Struktur und einfachen Elementen
Hier wirds schon konkreter, doch die Komplexität der Aufgabe das gewünschte Ergebnis zu erzielen ist noch überschaubar, da alle 3 Musikstile ziemlich "in your face" sind und auch die thematisierten Inhalten zumeist simpler sind.
komplexere progressive Musik komponieren (Deathmetal/Jazz/Progressive-irgendwas)
"Chaos" -> geordnetes "Chaos"
Hier ist der Zielzustand wesentlich komplexer und einzelne Elemente gehen stärker außeinander. Rythmen verschieben sich gegeneinader und Instrumente spielen seltener Unison. Als Ausgangszustand kann vieles dienen: mathematische System, harmonische Systeme wie Skalen und Akkorde oder Zufall/Intuiton. Je nach Genre gibt es im Zielzustand auch noch relativ wenige "zwingende" Regeln weil so viel erlaubt ist. Die Schwierigkeit im Schaffensprozess besteht (u.a. und imho) im beherrschen der Komplexität und konkretisieren zwischen zahllosen Möglichkeiten. Sowas fällt mir z.B. extrem schwer (will heißen ich kanns nicht).
orchestrale bombast Musik komponieren (Soundtrack, Trailermusik, ich meine NICHT Klassik weil ich mich damit nicht auskenne)
abstrakte Idee -> konkrete Umsetzung
Hier besteht oft in der Ausgangsitation schon eine klare Intention zu einem Gefühl, das man erzeugen will. Z.B. wenn man einen Film vertont werden bestimmte Abschnitte und Stimmungen suggeriert, die man dann ausformuliert auf mehr oder weniger komplexe weise. Der Grad der Komplexität schwankt stark. Manche Sachen die krass und episch klingen sind kompositorisch in Wirklichkeit sehr simpel (sowas gelingt auch mir dann manchmal:D) und manche sind wiederum sehr komplex, vor allem wenn man sich aus dem Regelgerüst der konsonanten Harmonien herauswagt und die Regeln bricht: Disharmonie, Polyrythmen usw.. Hier komm ich immer ganz schnell nicht weiter, weil ich keine Strategie habe um den rückwärts gedachten Abstraktionsprozess auszuführen. Ich kann nicht von grob nach fein arbeiten, weil ich schon nichtmal verstehe wie man fein nach grob abstrahieren könnte. Die Dissonanz und Spannung entsteht ja meist erst aus der Komplexität.
Nochmal Themenwechsel, jetzt zum Programmieren
Abstraktion und das verbergen von Komplexität sind in der Informatik extrem wichtige Grundsätze. Je komplexer die Lösung einer Aufgabe, um so wahrscheinlicher ist es eine schlechte Lösung. Ziel ist den zur gleichen Zeit überblickbaren Bereich zu jeder Zeit möglichst klein zu halten. Beim programmieren in einer Sprache wie C befindet man sich ja schon auf einer Abstraktion der Abstraktion. Ohne Abstraktion würde man binäre oder hexadezimale Zahlen schreiben, die nächst höhere Stufe ist Assembler Code den auch noch kein normalsterblicher lesen kann und dann erst kommen die Sprachen wie C. Innerhalb der Sprachen verwendet man dann wiederum Schnittstellen die komplexe Prozesse abstrahieren und nach außen hin einfacher Nutzbar machen. Wenn ich eine standard Applikation schreiben würde, würde ich nicht erst einen Button erfinden müssen, den Button gibt es schon in einem von vielen Grundgerüsten das man benutzen kann.
Bei der Entwicklung eines Programmes explodiert die komplexität des zu überblickenden Systems dennoch rasend schnell, sonst gäb es nicht so viel verbuggte Software.
Das Problem sehe ich dabei in der meist geringen Zahl der möglichen Lösungen (je komplizierter das Problem, je weniger funktionierende Lösungen gibt es (bzw. umgekehrt)) und der Richtung des Prozesses. Ich gehe von etwas abstraktem aus, das ich erreichen will, z.B. ein Kommando-Zeilen Programm das einen Parameter nimmt und dann ausgibt ob der Parameter ein gültiges Datum ist oder nicht um mal ein relativ simples Beispiel zu nehmen. Da ist nicht die Abstraktion des Problems das Problem, sondern die Konkretisierung. Hier muss erstmal erkannt werden, dass es einen Eingabeparameter gibt, dann muss erkannt werden ob es ein Datum ist (gesondert zu betrachtendes Problem, sowas ist auch immer einfacher als vernetzte Probleme) und dann nur noch die Antwort ausgegeben werden.
In der Praxis von z.B. Spieleprogrammierung ist so etwas simples, dass man in einzelne Elemente und einen klaren Ablauf gliedern kann aber eher selten.
In meinem iPhone Spiel z.B. tue ich mich gerade schwer damit Achivements einzubauen. Da muss erstmal ein online User Account für Gamecenter authentifiziert sein, wenn er das nicht ist, muss alles zwischengespeichert werden, damit man was speichern kann muss man erstmal wissen welche Achivements erreicht werden, das sollte idealerweise an einer zentralen Stelle passieren, die wiederum muss aber informationen von verschiedenen Teilen des Programms bekommen (welche Mission erreicht, wie lang gespielt, wie oft neu gestartet, wie viele Abschüsse, und und und....). Hier seh ich keine klare Richtung, das Problem sitzt fieß vernetzt in mitten anderer Probleme und ich komm nicht weiter, weil ich nicht schaffe eine Abstraktion zu finden die simpel genug ist, dass ich sie als Ganzes betrachten kann. Bzw. das wäre vielleicht nichtmal das Problem, wenn ich denn das Problem umfassend überblicken könnte.
Ich hab Gestern an etwas anderem gearbeitet und angefangen einem bestehenden Partikelsystem aus einer Grafikengine die Funktion hinzuzufügen das einzelne Partikel frame Animationen durchlaufen. Das Problem war auf unterster Ebene, der konkreten Implementierung in den Funktionen viel komplizierter, aber auf hoher Ebene viel einfacher, weil ich nur an wenigen Stellen überhaupt was ändern musste und die Richtung des Informationsflusses simpel war.
Um da jetzt einen Vergleich zum Malen zu ziehen würde ich sagen das Achivement Problem ist ein kompositorisches Problem (Beziehung von vielen Elementen zu vielen anderen Elementen) und das Partikel Animations Problem ist ein Problem der Perspektive eines komplexen Gegenstandes (einfache Beziehung aber trotzdem knackig zu lösen). Und hier schließt sich wieder der Kreis, denn kompositorische Probleme (obgleich spannend) finde ich in den ersten Phasen der Bildentstehung oft unheimlich frustrierend. Vor allem dann, wenn die Aufgabe die Zahl der möglichen Lösungen schon stark einschränkt (z.B. gewünschter Bildinhalt einer Auftragsillustration bzw. in einem Programm wär es die konkrete gewünschte Funktion des Programmteils). Ich hab nicht selten das Problem in den ersten Phasen eines Bildes ziellos rumzuprobieren und mit allem unzufrieden zu sein, oder wenn mir ein Teil gefällt, passt er nicht zum Rest, oder ich seh zu lange nicht was nicht funktioniert und mir fällt es erst viel zu spät auf. Beim komponieren wäre die Entsprechung, dass ich relativ leicht einzelne Teile komponieren kann, die mir gefallen, aber nie etwas längeres, das ein sinnvolles Ganzes bildet. Und beim Programmieren verliere ich mich entsprechend eher in spannenden Teilproblemen die nicht komplex ins Ganze eingebettet sind, oder bin planlos und baue Dinge irgendwie in die Gesamtstruktur ein, und muss sie dann irgendwann neu schreiben, weil die suboptimale Vernetzung die Komplexität der gesamten gleichzeitig zu betrachtenden Ebene des Systems zu weit nach oben geschraubt hat, und ich auf der Ebene entweder nichts neues machen kann oder zu viele Fehler erzeuge, weil ich den Überblick verliere.
Diese Momente, wo ich das Gefühl habe die Komplexität übersteigt das was ich fassen kann, fucken mich immer total ab. Das ist so frustrierend weil man auf einmal nur noch Bahnhof versteht oder merkt das alles was man macht nicht funktioniert. Der TL;DR zu diesem Post ist einerseits wörtlich korrekt, fasst andererseits aber sehr treffend das Problem zusammen.
Die Frage ist jetzt zu welchen Schlussfolgerungen man nun kommt. Die Antwort der Informatik wäre (gemäß dem Buch "code complete" und einem Blogpost den ich neulich gelesen habe) solange die Betrachtungsebene zu komplex ist, ist die Abstraktion und Kapselung nicht gut gelöst. Es gilt nach Möglichkeit immer die Komplexität des Problems zu senken, nicht die Komplexität des Denkens zu erhöhen.
Doch wie sieht es in der Malerei aus? Und wie beim komponieren von Musik? So viele Ähnlichkeiten es auch gibt, die Möglichkeiten und Richtungen der Abstraktion haben zwischen den Medien - ja sogar innerhalb einzelner Medien - doch oft unterschiedliche Ausprägungen.
Und jetzt bin ich gespannt was eure Gedanken zu dem Thema sind.