Que faites-vous lorsque vous n'arrivez pas à comprendre une certaine partie de la programmation? [fermé]


11

J'apprends de nouvelles langues au fur et à mesure, j'écris du code pour des programmes très basiques en plusieurs langues, et je vais en cours. J'ai lu des livres, des articles, des leçons, des vidéos, vous l'appelez, mais je n'arrive pas à comprendre certaines choses.

Par exemple, je n'ai jamais compris les pointeurs - dans quoi ils sont bons. (NE FAIT PAS PARTIE DE LA QUESTION - il n'est pas nécessaire de réétiqueter avec des "pointeurs" ...)


Ma question n'est cependant pas ce que font les pointeurs, mais comment puis-je comprendre des choses comme ça? Si, après avoir lu un livre ou un article sur une certaine partie de la programmation, et que je ne comprends pas, que dois-je faire? Écrire du code dans une certaine caractéristique de la programmation aide sûrement, mais cela n'aide pas vraiment à comprendre beaucoup. La partie théorique est importante pour la compréhension.


11
J'aimerais pouvoir comprendre pourquoi les gens ont tant de mal à comprendre les pointeurs. Le nom donne toutes les clarifications dont j'ai besoin.
ChaosPandion

1
Certains Computer Architecture 101cours aideraient grandement à comprendre les pointeurs. ...et tout le reste.
ZJR

6
La question ne concerne pas exactement les pointeurs, c'est une question générale, mais merci.
Bugster

2
Je ne pense pas que rappeler au gars le seul exemple avec lequel il a avoué avoir des problèmes l'aidera un peu vers l'illumination ... Fait assez souvent, cela l'empêchera cependant de demander de l'aide par peur d'être frappé acheter un longue chaîne de réponses avares et pédantes et commentaires dégradants.
haylem

4
@FrustratedWithFormsDesigner: "Comment puis-je apprendre à apprendre", je pense. Ce qui est une question valable et valable.
haylem

Réponses:


22

Si vous avez du mal à comprendre un concept abstrait, descendez d'un niveau. Si vous ne pouvez pas obtenir les pointeurs en C - descendez au niveau de l'assemblage. Vous rencontrez toujours des problèmes? En savoir plus sur le matériel, jusqu'aux portes logiques.


2
+1: A fonctionné pour moi. J'ai eu des problèmes avec les pointeurs dans ALGOL jusqu'à ce que je commence à écrire le langage d'assemblage PDP-10.
kevin cline

2
Idée intéressante. Bien que je souligne que l'écriture et l'exécution d'un programme en assembleur vont trop loin. À mon avis, aller au-delà du point de compréhension de base n'est pas nécessaire à ce niveau. Mais bon, si c'est ce que tu veux faire, plus de pouvoir pour toi!
Bryan Field

1
@George Bailey, oui, cela pourrait être un peu exagéré pour tout véritable assemblage et véritable matériel. C'est pourquoi il existe d' MIXautres architectures de jouets similaires. Pour une partie matérielle, c'est la même chose - il y a beaucoup de cœurs CPU simples à étudier.
SK-logic

+1: idée intéressante et certainement susceptible de fonctionner, mais (pour réutiliser l'exemple de l'OP), le passage du niveau d'entrée C au niveau d'entrée ASM pourrait être une route longue, difficile et sinueuse pour un débutant, susceptible de prendre plus de temps que prévu par le cours / projet / autre. Cela peut également aliéner des personnes peu motivées (ce qui n'est probablement pas le cas du PO, mais d'un point de vue supérieur, cela bloquerait beaucoup d'étudiants qui prennent des cours de CS et doivent comprendre cela mais ne se soucient pas du CS lui-même) . Mais certainement une bonne idée à long terme.
haylem

Eh bien, mon diplôme CS a couvert cela en architecture informatique. Nous avons appris les portes logiques, les avons combinées dans un simulateur logique pour construire des additionneurs, des ALU et finalement un processeur RISC très simple. Nous avons également écrit des programmes simples dans l'assemblage MIPS. Tout cela était nécessaire pour un BS en informatique, et n'était pas vraiment considéré comme l'un des cours "weeder", donc je ne pense pas que ce soit trop haut ou aller trop loin.
Adam Jaskiewicz

17

Cycle de vie d'apprentissage incrémental court

  1. Essayez et ne parviennent pas à comprendre le concept.
  2. Essayez de mettre en œuvre quelque chose illustrant le concept.
  3. Essayez de schématiser le concept sur un tableau blanc (le cas échéant)
  4. Essayez d'en parler avec quelqu'un qui comprend le concept.
  5. Essayez d' expliquer les morceaux que vous comprenez à cette personne (aide à voir la lumière, parfois).
  6. Redémarrez à partir de 1 jusqu'à ce que vous puissiez enfin l'expliquer à quelqu'un qui est dans l'état 1 et lui faire comprendre.

Étapes supplémentaires

A utiliser avec prudence.

  • Recherchez du matériel de lecture et d'étude supplémentaire :
    • en ligne (les moteurs de recherche populaires et Wikipedia sont de grands amis),
    • à la bibliothèque (ne sous-estimez pas les livres et les gens qui y vont pour les lire),
    • sur votre système (outils de documentation fourni et doc sont souvent aliénant au début, mais votre meilleur ami goto-après un certain temps. apprendre à trouver ce que vous cherchez en eux , par exemple man -k, apropos, etc ...)
  • Essayez de lire du code en utilisant le concept ...
  • ... et parcourez le code avec un débogueur.

Celles-ci sont plus sournoises car vous devez vous réévaluer pour vous assurer que vous avez bien compris. Le mentorat direct par une personne bien informée est généralement préférable, suivi bien sûr de votre propre validation des connaissances acquises en réimplémentant ce que vous venez d'apprendre (et en essayant ensuite de pousser plus loin et d'apprendre un concept de niveau supérieur construit sur le dessus de celui-ci, par exemple des listes liées pour vos pointeurs).

