Was machen Sie, wenn Sie einen bestimmten Teil der Programmierung nicht verstehen können? [geschlossen]

11

Ich lerne im Laufe der Zeit neue Sprachen, schreibe Code für sehr einfache Programme in mehreren Sprachen und gehe in den Unterricht. Ich habe Bücher, Artikel, Lektionen, Videos gelesen, wie Sie es nennen, aber ich kann bestimmte Dinge nicht verstehen.

Zum Beispiel habe ich Zeiger nie verstanden - was sie gut können. (NICHT TEIL DER FRAGE - ein erneutes Markieren mit "Zeigern" ist nicht erforderlich ...)


Meine Frage ist jedoch nicht, was Zeiger tun, sondern wie kann ich solche Dinge verstehen? Wenn ich nach dem Lesen eines Buches oder eines Artikels über einen bestimmten Teil der Programmierung nicht verstehe, was mache ich dann? Das Schreiben von Code in einer bestimmten Funktion der Programmierung hilft sicherlich, aber es hilft nicht wirklich, so viel zu verstehen. Der theoretische Teil ist wichtig für das Verständnis.

Bugster
quelle
11
Ich wünschte, ich könnte verstehen, warum die Leute so große Probleme haben, Hinweise zu verstehen. Der Name gibt alle Klarstellungen, die ich brauche.
ChaosPandion
1
Einige Computer Architecture 101Kurse würden beim Verständnis von Hinweisen sehr hilfreich sein. ...und alles andere.
ZJR
6
Die Frage handelt nicht gerade von Zeigern, es ist eine allgemeine Frage, aber danke.
Bugster
2
Ich glaube nicht, dass es ihm helfen wird, den Kerl an das eine Beispiel zu erinnern, mit dem er Probleme hatte, ein einziges bisschen zur Erleuchtung beizutragen ... Oft genug getan, wird es ihn jedoch daran hindern, um Hilfe zu bitten, aus Angst, getroffen zu werden lange Reihe von geizigen und pedantischen Antworten und herabstufenden Kommentaren.
Haylem
4
@FrustratedWithFormsDesigner: "Wie lerne ich zu lernen", denke ich. Welches ist eine gültige und wertvolle Frage.
Haylem

Antworten:

22

Wenn Sie Probleme haben, ein abstraktes Konzept zu verstehen, gehen Sie einfach eine Ebene tiefer. Wenn Sie die Zeiger in C nicht erhalten können, gehen Sie zur Baugruppenebene. Haben Sie immer noch Probleme? Erfahren Sie mehr über die Hardware bis hin zu den Logikgattern.

SK-Logik
quelle
2
+1: Hat für mich gearbeitet. Ich hatte Probleme mit Zeigern in ALGOL, bis ich anfing, die Assemblersprache PDP-10 zu schreiben.
Kevin Cline
2
Interessante Idee. Ich möchte jedoch darauf hinweisen, dass das Schreiben und Ausführen eines Programms in Assembly zu weit geht. Meiner Meinung nach ist es auf dieser Ebene unnötig, über das grundlegende Verständnis hinauszugehen. Aber hey, wenn du das willst, mehr Kraft für dich!
Bryan Field
1
@ George Bailey, ja, es könnte für jede echte Baugruppe und echte Hardware etwas übertrieben sein. Deshalb gibt es MIXähnliche Spielzeugarchitekturen. Für ein Hardware-Teil ist es dasselbe - es gibt viele einfache Spielzeug-CPU-Kerne, die untersucht werden müssen.
SK-Logik
+1: Interessante Idee und auf jeden Fall wahrscheinlich, aber (um den Beispielfall des OP wiederzuverwenden) der Übergang vom C-Einstiegsniveau zum ASM-Einstiegsniveau könnte für einen Anfänger ein langer, harter und kurvenreicher Weg sein, den er wahrscheinlich nehmen wird mehr Zeit als vom Kurs / Projekt / Sonstiges erwartet. Es kann auch schlecht motivierte Menschen entfremden (was wahrscheinlich nicht der Fall des OP ist, aber aus einer übergeordneten Perspektive würde dies viele Schüler blockieren, die CS-Kurse belegen und dies verstehen müssen, sich aber nicht um CS selbst kümmern). . Aber auf lange Sicht definitiv eine gute Idee.
Haylem
Nun, mein CS-Abschluss deckte dies in Computerarchitektur ab. Wir haben etwas über Logikgatter gelernt und sie in einem Logiksimulator kombiniert, um Addierer, ALUs und schließlich eine sehr einfache RISC-CPU zu erstellen. Wir haben auch einfache Programme in der MIPS-Assembly geschrieben. Dies alles war für einen BS in Informatik erforderlich und wurde nicht wirklich als einer der "Unkraut" -Kurse angesehen, daher denke ich nicht, dass es übertrieben ist oder zu weit geht.
Adam Jaskiewicz
17

