Comment puis-je améliorer mes capacités de résolution de problèmes?

50

Tout le monde dit la même chose: "un vrai programmeur sait comment gérer de vrais problèmes." Mais ils oublient comment ils ont appris cette technique ou à quel endroit: ce n'est pas enseigné dans les écoles

Que puis-je faire pour améliorer ma capacité à résoudre des problèmes de programmation complexes? Quelles stratégies ont fonctionné pour vous? Y a-t-il des domaines spécifiques sur lesquels je devrais me concentrer, tels que les algorithmes ou les modèles de conception?

gcc
la source
3
Deux livres utiles mentionnés dans Code Complete sont: Blockbusting conceptuel de James Adams et Pensée latérale d'Edward De Bono.
mctylr
1
AH! J'ai oublié de poster ici quand il y avait juste quelques réponses.
Mark C

Réponses:

25

Quelques techniques qui pourraient ou non fonctionner:

  • Examinez les solutions existantes aux problèmes courants, par exemple les modèles de conception. Peut-être trouvez-vous quelque chose de similaire qui ressemble au moins partiellement à votre problème. Rechercher sur le Web.
  • Agissez comme si le problème était déjà résolu et tracez ce qui suit jusqu'à la solution à résoudre. Par exemple, au lieu de concevoir l'API pour une classe, écrivez simplement le code qui utilise cette classe, avec les appels de méthode que vous le souhaitez, puis implémentez cette API.
  • Faites autre chose, par exemple, surfez sur le net ou jouez au solitaire, et attendez que l'inspiration se produise.
  • Pensez à la personne que vous aimez le plus et faites semblant de vouloir l'impressionner avec vos compétences en résolution de problèmes. Quelle serait une solution extrêmement impressionnante?
  • Vérifiez le problème pour voir s'il contient des contradictions inhérentes ou des exigences contradictoires, et précisez-en la nature et le compromis qui pourrait être fait. Souvent, lorsque de tels conflits existent, mais que vous ne le sachiez pas, vous avez tendance à rejeter une solution possible après l'autre car vous ne pouvez pas parfaitement satisfaire toutes les exigences.
  • Si vous avez déjà une solution possible, mais que vous vous sentez "sale" (copier-coller, variables globales, code spaghetti, etc.), utilisez-la quand même et améliorez-la par la suite.
utilisateur281377
la source
Le dernier point est excellent. Parfois, la solution au problème consiste simplement à le faire fonctionner dans la plupart des cas, puis à voir où il doit être amélioré.
JeffO
4
Toutefois, sachez que le nombre de réponses "Je réglerai le problème plus tard" qui se présentera sous forme de "Je l’aurai corrigé" est (du moins selon mon expérience) légèrement plus petit.
Gareth
3
Gareth: C'est vrai, mais l'idée n'est pas de l'améliorer, la semaine prochaine ou le mois prochain, mais juste après l'avoir mis au travail. C'est conçu comme une méthode pour casser des noix dures.
user281377
3
Je ne surfe pas sur le net pour attendre l'inspiration. Vous avez besoin de cycles cérébraux vides pour trouver l'inspiration, et surfer sur le net est un moyen de gaspiller ces cycles nerveux. Allez plutôt faire les magasins, faire une promenade à pied ou à vélo, nettoyez votre appartement - faites quelque chose qui ne demande pas beaucoup de puissance cérébrale. L'inspiration viendra plus rapidement dans ces circonstances.
Ken Bloom le
1
Geek: Je sais que # 4 semble un peu paradoxal, mais parfois, ça marche vraiment pour moi; en particulier dans les situations où plusieurs approches semblent possibles et le problème réside dans le choix de l’une de ces approches. # 6 signifie ne pas être trop limité par les choses à ne pas faire dans notre profession. Parfois, nous avons intériorisé des règles telles que "éviter les variables globales" au point de rejeter inconsciemment toute solution utilisant une telle technique obsolète.
user281377
20

Utilisez la pensée en mode R ou en mode L selon vos besoins

Le mode R est l'approche créative non verbale que nous associons couramment au subconscient. Le mode L est l'approche linéaire, logique et verbale associée à votre "voix intérieure".