Crédits: Nupul (pour la représentation graphique)


2
+1! Puis-je ajouter - avant de parler, essayez le tableau blanc pour le «dessiner» (ou gardez simplement le tableau blanc à portée de main lorsque vous parlez à quelqu'un :)
PhD

1
+1 pour "parcourir le code avec un débogueur". J'ai appris beaucoup de concepts avec des outils de débogage simples ...
funkymushroom

@Nupul: bonne suggestion, a ajouté.
haylem

@funkymushroom: En effet, même si je dirais qu'en général, vous n'apprenez pas vraiment le concept de cette façon. Cependant, cela aide à «lever le brouillard» quand il est juste devant vous et que vous ne pouvez tout simplement pas voir les morceaux se rassembler, parce que vous êtes trop concentré sur quelque chose ou que votre esprit est frit. Je trouve plus utile de comprendre les problèmes algorithmiques généraux que pour les concepts généraux.
haylem

Parler au tableau blanc l'a fait pour moi.
Peter

5

D'après mon expérience, tout dépend de la contribution et des commentaires. Vous souhaitez obtenir des commentaires sous autant de formes que possible et recevoir des commentaires sur vos erreurs aussi rapidement que possible.

D'après mon expérience, mon diplôme CS était très sec, très formel et totalement sans valeur pour enseigner n'importe quelle programmation. J'ai assisté à deux ou trois conférences par semaine et si vous ne comprenez pas, c'est à peu près tout - le professeur a une autre classe à enseigner et ne peut pas rester pour vous aider. Et, il y a de fortes chances qu'un gars le comprenne d'une certaine manière, et il l'enseignera d'une certaine manière et c'est tout, donc si vous ne pensez pas comme lui, vous ne l'obtiendrez jamais. Ce qui est pire, c'est qu'il comprend probablement un milliard d'autres concepts connexes, il va probablement l'encadrer en termes de ces autres concepts, qui peuvent bien être au-dessus de votre tête ou tout simplement pas même dans le matériel de cours.

Je suis allé sur Stack Overflow et j'ai demandé dans le canal de chat C ++ et j'ai obtenu cinq explications différentes en cinq minutes. Ils étaient tous spécialement adaptés à moi et au problème exact que j'avais, il n'est donc pas surprenant que l'un d'entre eux soit rentré chez moi et je l'ai compris. Le taux auquel vous pouvez apprendre en obtenant les commentaires en direct de plusieurs experts dépasse largement ce que vous pouvez obtenir d'une source de papier séché.

Donc, idéalement, faites une pause, puis vous trouverez un groupe de taille petite à moyenne de personnes aux vues similaires qui n'ont rien de mieux à faire et à discuter avec eux en direct. Soit dit en passant, Stack Overflow est un excellent endroit pour obtenir ce type de rétroaction personnelle à haute vitesse de haute qualité.


3

Dans aucun ordre, les livres, les amis et la lecture de code bien documenté sont de bonnes sources. La pratique est le seul moyen d'apprendre: essayez d'écrire de petits tests unitaires. Par exemple, pour les pointeurs, écrivez du code qui traite des chaînes: inversez une chaîne, inversez chaque mot d'une chaîne, testez le palindrome, remplacez une lettre par un nombre ...

Posez des questions sur stackexchange ...;>


2

C'est en forgeant qu'on devient forgeron! (bien mieux quand même). Continuez simplement à essayer et essayez d'utiliser autant de sources et de sens différents que possible:

Sources: livres, Internet, groupes d'utilisateurs, amis, apprentissage vidéo, en utilisant des sites qui vous permettent de tester un peu de code comme jsfiddle (principalement html),
Rubular (expressions Ruby),
SQlzoo pour essayer sql,
jslint pour javascript,
code pad pour de nombreuses langues.

Pour se souvenir des choses abstraites, considérez la mnéomique - les médecins les utilisent!

Considérez-vous comme un apprenant à vie et restez humble et vous pouvez aller loin.


1
+1 pour «pratique». Mais mnémoniques, ugh. Ils sont une béquille très insuffisante qui ne peut jamais remplacer et ne doit jamais supplanter la compréhension. En fait, ils marquent l'absence de compréhension. «Les médecins les utilisent» car ils sont forcés d'apprendre trop de faits déconnectés en trop peu de temps. Nous arrivons lentement au fait que notre éducation pour les médecins est nul, et les États-Unis, par exemple, sont en bonne voie de remodeler complètement l'éducation. Les mnémoniques ne sont pas une solution, ils font partie du problème. Si vous vous retrouvez à les utiliser, vous n'avez pas compris.
Konrad Rudolph

1

Vous devez changer votre focus pendant un certain temps, pas 5 min. ou 5 heures ... Je veux dire quelque chose comme 1 jour sans regarder ce code .... juste se détendre à ce sujet ... allez lire quelque chose de différent ...

Si vous devez le comprendre maintenant ... demandez l'aide d'amis ou ici =)


