Comment Penser Comme Un Programmeur – 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 dans ce pays devrait apprendre à programmer un ordinateur, car ça vous apprend à penser.” – Steve Jobs.Vous vous êtes probablement aussi demandé ce que cela signifie, exactement, de penser comme un programmeur? Et comment le faites-vous ?
Steve Jobs
“Tout le monde dans ce pays devrait apprendre à programmer un ordinateur, car ça vous apprend à penser”Steve Jobs,CEO d’Apple Inc
Essentiellement, il s’agit de la façon la plus efficace de résoudre n’importe quel problème. Dans cet article, mon but est de vous apprendre comment être comme un programmeur en vous enseignant comment résoudre effectivement les problèmes délicats auxquels vous pourriez vous heurter durant votre trajet d’apprentissage en programmation. À la fin de celui-ci, vous saurez exactement quelles mesures prendre pour être un meilleur résolveur de problèmes.
Pourquoi est-ce important?
“Presque tous les employeurs donnent la priorité aux compétences de résolution de problèmes en premier.”
La résolution de problèmes est la méta-compétence. Nous avons tous des problèmes. Grand et petit. Comment nous traitons avec eux est parfois, bien … assez aléatoire. À moins d’avoir un système, c’est probablement comme cela que vous résolvez des problèmes (ce que j’ai fait quand j’ai commencé à coder):
Essayez la solution.
Si cette solution n’est pas la bonne, et que le problème persiste, essayez-en une autre.
Si cela ne fonctionne pas, répétez l’étape 2 jusqu’à ce que vous tomberez sur la bonne solution.
Regardez, parfois vous avez de la chance. Mais c’est la pire façon de résoudre les problèmes! Et c’est une énorme perte de temps.Attention, la chance ne vient pas souvent à notre grais et c’est d’ailleurs pour ça qu’on l’appelle une chance 🙂
La meilleure façon consiste à
a) avoir un Framework (cadre)
b) le pratiquer.
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 débogage et la conception du système.
Démontrer la pensée computationnelle ou la capacité de résoudre des problèmes complexes de grande envergure est tout aussi utile (sinon plus) que les compétences techniques de base requises pour un emploi. »- Hacker Rank(2018 Developer Skills Report)
Avoir Un Framework
Pour trouver le bon cadre, j’ai suivi les conseils du livre de Tim Ferriss sur l’apprentissage, “The 4-Hour Chef“. Cela m’a conduit à interviewer deux personnes vraiment impressionnantes: C. Jordan Ball (classé 1ère ou 2ème sur 65 000+ utilisateurs sur Coderbyte), et V. Anton Spraul (auteur du livre “Think Like a Programmer: An Introduction to Creative Problem Solving” —Pensez comme un programmeur: une introduction à la résolution créative des problèmes”). Je leur ai posé les mêmes questions, (séparément bien sûr) et devinez quoi? Leurs réponses étaient assez similaires! Bientôt, vous aussi, vous les connaîtrez.
Note à Côté: cela ne veut pas dire qu’ils ont tout fait de la même manière. Tout le monde est différent. Vous serez différent. Mais si vous commencez par des principes, nous sommes tous d’accord, vous obtiendrez beaucoup plus rapidement.
V. Anton Spraul
“La plus grande erreur que les nouveaux programmeurs commettent est de se concentrer sur l’apprentissage de la syntaxe au lieu d’apprendre à résoudre des problèmes.” – V. Anton Spraul, auteur de “Computer Science Made Simple”
Alors, que devez-vous faire lorsque vous rencontrez un nouveau problème? Voici les étapes:
1. Comprendre
Savoir exactement ce qui est demandé. La plupart des problèmes difficiles sont difficiles parce que vous ne les comprenez pas et comme ont dit d’ailleurs souvent, bien comprendre le problème constitue 50% de la solution (d’où la première étape).
Comment savoir si vous avez bien compris un problème? Eh bien tout simplement c’est quand vous pouvez l’expliquer d’une manière facile et simple 🙂 .
Je suis sûr que vous vous rappelez qu’un jours vous étiez coincé à cause d’un vilain problème, et que vous commenciez à l’expliquer, et que vous voyez instantanément des trous dans la logique que vous ne voyiez pas auparavant. La plupart des programmeurs connaissent bien ce sentiment.
C’est pourquoi vous devriez écrire votre problème, griffonner un diagramme, ou en parler à quelqu’un d’autre (ou quelque chose … certaines personnes utilisent un canard en caoutchouc).
Richard Feynman
“Si vous ne pouvez pas expliquer quelque chose en termes simples, c’est tout simplement parceque vous-même, vous ne la comprenez pas.” – Richard Feynman, Physicien Américain
2. Plan
Ne plongez pas directement dans la résolution sans établir un plan (et d’une manière ou d’une autre, j’espère que vous pouvez vous frayer un chemin à travers). Planifiez votre solution! Rien ne peut vous aider si vous ne pouvez pas écrire les étapes exactes.
En programmation, cela signifie ne pas que vous devez passer à l’action 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 retrouver la sortie Y?”.
Note à côté: Les programmeurs ont un excellent outil pour les aider avec ça … Commentaires! (Aussi connu comme pseudo-code).
3. Diviser
V. Anton Spraul
Réduire le problème au point où vous savez comment le résoudre et écrire la solution. Puis développez légèrement le problème et réécrivez la solution pour l’adapter, et continuez jusqu’à ce que vous soyez de retour là où vous avez commencé. “– V. Anton Spraul
Faites attention. C’est l’étape la plus importante de tous. N’essayez jamais de résoudre un gros problème. Vous allez souffrir à un tel point de crier fort ou 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 plus proche de cette réponse). Après cela, le plus simple signifie que ce sous-problème à résoudre ne dépend pas de la résolution d’autres problèmes. Une fois que vous avez résolu chaque sous-problème, il suffit alors de lier tous les points. Effectivement, le fait de connecter toutes vos “sous-solutions” vous donnera la solution au problème original. Toutes nos 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èmes, ce serait réduire le degré de difficulté d’ordre technique du problème . Par exemple, supposons que vous êtes un nouveau programmeur et que l’on vous demande d’écrire un programme qui lit dix nombres et détermine quel est le troisième plus haut. Pour un programmeur débutant, cela peut être une tâche difficile, même si elle nécessite seulement une syntaxe de programmation de base. Si vous êtes bloqué, vous devriez réduire le problème à quelque chose de plus simple. Au lieu du troisième plus grand nombre, qu’en est-il de trouver le plus élevé en général? Toujours trop dur? Qu’en est-il de trouver le plus grand des trois chiffres? Ou le plus grand des deux?
4. Coincé?
A présent, vous êtes probablement assis là à penser “Hey Med … C’est cool et tout, mais que faire si je suis coincé et ne peut même pas résoudre un sous-problème?”
Tout d’abord, respirez profondément. Deuxièmement, c’est juste. Ne vous inquiète pas, cela arrive à tout le monde! La différence est que les meilleurs programmeurs / résolveurs de problèmes sont plus curieux des bugs / erreurs qu’énervés. En fait, voici trois choses à essayer en face d’un sentiment si puissant et si désagréable.
Déboguer: Passez étape par étape dans votre solution en essayant de trouver où vous avez mal tourné. Les programmeurs appellent cela un débogage (en fait, c’est tout ce que fait un débogueur).
Andrew Singer
“L’art du débogage consiste à comprendre ce que vous avez vraiment dit à votre programme de faire plutôt que ce que vous pensiez que vous aviez dit de faire.” – Andrew Singer,Professeur à Fox Family, Département de génie électrique et informatique.
Réévaluer: Prenez du recul. Regardez le problème d’un autre point de vue. Y a-t-il quelque chose qui peut être résumé à une approche plus générale?
C. Jordan Ball
Parfois nous sommes tellement perdus dans les détails d’un problème que nous négligeons les principes généraux qui résoudraient le problème à un niveau plus général. L’exemple classique de ceci est, bien sûr, la somme d’une longue liste d’entiers consécutifs, 1 + 2 + 3 + … + n, qu’un très jeune Gauss a rapidement reconnu était simplement n (n + 1) / 2, évitant ainsi l’effort d’avoir à faire l’addition. —C. Jordan BallDéveloppeur chez Anthem, Inc.
Note à Côté: Une autre façon de réévaluer est de recommencer à zéro. Supprimez tout et recommencez avec de nouveaux yeux. Je suis sérieux. Vous serez stupéfait de voir à quel point c’est efficace.
Recherche: Ahh, bon vieux Google. Vous avez bien lu. Quel que soit le problème que vous avez, quelqu’un l’a probablement résolu. Trouvez cette personne / solution. En fait, faites-le même si vous avez résolu le problème! (Vous pouvez apprendre beaucoup de solutions d’autres personnes).
Avertissement! Ne cherchez pas une solution au gros problème. Ne cherchez que des solutions aux sous-problèmes. Pourquoi? Parce que si vous ne luttez pas (même un peu), vous n’apprendrez rien. Si tu n’apprends rien, tu as perdu ton temps.
Entrainez – Vous
N’attendez pas à ce que vous soyez génial après seulement une semaine. Si vous voulez être un bon résolveur de problèmes, resolvez beaucoup de problèmes!
Entraînez vous. Entraînez vous. Entraînez vous. Ce ne sera qu’une question de temps avant que vous reconnaissez que “ce problème pourrait facilement être résolu avec <insert concept here>
Comment pratiquer? Il y a des options sur le wazoo!
Échecs, problèmes de maths, Sudoku, Go, Monopoly, jeux vidéo, cryptokitties, bla … bla … bla …. En fait, les gens qui réussissent ont souvent l’habitude de pratiquer la «micro-résolution de problèmes».
Byron Reeves
“Si vous voulez voir à quoi ressembleront les dirigeants d’entreprise dans trois ou cinq ans, regardez ce qui se passe dans les jeux en ligne” a déclaréByron Reeves, Professeur au Département de communication de l’Université de Stanford et co-fondateur et co-directeur de l’Institut H-STAR.
Avance rapide jusqu’aujourd’hui Elon Musk, Reid Hoffman, Mark Zuckerberg et beaucoup d’autres disent que les jeux ont été à la base de leur succès dans la construction de leurs entreprises. »- Mary Meeker (rapport sur les tendances de l’internet 2017). Cela signifie-t-il que vous devriez simplement jouer à des jeux vidéo? Pas du tout. Mais à quoi servent les jeux vidéo? C’est vrai, la résolution de problèmes! Donc, ce que vous devriez faire est de trouver un débouché pour pratiquer. Quelque chose qui vous permet de résoudre de nombreux micro-problèmes (idéalement, quelque chose que vous aimez). Par exemple, j’aime bien coder les défis. 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 modèles similaires.
Conclusion
La vie est un processus de rupture à travers ces obstacles – une série de lignes fortifiées que nous devons franchir. Chaque fois, vous apprendrez quelque chose. Chaque fois, vous développerez la force, la sagesse et la perspective. A chaque fois, la compétition diminue peu à peu. Jusqu’à ce qu’il ne reste rien à part vous: La meilleur version de vous
C’est tout! Maintenant, vous savez mieux ce que signifie “penser comme un programmeur”. Vous savez aussi que la résolution de problèmes est une compétence incroyable à cultiver (la méta-compétence). Comme si cela ne suffisait pas, remarquez comment vous savez aussi quoi faire pour mettre en pratique vos compétences en résolution de problèmes! Assez cool non?
Enfin, je vous souhaite de rencontrer de nombreux problèmes. Vous avez bien lu. Au moins maintenant vous savez comment les résoudre! (aussi, vous apprendrez qu’avec chaque solution, vous allez améliorez vos compétences).
Au moment où vous pensez que vous avez surpasser avec succès un obstacle, un autre surgit! Laissez moi vous dire que c’est en fait ce qui rend la vie intéressante. Maintenant, allez résoudre quelques problèmes! Et bonne chance :).