Si un problème semble être insoluble, c'est probablement parce que vous essayez de le résoudre en utilisant un mode de pensée incorrect. Pour les programmeurs, le mode de pensée par défaut a tendance à être le mode L, vous pouvez donc peut-être l'éteindre temporairement et accéder au mode R.

Comment accéder à la pensée en mode R

Il existe de nombreuses manières, mais essayez peut-être la méthode de Poincaré (du nom du célèbre mathématicien).

Notez tout ce que vous savez sur le problème. Immédiatement résoudre tous les aspects faciles de celui-ci (le cas échéant). Choisissez un seul élément de la liste des problèmes restants, puis partez pour une promenade dans laquelle vous ne serez ni dérangé ni distrait.

N'essayez pas d'analyser le problème pendant la promenade, laissez simplement votre esprit vagabonder et observez les images ou sensations intéressantes qui pourraient survenir et qui pourraient être liées au problème. Laissez-les fusionner. Si l'inspiration vous frappe, arrêtez immédiatement la promenade et écrivez de nouveau les connaissances que vous avez acquises.

Rincez et répétez jusqu'à ce que tous les problèmes aient un aperçu. Puis commencez à explorer les idées.

Recommandation de livre

La lecture de Pensée pragmatique et d'apprentissage peut également vous aider à devenir un meilleur solutionneur de problèmes. (Il me semble que nous avons beaucoup référencé ce livre récemment ...)

Gary Rowe
la source
4
La pensée pragmatique et l'apprentissage étaient excellents
Brad Cupit
Réf: drawright.com/theory.htm (ce que sont les modes R et L)
mercredi
17

Demande à quelqu'un d'autre...

Non sérieusement. Votre plus grande ressource peut être la personne assise à côté de vous. Ne leur demandez même pas la réponse au problème, demandez-leur de s'asseoir à côté de vous et de vous laisser expliquer le problème.

Souvent, vous y parviendrez en le verbalisant.

Parfois, l’autre personne posera une question ou indiquera un détail qui ouvrira la porte mentale.

Finalement, vous apprendrez à verbaliser des choses dans votre tête sans utiliser de marionnette et à repérer plus rapidement les détails essentiels du problème.

Et si tout le reste échoue au moins, ils pourraient peut-être vous montrer une technique que vous n'auriez pas pensé à utiliser.

pain d'épices
la source
Demander aux autres ou former des groupes d'étude est un excellent moyen d'apprendre.
Gary Rowe
Je fais la même chose, juste pour avoir une idée de moi et c'est l'un des meilleurs moyens.
Viswa
Cette technique est connue sous le nom de caoutchouc Esquiver, excellent article à ce sujet dans le codage d' horreur codinghorror.com/blog/2012/03/rubber-duck-problem-solving.html & wiki est également utile en.wikipedia.org/wiki/Rubber_duck_debugging
guêtres
9

En fait, ma réponse courte est "résoudre plus de problèmes". Mais l'essentiel est: concentrez-vous vraiment sur les problèmes et n'abandonnez pas. Ne demandez pas d'aide sur StackOverflow ou quoi que ce soit. (Lire StackOverflow, ça va, bien sûr!). Faites des efforts pour obtenir une solution presque efficace, puis vous avez presque atteint votre objectif. Et continuez jusqu'à ce que vous obteniez une solution satisfaisante.

Pour moi, la résolution de problèmes est deux choses:

  • stratégie de résolution de problèmes
  • persistance et tolérance à la frustration

Le point 2 est vraiment crucial à mon avis car il vous oblige à changer votre façon de penser plus vous êtes pris avec un problème. Cela vous permet également de consacrer plus de temps à la résolution de problèmes, ce qui vous permet d'améliorer encore vos compétences. ;-)

Au fait, je vous recommande de lire Edward de Bono. Bien que j'aie acquis mes compétences en résolution de problèmes principalement en étudiant la physique, son écriture est vraiment intéressante.

