Wie man einen Junior korrigiert, ihn aber ermutigt, für sich selbst zu denken? [geschlossen]

54

Ich leite ein kleines Team, in dem jeder weniger als ein Jahr Erfahrung in der Softwareentwicklung hat. Ich würde mich auf keinen Fall als Software-Guru bezeichnen, aber ich habe in den wenigen Jahren, in denen ich Software geschrieben habe, ein paar Dinge gelernt.

Wenn wir Code-Reviews durchführen, muss ich einiges lehren und Fehler korrigieren. Ich sage Dinge wie "Dies ist zu komplex und verworren, und hier ist der Grund" oder "Was halten Sie davon, diese Methode in eine separate Klasse zu verschieben?" Ich bin besonders vorsichtig zu kommunizieren, dass, wenn sie Fragen haben oder abweichende Meinungen, das in Ordnung ist und wir diskutieren müssen. Jedes Mal, wenn ich jemanden korrigiere, frage ich: "Was denkst du?" oder etwas ähnliches.

Sie widersprechen jedoch selten, wenn überhaupt, oder fragen nach dem Grund. Und in letzter Zeit habe ich offenkundigere Anzeichen dafür bemerkt, dass sie meinen Aussagen blindlings zustimmen und keine eigenen Meinungen bilden.

Ich brauche ein Team, das es lernt, Dinge autonom richtig zu machen und nicht nur Anweisungen zu befolgen. Wie korrigiert man einen Nachwuchsentwickler, ermutigt ihn aber trotzdem, selbst zu überlegen?

Bearbeiten: Hier ist ein Beispiel für eines dieser offensichtlichen Anzeichen, dass sie sich keine eigene Meinung bilden:

Ich: Ich mag Ihre Idee, eine Erweiterungsmethode zu erstellen, aber ich mag nicht, wie Sie ein großes komplexes Lambda als Parameter übergeben haben. Das Lambda zwingt andere, zu viel über die Implementierung der Methode zu wissen.

Junior (nach einem Missverständnis von mir): Ja, dem stimme ich voll und ganz zu. Wir sollten hier keine Erweiterungsmethoden verwenden, da sie andere Entwickler dazu zwingen, zu viel über die Implementierung zu wissen.

Es gab ein Missverständnis, und das wurde behoben. Aber es gab nicht einmal eine Unze Logik in seiner Aussage! Er dachte, er würde mir meine Logik zurückgeben und dachte, es würde Sinn machen, wenn er wirklich keine Ahnung hatte, warum er es sagte.

Phil
quelle
4
Ich würde versuchen, en.wikipedia.org/wiki/Socratic_method zu verwenden. Ich bin mir nicht sicher, ob dies nur mit der Programmierung zusammenhängt
jk.
10
Über das Schließen dieser Frage: Während dies möglicherweise nicht nur ein Aspekt der Programmierung ist, habe ich das Gefühl, dass dies etwas ist, mit dem viele Menschen konfrontiert sind. Das ist eine echte Frage. Ich stimme nachdrücklich dafür, es offen zu halten.
Dipan Mehta am
3
Vielleicht eine sachdienlichere Frage: "Wie korrigieren Sie Ihren Senior?"
William Pursell
2
@ WilliamPursell Schön. Ich würde es lieben, wenn sie mich korrigieren würden.
Phil

Antworten:

37

Kurze Antwort:

Engagieren Sie sie (stellen Sie das Rätsel in den Kopf), stärken Sie sie (vertrauen Sie ihren Antworten).


Es ist die Frage, die uns antreibt! - Matrix.

Nach meinen Beobachtungen haben Junioren im Allgemeinen ihre eigene Welt - ihre eigene eingeschränkte Sicht auf das Denken und teilweise ihre eigene Begeisterung / Favoriten / Meinungen über Dinge.

Es ist nichts Falsches daran, ihnen frontal mitzuteilen, dass Sie sich irren - aber das Beste ist, dass Sie sie zum Nachdenken bringen. Warum? Gibt es noch andere Möglichkeiten? Gibt es bessere Möglichkeiten, dasselbe zu tun? Eine der Anekdoten, die ich immer benutze, ist: "Gib mir drei Lösungen (für dieses Problem)!"

Wenn sie über diese Lösungen nachdenken, beginnen sie, viele Probleme zu erkennen. Sie brauchen etwas Zeit, aber im Laufe der Zeit neigen sie dazu, die Grenzen und Mängel ihres Denkens zu erkennen. Sie sehen das eher als "Ich habe nicht daran gedacht!" Das ist viel besser, als mit dem Gefühl nach Hause zu gehen, "ich habe mich geirrt!" oder noch schlimmer "Mir wurde gesagt / bewiesen, dass ich falsch lag, auch wenn ich gültige Standpunkte hatte" .

