> 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/fr/2022/w01-a-path-to-solving-complex-problems.md).

# W01-Un chemin pour résoudre les problèmes complexes

Vendredi soir, je discutais avec Yunfei d'un problème délicat sur un site de commerce électronique pour ordinateur. Je me suis souvenu d'un ancien billet sur le sujet et ai rouvert mon blog, abandonné depuis cinq ans.

Le retrouver m'a inspiré à la fois affection et gêne. À l'époque, j'avais du temps au travail et rêvais d'Internet. J'avais créé ce blog pendant mes loisirs pour montrer des techniques que je croyais profondes, mais qui étaient surtout de petites astuces. Après quelques lectures, j'ai plaisanté : aujourd'hui, il m'est difficile de me poser pour écrire cela ; je pense surtout à savoir si une activité rapporte.

Ce qui me rend encore un peu fier est sans doute le domaine enregistré alors. Peu savent que l'extension .wang existe, et mon nom est justement Wang. Je possède donc un domaine identique à mon nom anglais, unique au monde, sans devoir ajouter 102, et toujours en HTTPS.

Revenons au sujet. Ce problème délicat m'inspire aujourd'hui de nouvelles réflexions.

La page d'accueil de JD sur ordinateur, réalisée par l'équipe Aotu, semble ne pas avoir connu de grande refonte depuis trois ou quatre ans. Elle conserve pourtant des idées durables, comme la liste des catégories à gauche. Survoler une entrée principale affiche le sous-menu voisin. En parcourant la liste, ce sous-menu change donc en temps réel. Mais lorsque vous déplacez le pointeur vers une sous-catégorie, il peut traverser plusieurs entrées principales sans déclencher de changement. Vous atteignez sans difficulté le sous-menu voulu.

À première vue, cela ressemble à de l'IA et paraît complexe. Présenté comme une analyse en temps réel de la trajectoire du pointeur pour déduire l'intention de l'utilisateur, le problème orienterait beaucoup de personnes dans cette direction.

En réalité, analyser et reformuler le besoin le ramène à déterminer si un point est à l'intérieur d'un triangle. L'image l'explique mieux que mille mots. Lorsque l’entrée « Navigation de premier niveau 1 » est sélectionnée, un déplacement dans le triangle représenté vers un sous-menu permet d'ignorer les entrées principales traversées, ou de retarder leur activation.

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

Il existe plusieurs façons de tester l'appartenance à un triangle. Le produit vectoriel est une solution classique. Les opérations vectorielles élémentaires sont simples à programmer : des combinaisons d'additions, de soustractions, de multiplications et de divisions.

Voilà le problème. J'en tire aujourd'hui une décomposition en quatre étapes.

D'abord, rendre le besoin concret. Il faut le clarifier et le décomposer aussi précisément que possible.

Ensuite, traduire les besoins décomposés en problèmes. C'est un travail de modélisation dans un domaine. En logiciel, on les relie à un modèle calculable et programmable. Cette étape me paraît aujourd'hui plus importante que la réalisation qui suit. Transformer le besoin en test d'appartenance d'un point à un triangle relève d'une compétence avancée de l'ingénieur.

Vient la manière de faire. L'étape précédente produit un modèle, mathématique, physique ou statistique, par exemple. Nous devons relier les disciplines et les domaines. Si nous ignorons comment tester le point dans le triangle, demandons à quelqu'un de bon en mathématiques. Un grand problème complexe peut mobiliser plusieurs domaines : il faut donc construire un réseau de ressources.

Enfin vient l'implémentation. Nous passons l'essentiel de notre temps à réaliser et industrialiser, avec la modularisation, la standardisation et les autres outils d'ingénierie. C'est la partie que nous maîtrisons relativement bien.