Eh bien, ma boîte à outils pour la résolution de problèmes est la suivante:

  • essayer quelque chose au hasard
  • lire des articles / blogs / publications aléatoires sur le sujet qui me concerne (ou un sujet étroitement lié)
  • faire un beau dessin
  • diviser le problème en plusieurs mais plus simples problèmes
  • faire autre chose
  • Google quelque chose qui est lié d'une certaine manière au problème
  • parler aux autres du problème
  • faire une liste de TODO
  • notez tout ce que vous savez sur l'effet du problème afin de trouver plus facilement des motifs

Veuillez noter que la plupart de ces outils peuvent être appliqués de manière récursive.

Et mon algorithme est le suivant:

  1. Quel outil de ma boîte à outils de résolution de problèmes a le plus de sens en ce moment?
  2. Problème non résolu? Continuer avec 1. ;-)

La première étape est une décision difficile, mais plus vous pratiquez, plus vous prenez de bonnes décisions.

Oh et j'oublie presque l'ingrédient le plus important:

Pensez positif à l'ensemble du processus. Ne pensez pas "J'espère que XYZ va maintenant résoudre le problème." Pensez plutôt: "Si XYZ ne fonctionne pas, alors je sais que YZX ne peut pas être la source du problème et je vérifierai si ZYX fonctionne." La résolution de problèmes peut parfois être amusante, en particulier si votre processus de recherche d’un problème se révèle élégant et informatif.

Philippe
la source
J'ai cherché dans cette page le mot "Physics" pour voir si quelqu'un avait déjà écrit à ce sujet. Les mathématiques sont l'autre.
Marc C
Je pense que la valeur de l'étude de la physique en ce qui concerne votre capacité à résoudre les problèmes est difficile à surestimer.
Marc C
+1 pour penser positif. Si vous vous énervez, votre capacité à résoudre les problèmes est réduite. Regardez le problème comme il vous donne la connaissance.
Gary Rowe
7

Commencez également à identifier les problèmes. Parfois, vous devez reconnaître qu'il y a un problème avant de pouvoir le résoudre. À l'école, ils exigent trop de réponses et pas assez de questions de la part des élèves.

Trouvez autour de vous des gens qui résolvent les problèmes et demandez-leur comment ils s'y prennent.

Soyez prêt à vous tromper. Vous ne vous améliorerez pas si vous les gardez tous pour vous et vous ne serez d'aucune utilité.

JeffO
la source
+1 pour "À l'école, ils exigent trop de réponses et pas assez de questions de la part des élèves." c'est tellement vrai et prenez le temps d'apprendre à poser les bonnes questions ... vérifiez partout où il y a tant d'exemples de mauvaise question
Rémi
4

Le principal avantage d'une formation en informatique pour les ingénieurs en logiciel est la capacité de créer et de comprendre des abstractions. Les abstractions sont utilisées pour encapsuler des fonctionnalités communes, telles que les méthodes de classe String, dans des packages compacts et réutilisables nous permettant de nous concentrer sur le problème le plus important.

Apprenez à reconnaître et à créer des abstractions :

Mais surtout, les abstractions nous apprennent à décomposer un problème en morceaux plus petits et plus faciles à gérer . Combinée à un bagage scientifique, la combinaison de ces compétences peut créer un ingénieur capable de réduire le bruit et d'atteindre le cœur du problème.

Apprenez à résoudre des problèmes en utilisant la méthode scientifique :

Lors du dépannage d'une application de production présentant un problème difficile à trouver, il est parfois utile de casser davantage l'application (dans un environnement non productif) afin d'éliminer plusieurs variables afin d'en isoler et d'en éliminer une.

En résumé, la méthode scientifique, apprise en prenant tous les cours optionnels en physique et en sciences requis pour un diplôme en informatique, aide à résoudre ces problèmes comme si nous essayions un placebo et un nouvel essai de drogue sur une série de volontaires. Comme les scientifiques qui doivent parfois aggraver quelque chose pour le rendre meilleur, nous en tant qu'ingénieurs devons parfois faire de même.

La pensée scientifique de cette manière ne peut - en général - venir que d’avoir de l’expérience scientifique. Parfois, résoudre un problème ne peut pas être perçu comme un chemin linéaire de A à B.

En bref, étudier l'informatique, étudier d'autres domaines scientifiques, apprendre la programmation fonctionnelle. Cela vous aidera à penser comme un scientifique et à sortir des sentiers battus.

