Wie man einen 50-jährigen Computer-Analphabeten in die Programmierung einführt [geschlossen]

10

Neulich stellte mir mein Vater eine Frage, die ich nie von ihm erwartet hätte.

"Wie kann ich C ++ lernen?"

Mein Vater wird dieses Jahr 56 Jahre alt und Computer sind für ihn ein weit entferntes Konzept. Er weiß nicht sehr gut, wie man ein Telefon benutzt, außer Nummern anzurufen (keine Kurzwahl oder Kontakte); obwohl er angefangen hat, Computer ein wenig besser zu lernen - bis zu dem Punkt, dass er weiß, wie man das Internet öffnet (unter Windows) und sich umschaut (und mehrere Bewerbungen erfolgreich vollständig online abgeschlossen hat, von denen ihm auch Stellen angeboten wurden ). Trotzdem sind diese Erfahrungen zu eng, um wirklich viel zu bedeuten.

Obwohl er möglicherweise nicht über den Hintergrund verfügt, kann mein Vater lesen. Und ich meine Lesen als Fähigkeit, nicht nur als Fähigkeit. Er hat wenig bis gar keine College-Ausbildung (finanzielle Probleme, Familie usw.) und hatte das Glück, die High School zu beenden, brachte sich aber dennoch selbst bei, Elektromeister zu werden, und ist dies seit fast 30 Jahren. Er tat dasselbe mit Gitarre, lernte sehr professionell zu spielen und wurde für seine Fähigkeiten gelobt. In der High School nahm er ein Buch zum Gewichtheben in die Hand - und war zu dieser Zeit die einzige Person in seiner High School, die sich nach nationalen Maßstäben offiziell als "Athlet" qualifizierte.

In allen Fällen brauchte er nur etwas zum Lesen. Etwas, um ihn zu unterrichten. Er nimmt Informationen auf wie ein Schwamm.

Ich habe keinen Zweifel an der Motivation oder Fähigkeit meines Vaters, dies zu tun, daher ist mein allgemeines Ziel einfach:

Bringen Sie meinen Vater in die Welt der Computer und bringen Sie ihn auf den Weg zum Programmieren.

Ich bin fest davon überzeugt, dass sein Antrieb und seine Lesefähigkeit ihn auf Trab halten werden, sobald ich ihn durch die Grundlagen gebracht habe.

Also frage ich euch alle: Wo soll ich mit all dem anfangen? Und was sind die besten Ressourcen da draußen? Soll ich ihn dazu bringen, Linux anstelle von Windows zu starten? Ist C ++ eine schlechte Idee?

Denken Sie daran, dass er (IMO) zuerst Computer lernen und dann das erste Verständnis (die "Hallo Welt" -Erfahrung) der Programmierung erlangen muss.

Um des Geldes willen und vorzugsweise möchte ich kostenlose Online-Ressourcen, die er lesen kann, aber auf jeden Fall sind alle guten Vorschläge in gedruckter Form oder online bezahlt willkommen (die ich möglicherweise später prüfen könnte, um sie zu kaufen).

Außerdem beabsichtige ich, ihn mit C ++ (kein Python, Java usw.) zu starten, da ich es am besten kenne und ihm auf dem Weg mit Code helfen kann. (Ich habe momentan nur minimale Kenntnisse in anderen Sprachen).

Bearbeiten: Ich bekomme viele hartnäckige Vorschläge zur Verwendung von Python. Der einzige Grund, warum ich C ++ machen wollte, ist, dass ich es weiß und dort sein kann, wenn mein Vater Hilfe braucht. Meine allererste Erfahrung mit Programmierung war Java. Ich habe Java gelernt und bin gut darin geworden. Ich bin offen für andere Vorschläge, aber bitte geben Sie eine effektive Anwendung Ihrer Vorschläge.

EDIT # 2: Ich verstehe, dass mein Ansatz / Denken / Wissen hier fehlen könnte. Ich bin ein CS-Major im zweiten Studienjahr. Wenn Sie mit nichts in meinem Beitrag einverstanden sind, sagen Sie mir, warum - geben Sie mir Ideen, Informationen - deshalb frage ich zuerst. Mein allgemeines Ziel auf bestimmte erreichbare Ziele eingrenzen.

