Wie kann ich einer klugen Person ohne Programmiererfahrung das Programmieren beibringen? [geschlossen]

100

Ich wurde gebeten, eine Person in unserer IT-Abteilung einzustellen, die keine Programmiererfahrung hat, aber eine kluge und fähige Person ist, und ihm zu helfen, beispielsweise bei einem Einsteiger, der vorhandene .NET-Anwendungen unterstützt, in die Programmierung einzusteigen. Ich glaube definitiv, dass diese Person das kann, aber ich suche nach dem schnellsten Weg, um ihn zum Tempo zu bringen. Ich habe eine Menge Ideen, wollte aber sehen, was andere Leute dachten. Ich weiß, dass dies auch stark davon abhängen wird, wie er lernt, aber ich spreche im Allgemeinen.

Also die Frage: Was sind Ihrer Meinung nach die besten Möglichkeiten, um einen Nicht-Entwickler schnell auf den neuesten Stand der Entwicklung zu bringen (in diesem Fall .Net)?

Richard Fantozzi
quelle
1
Vielleicht verwandte Frage: programmers.stackexchange.com/questions/10930/… : D
jmservera
Ich habe gehört, dass Learn Python The Hard Way für Anfänger ohne Programmierkenntnisse geeignet ist.
john2x
Schauen Sie sich Small Basic an . Es ist einfach, aber nützlich für Anfänger.
3
Ich denke, jemandem, der kein mentales Modell für irgendetwas hat, von dem Sie sprechen, das Programmieren zu erklären, ist nutzlos. Finden Sie heraus, über welche Sprache Sie sprechen werden, und lassen Sie sie die Tutorials durchgehen und sich die Hände schmutzig machen. Erklären Sie dann. Sie werden kämpfen und Sie werden den Lernprozess beschleunigen.
The Muffin Man
1
Ich würde ihn bitten, Edgser Dijkstra's (Auf die Grausamkeit, Informatik wirklich zu unterrichten) zu lesen, und ihn über den Grund für diesen Artikel zu informieren, damit er vorsichtig sein kann, welchen möglichen Hirnschaden die allgemein anerkannte Person ihm zufügen kann Möglichkeiten des Programmierunterrichts
vfclists

Antworten:

125

Normalerweise verschreibe ich jedem, der Programmieren lernen möchte, die gleiche Reihenfolge. Es ist sehr theoretisch, aber es ist eine gute Grundlage. Das Studium sollte drei oder vier Monate dauern, aber das Programmieren lernt man nicht über Nacht.

Wenn Sie diese Sequenz nicht durchstehen können, können Sie auch nicht programmieren. Geben Sie also gleich auf.

  1. Code von Charles Petzold.
  2. Die Programmiersprache C, K & R
  3. Die Struktur und Interpretation von Computerprogrammen, Abelson und Sussman.

Meine Regel lautet: Arbeiten Sie sich bei Bedarf mit aller Kraft durch diese drei Bücher. Stellen Sie alle Fragen, die Sie haben, aber erst, nachdem Sie sich bemüht haben, es selbst herauszufinden. Wenn Sie diese drei Bücher durcharbeiten können, Glückwunsch, Sie sind ein Programmierer, jetzt kann ich Ihnen PERL IN 15 MINUTEN oder was auch immer Müll in der Buchhandlung im Big Bookcase von Java geben, und Sie werden gut zurechtkommen. Wenn Sie diese drei Bücher nicht durcharbeiten können, geben Sie auf, gehen Sie nach Hause, Sie werden es nie bekommen.

Ich glaube nicht, dass Sie C und Schema lernen müssen, um ehrlich zu sein. Sie sind nur eine Grundlage für zukünftiges Lernen. Diese beiden recht einfachen Bücher sind beide sehr einfach (C und Schema sind superleichte Sprachen), aber sie befassen sich intensiv mit der eigentlichen Kunst des Programmierens, ohne Zeit mit verwirrender Syntax zu verschwenden Ihr Gehirn ist ein guter Programmierer.