jmort253
la source
Exactement. Casser les gros problèmes en problèmes plus petits.
Bill Michell
3

Tout dépend du type de problèmes que vous souhaitez résoudre, mais apprendre à penser de manière logique si vous ne le faites pas déjà est une bonne chose.

Tout compte fait, et vous allez me haïr de le dire, mais la pratique rend parfait. Je ne me suis pas retiré du ventre de ma mère en sachant comment résoudre efficacement les problèmes, et personne d'autre ne l'a fait. Vous devez pratiquer et apprendre à faire les choses vous-même. Si vous êtes encore à l’école et n’avez pas de cours de type programmation / informatique, les mathématiques et les sciences sont également très utiles pour favoriser le développement de ces compétences.

utilisateur7007
la source
3

Je pense que ce que vous recherchez, c'est une heuristique informatique.

En ce qui concerne ce que 99% d'entre nous faisons dans les tranchées, il n'y a vraiment rien de nouveau sous le soleil. Donc, vous pouvez voir un problème et le reconnaître comme un problème de PD, ou un autre comme un problème qui pourrait bénéficier de la mémorisation, etc.

Comment gagnez-vous cette connaissance? Un bon diplôme de CS est un bon point de départ ... Pas l'ingénierie logicielle ou les systèmes d'information, mais ce genre de choses que la plupart des étudiants de premier cycle se plaignent de "ne pas être pratiques".

Vous pouvez le faire vous-même, mais ce sera probablement plus difficile. Je commencerais par ces deux cours:

Introduction aux algorithmes

Bonnes idées dans le CS théorique

saleté rouge
la source
2

Mes réponses concernent spécifiquement le codage mais peuvent s'appliquer à n'importe quoi.

  1. Éloignez-vous du clavier. Parler, marcher, courir, en parler avec un collègue autour d'un café
  2. Deviens 10 ans plus vieux! Mon expérience m'a énormément aidé.
  3. Utilisez la côtelette binaire. Divisez le problème en deux et affinez le problème: répétez.
  4. Rappelez-vous Sherlock Holmes: Quand vous avez éliminé le possible, tout ce qui reste (aussi étrange soit-il) est la réponse
  5. Vérifiez vos données de test. Plus de la moitié de mes problèmes vraiment difficiles ont été causés par des données erronées et non par du code ou des algorithmes défectueux.
Fortyrunner
la source
1

En termes de pratique, je peux vous dire ce que je fais. Je suis plus intéressé par les mathématiques appliquées que par la programmation, mais les mathématiques appliquées appliquées à l'informatique sont une sorte de programmation. Je vois des problèmes et des solutions autour. Avant (ou parfois après, si mon travail nécessite une solution opportune), en me connectant à une solution connue - ou à une bibliothèque de codes existante, je me pose la question suivante: "Si le problème était vierge, vous ne pourrez pas trouver une solution en conserve, comment procéderiez-vous? " Si la réponse est assez simple, envisagez d’écrire une solution (analytique, ou un programme informatique pour la résoudre). Ignorer les cas finaux compliqués, vous êtes intéressé à explorer des approches et des algorithmes, pas à réinventer une bibliothèque existante. Si la solution nécessite trop d’efforts, ne programmez pas la solution complète, mais au moins, réfléchissez aux types de structures de données et de méthodes que vous voudriez utiliser. Pensez également aux méthodes alternatives.

Omega Centauri
la source
1

Il y a une grande question SO à ce sujet.

Ma réponse a été:

La meilleure façon de s'améliorer est de pratiquer!

Abonnez-vous au flux RSS à l' adresse : http://www.mensa.org.uk/puzzles/ et prenez le temps de les compléter au fur et à mesure de leur parution.