skippr
quelle
1
Diese Frage bezieht sich nicht auf die professionelle Softwareentwicklung. Obwohl wir im Laufe unseres Tages mit anderen technischen und nichttechnischen Menschen interagieren und sie manchmal unterrichten müssen, sind wir keine professionellen Lehrer oder Ausbilder und können keine guten Ratschläge geben, wie man jemanden am besten unterrichtet. Wenn Sie dies weiter diskutieren möchten, können Sie auf unserer Meta-Site eine Frage stellen .
Thomas Owens
@ThomasOwens woher weißt du, dass es in der Community keine professionellen Lehrer oder Ausbilder gibt? Ist die weniger angesehene Meta wirklich der Ort, an den ich gehen muss? Ich denke, ich kann dem nachgeben (obwohl ich wirklich möchte, dass es hier bleibt), bitte migrieren Sie es für mich. Wenn ich etwas tun kann, um diese Frage an die Kriterien anzupassen, damit sie von der SO / Programmierer-Community besser gesehen werden kann, helfen Sie mir bitte dabei.
Skippr
1
Nach meinem besten Wissen gibt es keine Website, die diese Frage akzeptiert. Ich habe nur die Liste durchgesehen und keine gesehen. Wenn Sie dies weiter diskutieren möchten, stellen Sie bitte eine Frage zu Meta .
Thomas Owens
@ThomasOwens Nun, ich bin nicht hier, um zu jammern oder zu trollen, also werde ich mein Bestes geben. Danke
skippr
Meine Antwort in den Kommentaren schleichen ... Im Gegensatz zu den Antworten unten denke ich, dass C ++ tatsächlich eine großartige Muttersprache ist. Besonders für Anfänger. Sie beginnen mit trivialen Konsolen-E / A und C ++ ist in dieser Hinsicht viel anfängerfreundlicher als Java oder C #. Weniger Kesselplattencode, um ihn auch zu verwirren. Sicher, es gibt erweiterte Funktionen, die Verwirrung stiften, aber Sie können sehr weit gehen und sich auf einige grundlegende Funktionen beschränken.
Lord Tydus

Antworten:

13

Selbst wenn Sie C ++ persönlich gut kennen, ist es eine schreckliche, schreckliche Muttersprache für Anfänger, und ich kann es nicht genug empfehlen, um ihn so weit wie möglich davon fernzuhalten, wenn er erfolgreich lernen möchte, Code zu schreiben. Beim Programmieren geht es nicht um eine Sprache, sondern darum , abstrakte Anforderungen in formaler Logik auszudrücken. C ++ macht es schwierig, sich darauf zu konzentrieren, da Sie ständig über sprachspezifische Probleme stolpern.

Wenn er lernen möchte, Ideen in formaler Logik auszudrücken, entscheiden Sie sich für etwas, das dies einfach macht. Meine Wahl wäre Pascal (für die Entwicklung auf Anwendungsebene) oder Python (für die Arbeit auf Skriptebene), da beide intuitiv und einfach zu erlernen sind. Sobald er tatsächlich die Prinzipien des Schreibens von Code kennt, kann er ihn aufgreifen, wenn er sich wirklich speziell für C ++ interessiert.

Starten Sie ihn aus dem gleichen Grund nicht unter Linux statt unter Windows, da er sich dann auf zwei Probleme konzentrieren muss: Linux lernen und gleichzeitig Codierung lernen! Halten Sie die Ablenkungen auf ein Minimum.

Was die eigentlichen Programmierressourcen betrifft, ist es einfach genug, Tutorials online zu finden, aber ich habe festgestellt, dass der beste Weg, das Programmieren zu lernen, das Programmieren ist. Suchen Sie etwas, das Sie tun möchten, und finden Sie dann heraus, wie es geht.

Vor einigen Jahren sah ich ein Spiel und dachte: "Ich könnte das tun und ich könnte es besser machen." Also habe ich Delphi angefeuert und angefangen, die Prinzipien herauszufinden. Ich lerne immer noch neue Sachen aus diesem persönlichen Projekt und bin dabei ein wirklich guter Programmierer geworden! Also versuchen Sie das; Fragen Sie Ihren Vater, was er gerne tun würde, wenn er programmieren könnte - und stellen Sie sicher, dass dies möglich und von relativ geringem Umfang ist, da er noch keine Erfahrung hat - und setzen Sie sich dann zu ihm und beginnen Sie mit ihm herauszufinden, wie es geht es.

Und wenn er Fragen hat, besorgen Sie ihm ein StackOverflow-Konto. :) :)

Mason Wheeler
quelle
4