Kurzer inkrementeller Lernlebenszyklus

  1. Versuchen und kann nicht verstehen , das Konzept.
  2. Versuchen Sie, etwas zu implementieren , das das Konzept veranschaulicht.
  3. Versuchen Sie, das Konzept auf einem Whiteboard darzustellen (falls zutreffend).
  4. Versuchen Sie, es mit jemandem zu besprechen, der das Konzept versteht.
  5. Versuchen Sie , dieser Person die Teile zu erklären, die Sie verstehen (manchmal hilft es, das Licht zu sehen).
  6. Starten Sie erneut von 1, bis Sie es endlich jemandem erklären können , der sich in Zustand 1 befindet, und ihn dazu bringen, es zu bekommen.

Zusätzliche Schritte

Mit Vorsicht zu verwenden.

  • Suchen Sie nach zusätzlichem Lese- und Lernmaterial :
    • online (beliebte Suchmaschinen und Wikipedia sind gute Freunde),
    • in der Bibliothek (unterschätzen Sie nicht die Bücher und die Leute, die dorthin gehen, um sie zu lesen),
    • auf Ihrem System ( im Paket enthaltene Dokumentation und doc - Tools sind oft zunächst befremdlich, aber Ihr bester goto-Kumpel nach einer Weile. lernen zu finden , was sie in ihnen sucht , zum Beispiel man -k, aproposetc ...)
  • Versuchen Sie , Code mit dem Konzept zu lesen ...
  • ... und mit einem Debugger durch den Code gehen .

Diese sind hinterhältiger, da Sie sich selbst neu bewerten müssen, um sicherzustellen, dass Sie alles richtig gemacht haben. Direktes Mentoring durch eine sachkundige Person ist normalerweise besser, gefolgt von Ihrer eigenen Validierung des erworbenen Wissens, indem Sie das gerade Gelernte erneut implementieren (und dann versuchen, es einen Schritt weiter zu treiben und ein übergeordnetes Konzept zu erlernen, das darauf aufbaut davon zB verknüpfte Listen für Ihre Zeiger).

Credits: Nupul (für Diagramme)

Haylem
quelle
2
+1! Darf ich hinzufügen - bevor Sie sprechen, versuchen Sie das Whiteboard, um es zu skizzieren (oder halten Sie das Whiteboard einfach griffbereit, wenn Sie mit jemandem sprechen :)
PhD
1
+1 für "Schritt durch den Code mit einem Debugger". Ich habe mit einfachen Debugging-Tools viele Konzepte
kennengelernt
@Nupul: guter Vorschlag, hinzugefügt.
Haylem
@funkymushroom: In der Tat, obwohl ich sagen würde, dass man das Konzept normalerweise nicht wirklich so lernt. Es hilft jedoch, den Nebel zu "heben", wenn er direkt vor Ihnen liegt und Sie einfach nicht sehen konnten, wie die Teile zusammenkommen, weil Sie sich zu sehr auf etwas konzentrieren oder Ihr Geist gebraten ist. Ich finde es hilfreicher, allgemeine algorithmische Probleme zu verstehen als allgemeine Konzepte.
Haylem
Das Gespräch mit dem Whiteboard hat es für mich getan.
Peter
5

Nach meiner Erfahrung dreht sich alles um Input und Feedback. Sie möchten in möglichst vielen Formen Eingaben erhalten und so schnell wie möglich Feedback zu Ihren Fehlern erhalten.