Un calendrier de bureau casse-tête (par exemple, http://www.calendars.com/product.asp?PID=1&MGID=-1&IID=46387&cm_mmc=Affiliate_Program--performics--k137666-_-DDI%20Link ) est un bon idée aussi car il vous donnera des problèmes réguliers, minimes et variés à résoudre.

Bien que ceux-ci soient invariablement en dehors des problèmes que vous rencontrerez, la variété est importante car elle vous obligera à penser de manière inédite, ce qui est vraiment la résolution de problèmes.

Edit: Consultez également: http://www.mindtools.com/pages/main/newMN_TMC.htm pour obtenir de bons conseils pour la résolution de problèmes.

StuperUser
la source
1

Jouer aux échecs

Jouer aux échecs est un excellent entraîneur pour résoudre les problèmes de programmation. Les couches de problèmes et les arbres logiques se rapportent très bien. Cela vous aide également à penser à l’avenir et à planifier avant de vous engager dans une voie sous-optimale et de perdre du temps.

Les échecs exigent également un équilibre entre les «modes de pensée» gauche et droit. Si vous devenez trop analytique, vous pouvez vous perdre en essayant de tout calculer, ce qui est impossible. Cependant, chaque inspiration créatrice doit être vérifiée avec un calcul afin de s'assurer qu'il correspond à la réalité concrète de la situation. Les problèmes difficiles sont comme ça.

Les échecs démontrent que l’étude et la pratique conduisent à une amélioration solide de façon très linéaire. Cela est vrai aussi avec la résolution de problèmes de programme.

Jouer aux échecs peut aussi vous aider à comprendre ce qu’il ya à apprendre. Même si vous programmez (ou jouez aux échecs) depuis 10 ans, vous n'êtes pas encore grand maître.

Jeff Davis
la source
J'ai trouvé mon esprit aiguisé en jouant régulièrement aux échecs.
Paul Nathan
1

J'ai récemment résolu les problèmes du projet Euler . Les problèmes sont de difficulté variable. Les solutions ne nécessitent généralement pas de grandes quantités de code, mais vous devez prendre en compte de nombreux facteurs tels que l'exécution de votre algorithme. Vous pouvez utiliser la langue de votre choix en entrant simplement une réponse. Il existe une bonne solution pour une solution optimale à de nombreux problèmes et de nombreuses discussions sur chaque problème. Essayez de résoudre un problème chaque jour et vous serez étonné de l’amélioration de votre résolution de problèmes et de votre analyse. Pour plus de crédit, essayez de résoudre le même problème dans de nombreux langages, tels qu'un langage procédural (peut-être C ++), un langage de script (comme Python) et un langage fonctionnel (comme F #).

Erik
la source
1

Je viens d'une formation scientifique, alors quand je regarde un problème, j'ai tendance à utiliser des tactiques de la méthode scientifique . J'aime particulièrement mettre en place des "expériences" basées sur des hypothèses et utiliser des "contrôles", je vais donc construire quelque chose, puis ne changer / ajouter que 1 chose à ce sujet et voir le résultat de ce changement / ajout et si je " Je n’obtiens pas le résultat dont j’ai besoin, je le changerai et changerai quelque chose d’autre. Cela fonctionne bien pour le dépannage / le débogage du code. Parfois, vous obtenez la réponse que vous cherchez, mais vous apprenez toujours quelque chose de nouveau, même lorsque vous échouez. J'aime aussi apprendre par le réductionnisme- prendre quelque chose qui existe déjà (il est toujours bon de commencer par quelque chose que vous ne comprenez peut-être pas, mais vous savez que cela fonctionne) qui me semble complexe et qui me permet de voir si je peux le décomposer en ses composants et apprendre comment ils fonctionnent en premier. Il est parfois plus facile pour mon cerveau de gérer un apprentissage comme celui-ci au lieu d'aborder un problème de manière holistique et je peux utiliser ces connaissances pour construire moi-même d'autres choses complexes similaires. Je recommande également de lire des livres sur la logique et le raisonnement en choisissant des œuvres de penseurs classiques et modernes (commencez par Aristote et continuez vers le haut). Ils peuvent vous donner les bases de la logique de base que vous pouvez utiliser pour vous aider à résoudre des problèmes informatiques. Et, bien sûr, si vous ne pouvez pas résoudre un problème et que vous y travaillez depuis quelque temps, faites une pause cérébrale. Ruminant sur un aspect particulier d'une question est parfois préjudiciable. Tout le monde a besoin de pauses :)

Kelleystar
la source
0

La partie la plus difficile de la résolution de problèmes est la "réduction perceptuelle".

Vous choisissez quelque chose qui semble être le problème et vous persévérez jusqu'à ce que vous soyez épuisé et que vous ne progressiez plus.

Pour ce faire, vous devez être absolument sûr de comprendre le problème. "Résoudre le bon problème" est la partie la plus importante de la résolution de problèmes.

Parfois, ils appellent cela "penser en dehors de la boîte". "La boîte" est un point de vue étroit qui peut ne pas inclure le vrai problème fondamental. Sortir des sentiers battus, c'est chercher le bon problème à résoudre.

Il existe de nombreux ouvrages sur les stratégies visant à éviter le rétrécissement qui va de pair avec une focalisation prématurée sur le mauvais problème.

L'astuce consiste principalement à déterminer quel est le véritable résultat escompté. Ensuite, déterminez ce qui bloque ce résultat souhaitable.

S.Lott
la source
0

Honnêtement, je pense que tout le monde est différent, la feuille de route de chacun pour devenir un meilleur solutionneur de problèmes est donc différente. Vous pouvez apprendre de l'expérience d'autres personnes, mais à la fin, vous devez vous frayer votre propre chemin. Il s’agit essentiellement d’apprendre quelque chose à la dure, mais c’est efficace dans ce cas.

Voici comment j'ai commencé à améliorer ma résolution de problèmes, bien que je ne sois pas encore très capable de résoudre les problèmes, mais qu'il soit meilleur que l'an dernier. Un nouveau projet m'a été confié, qui consistait à étendre un logiciel de suivi du temps open source en ajoutant trois nouveaux rapports à la direction. Ce logiciel a été écrit dans un langage que je n’avais jamais utilisé et il était mal documenté et très obscurcissant. J'ai creusé et fait une tonne de recherches puis j'ai juste travaillé sur les rapports par petites étapes. Une fois que j'ai eu les fonctionnalités de base, je les ai améliorées et finalement j'ai ajouté plus de fonctionnalités.

Donc, en d’autres termes, je vous recommande de trouver une sorte d’évier ou un projet du monde réel dans lequel vous pourrez nager. Si vous êtes actuellement employé en tant que programmeur, trouvez un projet ou demandez-en un à votre patron. Si ce scénario n'est pas possible, trouvez-en un en dehors du travail, par exemple un contrat / un travail indépendant. Je résous très bien et très rapidement les problèmes lorsque je dois le faire et je conserve ces connaissances en raison de l'intensité du projet. Si cela ne fonctionne pas pour vous, faites ce que tout le monde suggère sur ce fil :).