Im Allgemeinen neigen dazu , sehr junge Kinder geschickter im Zusammenhang zu technischen Fragen (wie das Designmuster funktioniert besser!) Über Prozess Probleme, aber im Laufe der Zeit , wenn Sie coachen sie, es funktioniert.


Sie widersprechen jedoch selten, wenn überhaupt, oder fragen nach dem Grund. Und in letzter Zeit habe ich offenkundigere Anzeichen dafür bemerkt, dass sie meinen Aussagen blindlings zustimmen und keine eigenen Meinungen bilden.

Dies ist im Allgemeinen ein Ergebnis , das Sie tun ihre Vorschläge nehmen , aber später , sie außer Kraft setzen und sie sind ebenso nicht überzeugt über Ihre Ansichten; Nur weil du älter bist, meiden sie einen Kampf!

Das Beste, was ich von einem meiner früheren Chefs gelernt habe: Er wird die Teammitglieder bitten, zuerst zu debattieren (sie fühlen sich hier ziemlich gleich), und hoffentlich würde er, nachdem alle Argumente erschöpft sind, den Raum mit nur einer Frage betreten - "Was war" die Punkte der Meinungsverschiedenheit? " - Der Punkt ist, dass die Leute immer gerne an Debatten und Diskussionen teilnehmen, aber wenn ihre (gültigen) Punkte das nächste Mal nicht aufgegriffen werden, ist es ihrer Meinung nach nicht wert, an Diskussionen teilzunehmen.

Nicht nur in Bezug auf Software, sondern überall werden es letztendlich nur die fähigsten Teammitglieder wagen, zu antworten, geschweige denn das System in Frage zu stellen.

Dipan Mehta
quelle
1
+1 - Ich mochte besonders "Dies ist im Allgemeinen ein Ergebnis, dass Sie ihre Vorschläge annehmen, sie aber später außer Kraft setzen, und sie sind gleichermaßen nicht von Ihren Ansichten überzeugt; nur weil Sie älter sind, meiden sie den Kampf!" so fühle ich mich gerade.
Jetti
1
Ja, ich war dort. Ihre Bedenken / Probleme werden immer mehr ignoriert, sodass Sie sich am Ende nicht die Mühe machen, daran teilzunehmen, und dann auf die Uhr schauen - darauf warten, dass der Tag vorüber ist. Chefs: Seien Sie sehr vorsichtig, dass Sie den Erfolg fördern und anerkennen, und weisen Sie nicht nur auf Fehler hin!
Django Reinhardt
26

Wenn Sie möchten, dass Ihre Junioren selbst überlegen, korrigieren Sie sie nicht: Lassen Sie sie sich selbst korrigieren .

Anstatt ihnen zu sagen, was Ihrer Meinung nach an ihrer Lösung falsch ist, stellen Sie ihnen relevante Fragen. In Ihrem Beispiel könnten Sie sie fragen, was jemand mit der Erweiterungsmethode wissen muss, um das Lambda zu erstellen. Stellen Sie so viele Fragen, bis sie vermuten, dass es sich um ein Problem handelt. Auf diese Weise wissen Sie, dass sie verstanden haben, warum ihre Lösung ein Problem sein könnte, und auch, dass sie mit größerer Wahrscheinlichkeit daraus lernen. Wenn Sie ihnen einfach sagen, dass ihre Lösung falsch ist, ist dies eine externe Beurteilung und wird leicht ignoriert. Wenn sie selbst zur Erkenntnis kommen (mit ein wenig Aufforderung), werden sie erkennen, wie fundiert es ist, und viel wahrscheinlicher, aus ihrem Fehler zu lernen.

Dies gibt Ihren Junioren außerdem die Möglichkeit, ihr Design zu verteidigen. Vielleicht haben sie über das Problem nachgedacht und eine gute Begründung, die Ihre Bedenken berücksichtigt, sodass Sie keine Korrekturen vornehmen müssen. Dies verringert die (jedoch unbeabsichtigte) Wahrnehmung, dass Sie von Führungskräften geleitet werden.

Scott
quelle
7

Da Sie mehrere Nachwuchsentwickler haben, führen Sie Codeüberprüfungen als Gruppe durch, nicht als eine 1.

Öffnen Sie die Gruppe mit der Frage "Wie könnte das Problem sonst gelöst werden?" Und lassen Sie die anderen Junior-Entwickler zuerst ihre Implementierungen vorschlagen. Fügen Sie Ihre Implementierung erst hinzu, nachdem die anderen Teammitglieder gesprochen haben und wenn keiner etwas Ähnliches wie Ihre Idee vorgeschlagen hat.