1

Ce que tout le monde en informatique fait.

J'utilise un moteur de recherche pour rechercher les concepts connexes que je ne comprends pas jusqu'à ce que je puisse revisiter le sujet que je voulais initialement comprendre.

Il y a de fortes chances que vous ne compreniez pas non plus complètement la pile, le tas, les variables automatiques, le processus de compilation C ++, l'assemblage, la mémoire gérée par rapport à la mémoire non gérée.

Plus de clarté sur ces concepts et sur d'autres concepts liés aux pointeurs éclaircirait probablement tout.


1

Il n'y a aucun moyen rapide et sûr de comprendre un sujet. Votre succès dépend du contexte que vous apportez avec vous dans vos études. Vous aurez beaucoup de chance de trouver quelqu'un qui vous expliquera les choses en pensant à votre point de vue. Comme les machines Turing, n'importe qui peut apprendre ce que les autres savent, et c'est juste une question de persévérance et d'acceptation que la frustration est naturelle.

Je me souviens de l'immense difficulté que j'avais avec les pointeurs. Ce n'est que lorsqu'un mec très patient m'a expliqué cela comme si j'étais un idiot complet que je l'ai compris. C'est parfois ce qu'il faut.


1

Il s'agit d'un problème courant dans l'apprentissage et l'enseignement. Et comme d'autres l'ont dit, il n'existe aucun moyen sûr de contourner ce problème. C'est une vérité fondamentale que nous apprenons tous différemment puisque notre cerveau est câblé différemment de manière subtile mais cruciale.

L'apprentissage génère de nouvelles connexions neuronales. Sans trop entrer dans les neurosciences (dont je ne connais presque rien), générer de nouvelles connexions nécessite différents types d'exposition à un concept pour différentes personnes. Essayez de nombreux angles différents, lisez / entendez / regardez différentes explications. Entraine toi!

Si cela ne fonctionne pas, mettez le problème de côté: vous pourriez simplement manquer une autre partie du puzzle qui, une fois acquise, rend le problème d'origine évident.

Connaissez-vous ces aha! des moments? C'est alors que votre cerveau vient d'établir une nouvelle connexion. C'est ainsi que l'apprentissage se produit.

Soit dit en passant, tout bon enseignant le sait. Les directives pour la rédaction technique stipulent souvent que chaque concept doit être expliqué au moins deux fois, en utilisant des mots différents (et peut-être avec du texte entre eux). Si vous faites attention, vous pourrez constater que tous les bons écrivains scientifiques suivent cette règle.

Hélas, trop d'enseignants l'ignorent et n'expliquent les choses qu'une seule fois. Et même s'ils parviennent à trouver une explication élégante avec une grande métaphore, cela ne suffit tout simplement pas.


0
  1. Lisez toute documentation pertinente et Google vos doutes.

  2. Essayez d'écrire des exemples de code, voyez ce qu'ils font.

  3. Essayez d'exécuter du code dans le débogage et regardez-le étape par étape.

  4. Si vous ne comprenez toujours pas un certain comportement, demandez à quelqu'un, en personne ou sur un site Web comme celui-ci. Si vous avez essayé tout ce qui précède, vous devriez avoir tous les éléments pour composer une bonne question. Ne soyez pas timide :)

Je pense que c'est à peu près ce que tout le monde fait.


0

Continuez à rechercher et à apprendre. J'ai eu le même problème avec divers autres aspects de la programmation. Mais parler aux autres et lire des articles mène finalement à un moment "AHA". Généralement, c'est un autre article de blog ou une réponse SO qui présente les informations que je suis en mesure de suivre.

Fondamentalement, continuez à chercher et soyez patient pour la compréhension à venir.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.