Comment penser comme un programmeur - leçons de 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 cela vous apprend à réfléchir.» - Steve Jobs

Vous vous êtes probablement aussi demandé ce que cela signifie exactement de penser comme un programmeur? Et comment le faites-vous ??

Essentiellement,il s'agit d' un moyen plus efficace de résoudre les problèmes .

Dans cet article, mon objectif est de vous apprendre de cette façon.

À la fin, vous saurez exactement quelles mesures prendre pour mieux résoudre les problèmes.

Pourquoi est-ce important?

La résolution de problèmes est la méta-compétence.

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

À moins que vous n'ayez un système, c'est probablement ainsi que vous «résolvez» les problèmes (ce que j'ai fait lorsque j'ai commencé à coder):

  1. Essayez une solution.
  2. Si cela ne fonctionne pas, essayez-en un autre.
  3. Si cela ne fonctionne pas, répétez l'étape 2 jusqu'à ce que vous ayez de la chance.

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.

La meilleure façon consiste à a) avoir un cadre et b) le pratiquer.

"Presque tous les employeurs accordent la priorité aux compétences en résolution de problèmes. Les compétences en résolution de problèmes sont presque à l'unanimité la qualification la plus importante recherchée par les employeurs…. Plus que la maîtrise des langages de programmation, le débogage et la conception de systèmes. , les problèmes complexes sont tout aussi précieux (sinon plus) que les compétences techniques de base requises pour un travail. » - Classement des hackers (rapport sur les compétences des développeurs 2018)

Avoir un cadre

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 amené à interviewer deux personnes vraiment impressionnantes: C. Jordan Ball (classé 1er ou 2e sur plus de 65 000 utilisateurs sur Coderbyte) et V. Anton Spraul (auteur du livre «Think Like a Programmer: An Introduction to Creative Problem Solving ”).

Je leur ai posé les mêmes questions, et devinez quoi? Leurs réponses étaient assez similaires!

Bientôt, vous les connaîtrez vous aussi.

Sidenote: cela ne signifie pas 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 que nous convenons tous sont bons, vous irez beaucoup plus loin beaucoup plus rapidement.

"La plus grande erreur que je vois faire aux nouveaux programmeurs est de se concentrer 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:

1. Comprendre

Sachez 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 on comprend un problème? Quand vous pouvez l'expliquer en anglais simple.

Vous rappelez-vous avoir été coincé sur un problème, vous commencez à l'expliquer et vous voyez instantanément des trous dans la logique que vous n'aviez pas vu auparavant?

La plupart des programmeurs connaissent 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).

"Si vous ne pouvez pas expliquer quelque chose en termes simples, vous ne le comprenez pas." - Richard Feynman

2. Planifier