Besprechen Sie anschließend am Runden Tisch die relativen Vor- und Nachteile verschiedener Implementierungen, um die Junior-Entwickler bei der Auswahl der besten Implementierung zu unterstützen, ohne zu wissen, was es ist.

Als Vertrauensbildner für die Junior-Entwickler könnten Sie mit einigen Fällen beginnen, in denen sie die Ihrer Meinung nach beste Option ausgewählt haben, und Ihre Alternative zu einem Strohmann machen, der einen halb offensichtlichen Fehler aufweist, und die Diskussion darauf lenken, warum die ursprüngliche Implementierung am besten ist.

Dan Neely
quelle
3
Ich bin mir nicht sicher, ob das die beste Idee ist. Es ist viel besser, die Leute ihre eigenen Fehler finden zu lassen, als eine Gruppe öffentlich zu fragen, warum ihr Code nicht gut ist.
Sixtyfootersdude
1
@sixtyfootersdude Ich denke, Code-Reviews sind effektiver, wenn sie als Gruppe durchgeführt werden, da sie eine breitere Wissensverbreitung im gesamten Team fördern.
Dan Neely
5

Als ich anfing, in einem Programmierjob zu arbeiten, habe ich genau dasselbe getan, was Sie beschrieben haben: Wenn ich von etwas erzählte, das ich tun könnte, würde ich immer zustimmen. Das lag hauptsächlich daran, dass ich nicht genug Erfahrung hatte, um etwas anderes zu sagen.

Was mir die Möglichkeit gab, Methoden und Ideen tatsächlich zu diskutieren, war das Lernen aus der Erfahrung sowie das Lesen über verschiedene Ansätze und neue Technologien. Damit Ihr Team selbst überlegen kann, muss es wissen, welche Probleme sich aus "übermäßig komplexem und verschlungenem" Code ergeben können, und die einzige Möglichkeit, dies herauszufinden, ist die Erfahrung.

Eine gute Möglichkeit, das individuelle Denken zu erleichtern, besteht darin, sich mit Programmierwebsites wie Stack Overflow oder Programmers SE zu befassen. Ich weiß, dass diese mir geholfen haben, etwas über die verschiedenen Techniken zu lernen, die es gab, und es mir ermöglichten, Gespräche mit hochrangigen Teammitgliedern zu führen, anstatt ihnen blind zuzustimmen.

Der Punkt ist, dass Vorschläge älterer Mitglieder ohne Erfahrung immer richtig klingen.

Ivan
quelle
Großartige Idee! Ich könnte auch hinzufügen, dass einer meiner Mentoren mir einige zugewiesene Lesungen gegeben hat (während ich bei coop war), die mir wirklich geholfen haben, meinen Geist zu erweitern. Ich habe seitdem den größten Teil des pragmatischen Programmierers (Buch) und jeden Artikel auf Joels Website gelesen.
Sixtyfootersdude
5

Die Interaktion in Ihrem Beitrag zeigt, wie wichtig es ist, fast alles zu lehren: Bitten Sie die Mitarbeiter , zu erklären, was sie Ihrer Meinung nach gesagt haben , und hören Sie der Antwort aufmerksam zu: Sie erfahren genau, was korrigiert werden muss.

Ich habe diesen Trick vor 25 Jahren schamlos von meinem Mathe-Lehrer kopiert und seitdem ist er mir nicht entgangen. Ich habe es im Unterricht während meiner kurzen Zeit als Lehrassistentin verwendet, bei der Arbeit, wenn ich über Software-Design sprach, und mit meiner Achtjährigen, wenn ich über ihre Schulaufgaben sprach.

Natürlich können Sie nicht immer direkt von ihnen verlangen, dass sie wiederholen, was Sie gerade gesagt haben. Deshalb müssen Sie Ihre Strategie anpassen. Hier ist zum Beispiel, wie ich Ihre Follow-up-Aussage aus dem OP als "Sondierungsfrage" umformulieren würde:

Ich mag Ihre Idee, eine Erweiterungsmethode zu erstellen, aber ich mag nicht, wie Sie ein großes komplexes Lambda als Parameter übergeben haben. Sehen Sie, wie dieses komplexe Lambda andere dazu zwingt, zu viel über die Implementierung der Methode zu wissen ?

Diese Frage kann nicht richtig beantwortet werden, ohne das Problem zu verstehen, das Sie hervorheben möchten. Ich stellte fest, dass das Beenden meiner Erklärungen mit einer Frage, die eine Analyse des gerade Gesagten erfordert, den Lernprozess beschleunigt und mir Feedback gibt, dass ich Korrekturen vornehmen muss.