Versuche, eine Verknüpfung zu erstellen und genau das zu lernen, was Sie gerade lernen möchten (wie das Starten mit C # und ASP.NET), sind zum Scheitern verurteilt.

Joel Spolsky
quelle
25
Als jemand, der wegen "Programmierern", die aufgrund ihrer C # -Fähigkeiten sehr empfohlen wurden, aber einfache Dinge wie die Implementierung einer sehr gut dokumentierten Basisklasse nicht ausführen konnten, den Kopf auf den Tisch schlagen musste, fand er Speicherlecks in C- und C ++ - Programmen. oder einfach ein Problem selbst herausfinden oder eine neue Idee in einem moderaten Tempo lernen, stimme ich zu. Das ist kein Elitismus; es ist gesunder Menschenverstand. Wenn Sie Zeiger und Rekursionen nicht beherrschen können, werden Sie für jeden, der Entwickler benötigt, die Probleme selbst lösen können, niemals von großem Nutzen sein.
Jonathan Henson
53
Nein, es ist nicht der einzige Weg, ein guter Programmierer zu sein. Aber wenn drei Bücher eine "entmutigende Liste" sind, unterschätzen Sie möglicherweise, was Programmierer tun.
Joel Spolsky
32
Du bist manchmal so außer Kontakt, Joel.
Robert S.
46
Tut mir leid, die Zeitungen brauchen ein paar Tage, um in meinem Privatclub anzukommen, da sie von einem Parkservice gebügelt werden müssen, bevor wir sie sehen können.
Joel Spolsky
19
Leider schlägt diese Antwort den up to speed quicklyTeil fehl .
rlb.usa
30

Der beste Weg, um einen Nicht-Entwickler schnell auf den neuesten Stand zu bringen, besteht darin, ihn zu inspirieren !

Um Erfolg zu haben, muss der Kandidat zumindest neugierig, wenn nicht sogar leidenschaftlich auf das Programmieren sein (unabhängig von der Plattform).

Während ich Joel im Falle des idealen Kandidaten zustimme, würde ich darauf achten, nicht zu viel Theorie in einen schwachen Verstand zu stecken - es würde sie nur abschrecken. Wenn sie inspiriert, neugierig und hoffentlich leidenschaftlich sind, werden sie die Theorie verstehen wollen, nachdem sie die Magie gesehen haben.

Ich stimme @karudzo voll und ganz zu - Selbstverwirklichung und ein konstruktiver Rückblick können sehr inspirierend sein.

jkoreska
quelle
29
"Wenn du ein Schiff bauen willst, trommle keine Leute auf, um Holz zu sammeln, und teile ihnen keine Aufgaben und Arbeiten zu, sondern lehre sie, sich nach der endlosen Unermesslichkeit des Meeres zu sehnen." - Antoine de Saint-Exupery
Julien Chastang
Julien - schön! Genau!
Jkoreska
Da stimme ich Ihnen voll und ganz zu! Ich habe viele Entwickler betreut, die keine Erfahrung hatten und manchmal keine Ahnung hatten, dass sie Programmierer werden würden. Ich habe sie dabei einfach angeleitet ... ihre eigene Neugier und Leidenschaft haben sie zum Endergebnis geführt. Hätten sie keine dieser beiden Eigenschaften gehabt, wäre es ihnen meines Erachtens nicht möglich gewesen, das zu erreichen, was sie erreicht haben. Ich arbeite mit zu vielen Programmierern zusammen, denen eines oder beide dieser Attribute fehlen und die sich darin befinden, nur weil viel Arbeit zur Verfügung steht ... es ist schrecklich!
Jeach
Genau. Ich glaube, die Frage des Programmierens wird sehr wörtlich beantwortet. Menschen lernen Dinge aus einem bestimmten Grund. Menschen lernen zu programmieren, um Probleme zu lösen, Menschen zu helfen und Ideen in etwas Reales zu verwandeln. Ich habe Leute getroffen, die das vergessen haben und als sie es wiederentdeckt haben, haben sie ihre Liebe zum Programmieren wiederentdeckt. Wenn Sie wirklich Spaß an etwas haben, das Sie lernen werden, werden Sie Wege finden, um zu lernen, und Sie werden besser.
Luis Perez
12

Ich suche den schnellsten Weg, um ihn auf Touren zu bringen.

Der schnellste Weg könnte sein, ihm die Zeit zu geben, die er braucht , obwohl das leicht ein oder zwei Jahre sein können.

Sicher, es scheint einfach zu sein, ihm eine einfache Sprache beizubringen (C #, wenn er .NET-Sachen machen soll), aber eine Sprache zu lernen, bedeutet nicht, programmieren zu lernen.

Wenn er noch nie programmiert hat, muss er sich neben der Syntax und der Bibliothek von mindestens einer Sprache auch mit Arrays, verknüpften Listen, dem Kompilierungsmodell für jede Sprache, die er lernt, Modularisierung, Ressourcenmanagement, Paradigmen, Mustern, Big- O-Notation ... - die ganze Enchilada. Das ist eine Menge Dinge, die man durchpflügen muss, und die meisten von uns haben mehrere Jahre gebraucht, um diese Grundlagen zu erlernen, und noch mehr, um ein echter professioneller Programmierer zu werden.

Es gibt Material, das viel davon abdeckt (wie das neueste Buch von Stroustrup , in dem das Programmieren mit C ++ und nicht die Sprache C ++ unterrichtet wird), aber es gibt nicht viel davon und nichts, das alles abdeckt. Der Typ muss also bereit sein zu lernen und viele Bücher und Artikel zu lesen.

Wie das geht: Ich habe keinen vollständigen Lehrplan zur Hand, den ich hier einfügen könnte. (Entschuldigung.)
Ich würde jedoch empfehlen, ihm zunächst eine Programmiersprache beizubringen, damit er schnell erste Fortschritte erzielen und ermutigende Ergebnisse erzielen kann. Es gibt eine ganze Reihe von Büchern, in denen solche Sprachen unterrichtet werden können. Wählen Sie eines aus, mit dem Sie vertraut sind. Wenn das Buch viele Übungen enthält und er bereit ist, sie zu machen, sollten Sie darauf vorbereitet sein, viel Zeit damit zu verbringen, ihm dabei zu helfen. Wenn das Buch keine hat, fangen Sie an, sich Ihre eigenen im Voraus auszudenken, aber seien Sie bereit, sie an seine Ebene / Geschwindigkeit des Verstehens anzupassen.
Wenn diese erste Sprache weder C noch C ++ war, sollte er IMO als Nächstes eine dieser Sprachen lernen. K & R ist dafür gut geeignet, ebenso wie Stroustrups TCPL oder, wenn er (mit Ihrer Hilfe) eine steile Lernkurve bewältigen kann, Koenig / Moo. Der Grund, warum ich dies empfehlen würde, ist, dass, sobald Sie C oder (vorzugsweise) C ++ kennen, es relativ einfach ist, C-Derivate wie C #, Java, ObjC ... zu finden.

Stellen Sie ihm für den Rest einen ständigen Strom guter Bücher und Artikel zur Verfügung. Ich denke nicht, dass es sehr hilfreich ist, wenn wir zu viele davon vorschlagen, da 1) es zu Ihrer Unternehmenskultur passen muss und 2) Sie sich wohl fühlen müssen, wenn Sie ihm sagen, dass er das lernen soll.

