Sélectionner une page

Comment penser comme un programmeur – quelques leçons en résolution de problèmes

Si vous êtes intéressé par la programmation, vous avez peut-être déjà vu cette citation :

“Tout le monde devrait apprendre à développer, car ça vous apprend à penser.” – Steve Jobs

Vous vous êtes probablement aussi demandé ce que cela signifie, de penser comme un programmeur ? Et comment on fait ça ? ?

En gros, il s’agit de trouver le moyen le plus efficace pour résoudre des problèmes.

Dans cet article, le but est de vous apprendre cette méthode.

A la fin, vous saurez exactement quelles sont les étapes à suivre pour être un meilleur résolveur de problèmes.

Pourquoi est-ce important ?

La résolution de problèmes est la meilleure des compétences.

Nous avons tous des problèmes. Grands et petits. La façon dont nous les traitons est parfois… assez aléatoire.

A moins que vous n’ayez un système d’exploitation intégré en vous, c’est probablement la façon dont vous “résolvez” les problèmes (ce que je faisais quand j’ai commencé à coder) :

  1. Essayer une solution.
  2. Si ça ne marche pas, en essayer une autre.
  3. Si ça ne marche pas, répéter l’étape 2 jusqu’à obtenir un résultat satisfaisant.

    Parfois, on a de la chance. Mais c’est la pire façon de résoudre les problèmes ! Et c’est une énorme, énorme perte de temps.
    La meilleure façon consiste à a) avoir un plan de résolution et b) le mettre en pratique.

“Presque tous les employeurs privilégient d’abord les compétences en résolution de problèmes.”

“Les compétences en résolution de problèmes sont presque unanimement la qualification la plus importante que les employeurs recherchent….plus que la maîtrise des langages de programmation, le debugging, et la conception de logiciels.
La démonstration de la pensée computationnelle ou de la capacité de décomposer des problèmes importants et complexes est tout aussi valable (sinon plus) que les compétences techniques de base requises pour un poste “.

Avoir un plan de résolution
Pour trouver le bon plan, j’ai suivi les conseils du livre de Tim Ferriss sur l’apprentissage, “The 4-Hour Chef“.

Tout le monde est différent. Vous serez différent. Mais si vous commencez avec des bases sur lesquelles nous sommes tous d’accord, vous irez beaucoup plus loin, beaucoup plus vite.

“La plus grosse erreur que je vois est que les nouveaux programmeurs se concentrent sur l’apprentissage de la syntaxe au lieu d’apprendre à résoudre des problèmes.” – V. Anton Spraul
Alors, que devez-vous faire lorsque vous rencontrez un nouveau problème ?

Voici les étapes à suivre :

1. Comprendre

Savoir exactement ce qui est demandé. La plupart des problèmes difficiles sont difficiles parce que vous ne les comprenez pas (d’où la raison pour laquelle c’est la première étape).

Comment savoir quand vous comprenez un problème ? Quand vous pouvez l’expliquer simplement .

Vous souvenez-vous d’avoir été bloqué sur un problème, vous commencez à l’expliquer, et vous voyez instantanément des failles dans la logique que vous n’aviez pas vues auparavant ?

La plupart des programmeurs connaissent cette sensation.

C’est pourquoi vous devriez écrire votre problème, dessiner un diagramme, ou en parler à quelqu’un d’autre (ou chose… certaines personnes utilisent un canard en caoutchouc).

“Si vous ne pouvez pas expliquer quelque chose en termes simples, vous ne le comprenez pas.” – Richard Feynman

2. Faire un plan

Ne vous plongez pas dans la résolution sans plan ( en espérant pouvoir vous débrouiller). Planifiez votre solution !

Rien ni personne ne vous aidera si vous ne pouvez pas écrire les étapes exactes.

En programmation, cela signifie qu’il ne faut pas commencer à travailler tout de suite. Donnez à votre cerveau le temps d’analyser le problème et de traiter l’information.

