Résolution de problèmes / Algorithme La compétence est un talent ou peut être développée avec la pratique?

Chaque fois que je commence un problème difficile et que je n’arrive pas à trouver la solution exacte ou ne peut pas démarrer, je me lance dans cette discussion sans fin avec moi-même, comme ci-dessous:

  • Que les compétences en résolution de problèmes / mathématiques / algorithmes sont douées (pas que vous puissiez apprendre en pratiquant, par la pratique, vous ne maîsortingsez que le type de problèmes que vous avez déjà résolu auparavant)

  • seuls ceux qui sont allés dans de bonnes écoles peuvent le faire, comme ils l’ont appris tôt.

Quelles sont vos pensées, peut-on atteindre la génialité dans la résolution de problèmes / algorithmes juste par le travail acharné ou vous devez avoir ce gène supplémentaire en vous?

J’ai passé une grande partie de ma vie à me demander si le talent était quelque chose que vous aviez développé ou avec lequel vous étiez né. Ensuite, il m’a semblé que la réponse n’était pas pertinente, du moins si vous vouliez réaliser les choses vous-même. Même si vous avez du talent, cela ne vous aidera que si vous agissez comme si le talent ne venait que de la pratique, car vous travailleriez beaucoup plus dur.

En ce qui concerne les algorithmes, ainsi que toute autre compétence vraiment difficile, il faut de la pratique pour être efficace. Que vous ayez ou non besoin de talent, je ne sais pas. Je sais par contre que les gens ont fait d’ énormes améliorations dans les compétitions comme TopCoder en pratiquant. J’ai moi-même beaucoup appris de cela.

Si vous mettez en place un programme d’entraînement systématique, vous serez en avance sur le peloton, même si ce n’est pas parfait. J’ai écrit quelques centaines de programmes sur TopCoder et cela a profondément influencé ma pensée. J’ai appris beaucoup de choses qui ne pouvaient être apsockets qu’en les faisant mal et en corrigeant ensuite mon erreur. Un de mes amis a écrit plusieurs milliers de programmes sur TopCoder et il est bien meilleur que moi, même si ses statistiques ont été pires quand il a commencé. Ce n’est pas une coïncidence.

MODIFIER:

Je viens de trouver cette réponse à math.stackexchange. Je pense que c’est l’une des meilleures explications sur la façon d’apprendre des algorithmes que j’ai lus, même s’il écrit sur les échecs et les mathématiques.

1) N’essayez pas de résoudre le problème dans son abstraction la plus générale.
2) Choisissez le bon moment lorsque votre esprit travaille au maximum.

J’ai eu le premier point comme conseil d’un instructeur de mathématiques. Ça marche! essayez de faire différents exemples et scénarios du problème. Cela aide grandement à identifier les cas extrêmes qui sont les plus difficiles à comprendre dans la plupart des problèmes.

Mon moment préféré pour résoudre ce genre de problèmes est l’aube (4-6 heures du matin). Passez une bonne nuit de sumil la veille et réveillez-vous prêt à résoudre le problème. Le silence est ton ami.

Je crois que certaines personnes ont plus d’intelligence que d’autres, mais ce n’est pas le facteur le plus important. C’est comment vous utilisez cette intelligence pour résoudre le problème.

J’ai pris des leçons de magie en groupe quand j’avais douze ans. Le magicien s’appelait Joe Carota. Il a fait un tour de magie une fois et j’ai dit: “Comment as-tu fait ça?” Il a dit quelque chose ce jour-là qui me rest depuis.

La réponse de Joe, “Michael, si tu veux vraiment savoir comment ce truc est fait, tu dois comprendre comment tu le ferais toi-même.”

Bien sûr, ce n’est pas ce que je voulais entendre mais cela m’a permis de me concentrer sur la résolution de problèmes. C’était la résolution de problèmes de mon sharepoint vue. Si ma première tentative de résolution du problème a pris dix-sept étapes et était vraiment inefficace, la bonne nouvelle était que j’avais résolu le problème.

Ensuite, en examinant la solution que j’avais développée et en cherchant des moyens d’affiner cette solution, j’apprendrais à rationaliser le résultat final. Plus tard, dans ma vie de programmation informatique, j’ai découvert que ce processus s’appelait “Raffinement par étapes”.

Cela a fonctionné en 1971 et cela fonctionne toujours aujourd’hui.

Pour moi, je pense que c’est un peu le talent, mais beaucoup plus important est l’expérience et la pratique. Si vous connaissez beaucoup de problèmes et les meilleures solutions, vous pouvez résoudre plus facilement un nouveau problème.

Exemple de mon passé: il y avait un concours de programmation (bon pour la formation, btw) et je n’ai pas trouvé de bonne solution. Le gagnant a résolu le problème principalement en utilisant un arbre KD. Pour arriver à cela, vous devez tout d’abord savoir ce qu’est un KD-Tree dans ce cas et où il est utile. Aujourd’hui, c’est clair pour moi et si je rencontrais à nouveau un problème similaire, je serais en mesure de le résoudre très rapidement.

Si le talent ne travaille pas dur, le hardwork bat le talent. Cette déclaration ci-dessus définit le véritable potentiel de la persistance. Toute pratique dans ce monde peut être développée par la pratique. Ce processus est analogue à la fixation d’un clou dans le mur.