sbi
quelle
1
"Einsteigerentwickler, der vorhandene .Net-Anwendungen unterstützt" ... "Er muss sich mit Arrays, verknüpften Listen, dem Kompilierungsmodell der von ihm erlernten Sprache, Modularisierung, Ressourcenmanagement, Paradigmen, Mustern und Bit-O-Notation auseinandersetzen." sind alle nett zu haben, aber ich wette, dass ein guter Teil der Entwickler, die den Code geschrieben haben, nicht über diese Fähigkeiten verfügt.
Kirk Broadhurst
1
@ KirkBroadhurst: Wenn ja, dann stimmt etwas in Ihrer Firma nicht.
sbi
@sbi Ich denke, Sie werden feststellen, dass in vielen Unternehmen etwas nicht stimmt. Die Firma von OP schlägt vor, dass ein Nicht-Programmierer (aber er ist ein "kluger Kerl"!) Zu einer Rolle für die Anwendungsunterstützung versetzt wird. Ich weiß nicht, wo du arbeitest ... aber meiner Erfahrung nach ist das "die reale Welt". Wirklich gute, kompetente Programmierer sind die Ausnahme - wie in den meisten Branchen tun die meisten Leute gerade gut genug, um durchzukommen.
Kirk Broadhurst
1
@ KirkBroadhurst: Wo ich arbeite, ist meine Entscheidung. Ich bin aus Unternehmen geflohen, weil ich inkompetent bin, und ich würde fliehen, wenn keiner der Entwickler zumindest die meisten dieser Dinge weiß.
sbi
7

