> For the complete documentation index, see [llms.txt](https://weekly-essay.mikey.wang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://weekly-essay.mikey.wang/de/2022/w01-a-path-to-solving-complex-problems.md).

# W01-Ein Weg zur Lösung komplexer Probleme

Am Freitagabend sprach ich mit Yunfei über ein kniffliges Problem auf einer E-Commerce-PC-Seite. Mir fiel ein, dass ich dazu einmal einen Blogbeitrag geschrieben hatte. Also öffnete ich meinen seit fünf Jahren verstaubten Blog.

Nach so langer Zeit fühlte sich das vertraut und etwas peinlich an. Damals hatte ich bei der Arbeit viel freie Zeit und wollte unbedingt in die Internetbranche. Nebenbei baute ich einen Blog und zeigte gern technische Kniffe, die ich für tiefgründig hielt, obwohl sie eigentlich nur geschickt waren. Nach einigem Blättern scherzte ich, heute könne ich mich kaum noch hinsetzen und solche Texte schreiben. Bei allem frage ich mich nur noch, ob es Geld bringt.

Ein wenig stolz bin ich noch immer auf die damalige Domain. Nur wenige kennen die Top-Level-Domain .wang, und ich heiße zufällig Wang. Deshalb habe ich eine weltweit einzigartige Domain, die genau meinem englischen Namen entspricht. Ohne 102 und immer mit HTTPS.

Zurück zum Thema. Das eingangs erwähnte Problem hat mir heute neue Einsichten gegeben.

Worum geht es? Die PC-Startseite von JD, eine Arbeit des Aotu-Teams, scheint seit drei oder vier Jahren keine große Überarbeitung erlebt zu haben. Sie enthält aber viele Lösungen, die gut gealtert sind, etwa die klassische Kategorieauswahl links. Fährt der Mauszeiger über einen Hauptmenüpunkt, erscheint daneben das zugehörige Untermenü. Beim Überfahren der Hauptmenüliste wechselt das Untermenü also laufend. Interessant wird es, wenn man den Zeiger zu einem bestimmten Untermenü bewegt. Obwohl man auf dem Weg mehrere Hauptmenüpunkte streift, wechseln die Untermenüs nicht. Die gewünschte Unterkategorie lässt sich zuverlässig auswählen.

Auf den ersten Blick wirkt das beinahe wie KI und ziemlich komplex. Beschriebe man es als Echtzeitanalyse der Mausbewegung, um die tatsächliche Nutzerabsicht zu erkennen, würden viele wohl in dieser Richtung nach einer Lösung suchen.

Nach Analyse und Verdichtung der Anforderung wird daraus jedoch die Frage, ob ein Punkt innerhalb eines Dreiecks liegt. Ein Bild sagt mehr als tausend Worte: Ist „Hauptnavigation 1“ ausgewählt und bewegt sich die Maus innerhalb des gezeigten Dreiecks zu einem Untermenü, können die gestreiften Hauptmenüpunkte ignoriert oder ihr Wechsel verzögert werden.

![](https://km.sankuai.com/api/file/cdn/1270932134/1494009598?contentType=1\&isNewContent=true\&isNewContent=false)

Um festzustellen, ob ein Punkt in einem Dreieck liegt, gibt es viele Verfahren. Ein klassischer Ansatz nutzt das Kreuzprodukt von Vektoren. Grundlegende Vektoroperationen sind im Programm leicht umzusetzen. Sie bestehen nur aus Kombinationen von Addition, Subtraktion, Multiplikation und Division.

So weit das Problem. Meine neuen Überlegungen dazu teilen den Weg von der Anforderung zur Umsetzung in vier Phasen.

Zuerst werden die Anforderungen konkretisiert. Wir müssen sie klären, zerlegen und möglichst anschaulich machen.

Danach übersetzen wir die zerlegten Anforderungen in Probleme. Das ist ein Prozess der Domänenbildung und Modellierung. In der Softwareentwicklung bilden wir Anforderungen etwa auf ein berechenbares und programmierbares Modell ab. Heute halte ich diesen Schritt für wichtiger als das anschließende Wie. Eine Anforderung in die Frage zu übersetzen, ob ein Punkt in einem Dreieck liegt, ist eine anspruchsvolle Fähigkeit von Ingenieuren.

Dann folgt die Frage nach der Umsetzung. Das Ergebnis des vorigen Schritts ist ein Modell, etwa aus Mathematik, Physik oder Statistik. Nun müssen wir Disziplinen und Wissensgebiete miteinander verbinden. Wer nicht weiß, wie man die Lage eines Punkts im Dreieck prüft, kann jemanden mit guten Mathematikkenntnissen fragen. Ein großes, komplexes Problem kann mehrere Fachgebiete betreffen. In dieser Phase vernetzen wir Ressourcen.

Zum Schluss kommt die eigentliche Implementierung. Darauf verwenden wir den größten Teil unserer Zeit: auf Engineering, Modularisierung, Standardisierung und andere technische Verfahren. Darin sind wir vergleichsweise geübt.