Pour répondre à la question, nous devons d’abord trouver les ingrédients de la capacité à résoudre un problème.

  1. Il y a un soi-disant talent naturel. C’est le talent avec lequel vous êtes né. Cela prédétermine votre potentiel. Les personnes nées avec plus de matière grise auront tendance à mieux performer que celles avec lesquelles la nature était moins généreuse. Cela signifie qu’une personne ayant un meilleur talent a une probabilité plus élevée de faire mieux qu’une personne moins talentueuse si elle avait les mêmes parameters (éducation, personnalité, résistance au stress, volonté). Si l’on observe qu’il a tendance à consumr un temps précieux pour absorber de nouvelles informations jusqu’à ce qu’il soit capable de l’appliquer, la décision la plus sage est de quitter la programmation et d’éviter une vie pleine de frustration. Naturellement, on ne peut pas s’attendre en tant que débutant à comprendre instantanément le phénomène le plus complexe, mais si un débutant est trop lent pour comprendre les concepts du débutant, alors la programmation n’est pas sa tasse de thé.

  2. Talent développé. On a un talent naturel, mais cela ne suffit pas à résoudre les problèmes. Je n’ai jamais vu de code d’écriture pour les nouveau-nés. Il faut s’instruire. Le plus tôt le mieux. En outre, la qualité de l’école revêt une grande importance. Nous ne devons jamais nier le fait qu’une personne qui n’a pas eu la chance d’apprendre la programmation dans une bonne école tôt, alors elle a un handicap dans la course au succès. Cependant, si quelqu’un manque de bonnes écoles tôt, alors le handicap peut être couvert par un travail difficile. Par exemple, ma femme a fait des études dans un autre domaine, mais après avoir terminé ses études universitaires, elle n’a pas trouvé de travail approprié. J’ai donc commencé à l’éduquer. Au bout d’un mois, elle a appris à apprendre et a pu résoudre presque tous les problèmes qui lui étaient présentés, mais elle n’était pas encore efficace. Elle a progressivement commencé à apprendre de manière auto-didactique. Après un an, elle était déjà codeuse professionnelle. Elle n’a pas de papier d’une école qu’elle peut coder, mais elle fait un travail fantastique. Ainsi, elle a manqué d’éducation précoce, mais a pu plus tard neutraliser le handicap. Le talent développé peut être décrit comme l’ensemble des informations apsockets et connues, ainsi que la bonne attitude, l’approche scientifique des nouveaux types de défis.

  3. Pratique: La pratique est bonne pour augmenter le niveau de talent développé, mais elle NE DEVRAIT PAS être la seule source de développement de talents. Parallèlement à la pratique, les horizons théoriques doivent être régulièrement élargis.

  4. Stratégie de travail: On peut être extrêmement talentueux, avoir beaucoup de connaissances. S’il n’a pas une bonne stratégie de travail, il a un handicap. Chaque fois qu’une nouvelle tâche est donnée, les bonnes questions doivent être posées:

    • Quelle était la tâche la plus proche de celle-ci? Puis-je réutiliser ma solution dans une certaine mesure?
    • Que dois-je apprendre pour pouvoir résoudre ce problème?
    • Comment puis-je écrire un code clair et efficace pour résoudre le problème?

Donc, la réponse est la suivante: bien qu’il soit bon d’avoir une excellente éducation le plus tôt possible, ce n’est pas nécessaire. N’oubliez pas que la vie est la meilleure école et que vous pourrez récupérer plus tard l’occasion perdue si vous avez du talent, de la volonté et une source d’informations. La pratique ne vous montre pas seulement les bonnes mesures pour résoudre un problème, elle élargit également vos horizons. Par exemple, si l’on comprend les systèmes de numération, il pourra comprendre plus tard diverses choses, telles que les couleurs CSS, PSD ou les débordements de nombres. Si quelqu’un apprend à coder en Java, il comprendra très rapidement le langage C #. Ainsi, la pratique vous donne des connaissances sur la solution à un type de problème donné, mais donne également de nouvelles connaissances théoriques qui seront utiles dans divers domaines. La principale compétence à développer est la capacité à apprendre rapidement.

Il y a eu beaucoup d’exemples de personnes ayant un talent extraordinaire avec un minimum de succès. Vous voyez de tels exemples dans le sport, la politique, les affaires et aussi en général autour de vous. Donc, après une certaine limite, le talent est une vertu sans signification. C’est surtout le mot dur qui vous récompense avec plus de succès. Si vous suivez le cricket, voici un lien avec un bon exemple. Je pense que le même principe s’applique à l’algorithme et à la résolution de problèmes. Il y a un an, j’ai eu recours à des problèmes algorithmiques pour résoudre et je me suis retrouvé complètement perdu. Une année passée à lire des livres algorithmiques, à résoudre ses exercices et à résoudre certains problèmes de programmation, je suis convaincu que je peux maintenant résoudre la plupart des problèmes (il me rest encore beaucoup de chemin à faire pour y parvenir). Mais le fait que le travail intelligent soit suffisant pour développer ce problème de résolution de problèmes.

Le talent est bon marché et inutile sans travail acharné. Le talent ne peut vous emmener que dans une certaine mesure, mais avec du travail et de la pratique, tout le monde peut atteindre de grands sumts.

– Josh Waitzkin, 8 fois champion national des échecs, 13 fois champion national et 2 fois champion du monde

Il dit lui-même cela dans sa voix off dans Chessmaster Grandmaster Edition