Ich würde sie nicht auf .NET starten. Ich habe diesen Fehler zu oft gemacht. Lassen Sie sich nicht von einem Arbeitgeber dazu zwingen, aus Zeitgründen einen inkompetenten Programmierer zu schaffen. .NET ist zwar eine schnelle Entwicklungsplattform, zwingt Entwickler jedoch nicht zum Erlernen der Programmierung. In C # alleine bleibt ein Entwickler in Bezug auf Referenztypen und Objektlebensdauer stecken, hinterlässt große Speicherverluste (ja, in .NET ist dies möglich) und weist ein schlechtes Design auf. Es wäre viel besser, sie in C oder C ++ zu starten (wahrscheinlich in C ++, da sie OOP-Konzepte verwenden müssen) und dann etwas zu sagen wie: "Jetzt wäre es nicht schön, wenn Ihr Speicher für Sie verwaltet würde, alles war Objekt - orientiert und du musstest dich nicht mit all diesen fiesen Zeigern auseinandersetzen? " Hier ist C # und JAVA. Wenn sie c ++ gemeistert haben, werden sie beide in ein oder zwei Wochen erobern. Ich empfehle Joels Regiment. Das war die Liste, die mir mein CS 101-Lehrer gegeben hat, und ich war viel besser, wenn ich die numerische Analyse getroffen habe. So können Sie auch früher herausfinden, ob der Kandidat den Senf schneidet oder nicht. Sobald Sie C und C ++ erhalten haben, werden Sie automatisch C # und Java verstehen, nachdem Sie die Einführung in die Bücher gelesen haben. Sie würden sie nicht nur verstehen, Sie würden sie auch besser verstehen als jemand, der c und c ++ nicht kennt.

