Selon Steve Jobs, « Tout le monde devrait apprendre à programmer un ordinateur, car cela vous apprend à réfléchir ». Figurant parmi les citations les plus populaires dans l’univers de la programmation, cette citation a de quoi titiller votre curiosité si vous vous intéressez à la programmation. Vous êtes-vous déjà demandé ce que cela implique d’être dans la peau d’un programmeur ? C’est probablement la façon la plus efficace de venir à bout de vos problèmes. L’objectif de cet article est de vous apprendre comment résoudre tous les problèmes que vous rencontrez en adoptant la mentalité d’un développeur informatique.
Devenir le meilleur résolveur de problèmes : quelle importance ?
Les problèmes que vous rencontrez tous les jours, quel que soit votre âge, vous les résolvez de façon aléatoire. Lorsque j’ai commencé à coder, face à un problème à résoudre, j’utilise ma technique en 3 étapes :
- Trouver et appliquer une solution.
- Lorsque cette solution ne fonctionne pas, en essayer une autre.
- Lorsque la nouvelle solution n’aboutit toujours pas à la résolution du problème, répéter l’étape 2 jusqu’à ce que la chance sourit.
Nous sommes nombreux à utiliser cette technique en 3 étapes et avec de la chance, vous aboutissez à la solution. Malheureusement, ce n’est certainement pas la meilleure façon de résoudre les problèmes, en plus de la perte de temps considérable que cette technique engendre.
La capacité à résoudre les problèmes est une compétence prioritairement recherchée par les employeurs. Elle arrive en tête des qualifications que les employeurs recherchent le plus, après la maîtrise des langages de programmation, la conception de systèmes et le débogage.
Avoir la faculté de décomposer les problèmes les plus complexes est aussi important, sinon plus que la détention de compétences techniques basiques nécessaires à l’occupation d’un poste. C’est dire combien c’est important de développer cette macro-compétence.
Si la plupart d’entre nous résolvent mal les problèmes, quelle est alors la meilleure façon de procéder ? D’une part, il faut avoir un cadre et d’autre part, il faut s’entraîner.
Avoir un cadre, le premier pas vers la résolution efficace des problèmes
Avoir un cadre, voilà le premier pas à faire pour résoudre efficacement des problèmes. Encore faut-il savoir le trouver ce cadre. Pour cela, l’ouvrage The 4 Hour Chef de Tim Ferris sur l’apprentissage donne les meilleurs conseils en la matière.
Sur la question de l’obtention d’un cadre pour la résolution des problèmes, V. Anton Spraul, auteur du livre Think Like a Programmer : An Introduction to Creative Problem Solving et C. Jordan Ball ont accepté de participer à une expérience inédite. Interrogés sur la même problématique, les deux hommes ont fourni les mêmes réponses, bien qu’ils eussent deux méthodologies de résolution différentes l’une de l’autre.
Cette expérience a permis d’aboutir à la conclusion qu’en appliquant les principes reconnus comme efficaces par tous, vous pouvez vous aussi en venir à résoudre des problèmes. À ce sujet, V. Anton Spraul a affirmé que : « La plus grande erreur que je vois faire parmi les nouveaux programmeurs est de se concentrer sur l'apprentissage de la syntaxe au lieu d'apprendre à résoudre des problèmes. »
Quel cadre faut-il alors respecter lorsqu’on est face à un nouveau problème ? En voici les différentes étapes.
Étape 1 : la compréhension
Comprendre implique de savoir de façon précise ce qu’on vous demande. Si les problèmes semblent pour la plupart difficiles, c’est parce que vous ne prenez pas le temps de les comprendre. Voilà pourquoi la compréhension constitue la première étape.
À quel moment savez-vous que vous comprenez le problème ? À partir du moment où vous pouvez l’expliquer de la façon la plus simple. Cette thèse est corroborée par Richard Feyman qui affirme que : « Si vous ne pouvez pas expliquer quelque chose en termes simples, vous ne le comprenez pas. »
Ainsi, lorsque vous êtes coincé sur un problème, à partir du moment où vous êtes en mesure de l’expliquer, les nœuds dans la logique du problème apparaissent de façon instantanée. C’est le sentiment que connaissent la plupart des programmeurs. Commencez par écrire le problème. Décomposez-le. Parlez-en à quelqu’un.
Étape 2 : la planification
Après avoir compris le problème, évitez d’essayer de le résoudre directement sans avoir un plan. Il est important que la solution soit planifiée, car vous n’avez aucune chance de la trouver sans avoir noté les différentes étapes de sa résolution. Pour tout programmeur, cette étape revient à éviter de se lancer dans le codage pur sans plan.
Vous devez donner à votre cerveau un délai d’analyse du problème afin de l’aider à mieux traiter toutes les informations. L’élaboration d’un bon plan passe par la réponse à la question : « considérant l’entrée X, par quelles étapes faut-il passer pour arriver à la sortie Y ? » La plupart des programmateurs détiennent des outils remarquables pour les aider à résoudre un tel plan.
Étape 3 : la division
Cette étape est de loin la plus importante. Vous ne devez jamais essayer de résoudre un gros problème tel quel. Vous risquez de faire une dépression. Vous devez toujours le diviser en sous-problèmes, car elles sont beaucoup plus faciles à résoudre.
Vous pouvez ensuite résoudre chaque sous-problème l’un après l’autre, en commençant par le plus facile. Le sous-problème le plus simple, c’est celui dont vous avez la réponse ou dont la réponse est la plus proche. Il importe aussi de savoir que la résolution du sous-problème le plus simple ne doit pas dépendre des autres.
Une fois donc que tous les sous-problèmes ont été résolus, vous n’aurez qu’à connecter les sous-solutions. Vous pourrez ainsi aboutir à la solution finale du problème originelle. Il s’agit là de la technique suprême de résolution des problèmes.
Selon V. Anton Spraul, il s’agit de « la technique de réduction d’un problème ». Si on suppose que vous êtes un nouveau programmeur à qui il est demandé d’une part, d’écrire un programme lisant 10 nombres et d’autre part, de déterminer le 3e nombre le plus élevé, la tâche peut sembler difficile, si vous vous en tenez à la syntaxe de votre langage de programmation.
Face à ce problème, le premier réflexe doit être de réduire le problème en sous-problèmes plus simples à résoudre. V. Anton Spraul recommande de commencer par trouver le nombre le plus élevé de l’ensemble au lieu de trouver le 3e plus élevé. Si cela semble toujours trop compliqué, essayez plutôt de trouver le plus grand des 3 premiers nombres ou des deux premiers.
L’astuce consiste donc à réduire le problème de sorte que vous aboutissiez à la solution. Il faudra ensuite développer le problème plus simplement et réécrire la solution y afférente. Enfin, reproduisez ce modèle jusqu’à ce que vous aboutissiez au point de départ.
Étape 4 : quoi faire quand on est coincé ?
En soi, la technique « compréhension – planification – division » semble très simple à appliquer. Cependant, que faire lorsque vous êtes coincé et que vous ne pouvez pas résoudre un sous-problème ? C’est une éventualité qui peut survenir.
Vous devez savoir que face à des problèmes jugés complexes, les bugs ou les erreurs, les vrais programmateurs, du moins les meilleurs font davantage preuve de curiosité que d’irritation.
Selon Andrew Singer, « L'art du débogage consiste à déterminer ce que vous avez vraiment dit à votre programme de faire plutôt que ce que vous pensiez lui avoir dit de faire ». Il ajoute « Parfois, nous nous perdons tellement dans les détails d'un problème que nous négligeons les principes généraux qui permettraient de résoudre le problème à un niveau plus général ».
Face à une telle situation, votre réflexe doit être de prendre du recul et de regarder le problème sous un nouvel angle. Cette autre solution pourrait simplement être de recommencer tout le processus de résolution du problème. Effacez simplement tout ce que vous avez eu à faire et recommencez avec un regard neuf. Vous pourriez être étonnamment surpris de l’efficacité de cette méthode.
Vous pourriez aussi mettre Google à contribution. Peu importe le problème auquel vous faites face, il a certainement été déjà résolu par quelqu’un d’autre. Trouvez donc soit la personne qui a réalisé cette prouesse, soit la solution elle-même.
Que retenir ?
Face à un problème, attelez-vous toujours à le diviser en sous-problèmes puis à trouver des solutions aux sous-problèmes, plutôt que d’attaquer le problème dans son ensemble. Foncez sur le problème en entier ne vous permettra pas d’apprendre quoi que ce soit et ça, c’est de la perte de temps.
S’entraîner, le second pas vers la résolution efficace des problèmes
Savoir résoudre les problèmes est une méta-compétence, c’est-à-dire une compétence que vous développez à travers le renforcement de votre capacité de réflexion. Par conséquent, connaître le bon cadre ne fera pas de vous le plus grand résolveur de problèmes au bout d’une semaine de pratique. Pour en devenir effectivement un, il faut résoudre un grand nombre de problèmes.
Avec la pratique, vous aiguisez votre esprit
En soi, vous devez vous entraîner. Pour que vous en arriviez à reconnaître un problème facile à résoudre, tout dépendra du temps que vous mettrez à vous entraîner. La question suivante à laquelle vous devez répondre est celle-ci : comment s’entraîner ?
Pour ça, il existe une pléthore d’options : les échecs, les puzzles, le Monopoly, le sudoku, les problèmes mathématiques, les jeux vidéo, etc. S’il y a bien quelque chose de commun aux personnes qui réussissent à résoudre les problèmes, même les plus complexes, c’est leur habitude à s’entraîner à la « micro-résolution de problèmes ».
L’entraînement développe votre leadership
D’après, Byron Reeves, « Si vous voulez voir à quoi pourrait ressembler le leadership commercial dans trois à cinq ans, regardez ce qui se passe dans les jeux en ligne ». Le rapport sur les tendances Internet 2017 évoque les cas d’Elon Musk, grand joueur de jeux vidéo, Mark Zuckerberg ou encore de Peter Thiel, joueur d’échecs dont les entreprises réussissent justement en raison de leur pratique des jeux.
Est-ce à dire que vous devriez passer votre temps à jouer aux jeux vidéo ? Évidemment non. Cependant, à quoi se résument en général les jeux vidéo ? Un exercice de résolution de problèmes. Le plus important, ce n’est pas les jeux vidéo, mais plutôt l’exercice. Vous devez avoir pour objectif de trouver un moyen de vous entraîner à résoudre plusieurs micro-problèmes. Il doit surtout s’agir de quelque chose que vous appréciez tout particulièrement.
Si vous aimez les défis de codage, il vous suffit de tenter d’en résoudre au moins un par jour. Quel que soit le moyen utilisé, retenez que la majorité des problèmes, sinon tous, ont le même schéma. Une fois que vous avez appris à en résoudre certains, vous pourrez tous les résoudre.
En conclusion
Au terme de cet article, vous comprenez mieux ce que cela veut dire « réfléchir comme un programmeur ». La capacité à résoudre les problèmes est une méta-compétence, qui vous confère un incroyable pouvoir. Vous devez donc absolument cultiver cette compétence.
Vous savez également ce qu’il vous reste à faire pour vous exercer à résoudre les problèmes, en mettant vos compétences à contribution. Tout ce qu’il vous reste à faire, c’est de rencontrer de nombreux problèmes et de les résoudre, car chaque solution que vous trouvez est un pas vers votre perfectionnement.
Dans son ouvrage L’obstacle est le chemin, Ryan Holiday déclare : « Juste au moment où vous pensez avoir franchi avec succès un obstacle, un autre émerge. Mais c'est ce qui rend la vie intéressante. […] La vie est un processus pour briser ces obstacles - une série de lignes fortifiées que nous devons franchir. À chaque fois, vous apprendrez quelque chose. À chaque fois, vous développerez force, sagesse et perspective. À chaque fois, un peu plus de concurrence tombe. Jusqu'à ce qu'il ne reste plus que vous: la meilleure version de vous. »
Maintenant, il est temps de commencer à résoudre des problèmes.