Pour obtenir un bon plan, répondez à cette question :

“Étant donné l’entrée X, quelles sont les étapes nécessaires pour retourner la sortie Y ?”

Note : Les programmeurs ont un outil formidable pour ça… les commentaires !

3. Diviser

Faites attention. C’est l’étape la plus importante de toutes.

N’essayez pas de résoudre un trop gros problème. Vous allez pleurer.

Au lieu de cela, divisez-le en sous-problèmes. Ces sous-problèmes sont beaucoup plus faciles à résoudre.

Ensuite, résolvez chaque sous-problème un par un. Commencez par le plus simple. Le plus simple signifie que vous connaissez la réponse (ou que vous êtes proche de la réponse).

“Le plus simple” signifie que le sous-problème en cours de résolution ne dépend pas de la résolution des autres sous-problèmes.

Une fois que vous avez résolu chaque sous-problème, faites le lien entre les différents sous problèmes.

En connectant toutes vos “sous-solutions“, vous obtiendrez la solution du problème original. Félicitations !

Cette technique est la pierre angulaire de la résolution de problèmes. Souvenez-vous-en (relisez cette étape, s’il le faut).

“Si je pouvais enseigner à chaque programmeur débutant une compétence de résolution de problème, ce serait la technique de résolution de problème (réduire le problème)”.

Par exemple, supposons que vous êtes un nouveau programmeur et qu’on vous demande d’écrire un programme qui lit dix nombres et qui détermine quel est le troisième plus grand nombre. Pour un tout nouveau programmeur, cela peut être une tâche difficile, même si elle ne nécessite qu’une syntaxe de programmation de base.

Si vous êtes bloqué, vous devez réduire le problème à quelque chose de plus simple. Au lieu de trouver le troisième chiffre le plus élevé, que diriez-vous de trouver le plus élevé dans l’ensemble ? Encore trop difficile ? Et si vous trouviez le plus grand des trois nombres ? Ou le plus grand de deux ?

Réduisez le problème au point de savoir comment le résoudre et écrivez la solution. Puis élargissez légèrement le problème et réécrivez la solution pour qu’elle corresponde, et continuez jusqu’à ce que vous soyez de nouveau au point de départ.” – V. Anton Spraul

4. Coincé ?

A l’heure qu’il est, vous êtes probablement assis là à penser “Heu mec … c’est cool et tout, mais si je suis coincé et que je ne peux même pas résoudre un sous-problème ?”

Premièrement, prenez une grande respiration. Deuxièmement, c’est normal.
Ne vous inquiétez pas, cher ami. Ça arrive à tout le monde !

La différence est que les meilleurs programmeurs/résolveurs de problèmes sont plus intéressés par les bugs/erreurs que frustrés par ces derniers.

En fait, voici trois choses à essayer quand on est confronté à un problème :

  • Débuggez : Parcourez pas à pas votre solution en essayant de trouver où vous vous êtes trompé. Les programmeurs appellent cela le débuggage (en fait, c’est exactement ce que fait le debugger).

    “L’art du débuggage est de trouver ce que vous avez vraiment dit à votre programme de faire, plutôt que ce que vous pensiez lui avoir dit de faire” – Andrew Singer

  • Réévaluez : Prenez du recul. Regardez le problème sous un autre angle. Y a-t-il quelque chose qui peut être résumé à une approche plus générale ?

    ” 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. […]
    L’exemple classique en est bien sûr la sommation d’une longue liste d’entiers consécutifs, 1 + 2 + 3 + … + n, qu’un très jeune Gauss a rapidement reconnu comme étant simplement n(n+1)/2, évitant ainsi l’effort de devoir faire l’addition”. – C. Jordan Ball

    Note : Une autre façon de réévaluer est de repartir à zéro. Effacez tout et recommencez avec un regard neuf. Je suis sérieux. Vous serez étonné de voir à quel point c’est efficace.

