Geeigneter Wortschatz, wenn Sie Programmieranfängern helfen

9

Ich finde mich relativ oft dabei, Programmieranfängern zu helfen. Erklären, warum ihr Code nicht funktioniert, wenn sie fragen, Lösungen vorschlagen und dergleichen. Die Leute, denen ich helfe, haben eine formale Ausbildung in Programmierung in einem Modul für das erste Studienjahr in Java, aber ich habe das Gefühl, dass ich nicht sehr gut mit ihnen kommunizieren kann.

Zum Beispiel: Man könnte eine Funktion schreiben, aber nicht verstehen, warum sie nicht ausgeführt wird, ohne zu bemerken, dass sie vergessen haben, sie aufzurufen. Wenn ich Sätze wie benutze "(make a) call (to) the function/it"und "pass it the.."ich leere Blicke bekomme.

Mein normaler Prozess wäre dann, eine Stelle in ihrem Code zu finden, an der sie eine Funktion aus der Sprache aufrufen, und ihnen mitzuteilen, dass sie ihre eigenen Funktionen auf die gleiche Weise aufrufen können, wie sie diese andere Funktion aufgerufen haben. Manchmal sieht sogar das ausdruckslos aus.

Gibt es andere Vokabeln, die besser geeignet sind (besser für?), Programmieranfängern zu helfen? Oder ist das keine Frage der Kommunikation?

Andy Hunt
quelle
5
Benutzer von Tabellenkalkulationen wissen, wie eine Funktion aufgerufen wird. Viele können ihre eigenen schreiben. Hier stimmt etwas grundlegend nicht.
JeffO
@ JeffO Ich hatte das Gefühl, dass etwas nicht stimmte, wollte aber diesem Modul und diesen Leuten den Vorteil des Zweifels geben
Andy Hunt
7
Warte was? Programmierer, mit denen Sie arbeiten, wissen nicht, was es bedeutet, eine Funktion aufzurufen und Argumente zu übergeben? Das ist so einfach wie möglich, ohne Bilder zu zeichnen und Metaphern mit Katzen und Hunden zu verwenden. Dies geht über ein Kommunikationsproblem hinaus und kann leider ein Problem mit mangelndem Wissen sein. Ich habe Ihre Frage noch einmal gelesen und es scheint, als hätten sie im Grunde genommen einen Einführungskurs belegt, und das war's?
wkl
3
@AndyBursh: Wie haben solche Schüler es ins zweite Jahr geschafft? Ich hoffe, sie bestehen die Prüfungen nicht und wählen einen Job außerhalb der Softwareentwicklung.
Doc Brown
3
Vielleicht würden Sockenpuppen helfen
MattDavey

Antworten:

15

Sie müssen irgendwann die richtigen Begriffe lernen, je früher desto besser.

Verwenden Sie sie richtig und erklären Sie sie, wenn Sie einen leeren Blick bekommen. Versuchen Sie einfach, die richtigen Signale zu senden, dass es in Ordnung ist, nach etwas zu fragen, das sie nicht verstehen - die einzigen dummen Fragen sind die, die Sie nicht stellen.

tdammers
quelle
2
Ich wollte fast genau die gleiche Antwort posten, die Ihre geladen hat. :) +1
Tom Squires
Bringen Sie Erklärungen nicht auf ihr Niveau, sondern auf ihr Niveau.
Bent
2

Im Algemeinen

Wenn eine Person Sie nicht versteht, haben Sie zwei Alternativen:

  1. Passen Sie den Wortschatz an das an, was die Person weiß oder nicht.

  2. Erklären Sie der Person die Begriffe, die sie nicht versteht.

Der erste Fall funktioniert gut, wenn die Person das technische Vokabular bereits recht gut kennt, aber nicht genug oder nicht in Ihrer Domäne.

Beispielsweise können Sie den Begriff Methode in C # oder Java verwenden, und die Person, die hauptsächlich mit einer anderen Sprache arbeitet, würde diesen Begriff nicht verstehen. Sie werden dann erklären, dass sich die Methode in C # oder Java auf das bezieht, was wir normalerweise als Funktion bezeichnen (zum Beispiel in C), und dass es in C # oder Java keine Funktion gibt . In PHP existieren beispielsweise sowohl Methoden als auch Funktionen und haben eine unterschiedliche Bedeutung . Wenn der Unterschied für die Person zu schmerzhaft ist, werden Sie der Einfachheit halber über Funktionen sprechen .