Meiner Erfahrung nach war mein CS-Abschluss sehr trocken, sehr formal und absolut wertlos darin, Programmieren zu unterrichten. Ich habe zwei bis drei Vorlesungen pro Woche besucht, und wenn Sie es nicht bekommen, dann ist das so ziemlich alles - der Dozent hat eine andere Klasse zu unterrichten und kann nicht bleiben, um Ihnen zu helfen. Und wahrscheinlich versteht man es auf eine bestimmte Art und Weise, und er wird es auf eine bestimmte Art und Weise lehren, und das ist es. Wenn Sie also nicht wie er denken, werden Sie es niemals bekommen. Was noch schlimmer ist, ist, dass er, da er wahrscheinlich eine Milliarde anderer verwandter Konzepte versteht, diese wahrscheinlich in Bezug auf diese anderen Konzepte formulieren wird, die möglicherweise weit über Ihrem Kopf liegen oder einfach nicht einmal im Kursmaterial enthalten sind.

Ich ging zu Stack Overflow und fragte im C ++ - Chat-Kanal und bekam in fünf Minuten fünf verschiedene Erklärungen. Sie waren alle speziell auf mich und das genaue Problem zugeschnitten, das ich hatte. Es ist also keine Überraschung, dass einer von ihnen für mich nach Hause kam und ich es bekam. Die Rate, mit der Sie aus dem Live-Feedback mehrerer Experten lernen können, liegt weit über der Rate, die Sie aus einer Trockenpapierquelle erhalten können.

Machen Sie also im Idealfall eine Pause, und dann finden Sie eine kleine bis mittelgroße Gruppe von Gleichgesinnten, die nichts Besseres zu tun haben, und unterhalten sich live mit ihnen. Stack Overflow ist übrigens ein ausgezeichneter Ort, um diese Art von qualitativ hochwertigem persönlichem Highspeed-Feedback zu erhalten.

DeadMG
quelle
3

In keiner Reihenfolge sind Bücher, Freunde und das Lesen von gut dokumentiertem Code gute Quellen. Übung ist der einzige Weg zu lernen: Versuchen Sie, kleine Unit-Tests zu schreiben. Schreiben Sie beispielsweise für Zeiger Code, der sich mit Zeichenfolgen befasst: Umkehren einer Zeichenfolge, Umkehren jedes Wortes in einer Zeichenfolge, Testen auf Palindrom, Ersetzen eines Buchstabens durch eine Zahl ...

Stellen Sie Fragen zum Stapelaustausch ...;>

Sardathrion - gegen SE-Missbrauch
quelle
2

Übung macht den Meister! (Na besser sowieso). Versuchen Sie einfach weiter und versuchen Sie, so viele verschiedene Quellen und Sinne wie möglich zu nutzen:

Quellen: Bücher, Internet, Benutzergruppen, Freunde, Video-Lernen, Verwenden von Websites, auf denen Sie ein wenig Code testen können, wie jsfiddle (meistens HTML),
Rubular (Ruby-Ausdrücke),
SQlzoo zum Ausprobieren von SQL,
jslint für Javascript,
Code-Pad für viele Sprachen.

Um sich an abstrakte Dinge zu erinnern, sollten Sie Mneomik in Betracht ziehen - Ärzte verwenden sie!

Betrachten Sie sich als lebenslangen Lernenden und bleiben Sie demütig, und Sie können weit gehen.

Junkie
quelle
1
+1 für "Übung". Aber Mnemonik, ugh. Sie sind eine sehr unzureichende Krücke, die das Verständnis niemals ersetzen kann und niemals ersetzen sollte. In der Tat markieren sie das Fehlen von Verständnis. „Ärzte benutzen sie“, weil sie gezwungen sind, in zu kurzer Zeit zu viele unzusammenhängende Fakten zu lernen. Wir kommen langsam zu der Tatsache, dass unsere Ausbildung für Ärzte schlecht ist und die USA zum Beispiel auf dem besten Weg sind, die Ausbildung komplett umzugestalten. Mnemonics sind keine Lösung, sie sind Teil des Problems. Wenn Sie feststellen, dass Sie sie verwenden, haben Sie sie nicht verstanden.
Konrad Rudolph
1

Sie müssen Ihren Fokus für eine Weile ändern, nicht für 5 Minuten. oder 5 Stunden ... ich meine so etwas wie 1 Tag ohne auf diesen Code zu schauen ... entspann dich einfach ... lies etwas anderes ...

Wenn Sie haben es jetzt zu verstehen ... bitte um Hilfe von Freunden oder hier =)

Gerep
quelle
1

Was alle anderen in der IT tun.

Ich benutze eine Suchmaschine, um die verwandten Konzepte nachzuschlagen, die ich nicht verstehe, bis ich das Thema, das ich ursprünglich verstehen wollte, erneut aufgreifen kann.