dasblinkenlight
quelle
5

Wenn die Leute nicht sagen, was Sie wollen, bedeutet dies normalerweise, dass Sie an Ihrem Zuhören arbeiten müssen. Zuhören bedeutet, die Gründe für ihre Gestaltung zu hören, bevor ein Urteil gefällt wird. Es bedeutet nicht nur, ihnen zu sagen, dass es in Ordnung ist, zu widersprechen, sondern es zu beweisen , indem man ehrlich überlegt, was sie zu sagen haben, und sie nicht nur korrigiert. Suchen Sie nach den guten Dingen über ihre Lösung und ändern Sie Ihre Lösung, um diese Dinge zu integrieren.

Sie müssen auch mit gutem Beispiel vorangehen. Ich meine nicht, indem ich überaus tollen Code schreibe, sondern indem ich sie nach ihrer Meinung zu deinen eigenen Designs frage. Warten Sie nicht auf spätere Codeüberprüfungen, sondern arbeiten Sie auf dem gesamten Weg zusammen. Sagen Sie Dinge wie: "Meine Benutzeroberfläche scheint zu komplex zu sein, aber ich bin mir nicht sicher, wie ich sie am besten vereinfachen kann." Und geben Sie ihnen Zeit, um zu antworten, ohne sie zuerst auf Ihre eigenen Ideen einzulassen.

Karl Bielefeldt
quelle
4

Als ich mich damit auseinandersetzen musste, habe ich (ehrlich) Dinge gesagt wie:

Weißt du, das ist eine wirklich kreative Lösung, an die ich nie gedacht hätte. Wie skaliert es? / Gibt es Ihrer Meinung nach einen Ansatz, der konzeptionell einfacher ist, um die Entwicklung zu beschleunigen oder die Wartung zu vereinfachen? / Leider passt er nicht wirklich zur restlichen Architektur des Projekts./Was wird passieren? sieht die konfiguration so aus?

Dies hat in der Regel ausgereicht, um den Menschen eine neue Richtung zu weisen.

James McLeod
quelle
2

Verantwortung ist eine Sache, die ihnen helfen kann.

Ich habe in der Vergangenheit ein oder zwei Teams geführt, und eines der Dinge, die Junioren zum Leuchten gebracht haben, war die Last der persönlichen Verantwortung. Wenn jemand merkt, dass seine Handlungen ihn irgendwann in Mitleidenschaft ziehen, legt er normalerweise ein bisschen mehr von sich selbst in das, was er tut. Ganz zu schweigen davon, dass die guten Ergebnisse viel befriedigender sind, wenn sie ihre Arbeit fühlen.

g.salakirov
quelle
1

Ich würde mir keine Sorgen darüber machen, dass sie dir blind folgen. Das sollten sie als Junioren tun. Die Sache ist, dass sie wahrscheinlich die wahren Gründe für die von Ihnen in Code-Überprüfungen angesprochenen Elemente nicht verstehen werden, bis sie weg sind und an einem anderen Ort mit schrecklichen Software-Entwicklern, schrecklichem Management und schrecklichem Code arbeiten.

Bis dahin haben sie aus Gewohnheit gute Praktiken gelernt und müssen die Codierungs- und Entwurfsfehler durchstehen, die andere machen, und sie sind gezwungen, an schlecht entworfener und implementierter Software zu arbeiten.

Dies wird irgendwann in ihrer Karriere unvermeidlich sein. Sie leisten ihnen einen großartigen Dienst, indem Sie sie an gute Codierungsstandards und -praktiken gewöhnen. Leider mussten die meisten von uns auf die harte Tour lernen.

maple_shaft
quelle
1

Anhand des gegebenen Beispiels würde ich sagen, dass es wahrscheinlich der beste Weg ist, Ihre Kommentare mit Fragen zu beantworten. Wenn Sie eine Frage zusammen mit Ihren Kommentaren stellen, müssen sie nicht einfach zustimmen oder nicht zustimmen, sondern müssen zumindest darüber nachdenken, wie sie etwas implementieren können.

ZB "Ich mag Ihre Idee, eine Erweiterungsmethode zu erstellen, aber ich mag nicht, wie Sie ein großes komplexes Lambda als Parameter übergeben haben. Das Lambda zwingt andere dazu, zu viel über die Implementierung der Methode zu wissen. Können Sie sich einen besseren Weg vorstellen implementieren Sie diese Erweiterungsmethode, die nicht so viele Informationen verfügbar macht? "

Dies ermöglicht es ihnen, die Fehler in dem zu sehen, was sie entwickeln, während sie gleichzeitig die Möglichkeit haben, das in die Anwendung eingeführte Problem zu lösen.

SpartanDonut
quelle