In Ihrem genauen Fall können Sie kaum den ersten auswählen: "Rufen Sie die Funktion auf" kann nicht einfacher umformuliert werden. Ein Anruf ist ein Anruf. Sie können dies nicht mehr vereinfachen.

Dies bedeutet, dass Sie den zweiten Weg wählen müssen: Erklären Sie der Person jeden Fachbegriff.

  1. Zeigen Sie die Person entweder auf ein Wörterbuch oder auf Wikipedia, was für grundlegende Konzepte und Begriffe sehr gut geeignet ist.

    Ich würde dies für häufig verwendete Begriffe wählen . Zum Beispiel möchte ich die Person lieber einladen, Wikipedia zu lesen, um zu verstehen, was Polymorphismus ist oder was Kovarianz und Kontravarianz sind. Diese Begriffe sind bereits sehr gut erklärt, sodass Sie das Rad hier nicht neu erfinden müssen.

  2. Oder erklären Sie in Ihren eigenen Worten .

    Ich würde dies für Begriffe wählen , die kontextspezifisch sind und / oder eine breite Palette von Definitionen akzeptieren . Zum Beispiel ist Wikipedia nicht sehr hilfreich, um die Vision von Microsoft für Cloud Computing zu verstehen, und ich würde mir lieber erklären, was Cloud ist, wenn jemand an einer Windows Azure-Anwendung arbeitet.

In Ihrem speziellen Fall

Den Leuten, mit denen Sie sprechen, fehlen die grundlegendsten Konzepte und Begriffe, die beim Programmieren verwendet werden. Sie können nicht weitermachen, ohne dieses Kernvokabular zu lernen , weil sie überhaupt nicht kommunizieren können : Sie können keine Bücher über Programmierung oder Blogs lesen, sie können ihren Kollegen nicht zuhören und sie können nicht einmal wirklich Fragen stellen Stack Exchange-Websites, da niemand verstehen wird, was sie fragen.

In Ihrem Fall würde ich, anstatt nach einem geeigneten Wortschatz zu suchen, einige Tage oder Wochen damit verbringen, ihnen einige grundlegende Programmierkonzepte und die häufig verwendeten Begriffe beizubringen . Nach einigen Tagen können Sie mit ihnen sprechen, ohne ständig "Bilder zeichnen und Metaphern mit Katzen und Hunden verwenden" zu müssen .

Arseni Mourzenko
quelle
1

Beginnen Sie anstelle von Funktionen mit Unterprogrammen . Sagen Sie ihnen, dass ein Programm nur eine Liste von Anweisungen ist, ein Rezept , um dem Computer zu sagen, wie er etwas tun soll. Und dass es eine Anweisung nach der anderen ausgeführt wird (mit der Möglichkeit, einige Schritte parallel auszuführen, aber dazu später mehr).

Einige Aufgaben sind ziemlich häufig und wiederholen sich, daher wäre es schrecklich, wenn wir sie immer wieder aufschreiben müssten, also schreiben wir sie nur einmal und machen daraus ein "kleineres Programm" - eine Unterroutine , die von wiederverwendet werden kann andere Teile des Programms. Um es mehr als einmal ausführen zu können, geben wir ihm in unserem Programm einen aussagekräftigen Namen . Und dann können wir diesen Namen verwenden , wenn wir dieses „kleines Programm“ als Teil eines größeren ausführen möchten, rufen sie mit diesem Namen.

Das Aufrufen einer Unterroutine ist wie das Beschwören eines Dämons, der weiß, wie man diese Aufgabe ausführt, mit dem Namen dieses Dämons. Wenn wir also diese bestimmte Aufgabe in unserem Programm erledigen möchten, schreiben wir "Ruf den Dämon namens Argoth an", und der Dämon taucht auf und erledigt die Aufgabe für uns, wie wir ihn angewiesen haben, und geht dann weg und wir können unsere Aufgabe fortsetzen Job.

