
Si vous ĂȘtes intĂ©ressĂ© par la programmation, vous avez peut-ĂȘtre entendu la phrase:
"Tout le monde a besoin d'apprendre la programmation parce qu'elle vous apprend Ă penser."
- Steve Jobs
Peut-ĂȘtre vous ĂȘtes-vous Ă©galement demandĂ© ce que signifie penser en tant que programmeur?
En fait, nous parlons d'un moyen plus efficace de résoudre les problÚmes.
Ce message vise Ă vous enseigner cela.
AprĂšs l'avoir lu, vous comprendrez plus prĂ©cisĂ©ment ce qui doit ĂȘtre fait pour trouver les meilleures solutions.
Pourquoi est-ce important?
La résolution de problÚmes est une compétence de base.
Nous résolvons constamment les problÚmes. Grands et petits. Comment fait-on cela? Parfois c'est bon ... si vous avez de la chance.
Si vous n'avez pas d'approche systématique, vous résolvez probablement les problÚmes comme suit (je l'ai fait lorsque je commençais à peine à coder):
- essayer une solution
- s'il ne convient pas, essayez-en un autre,
- si cela ne fonctionne pas, répétez l'étape 2 jusqu'à la victoire.
Vous avez peut-ĂȘtre de la chance, mais c'est la pire façon! Et cela peut prendre beaucoup de temps.
La meilleure façon:
- avoir une approche systématique
- mettre en pratique.
«La plupart des employeurs considÚrent la capacité de résoudre des problÚmes plus importante.
La capacité de résoudre des problÚmes presque à l'unanimité est la capacité la plus importante que les employeurs recherchent ... Plus importante que la connaissance des langages de programmation, du débogage et de la conception de systÚmes.
Une démonstration de la pensée intégrée et la capacité de résoudre de grands problÚmes complexes sont tout aussi précieux (sinon plus) que les compétences techniques de base nécessaires pour travailler. "
- Hacker Rank ( Rapport des compétences des développeurs 2018 )
Approche systématique
Pour trouver la bonne approche, j'ai suivi les conseils du livre de Tim Ferriss sur l'enseignement du chef des
4 heures .
Cela m'a conduit Ă une entrevue avec deux personnes vraiment impressionnantes:
C. Jordan Ball (classé 1er ou 2e sur 65 000 utilisateurs de
Coderbyte ) et
V. Anton Spraul (auteur de
Pensez-y comme un programmeur. Approche créative pour créer du code). ").
Je leur ai posĂ© les mĂȘmes questions, et devinez quoi? Leurs rĂ©ponses Ă©taient trĂšs similaires!
BientĂŽt, vous les reconnaĂźtrez aussi.
Remarque: cela ne signifie pas qu'ils font tous la mĂȘme chose. Ce sont des gens diffĂ©rents et vous ĂȘtes diffĂ©rents d'eux. Mais si vous commencez avec les bons principes de base, le rĂ©sultat sera bien meilleur et beaucoup plus rapide."L'erreur la plus grave que je vois avec les jeunes programmeurs se concentre sur l'apprentissage de la syntaxe, au lieu d'apprendre Ă rĂ©soudre des problĂšmes."
- V. Anton Spraul
Que faire face à un nouveau défi?
Passons en revue les étapes:
1. Comprendre
Comprenez exactement ce qui doit ĂȘtre fait. La plupart des tĂąches sont difficiles car vous ne les comprenez pas (c'est pourquoi il s'agit de la premiĂšre Ă©tape).
Comment savez-vous que vous comprenez l'essence du problĂšme? Essayez de l'expliquer en langage simple.
Rappelez-vous le cas oĂč vous Ă©tiez obsĂ©dĂ© par une tĂąche et que vous avez commencĂ© Ă vous l'expliquer. Ă ce stade, des erreurs logiques apparaissent que vous n'avez jamais vues auparavant.
La plupart des programmeurs connaissent ce sentiment.
C'est pourquoi vous devez décrire votre tùche, dessiner un diagramme ou en parler à quelqu'un (certains utilisent un
canard en caoutchouc ).
"Si vous ne pouvez pas expliquer quelque chose dans un langage simple, alors vous ne le comprenez pas."
- Richard Feynman
2. Planification
Ne commencez pas à résoudre un problÚme sans plan, en espérant ne pas vous y embrouiller. Planifiez votre décision!
Dans la programmation, vous n'avez pas besoin d'aller de l'avant. Donnez Ă votre cerveau le temps d'analyser et de traiter les informations.
Pour obtenir un bon plan, répondez-vous à une question simple:
"En appliquant Ă l'entrĂ©e X, quelles mesures doivent ĂȘtre prises pour obtenir Y Ă la sortie?"
Remarque: les programmeurs ont un excellent outil pour cela. Commentaires!3. Décomposition
C'est l'étape la plus importante. Faites attention!
N'essayez pas de résoudre un gros problÚme.
Au lieu de cela, divisez-le en sous-tùches. Les résoudre sera beaucoup plus facile.
Ensuite, rĂ©solvez les sous-tĂąches, en commençant par la plus simple. Lorsque la tĂąche semble simple, cela signifie que vous connaissez la rĂ©ponse (ou que vous en ĂȘtes proche).
Résolvez chaque sous-tùche indépendamment des autres et combinez les résultats aprÚs la solution.
La combinaison de toutes les petites tĂąches vous donnera la solution Ă l'original.
Félicitations!
Cette méthode est la pierre angulaire de la résolution de problÚmes. N'oubliez pas ceci (relisez cette étape si nécessaire).
Si je pouvais enseigner à chaque jeune programmeur comment résoudre les problÚmes, cela réduirait le montant de la dette technique.
Supposons que vous souhaitiez Ă©crire un programme comportant 10 chiffres et renvoyant le troisiĂšme plus grand. Pour un dĂ©butant, cela peut ĂȘtre une tĂąche intimidante, mĂȘme si cela ne nĂ©cessite que la connaissance de la syntaxe de base.
Si vous ĂȘtes coincĂ©, alors vous devez simplifier. Au lieu du troisiĂšme plus grand nombre, que diriez-vous de trouver le plus grand? Encore trop compliquĂ©? Comment trouver le plus grand des trois nombres? Ou plus des deux?
Réduisez le problÚme jusqu'à ce que vous compreniez comment le résoudre. Enregistrez la décision. Développez ensuite la tùche jusqu'à ce que vous reveniez à la question initiale.
- V. Anton Spraul
4. Coincé?
Maintenant, vous ĂȘtes probablement assis et pensez: "HĂ©, tout est cool, mais si je ne peux pas rĂ©soudre ce problĂšme?"
Respirez d'abord profondĂ©ment. Ne t'inquiĂšte pas. Ăa arrive Ă tout le monde!
La seule diffĂ©rence est que les meilleurs programmeurs ont corrigĂ© des bugs et rĂ©solu des problĂšmes avec intĂ©rĂȘt, pas avec agacement.
En fait, voici trois choses que vous devriez essayer de faire face à des difficultés:
- DĂ©bogage VĂ©rifiez Ă©tape par Ă©tape oĂč vous pourriez vous tromper dans votre dĂ©cision. Les programmeurs appellent cela le dĂ©bogage.
"L'art du débogage est de découvrir la différence entre ce que vous avez écrit dans le programme et ce que vous vouliez écrire"
- Andrew Singer
- Changement d'approche. Revenez en arriĂšre d'une Ă©tape. Regardez la tĂąche sous un angle diffĂ©rent. Est-il possible d'ignorer la mise en Ćuvre et d'appliquer une approche plus gĂ©nĂ©rale?
«Parfois, nous entrons dans tellement de détails que nous ne tenons pas compte des principes généraux avec lesquels nous pouvons résoudre le problÚme à un niveau supérieur. [...]
Un exemple classique de cela, bien sûr, est la somme d'une longue liste d'entiers consécutifs 1 + 2 + 3 + ... + n, que le jeune Gauss a facilement calculé en utilisant la formule n (n + 1) / 2, évitant ainsi les problÚmes liés à l'augmentation du nombre d'éléments »
- C. Jordan Ball
Remarque: Parfois, il vaut mieux tout supprimer et recommencer avec de nouvelles forces. Je suis sĂ©rieux. Vous serez surpris de voir Ă quel point cela peut ĂȘtre efficace. - Recherche. Oh, bon vieux Google . Quelle que soit votre tĂąche, il est fort probable que quelqu'un l'ait dĂ©jĂ rĂ©solue avant vous. Trouvez cette personne ou cette solution. Faites-le mĂȘme si vous le comprenez vous-mĂȘme. Vous pouvez apprendre beaucoup des autres.
Attention: ne cherchez pas de solution Ă un gros problĂšme. Recherchez des solutions uniquement pour les petites sous-tĂąches. Pourquoi? Si vous ne vous fatiguez pas (au moins un peu), vous n'apprendrez rien de nouveau. Si vous nâavez rien appris, vous avez perdu votre temps.
Pratique
Ne vous attendez pas à devenir professionnel en une semaine. Afin de bien résoudre les problÚmes, vous devez résoudre de nombreux problÚmes!
Pratique. Pratique. Et rĂ©pĂ©tez. Ce n'est qu'avec le temps que vous pourrez dire: «Ce problĂšme peut ĂȘtre facilement rĂ©solu Ă l'aide de <remplacez votre solution ici>».
Comment s'entraßner? Il y a des options intéressantes!
Puzzles d'échecs, problÚmes mathématiques, sudoku, go, monopole, jeux vidéo, etc.
En fait, la pratique courante chez les personnes qui réussissent est leur habitude de «résoudre les microtùches». 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 peuvent ressembler les chefs d'entreprise dans trois à cinq ans, regardez les jeux en ligne."
Avance rapide. Elon Musk, Reid Hoffman, Mark Zuckerberg et bien d'autres disent que les jeux ont été essentiels à leur réussite dans la création de leur entreprise.
- Mary Meeker ( rapport sur les tendances Internet 2017 )
Est-ce à dire que vous ne devez jouer qu'à des jeux? Bien sûr que non.
Mais quelle est l'essence de la plupart des jeux? C'est vrai, pour résoudre les problÚmes!
Alors qu'est-ce qui devrait ĂȘtre dans les exercices pratiques. Quelque chose qui vous permettra de rĂ©soudre beaucoup de micro-tĂąches (et idĂ©alement vous l'aimez).
Par exemple, j'aime les tùches de programmation. Et chaque jour j'essaye d'en résoudre au moins un (principalement sur
Coderbyte ).
Comme je l'ai dit, toutes les tĂąches ont des modĂšles de solution similaires.
Conclusion
C'est tout!
Vous savez maintenant ce que signifie penser comme un programmeur.
Vous savez Ă©galement que la rĂ©solution de problĂšmes est une compĂ©tence (de base) incroyable qui doit ĂȘtre dĂ©veloppĂ©e.
Faites attention, vous savez maintenant comment mettre en pratique vos compétences en résolution de problÚmes!
Enfin, je veux que vous rencontriez de nombreux défis.
«Lorsque vous pensez avoir réussi à surmonter un obstacle, un autre apparaßt. Mais c'est ce qui rend la vie intéressante. [...]
La vie est le processus de surmonter les obstacles - des fortifications Ă travers lesquelles nous devons percer.
Chaque fois que vous apprenez quelque chose de nouveau.
Chaque fois, vous développerez force, sagesse et perspectives.
Chaque fois, il y aura moins de concurrence. Et à la fin, seule votre version améliorée restera. »
- Ryan Holiday ( L'obstacle est le chemin )
Maintenant, résolvez les problÚmes!
Et que la chance soit avec vous!
Un merci spécial à C. Jordan Ball et V. Anton Spraul. Pour les conseils utiles qu'ils ont donnés.
De plus, je n'aurais pas pu acquérir mes connaissances en programmation aussi rapidement sans
Lambda School . Je ne peux ni les remercier ni les recommander.