Ich denke Interesse Ihr Vater ist in C ++ ist auf jeden Fall ordentlich , aber es wäre meine Wahl für eine erste Programmiersprache nicht sein - es sei denn , er hat sehr spezifische Anforderung , dass er in Treffen interessiert. (Selbst dann ist das Erlernen von C ++ nach dem Erlernen einer anderen, einfacheren Sprache möglicherweise noch viel einfacher.)

Es gibt eine Handvoll Dinge, die für die Programmierung wichtig sind:

  • Die Fähigkeit, abstrakte Probleme zu lösen
  • Die Fähigkeit, Probleme in ausreichend kleine Teile zur Problemlösung zu zerlegen
  • Die Fähigkeit, Lösungen iterativ und klein genug zu erstellen, um den Fortschritt voranzutreiben, ist möglich
  • Die Syntax und Semantik bestimmter Sprachen.

In vielerlei Hinsicht ist die Syntax und Semantik bestimmter Sprachen fast am Ende der für die Programmierung erforderlichen Fähigkeiten. Wenn Sie in der Nähe von Recht sind, werden Ihnen die meisten Compiler sagen, welchen Fehler Sie gemacht haben - obwohl es Erfahrung erfordert, um zu dekodieren, was speziell Compiler sagen.

Daher würde ich vorschlagen, dass Ihr Vater auf Anhieb eine weitaus einfachere Programmiersprache in Angriff nimmt: Ruby, Python, C, C #, Haskell usw. (Haskell ist definitiv schwierig für Leute, die nur imperative Sprachen programmiert haben, aber ich ' Ich bin gespannt, ob Anfänger das gleiche Gefühl haben, aus dem Wasser zu fischen.)

Das Festhalten an einer einfacheren Sprache bedeutet, dass Ihr Vater früher mehr Erfolg hat und es einfacher ist, "zu spielen". Die interaktive REPL-Schleife vieler Sprachen ist ein ausgezeichneter Ort zum Lernen.

Sobald Ihr Vater mit Funktionen, Klassen, Objekten und Methoden vertraut ist, werden sich die Details und Nuancen von C ++ nicht mehr so ​​überwältigend anfühlen. Selbst mit C zu beginnen wäre einfacher: Es ist nicht verzeihend , aber es gibt weniger verwirrende Funktionen, über die man sich Sorgen machen muss.

Sie sind neugierig auf Linux vs Windows; Ich bin mir nicht sicher, ob die Unterscheidung wichtig ist. Wenn er bereits mit der einen oder anderen Umgebung vertraut ist, ist das Wechseln nur eine weitere Hürde. Wenn er beides nicht weiß, würde ich Linux vorschlagen, aber hauptsächlich, weil die Installation guter Tools lächerlich einfach ist: Funktioniert apt-get install <foo>auf den meisten Distributionen, und die Distributionen, die nicht unterstützt werden, aptbieten oft etwas Ähnliches. Eine Minute später wird Ihr ordentliches neues Paket installiert, oft schneller als ich es brauche, um eine zuverlässige Downloadquelle für vorkompilierte Windows-Binärdateien zu finden, die nicht nach Trojanern stinkt.

Sarnold
quelle
Mein Vater hat definitiv die "Fähigkeit zu denken", die für Programmierer so wichtig ist. Ich sehe seinen gesunden Menschenverstand und seine Intelligenz in den Dingen, die er jetzt tut, und ich weiß, dass sie in der Programmierung angewendet werden können. Nehmen wir an, wir haben einen optimalen Kandidaten für das Lernen. Meine Frage ist: Wie bringen wir sie dorthin?
Skippr
Hrm, ich habe die Fähigkeiten in verschiedene Kategorien unterteilt, um zu verdeutlichen, dass Syntax und Semantik die Entwicklung der anderen Fähigkeiten trüben können - eine Sprache mit weniger Regeln für arkane Gefühle wird den Abstraktionsfluss erleichtern -, aber ich scheinen diesen Punkt nicht gut angegeben zu haben.
Sarnold
1
Von den vorgeschlagenen Sprachen würde ich sicherlich Python bevorzugen. Wenn Ihr Vater jedoch visuell geneigt ist, kann die Verarbeitung (siehe www.processing.org) ein interessantes Intro sein (obwohl es viele Arten von Problemen gibt, für die es nicht geeignet ist).
James Youngman
@ James: heh, ich glaube nicht, dass ich jemals den Satz " Interaktive Programme mit ... PDF-Ausgabe" gesehen habe . :)
Sarnold