Manchmal benötigt der Dämon zusätzliche Informationen, ohne die er nicht entscheiden kann, welche der Aufgaben er ausführen soll oder was wir wirklich von ihm wollen. Wenn der Dämon beispielsweise eine Burg bauen soll, muss er möglicherweise wissen, wo er sie bauen soll oder wie groß sie sind usw. Dies sind die Argumente, die an den Dämon weitergegeben werden ... Ich meine, das Unterprogramm, das jetzt wird parametrisiert .

Parameter sind die Informationen, die fehlen, aber für die Ausführung der Aufgabe erforderlich sind. Sie ändern ein wenig, was das Unterprogramm kann. Sie sind wie leere Slots im Rezept, die ausgefüllt werden müssen, bevor wir sie ausführen können.

Argumente sind andererseits die tatsächlichen Informationen (Werte), die wir für diese Parameter liefern.

Bei der parallelen Ausführung können wir uns das so vorstellen: Es gibt immer jemanden (oder etwas ), der das Programm ausführt (die Liste der Anweisungen). Es ist entweder ein anderer Mensch (wussten Sie, dass "Computer" einst ein Name für eine Person war, die die Berechnung durchführte?) Oder eine Maschine. Ein Programm ist nur eine Liste von Anweisungen, es funktioniert nicht alleine. Es muss jemanden oder etwas geben, der den Rechenprozess durchführt(Führen Sie diese Aktionen aus der Liste aus). Und manchmal können diese Aktionen parallel ausgeführt werden - wir können die Kopien der Liste an mehrere Personen verteilen und jede von ihnen eine andere Reihe von Aufgaben als die Liste ausführen lassen, solange sie sich nicht gegenseitig unterbrechen oder nicht. Ich muss nicht auf die Ergebnisse der Arbeit eines anderen warten. Das ist Multithreading für dich;)

Was den Unterschied zwischen Funktionen und Unterprogrammen (auch Prozeduren genannt ) betrifft , besteht der übliche Unterschied darin, dass eine Funktion aufgerufen wird, um einen bestimmten Wert zu berechnen, den sie als Ergebnis ihrer Ausführung zurückgibt, während Prozeduren nur zum Spaß ausgeführt werden;) AKA für ihre "Nebenwirkungen" - nur für die Operationen aus der Liste ausgeführt.

Wenn das Aufrufen einer Prozedur oder Funktion zunächst Probleme verursacht, können Sie einen anderen Begriff verwenden, der früher beliebt war: Springen . Man kann in eine Unterroutine springen , was bedeutet, dass Sie aufhören, das auszuführen, was Sie gerade tun, und zu einer anderen Stelle auf der Liste (oder einer anderen Liste) - der Unterroutine - "springen", um ihre Aufgaben auszuführen. Wenn Sie fertig sind, "springen" Sie zurück - das heißt, Sie kehren zu dem Ort zurück, an dem Sie unterbrochen wurden, damit Sie mit Ihrer vorherigen Aufgabe fortfahren können. Der Unterschied zwischen Rufen und Springen besteht darin, dass Sie jetzt der Dämon sind.

Wie bei Methoden erwähnt hier von jemandem, oder die Tatsache , dass einige Sprachen „Funktionen nicht hat, nur Methoden“ - das nicht ganz richtig ist, weil Methoden sind Funktionen! - eine besondere Art von ihnen: Sie sind Funktionen, mit denen einige in einem Objekt gekapselte Informationen abgerufen oder bearbeitet werden. Sie sind eine "Methode zur Bearbeitung dieser Daten". Der Name stammt von einem objektorientierten Paradigma, in dem Daten in Objekten eingeschlossen sind und nicht direkt betrieben werden können, sondern nur durch spezielle Funktionen, die als "Methoden" bezeichnet werden.

Eine Methode ist auf eine bestimmte andere Weise etwas Besonderes: Sie muss wissen, auf welchem ​​bestimmten Objekt sie arbeiten / aufgerufen werden soll (das "this" -Objekt). Aus diesem Grund werden Methoden normalerweise mit einem zusätzlichen versteckten Parameter verschönert, der Informationen über das Objekt speichert, für das es aufgerufen wurde (den "this" -Zeiger). Dies erschwert die Art und Weise, wie die Funktion aufgerufen wird, aber es ist ein "Implementierungsdetail", das ein Programmierer nicht viel stören sollte, solange er weiß, was er tut.

BarbaraKwarc
quelle