hockfan86
la source
0

La réponse est elle - même dans la question en proposant différentes solutions. Il y a toujours plus d'une solution (par exemple, le tri peut être effectué de différentes manières, à savoir tri par bulles, tri par sélections, etc.), il vous suffit de choisir un moyen de le faire (tri) de manière efficace. Essayez avec différents la prochaine fois et ainsi de suite ..... Et des livres pour la résolution de problèmes ..... Aucun Vous ne pouvez pas apprendre les compétences de résolution de problèmes à partir de livres, plus de code vous exécuterez plus de connaissances que vous gagnerez. Bonne chance

Ranger
la source
0

Il est facile pour un programmeur d’attaquer mentalement un problème en visualisant comment le résoudre avec son langage de programmation préféré. Tout comme le charpentier classique qui voit tous les problèmes comme des clous lorsque son outil préféré est le marteau.

Je pense que les meilleurs exercices de résolution de problèmes surviennent lorsque vous dépassez le niveau pratique et que vous pensez simplement «c’est ce dont j’aurais besoin pour résoudre le problème de manière optimale». Dans certains cas, vous devrez peut-être apprendre beaucoup de choses pour appliquer la solution, mais l’essentiel est que votre capacité à élaborer une solution ne soit pas limitée à vos techniques historiques et existantes.

Un ancien exemple pratique pour moi est que j’ai appris à mettre en œuvre un multitâche coopératif efficace lorsque je me suis rendu compte que mon problème n’avait pas besoin de threads préventifs, même si j’aurais généralement été dans ma zone de confort en détruisant tous ces mutex ( semble finalement toujours cesser d’être à l’aise à un moment donné ..).