Jonathan Henson
quelle
4
"Jetzt wäre es nicht schön, wenn dein Gedächtnis für dich verwaltet würde, alles objektorientiert wäre und du nicht mit all diesen fiesen Zeigern umgehen müsstest?" Du meinst, hier ist die STL. Warte, was Warum hast du mir nicht von Anfang an
beigebracht,
Nun, STL ist süß. Ich beziehe mich in Bezug auf die Windows-Programmierung eher auf die Windows-API. Die Windows-API wurde nicht für OOP entwickelt. Ich finde es eine großartige Übung, einen armen Kerl dazu zu bringen, eine Anwendung mit der API in c ++ zu schreiben. Ich lasse ihn / sie dann eine Window-Klasse schreiben und die Ereignisschleife so weiter einkapseln ... Sie wissen, machen Sie es objektorientiert. Dann, nachdem sie es endlich zum Laufen gebracht haben, zeige ich ihnen Windows Forms. Es zwingt sie wirklich dazu, sich mit einigen grundlegenden Konzepten zu befassen - wie eine Windows-Anwendung funktioniert -, die jemand nie bekommen würde, wenn er nur in .NET hineinspringt.
Jonathan Henson
4
warum sollte jemand die Windows-API mit einem Stock berühren. Ich meine, wir haben über die hWNDaus den 80ern gesprochen, oder? Natürlich verwenden Sie stattdessen eine nette Abstraktion (Welche Abstraktion ist eine völlig andere Debatte). Sicher zu wissen, wie es unter der Haube funktioniert, ist schön, aber Sie brauchen kein C # .NET für die Abstraktion
Raynos
2
Die Windows-API ist unglaublich. Jedenfalls benutze ich es nur als Lehrmittel. Zum Beispiel verstehen die Leute normalerweise nicht, wie Ereignisse in den Windows-Programmen magisch ausgelöst werden. Es ist hilfreich für sie, mit der Ereignisschleife herumspielen zu müssen. Darüber hinaus müssen Programmierer zumindest mit dem hWND vertraut sein, insbesondere wenn sie es mit Apis zu tun haben, die mit Grafiken herumalbern - so wie es Ihnen unter Unix schwer fällt, irgendetwas zu tun, ohne zu wissen, wie man eine XID verwendet. Wie auch immer, es zwingt sie zu lernen, wie ein Windows-Programm funktioniert. Sobald sie fertig sind, wissen sie auch, wie Windows.Forms funktioniert.
Jonathan Henson
Es muss nicht unbedingt ein Übergang zu C # sein, sondern nur zu .NET im Allgemeinen. Ich denke, @Joel hat einen guten Artikel über das Gesetz der undichten Abstraktionen, warum es für Programmierer oft gut ist, vor der Verwendung eines Frameworks unter die Haube zu schauen.
Jonathan Henson
6

Geben Sie ihnen etwas Einfaches, aber Nützliches zum Lösen. Lass sie ein bisschen herumfummeln und hilf ihnen, es aufzupolieren. Es gibt nichts Schöneres als eine kleine Leistung, um sie anzuspornen (obwohl sich jemand nicht für das Programmieren interessiert)

jschorr
quelle
6

Paar-Programmierung. Lassen Sie sich von ihnen beschatten, während Sie Ihren eigenen Code schreiben - jeden Code. Lassen Sie sie dann innerhalb von Stunden Ihren Code für Sie eingeben, während Sie ihnen sagen, was sie tun sollen, und drücken Sie bei Bedarf eine Taste für eine Taste. Beantworten Sie einige ihrer Fragen, aber nicht so sehr, dass Sie viel langsamer werden - lassen Sie sie einfach alles einwirken. Sie finden auch Ihre Tippfehler und mehr von Ihren Fehlern, als Sie vielleicht denken. Innerhalb weniger Tage werden sie in der Lage sein, zu navigieren und Ihnen mitzuteilen, welchen Code Sie für Aufgaben eingeben müssen, die denen ähneln, die sie zuvor gesehen haben.

Auf diese Weise habe ich innerhalb eines Monats viel von dem gelernt, was ich als Entwickler weiß, und habe einige andere neue Entwickler auf diese Weise unterrichtet, von denen einer nach einigen Monaten in der Lage war, mich als Hauptentwickler bei einem Startup zu übernehmen. Als wir anfingen zusammenzuarbeiten, hatte er noch nie eine einzige Codezeile geschrieben.

Spur
quelle
1
Ich denke, Pair Programming ist eine großartige Methode, um Anfänger in der Programmierung zu unterrichten, aber ich denke, Pair Programming kann immer problematisch sein. Ich denke, Anfänger brauchen etwas Zeit, um alleine zu lernen, wie man Probleme löst und Vertrauen in ihre Fähigkeiten aufbaut.
Helephant
Ja, bringen Sie sie mit der Paarprogrammierung in Schwung und geben Sie die einfachen Aufgaben - echte Aufgaben, an der Software, an der sie arbeiten sollen, in der Sprache, in der sie arbeiten sollen, mit echter Leistung. Überprüfen Sie und betreuen Sie alle ihre Arbeit und sie werden Fortschritte machen.
Thomas W
2

