← Retour

🔥 Résoudre n'importe quel problème (en 9 tips).

~6 min

J'ai eu beaucoup de demande d'apprenants (d'étudiants) qui me posait la question "Mais comment on fait pour aborder un problème complexe au boulot ?" surtout en programmation, alors voilà la réponse structurée et pratique.

Manquer de confiance et trouver insurmontable certains problèmes que l’on nous pose en développement, c’est normal et ça arrive souvent.

Ici je vais compiler les méthodes les plus connues et efficaces pour résoudre efficacement un problème complexe.

Ca fonctionne bien, avec ça j’ai réussi à faire des choses incroyables comme du Machine learning, du traitement du langage naturel, des app complexes, de l’architecture logiciel ou encore de l’infrastructure de services web et j’en passe.

1 - 🧱 Poser le problème

Parfois on ne pense même pas à sortir le problème de son cerveau / de ses pensées. Poser le problème textuellement, avec une phrase en langage naturelle représentant une action et une finalité peut être salvateur.

Exemple : J’ai besoin de créer quelque chose qui va permettre de récupérer une donnée puis de la filtrer pour pouvoir créer plusieurs éléments d’interface pour les afficher.

La reformulation est souvent vecteur de solution, en exprimant le problème vous aller vous rendre compte de certaines choses sans même y réfléchir et HOP la solution s’offre à vous.

2 - 🙌 Parler en à d’autres

Le développement, c’est social. Ce n’est pas un symbole de faiblesse de communiquer votre problème, les meilleurs dans leur domaines sont des personnes capable de vulgariser et de matérialiser leur pensées aux autres.

C’est de l’entraînement.

Formuler votre problème à quelqu’un, le plus souvent possible, pour aiguiser cette compétence. Vous deviendrez bien plus efficace en résolution de problème.

🪄 C’est déjà arrivé à tous les développeurs : Juste en expliquant son problème à quelqu’un on trouve la solution, c’est magique.

3 - ✍️ Faire un schéma

Poser la réflexion sous forme de dessin ou de schéma est ultra efficace pour prendre du recul et appréhender le problème dans sa globalité. Cela évite se sentir submerger par la complexité de celui-ci.

Utilisez un simple papier / crayon pour faire un dessin, soit, une représentation mentale du problème et le démystifier. Mon schéma est moche, mais il me permet de poser mes idées

En sortant le problème de votre tête, vous utilisez le papier / le schéma comme une mémoire tampon. Vous allez libérer du temps de cerveau pour résoudre le problème.

Utilisez les modèles UML pour modéliser votre problème dans un deuxième temps, mais aussi pour pouvoir en parler à vos collègues, clients et collaborateurs sur un projet. C’est déjà plus pro.

Pour des schémas plus évolués et amenés à être partagés à distance par une équipe, notre solution favorite reste Whimsical. Il existe aussi Draw.io qui fait bien son travail mais l’expérience est moins fluide.

4 - ☕️ Faites une pause

Prendre l’air, boire un café en discutant avec vos collègues, pensez à autre chose c’est une technique ninja secrète.

C’est vraiment pas facile de se faire violence pour sortir de sa concentration, je sais, mais c’est salvateur. Combien de fois des solutions me sont venues à l’esprit en prenant l’air, je ne compte même plus, c’est quasiment à tous les coups.

Vous laisser le temps de digérer le problème, me demandez pas comment ça marche en terme neurologique, mais ca fonctionne.

5 - 💡 Votre problème est probablement déjà résolu

Très peu de développeurs font appel à l’intelligence collective pour résoudre un problème. Je parle pas de StackOverflow, mais de travailler les théories derrière la programmation, exploiter ce que les développeurs de toutes générations ont produit.

Je parle, entre autres, des « patrons de conception » et des bonnes pratiques de développement en général qui vont carrément résoudre vos problèmes sans trop sourciller.

Donc une fois le problème posé essayez de regarder si il n’y a pas un *Design Pattern*qui fait déjà le boulot pour vous, c’est là que votre cerveau de développeur doit être aiguisé.

Votre valeur ajoutée est de savoir repérer des modèles de problèmes pour justement trouver les patron de solutions bien connues, robustes et stables afin de résoudre un problème.

6 - 🚙 Décomposer le problème en petites étapes accessibles

Pour passer du schéma au code, le mieux est de transformer votre schéma en petites étapes de développement. Les étapes doivent être très simple.

J’aime bien l’analogie de la conduite de nuit. Vos phares n’éclairent que 40 ou 50 mètres devant vous, mais cela suffit pour aller à votre destination, aussi loin soit-elle. On démystifie par petites zones accessibles pour retirer l’obscurité d’un problème plus complexe.

7 - 🥸 Ne pas avoir peur de faire moche

C’est un syndrome du développeur débutant, oui c’est bien de faire propre, mais il y a un temps pour tout. Il faut savoir prioriser !

On commence par écrire les signatures de fonctions / de méthode, les structure de classe « large », et on évite d’appliquer des bonnes pratiques de programmation directement.

Comme pour tout dans la vie, c’est une question de raffinage. Laisser aller sa réflexion sans limite, même si le code s’avère exécrable au début.

Je me remémore le principe KISS (Keep It Simple Stupid)quand je sens que je pars trop loin dans la propreté alors que mon programme ne fait toujours pas ce qu’il est censé faire.

Si on cherche à faire beau directement, on va s’infliger beaucoup de contraintes, de complexité et donc de charge mentale. L’objectif est d’abord de trouver une solution à notre problème. Une fois celui ci maitrisé on pourra s’attarder à rendre la solution élégante.

Pas de pression : Il faut résoudre le problème comme la solution vous viens, puis on travaillera plus tard à rendre cela propre et optimale.

8 - 👩‍💻 Ecrire en commentaire les étapes dans la fonction

Une technique qui m’aide pas mal est d’écrire dans le corps de la fonction ou de mon fichier les étapes de la mise en place de la solution.

    ///This function should resolve my problem 
    ///I need to gather data from this super API -> https://api.io/
    ///And display results to DataView 
    func resolveProblem() { 
    	
        //1. Connect to network
        	
        //2. Make API Call to /products 
        
        //3. Transform JSON to Swift object -> Use Adapter pattern here
        
        //4. Publish changes to views -> Use Observer pattern here 
    }

En anglais évidemment comme ça les skills d’anglais sont aussi travaillés 🇺🇸🇬🇧

9 - ⚡️ Le refactoring

Une fois notre problème résolu et maitrisé, c’est comme en mathématique, on peut factoriser notre solution.

Pour rendre la solution plus élégante, et pas forcément plus courte à écrire, mais plus « naturelle » à comprendre et utiliser par d’autres développeurs.

On pourrait faire comme ceci

    func createQueryFrom(elements: [String]) : Query {}
    
    func search(query: Query) : [Result] {}
    
    var query = createQuery(elements: [‘a’,’b’,’c’])
    var results = search(query: query) 

Ou alors modifier les fonctions pour donner ce genre de comportement

    extension Query {
        func searchFromQuery() : [Result] {}
    }
    
    var results = createQueryFrom([‘a’,’b’,’c’])
                                    .searchFromQuery()

On est plus dans le naturel et dans la facilité d’utilisation, il suffit de chaîner les éléments pour créer et rechercher.

En faisant du refactoring on créé une meilleure solution.

Donc tout benef.

⭐️ Bonus

  • 🚰 Buvez de l’eau, le cerveau fonctionne mieux hydraté. Con mais vrai.
  • 🛠 Faites des exercices par vous même de votre coté, pour entraîner votre talent en résolution de problème.
  • 🧠 **Écoutez vous ! **Si vous sentez que vous êtes trop sollicité (charge mentale intenable) alors arrêtez vous. Pause.
  • 📖 Lisez des bouquins : HeadFirst in Design Pattern est un excellent livre par exemple.