sharkin
la source
0

Dans le développement d’applications, bon nombre des problèmes auxquels nous sommes confrontés sont soit notre propre invention, soit l’invention de l’idiot dont nous avons hérité, cette base de code gâchée. Résoudre un problème revient le plus souvent à trouver la source . Souvent, une fois que nous trouvons cela se produit, la simple compétence est ce qui est nécessaire pour le résoudre .

À cette fin:

  1. Apprenez votre plate-forme.
  2. Apprenez vos outils.
  3. Découvrez les outils disponibles pour votre plate-forme que vous n'avez pas encore rencontrés.

Tout l'entraînement cérébral dans le monde est inutile sans informations que le cerveau peut utiliser. Pour résoudre un problème, vous devez savoir quelles sont les premières possibilités ! Même dans ce cas, il est beaucoup plus rapide de travailler avec de bonnes informations plutôt que de simplement décrire le problème.

Je pourrais penser que les vaches ne comprendront pas pourquoi quelque chose prend trop de temps à exécuter. Mais si je dis "obtenons d’abord des données", je verrai peut-être que de nombreuses exceptions sont générées et je réalise que je pourrais le remplacer par une instruction if. Sans savoir comment collecter les informations, sachant que sur ma plate-forme, les exceptions prennent un peu trop de charge, et qu'il existe un moyen de vérifier avant d'essayer, c'est plus rapide, je ne résoudrais jamais le problème.

MIA
la source
0

Votre réponse comporte deux parties:

a) Technique de résolution de problèmes

b) Rendre votre cerveau intrinsèquement "meilleur" pour penser et résoudre des problèmes

Il y a toujours eu d'excellentes réponses sur le plan technique (supposons que vous connaissiez le problème, etc.), donc je ne vais pas en parler autant. En ce qui concerne l'entraînement de votre cerveau, vous pouvez faire plusieurs choses pour croiser ces synapses et établir davantage d'interconnexions.

1) Apprenez une nouvelle langue, une vraie langue (comme le français ou le chinois pourrait être un bon pari ces jours-ci)

2) Apprenez à jouer d'un nouvel instrument

3) Faites quelque chose d'artistique comme de la peinture, du dessin ou de la sculpture

4) Jouer au scrabble ou faire des mots croisés

5) Danse comme tu le penses. Non, je ne plaisante pas. Il a été démontré que la danse avait un impact sur votre cerveau et votre façon de penser

6) Élargissez vos expériences, des solutions innovantes sont venues de l’application d’une théorie dans un domaine à un autre, alors étudiez différents domaines et domaines que vous trouvez intéressants.

7) Exercice, l'exercice est d'une importance cruciale pour améliorer le processus de réflexion

Enfin, je vais vous donner mon meilleur conseil pour résoudre des problèmes difficiles: faire une longue marche. J'ai trouvé que cela fonctionne des miracles pour éclaircir la tête et laisser un contempler les problèmes


Homde
la source
0

Mon conseil serait de jeter le livre!

Pas littéralement bien sûr. Ce que je veux dire, c’est entrer dans un domaine dans lequel vous avez peu d’expérience et y résoudre des problèmes difficiles, sans apprendre les solutions existantes. Ne vous fiez qu'à votre créativité, à votre esprit critique et peut-être à un manuel de référence.

Vous pouvez concevoir un format d'image. Ou un serveur web. Ou un schéma de compression. Système de fichiers. Noyau. Intelligence artificielle. Langage de programmation. Système de vision par ordinateur.

Quelque chose que vous trouvez intéressant, assez complexe et dont vous n’avez jamais entendu parler. Ne pas lire à ce sujet: il suffit de sauter directement dans. Expérience. Faire des erreurs. Réinventer la roue.

Ne demande pas d'aide. Éloignez-vous des tutoriels. Restez à l'écart de la théorie. Ne tirez pas une solution de l'étagère.