Gib ihm eine gute Idee (visuelle Studios, Express ist immer noch gut). Bringen Sie ihm die üblichen 60% der Syntax bei (lassen Sie Yield, Linq, Enums, Attribute usw. weg, unterrichten Sie Klassen, virtuell und überschreiben Sie sie). Verbringen Sie Zeit mit dem Debugger (insbesondere Callstack). Sagen Sie ihm dann, dass er "msdn functionanme" googeln soll, wenn er Hilfe benötigt, und das sollte ihn zu einem schnellen Start bringen.

Bringe ihm auch bei, niemals eine Ausnahme zu erwischen und zu schlucken. Sagen Sie ihm, er muss es erneut werfen oder protokollieren!

Bonus: Bringen Sie ihm bei, wie man JSON-Daten serialisiert, damit er problemlos in eine Datei lesen / schreiben kann. Eine Datenbank ist übertrieben und zu viel zu lernen, und Sie möchten nicht, dass er benutzerdefinierte Dateiformate schreibt, obwohl ich einen Eintrag pro Zeilentyp der Datei passieren lassen kann, um ein String-Array als akzeptabel zu speichern / laden.


quelle
1

Ich weiß, dass viele Leute über Sprachen und Bücher für diese Sprachen gesprochen haben. Ich unterscheide mich.

Beim Programmieren geht es darum, analytisch denken zu lernen. In erster Linie sollte die Person in der Lage sein, auf einem Blatt Papier zu überlegen, worin das Problem besteht. Sie müssen sie anleiten, damit sie die richtige Denkweise erhalten.

Als nächstes kommen die Grundlagen der Sprache. Machen Sie sich mit der Sprache Ihrer Wahl vertraut. Programmieren Sie ein Problem.

Nachdem dieser erste Schnitt beendet ist, lassen Sie sie die CS-Grundlagen und die Entwurfsmuster ausführen.

Lassen Sie sie nun das frühere Problem mit diesen neuen Konzepten neu programmieren.

Nomade
quelle
1

Beginnen Sie ihn mit den Grundlagen: Variablen, Schleifen, while-Schleifen, for-Schleifen, Arrays, bringen ihm die Grundlagen bei, drucken auf dem Bildschirm und führen einige einfache Berechnungen durch. Bewegen Sie sich in Methoden und grundlegende OOP, Dinge wie hier ist, wie man eine Klasse erstellt, zeigen Sie ihm, warum nicht nur das Wie.

Die Sprache spielt keine Rolle, aber wählen Sie etwas aus, das Sie kennen und das sehr abstrakt ist (Java, Python usw.), damit er sich nicht um Dinge wie Speicherverwaltung, Zeiger usw. kümmern muss Rekursion, Türme von Hanio oder rekursives Durchsuchen von Verzeichnissen.

Programmieren lernen ist eine gute kostenlose Ressource für die Ruby-Programmierung. Machen Sie es einfach, unterhaltsam und unterhaltsam.

Snow_Mac
quelle
1

Geben Sie ihm einige Herausforderungen und lassen Sie ihn lernen, wie er Ressourcen findet, um das Problem selbst zu lösen.

Wenn Sie ihm beibringen können, wie man Antworten findet und autark ist, lernt er natürlich, wie man gut programmiert. Kritisches Denken und Einfallsreichtum sind zwei Schlüsselkompetenzen für einen Programmierer.

Letztendlich wird Leidenschaft / Interesse definitiv ein Schlüsselfaktor dafür sein, wie erfolgreich sie sein werden, es schnell zu lernen. Wenn er "den Fehler" nicht hat oder nicht fängt, kann dies ein langsamer und / oder schmerzhafter Prozess sein. Wenn er den Fehler entdeckt, wird er spät aufstehen, außerhalb der Arbeitszeit und die Zeit seines Lebens haben.

Andy Fleming
quelle