Ne vous lancez pas directement dans la résolution sans plan (et j'espère que vous pourrez vous débrouiller). Planifiez votre solution!

Rien ne peut vous aider si vous ne pouvez pas noter les étapes exactes.

En programmation, cela signifie ne pas commencer à pirater tout de suite. Donnez à votre cerveau le temps d'analyser le problème et de traiter les informations.

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

"Compte tenu de l'entrée X, quelles sont les étapes nécessaires pour renvoyer la sortie Y?"

Note de bas de page: Les programmeurs ont un excellent outil pour les aider avec ça… Commentaires!

3. Divisez

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

N'essayez pas de résoudre un gros problème. Tu vas 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 êtes plus proche de cette réponse).

Après cela, le plus simple signifie que ce sous-problème étant résolu ne dépend pas de la résolution des autres.

Une fois que vous avez résolu tous les sous-problèmes, connectez les points.

Connecter toutes vos «sous-solutions» vous donnera la solution au problème d'origine. Toutes nos félicitations!

Cette technique est une pierre angulaire de la résolution de problèmes. Souvenez-vous-en (relisez cette étape si vous devez le faire).

«Si je pouvais enseigner à chaque programmeur débutant une compétence de résolution de problèmes, ce serait la technique de« réduction du problème ». Par exemple, supposons que vous soyez un nouveau programmeur et qu'on vous demande d'écrire un programme qui lit dix nombres et chiffres. sur quel nombre est le troisième plus élevé. Pour un tout nouveau programmeur, cela peut être une tâche difficile, même si cela ne nécessite qu'une syntaxe de programmation de base.Si vous êtes coincé, vous devriez réduire le problème à quelque chose de plus simple. Au lieu du troisième nombre le plus élevé, qu'en est-il de trouver le plus élevé dans l'ensemble? Encore trop dur? Qu'en est-il de trouver le plus grand de trois nombres seulement? Ou le plus grand des deux? Réduisez le problème au point où vous savez comment le résoudre et écrire la solution. Développez ensuite légèrement le problème et réécrivez la solution pour qu'elle corresponde, et continuez jusqu'à ce que vous soyez revenu à votre point de départ. » - V. Anton Spraul

4. Coincé?

À présent, vous êtes probablement assis là en pensant "Hey Richard ... C'est cool et tout, mais que faire si je suis coincé et que je ne peux même pas résoudre un sous-problème ??"

Tout d'abord, prenez une profonde inspiration. Deuxièmement, c'est juste.

Ne t'inquiète pas, mon ami. Cela arrive à tout le monde!

La différence est que les meilleurs programmeurs / résolveurs de problèmes sont plus curieux de connaître les bogues / erreurs qu'irrités.

En fait, voici trois choses à essayer face à un coup dur:

  • Débogage: parcourez votre solution étape par étape en essayant de trouver où vous vous êtes trompé. Les programmeurs appellent ce débogage (en fait, c'est tout ce qu'un débogueur fait).
«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.» - Andrew Singer
  • Réévaluer:Prendre du recul. Regardez le problème sous un autre angle. Y a-t-il quelque chose qui puisse être résumé dans 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 de ceci, bien sûr, est la sommation 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 Ball

Sidenote: Une autre façon de réévaluer est de recommencer. Supprimez tout et recommencez avec des yeux frais. Je suis serieux. Vous serez étonné de voir à quel point cela est efficace.

  • Recherche:Ahh, bon vieux Google. Vous avez bien lu. Quel que soit le problème que vous rencontrez, quelqu'un l'a probablement résolu. Trouvez cette personne / solution. En fait, faites cela même si vous avez résolu le problème! (Vous pouvez apprendre beaucoup des solutions des autres).

Attention: ne cherchez pas de solution au gros problème. Ne cherchez que des solutions aux sous-problèmes. Pourquoi? Parce qu'à moins de lutter (même un peu), vous n'apprendrez rien. Si vous n'apprenez rien, vous avez perdu votre temps.

Entraine toi

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

Entraine toi. Entraine toi. Entraine toi. Ce ne sera qu'une question de temps avant que vous reconnaissiez que «ce problème pourrait être facilement résolu».

Comment pratiquer? Il y a des options sur le wazoo!

Puzzles d'échecs, problèmes de mathématiques, Sudoku, Go, Monopoly, jeux vidéo, cryptokitties, bla… bla… bla….

En fait, un modèle courant chez les personnes 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 à des jeux vidéo.

"Byron Reeves a déclaré:" Si vous voulez voir à quoi pourrait ressembler le leadership commercial dans trois à cinq ans, regardez ce qui se passe dans les jeux en ligne. " Elon [Musk], Reid [Hoffman], Mark Zuckerberg et bien d'autres disent que les jeux ont été essentiels à leur succès dans la création de leur entreprise. » - Mary Meeker (rapport sur les tendances Internet 2017)

Cela signifie-t-il que vous ne devriez jouer qu'à des jeux vidéo? Pas du tout.

Mais qu'est-ce que les jeux vidéo? C'est vrai, la résolution de problèmes!

Donc, ce que vous devez faire est de trouver un exutoire pour pratiquer. Quelque chose qui vous permet de résoudre de nombreux micro-problèmes (idéalement, quelque chose que vous appréciez).

Par exemple, j'aime les défis de codage. Chaque jour, j'essaye 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

C'est tout les gens!

Désormais, vous savez mieux ce que signifie «penser comme un programmeur».

Vous savez également 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 également quoi faire pour mettre en pratique vos compétences en résolution de problèmes!

Ouf… Assez cool non?

Enfin, je souhaite que vous rencontriez 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 vous améliorez).

«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 la force, la sagesse À chaque fois, un peu plus de concurrence s'évanouit. Jusqu'à ce qu'il ne reste plus que vous: la meilleure version de vous. " - Ryan Holiday (L'obstacle est le chemin)

Maintenant, allez résoudre quelques problèmes!

Et bonne chance?

Un merci spécial à C. Jordan Ball et V. Anton Spraul. Tous les bons conseils sont venus d'eux.

Merci d'avoir lu! Si cela vous a plu, testez combien de fois pouvez-vous frapper en 5 secondes. C'est un excellent cardio pour vos doigts ET aidera d'autres personnes à voir l'histoire.