Pourquoi?

  • Nous apprenons mieux des erreurs.
  • Cela vous donne l'occasion de vous entraîner à proposer des solutions de manière créative, plutôt que de régurgiter et d'adapter les anciennes solutions.
  • Vous êtes obligé d'évaluer vos idées. Vous ne pouvez pas les évaluer sans développer une bonne compréhension de vos outils, du problème que vous résolvez et de l'idée que vous souhaitez évaluer. Cela conduit à une compréhension plus profonde du sujet que vous ne développeriez autrement. (N'hésitez pas à lire sur les outils que vous utilisez, mais ne lisez pas sur le problème que vous essayez de résoudre.)

Faites quelques tentatives et une fois que vous êtes satisfait de ce que vous avez accompli, laissez-le pendant quelques mois. Ensuite, revenez frais et voyez si vous pouvez trouver une nouvelle perspective. Après cela, il est temps de commencer à lire sur le problème et sur la façon dont les autres l’ont résolu (ou discuté avec des gens). À ce stade, au lieu de vous dire «oui, c'est logique» pendant que vous lisez, vous dites «oui, exactement », ou «bien, dans une certaine mesure», ou «wow, c'est intelligent».

En d'autres termes, vous penserez de manière beaucoup plus critique à ce que vous lisez et vous le trouverez beaucoup plus facile à comprendre et à retenir, car vous disposez déjà d'un grand "cadre mental" auquel le lier. Vous vous sentirez à l'aise avec les choses que vous avez découvertes indépendamment et vous repartirez avec un tas de nouvelles connaissances.

N'essayez pas de rendre votre solution parfaite. Prouvez à vous-même que vous pouvez résoudre le problème. Adoptez une attitude positive et si vous vous sentez découragé par le problème, rappelez-vous que la personne qui l'a résolu le premier en savait probablement autant que vous (en fait, ils ne savaient pas qu'il avait une solution!).

Artelius
la source
0

La résolution de problèmes n'est pas quelque chose qui peut être enseigné ou même appris en lisant. Le seul moyen de mieux résoudre les problèmes est de les résoudre.

Vous pouvez vous renseigner sur différentes techniques et méthodologies de résolution de problèmes, ainsi que sur des outils et des technologies que vous pouvez utiliser pour résoudre des problèmes dans un domaine particulier. Sauf si vous pensez continuellement aux problèmes, essayez de trouver des solutions (trouvez plusieurs solutions pour chaque problème et évaluez-les les uns contre les autres), puis évaluez vos solutions par rapport aux solutions développées par d'autres, vous n'allez pas mieux résoudre le problème la résolution.

Je recommande de prendre un exemplaire de Pensée pragmatique et apprentissage: Refactor Your Wetware par Andy Hunt . C'est un livre sur la compréhension de votre façon de penser, de réagir et d'apprendre. Il apporte des théories pertinentes de la théorie du comportement et d'autres sciences cognitives. Il est spécifiquement destiné aux développeurs de logiciels, mais applicable à tout travailleur du savoir.

Thomas Owens
la source
0

Pour les débutants en programmation comme moi, je recommande le livre "Think Like a Programmer". Dans le premier chapitre, il aborde des techniques de résolution de problèmes telles que la reformulation et la division du problème, à commencer par ce que vous savez, la réduction, les analogies et les expérimentations.

Il existe ensuite des techniques plus avancées avec des exemples en C ++: résolution de problèmes de tableaux, de pointeurs et de mémoire dynamique, de classes, de récursivité, de réutilisation de code. Je ne peux pas commenter cette partie parce que c'est trop difficile pour moi pour le moment.

Gregory Krasutski
la source
-1

Je résous autant de problèmes que possible. J'aime aussi certains livres de casse-tête comme celui-ci . Je bricole aussi avec des jeux de résolution de problèmes, comme des jeux de mathématiques comportant des nombres premiers ou un truc du genre, le sudoku, la tour de Hanoi, etc. Trouvez simplement des problèmes à résoudre. En outre, codez-le lorsque cela est possible.

Corv1nus
la source
-1

Au revoir résoudre BEAUCOUP de problèmes!

vous commencez avec des problèmes faciles et vous passez à des problèmes plus difficiles une fois que les problèmes faciles deviennent une routine au lieu de problèmes.

Demian Kasier
la source
-4

Ne vous limitez pas à la théorie, faites plus de pratique. Avec la pratique vient l'expérience.

Amir Rezaei
la source