La recherche : Ahh, ce bon vieux Google. Vous avez bien lu. Peu importe le problème que vous avez, quelqu’un l’a probablement résolu. Trouvez cette personne et sa solution. En fait, faites-le même si vous avez résolu le problème ! ( Vous pouvez apprendre beaucoup des solutions possible)

Mise en garde : Ne cherche pas de solution au gros problème. Ne cherchez que des solutions aux sous-problèmes. Pourquoi ? Parce que si vous ne vous débattez pas (même un peu), vous n’apprendrez rien. Si vous n’apprenez rien, vous perdez votre temps.

Pratiquer

Ne vous attendez pas à être parfait après seulement une semaine. Si vous voulez être un bon résolveur de problèmes, résolvez beaucoup de problèmes !

Entraînez-vous et entraînez-vous. Ce ne sera qu’une question de temps avant que vous ne vous rendiez compte que “ce problème pourrait facilement être résolu avec <insérer le concept ici>.”

Comment s’entraîner ? Il y a des tas d’options !

Parties d’echec , problèmes de maths, Sudoku, Go, Monopoly, jeux vidéo, cryptokitties, bla… bla… bla…

En fait, un modèle commun chez les gens qui réussissent est leur habitude de pratiquer la “micro résolution de problèmes”. Par exemple, Peter Thiel joue aux échecs, et Elon Musk joue aux jeux vidéo.

Byron Reeves a dit : “Si vous voulez voir à quoi ressemblera la direction d’une entreprise dans trois à cinq ans, regardez ce qui se passe dans les jeux en ligne.
Faites une petite avance jusqu’à aujourd’hui. Elon Musk, Reid Hoffman, Mark Zuckerberg et bien d’autres disent que les jeux ont été à la base de leur succès dans la construction de leur entreprise.” – Mary Meeker (rapport sur les tendances de l’Internet en 2017)

Est-ce que ça veut dire que vous devriez juste jouer aux jeux vidéo ? Pas du tout.

Mais qu’est-ce qui caractérise les jeux vidéo ? C’est ça : la résolution de problèmes !

Donc, ce que vous devriez faire, c’est trouver un moyen de vous entraîner. Quelque chose qui vous permette de résoudre de nombreux micro-problèmes (idéalement, quelque chose que vous aimez).

Par exemple, j’aime les défis de programmation. Chaque jour, j’essaie de résoudre au moins un défi (généralement sur Coderbyte).

Comme je l’ai dit, tous les problèmes partagent des schémas similaires.

Conclusion

C’est tout !

Maintenant, vous savez mieux ce que ça veut dire “penser comme un programmeur”.

Vous savez aussi que la résolution de problèmes est une compétence extraordinaire à cultiver (la super-compétence).

Je vous souhaite de rencontrer beaucoup de problèmes.

Vous avez bien lu. Au moins maintenant, vous savez comment les résoudre ! (aussi, vous apprendrez qu’avec chaque solution, vous vous améliorez).

” Juste quand vous pensez avoir réussi à franchir un obstacle, un autre émerge. Mais c’est ce qui rend la vie intéressante […]
La vie est un processus de franchissement de ces obstacles – une série de barrières que nous devons franchir.
A chaque fois, vous apprendrez quelque chose.
À chaque fois, vous développerez force, sagesse et perspective.
Chaque fois, un peu plus de la concurrence s’efface. Jusqu’à ce qu’il ne reste plus que toi : la meilleure version de toi.” – Ryan Holiday (L’obstacle est la voie)

Maintenant, allons résoudre quelques problèmes !

Envie de devenir Développeur Freelance ?

 

Doubler votre salaire, voyager et... être votre propre boss ?

 

Recevez 4 vidéos de formation offerte pour devenir Développeur Freelance

 

RAPIDEMENT ET SANS PAPERASSE

Merci de votre confiance