Möglicherweise verstehen Sie den Stapel, den Heap, die automatischen Variablen, den C ++ - Kompilierungsprozess, die Assembly, den verwalteten Speicher und den nicht verwalteten Speicher nicht vollständig.

Mehr Klarheit über diese und andere zeigerbezogene Konzepte würde wahrscheinlich alles klären.

brian
quelle
1

Es gibt keinen sicheren Weg, um ein Thema zu verstehen. Ihr Erfolg hängt davon ab, wie viel Kontext Sie in Ihrem Studium mitbringen. Sie werden sehr glücklich sein, jemanden zu finden, der die Dinge mit Ihrem Standpunkt erklärt. Wie bei Turing-Maschinen kann jeder lernen, was andere wissen, und es ist nur eine Frage der Beharrlichkeit und Akzeptanz, dass Frustration natürlich ist.

Ich erinnere mich an die immense Schwierigkeit, die ich mit Zeigern hatte. Erst als ein sehr geduldiger Typ es mir erklärte, als wäre ich ein Vollidiot, verstand ich es. Das ist manchmal das, was es braucht.

Kevin Hsu
quelle
1

Dies ist ein häufiges Problem beim Lernen und Lehren. Und wie andere gesagt haben, gibt es keine sichere Möglichkeit, dies zu umgehen. Es ist eine grundlegende Wahrheit, dass wir alle unterschiedlich lernen, da unser Gehirn auf subtile, aber entscheidende Weise unterschiedlich verdrahtet ist.

Lernen erzeugt neue neuronale Verbindungen. Ohne zu viel in die Neurowissenschaften zu gehen (von denen ich so gut wie nichts weiß), erfordert das Generieren neuer Verbindungen verschiedene Arten der Auseinandersetzung mit einem Konzept für verschiedene Menschen. Probieren Sie viele verschiedene Blickwinkel aus, lesen / hören / sehen Sie verschiedene Erklärungen. Trainieren!

Wenn dies nicht funktioniert, legen Sie das Problem beiseite: Möglicherweise fehlt Ihnen einfach ein anderer Teil des Puzzles, der nach dem Erwerb das ursprüngliche Problem offensichtlich erscheinen lässt.

Kennst du diese Aha! Momente? Zu diesem Zeitpunkt hat Ihr Gehirn gerade eine neue Verbindung hergestellt. So geschieht Lernen.

Das weiß übrigens jeder gute Lehrer. Richtlinien für technisches Schreiben besagen häufig, dass jedes Konzept mindestens zweimal mit unterschiedlichen Wörtern (und möglicherweise mit einem Text dazwischen) erklärt werden sollte. Wenn Sie darauf achten, werden Sie feststellen, dass alle guten Wissenschaftsautoren dieser Regel folgen.

Leider ignorieren es allzu viele Lehrer und erklären die Dinge nur einmal. Und selbst wenn es ihnen gelingt, eine elegante Erklärung mit einer großartigen Metapher zu finden, reicht dies einfach nicht aus.

Konrad Rudolph
quelle
0
  1. Lesen Sie alle relevanten Dokumentationen und Google Ihre Zweifel.

  2. Versuchen Sie, Codebeispiele zu schreiben, und sehen Sie, was sie tun.

  3. Versuchen Sie, Code im Debug auszuführen, und beobachten Sie ihn Schritt für Schritt.

  4. Wenn Sie ein bestimmtes Verhalten immer noch nicht verstehen, fragen Sie jemanden, entweder persönlich oder auf einer Website wie dieser. Wenn Sie alle oben genannten Punkte ausprobiert haben, sollten Sie über alle Elemente verfügen, um eine gute Frage zu erstellen. Sei nicht schüchtern :)

Ich denke, es ist so ziemlich das, was alle anderen tun.

jlemos
quelle
0

Forschen und lernen Sie weiter. Ich hatte das gleiche Problem mit verschiedenen anderen Aspekten der Programmierung. Aber mit anderen zu sprechen und Artikel zu lesen, führt schließlich zu einem "AHA" -Moment. Im Allgemeinen ist es ein anderer Blog-Beitrag oder eine SO-Antwort, die die Informationen enthält, denen ich folgen kann.

Grundsätzlich sollten Sie weiter suchen und geduldig sein, damit das Verständnis kommt.

Schleis
quelle