Frage:
Was kann ich tun, wenn ich den Code einer Person konstruktiv kritisieren muss, um den Schlag zu mildern und gleichzeitig die Wirkung zu steigern?
c36
2020-02-23 13:49:15 UTC
view on stackexchange narkive permalink

Ein Junior-Entwickler hatte einige Probleme mit einem Projekt. Als die Frist näher rückte, ohne dass eine Lösung in Sicht war, bat mich mein Manager um Hilfe. Ich bin ein mittelständischer Entwickler im Team.

Nachdem ich den Überblick erhalten hatte, stellte ich fest, dass es drei Hauptprobleme gab:

  1. Hauptprobleme in der Logik
  2. Mangelndes Wissen zum Verfolgen Zurück zur Hauptursache
  3. Sehr dunkle Namenskonventionen (dies war aufgrund der Art des Projekts sehr problematisch).
  4. ol>

    Ich half ihm bei der Lösung der Probleme. Aber b / c der Frist musste ich sehr "auf den Punkt" sein und hatte nicht genug Zeit, um das "Warum" für alles zu besprechen, was ich & empfahl, um ihm zu helfen. Wir haben die Frist rechtzeitig erreicht, und jetzt möchte ich zurückgehen. & möchte eine 1: 1-Post-Mortem-Codeüberprüfung durchführen und ihm ein Crashkurs-Tutorial zu den drei oben genannten Themen geben.

    Ich habe eine gute Beziehung zu ihm, aber diese Codeüberprüfung wird die von ihm erstellte Lösung buchstäblich zerreißen. Ich mache mir aus mehreren Gründen Sorgen darüber:

  • Er spricht sehr leise. & scheint sich manchmal Dinge zu Herzen zu nehmen.
  • Er ist erst seit 6 Monaten im Unternehmen und es ist sein erster Job außerhalb des College. Ich habe den Eindruck bekommen, dass er von unserem Chef genau unter die Lupe genommen wird, was seine Leistung betrifft. Eine strenge Codeüberprüfung zu diesem Zeitpunkt könnte für ihn zu schwierig sein (obwohl dies ihm sicherlich helfen sollte, die Leistung zu verbessern!).
  • Er scheint während Überprüfungen / Schulungen keine guten Notizen zu machen, und er auch ist nicht sehr proaktiv beim Stellen von Fragen, wenn er bei Aufgaben hängen bleibt. Daher bin ich mir nicht so sicher, wie viel diese Codeüberprüfung wirklich in seinem Gehirn "stecken" wird.

Die wichtigsten Fragen lauten also:

  1. Ich werde natürlich darauf achten, alles zu betonen, was er richtig gemacht hat. & wird so freundlich wie möglich sprechen, aber was kann ich noch tun, um den Schlag zu mildern, wenn ich die Wäscheliste der Dinge durchführe, die er im Code falsch gemacht hat ?
  2. Was sind einige Methoden, um die Wirkung dieser Schulung / Überprüfung zu steigern, da seine Persönlichkeit & keine Notizen macht? Ich möchte wirklich, dass er im Unternehmen erfolgreich ist, aber nachdem ich seine Arbeit gesehen habe Ich glaube nicht, dass er Erfolg haben wird, wenn er sich nicht wirklich bemüht, die Best Practices der &-Methoden zu erlernen, die alle anderen im Team anwenden. Ein Code-Review-Meeting reicht wahrscheinlich nicht aus.
  3. ol>

    Eine Randnotiz - Aufgrund der Art unserer Arbeit (ich lasse Details aus Datenschutzgründen weg) gibt es keine Option für automatisierte Codeüberprüfungen, bevor der Code auf "Produktion" verschoben wird. Dies macht es schwieriger, die oben beschriebenen Arten von Problemen zu erfassen.

    Außerdem habe ich diese & diese Frage gelesen, aber den Schwerpunkt meiner Frage ist ziemlich anders als beide.

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/104840/discussion-on-question-by-c36-when-i-need-to-constructively-criticize-someones).
Ich verstehe Ihre Ziele nicht wirklich - Sie sagen, dass Sie "den Schlag mildern" wollen, aber auch, dass Sie "die Wirkung steigern" wollen?Dies scheinen mir eindeutig gegensätzliche Anforderungen zu sein.
@MikeBrockington Ich denke, das OP verwendet "Impact" im Sinne von "Der Junior nimmt Feedback an Bord und verbessert sich so weit wie möglich", anstatt "Der Junior fühlt sich von etwas getroffen".
Warum sagen Sie "die Wirkung erhöhen"?Vielleicht hilft es, zunächst nicht davon auszugehen, dass sie Sie ignorieren (wegen fehlender Auswirkungen).Auf der anderen Seite könnten sie es genauso gut tun - ich würde in diesem Fall einen anderen Mentee auswählen.
Eine Art Code-Überprüfungssoftware ist hier sehr hilfreich.Viele können Überprüfungen nach dem Festschreiben durchführen, und wenn die Kommentare aufgeschrieben werden, ist es weniger wahrscheinlich, dass jemand etwas vergisst.
Ich würde Ihnen raten, Ihre Bemerkungen in zwei Teile zu unterteilen: 1) Was hat er falsch gemacht und er hätte es selbst herausfinden können?2) Was sind Dinge, die verbessert werden können, von denen ich aber nicht erwarten kann, dass er davon weiß?Lassen Sie mich einige Beispiele nennen: 1) Sie zeigen ihm einen Testfall, der nicht funktioniert.Das hätte er selbst wissen müssen.2) Er hat ein Array von 100 Einträgen erstellt.Sie erklären ihm, dass der Code geändert werden muss, wenn der Kunde 101 Einträge wünscht, und dass er nicht fest codiert werden sollte.Das ist typisch, woran Junioren nicht denken.
Fügen Sie wann immer und wo immer möglich positiven Humor hinzu.
Dies sollte wahrscheinlich eine Antwort sein: Stellen Sie Fragen.Gehen Sie beim Code nicht richtig, der angibt, dass er falsch ist.Fragen Sie, warum bestimmte Entscheidungen getroffen wurden.Fragen Sie, welche anderen Überlegungen ins Spiel gebracht wurden.Wenn Sie etwas vorschlagen, sagen Sie nicht einfach "Sie sollten {X} tun."Versuchen Sie etwas wie "Was denken Sie, wäre die Auswirkung, wenn wir {X} versuchen würden?".Lassen Sie die Codeüberprüfung die Erzählung der Entwicklung erzählen.Durch das Stellen von Fragen wird der Nachwuchsentwickler ermutigt, die Probleme zu lösen und zu verstehen, und diese Art der Gedankengenese führt dazu, dass sie an die richtigen Methoden gebunden werden.
Sechszehn antworten:
Player One
2020-02-23 14:12:00 UTC
view on stackexchange narkive permalink

Es gibt einige Dinge, die mir beim Empfang von Codeüberprüfungen sehr geholfen haben:

Sagen Sie nicht "Sie" oder Variationen davon ("Ihr Code"). usw.)

Sie zerreißen nicht "seinen" Code oder "seine" Lösung. Es ist unser Code oder diese Lösung, und wir müssen etwas dagegen tun.

Sobald jemand anfängt Wenn Sie über "Ihren" Code sprechen, besteht die natürliche Reaktion vieler Menschen darin, defensiv oder sogar kämpferisch zu werden - insbesondere, wenn sie sich zunächst nicht sehr sicher fühlen. Wenn Sie vermeiden, dem Junior-Entwickler das Eigentum an dem Code zu implizieren, fühlen sie sich weniger angegriffen. Schließlich besitzt das Unternehmen den Code.

Verwenden Sie stattdessen eine Sprache, die deutlich macht, dass das Team zusammenarbeitet, um sowohl die Qualität des Produkts als auch die Fähigkeiten der Teammitglieder zu verbessern.

Verwenden Sie eine positive Sprache und vermeiden Sie es, so viel wie möglich negativ zu sein.

Zum Beispiel, anstatt darüber zu sprechen, warum die vom Junior gewählte Namenskonvention lautet schlecht, sprechen Sie über die Vorteile der Konvention, die Sie empfehlen.

Ähnlich wie bei logischen Problemen, anstatt ewig darüber zu reden, wie schlecht die erste Lösung ist, berühren Sie schnell die Hauptprobleme, aber geben Sie die Mehrheit aus der Zeit, um einen besseren Weg zu erklären, und die Vorteile, die mit dem zweiten Weg verbunden sind.

Kommentare sind nicht für eine ausführliche Diskussion gedacht.Diese Konversation wurde [in den Chat verschoben] (https://chat.stackexchange.com/rooms/104846/discussion-on-answer-by-player-one-when-i-need-to-constructively-criticize-someo).
Ich würde hinzufügen, wenn Sie positive Punkte finden, würde ich sie dem Autor zuschreiben, der in diesem Fall der Junior-Entwickler wäre.Anstatt zu sagen "wir haben hier guten Code geschrieben".
@Monstar Ich glaube, ich bleibe normalerweise immer noch bei etwas wie "Ich mag das wirklich" oder "Danke, dass Sie diese technischen Schulden beseitigt haben", aber ja, offensichtlich versuchen Sie nicht, Kredite zu teilen.
Obwohl dies für die Frage nicht ganz relevant ist, dachte ich, ich könnte eine Idee hinzufügen, da Sie sich anscheinend um diesen Entwickler und Ihr Team kümmern.Vielleicht solltest du versuchen, sie ein bisschen zu betreuen?Berühren Sie die Basis einmal am Tag oder so, senden Sie ihnen gelegentlich einen Artikel über bewährte Verfahren, führen Sie möglicherweise einmal pro Woche eine kleine Diskussion über etwas wie "maximale Funktionslänge" oder OOP-Dinge (IoC, Injection, ect) oder ähnliches, um zu sehen, wiesie denken und helfen vielleicht dabei, es auf etwas anderes zu lenken.Wenn sie jemanden haben, dem sie vertrauen, kann es sehr hilfreich sein, auf ihre Bedenken bezüglich ihrer Rolle zu hören!Viel Glück!
Ich finde, dass die effektivste Strategie nicht nur darin besteht, einen Codierungsstandard im Voraus zu haben, sondern es ihnen auch ermöglicht, ihren eigenen Code zu überprüfen, zu reflektieren und Fragen zu stellen.In vielen Fällen können Sie die Konfrontation vollständig vermeiden und sie werden Probleme selbst bemerken.Wenn sie bestimmte Probleme nicht bemerken, stellen Sie Fragen, warum sie die Dinge auf eine bestimmte Weise getan haben, damit sie zu ihrem eigenen Schluss kommen und für sich selbst nachdenken können.Sie arbeiten nicht nur viel reibungsloser, sondern bringen ihnen auch bei, Code selbst zu denken und zu überprüfen, und Sie müssen nicht einmal ständig für die gesamte Überprüfung da sein.
_ "Es ist unser Code oder diese Lösung, und wir müssen Dinge tun" _ ist ein bisschen anders.Das Ziel hier (aus meiner Erfahrung bei SO) ist es, absolut klar zu machen, dass es nicht um sie geht, sondern um den Code.Sie sind völlig irrelevant, es wäre dasselbe, wenn es jemand anderes wäre (oder sogar niemand im Besonderen).Ich würde also überhaupt keine Personal- und Possessivpronomen verwenden.
Torsten Link
2020-02-23 21:40:30 UTC
view on stackexchange narkive permalink

Ich war oft in einer solchen Situation. Und das erste, was ich normalerweise sage, ist: Entschuldigung ...

Ja, richtig ... denn wenn er die einfachsten Dinge nicht richtig verstanden hat, wie Namenskonventionen, bedeutet das, dass Sie (oder wer auch immer dafür verantwortlich war) für ihn) hat es nicht gut gemacht, sie ihm vorzustellen ...

Entschuldigen Sie also, dass Sie ihm nicht genügend Informationen gegeben haben, um einen guten Job zu machen. Auch wenn dies nur teilweise zutrifft, wird er sich dadurch verstanden fühlen und er wird sehen, dass Sie ihn nicht für etwas verantwortlich machen wollen, das er falsch gemacht hat, sondern sich gemeinsam als Team als Lernprozess für Sie beide verbessern möchten.

Wenn Sie dann den Code durchgehen, ist es das Wichtigste, dass er seine logischen Fehler versteht, anstatt ihm zu sagen, was los ist.

Ich persönlich verwende so etwas wie „Gummiente“ Debuggen “in diesem Fall: Lassen Sie ihn erklären, was sein Code tun soll. Jetzt gibt es zwei Möglichkeiten:

Erstens: Wenn sein Verständnis der Aufgabe richtig ist, der Code jedoch falsch, gehen Sie tiefer

Versuchen Sie, ihm klar zu machen - indem Sie ihm Fragen zu „Was wird der Code tun, wenn ...“ stellen -, was mit dem Code nicht stimmt, und lassen Sie ihn versuchen, ihn zu beheben selbst. Das Gleiche gilt für die Variablen: Fragen Sie ihn, welche Namen er ihnen jetzt geben würde, nachdem Sie ihm die richtigen Namenskonventionen beigebracht haben.

Zweitens: Wenn sein Verständnis dessen, was empfohlen wurde, bereits falsch ist, erklären Sie ihm, was die Bei der Aufgabe ging es wirklich darum, ihn erklären zu lassen, wie er das umsetzen würde.

Auf diese Weise zerstören Sie seine Lösung nicht, sondern lassen ihn sie selbst verbessern. Und selbst wenn sich der neue Code nach dieser Zeit zu 100% von dem unterscheidet, was er zuerst hatte, ist dieser neue Code immer noch „sein“ Code.

TL; DR: Übernehmen Sie die Verantwortung für die Qualität des Codes durch Ich entschuldige mich dafür, dass ich ihm nicht genug gesagt habe, was ich tun soll / was mich erwartet, und lasse ihn dann seinen Code selbst korrigieren.

Mit anderen Worten (sehr berühmtes Zitat):

Sag es mir und ich vergesse,
lehre mich und ich erinnere mich,
involviere mich und ich lerne

[Das Zitat stammt von] (https://www.goodreads.com/quotes/21262-tell-me-and-i-forget-teach-me-and-i-may) einem von [Gründervätern] (https://en.wikipedia.org/wiki/Founding_Fathers_of_the_United_States) der Vereinigten Staaten, [Benjamin Franklin] (https://en.wikipedia.org/wiki/Benjamin_Franklin).[Verwandtes chinesisches Sprichwort] (https://en.wiktionary.org/wiki/give_a_man_a_fish_and_you_feed_him_for_a_day;_teach_a_man_to_fish_and_you_feed_him_for_a_lifetime#Proverb).
Kommt darauf an, wo du [google] bist (https://www.google.com/amp/s/quoteinvestigator.com/2019/02/27/tell/amp/) ... manche sagen, es ist Konfuzius, manche sagen, es ist vonBenjamin Franklin ... aber es gibt auch keinen Beweis dafür, ob sie ...
Woher es kommt, es ist ein tolles Zitat!
Frank Hopkins
2020-02-23 23:28:47 UTC
view on stackexchange narkive permalink

Bestehen Sie zunächst nicht darauf, Feedback zu nehmen und daraus zu lernen .

Insbesondere das Nicht-Notieren auf Papier ist nicht unbedingt ein Zeichen dafür, dass der Junior nichts / genug aus der Codeüberprüfung herausholt. Bei den meisten Codeüberprüfungen im "Programmierstil" habe ich noch nie Notizen in Papierform gemacht, da ich mich eher darauf konzentriere, über den Code zu sprechen und über die "Regeln" und ihre Vorteile in dieser Zeit nachzudenken, in der ich jemanden habe, der dies direkt neben mir bespricht beschäftigt sein, Sachen aufzuschreiben. Und ich habe die "Notizen" trotzdem - im Code-Repository! (Zumindest hätte ich das tun sollen!). Wenn ich mich auf das eigentliche Thema konzentriere, kann ich viel mehr als nur Dinge aufschreiben und dann das Stück Papier auf einen Haufen anderer Notizen werfen, um es nie wieder anzusehen. Wenn ich gezwungen wäre, Notizen zu machen, würde ich dem Meeting nur entnehmen, dass ich nicht gerne mit diesem Senior zusammenarbeiten würde, weil es ihm nur darum geht, alles auf seine Weise zu haben.

Also: Ja, bitte schlagen Sie Optionen vor, z. indem Sie fragen, ob der Junior sein Notizbuch benötigt, aber nicht Ihre Lernmethode auferlegen. Stellen Sie vielmehr so ​​weit wie möglich sicher, dass der Junior die relevanten Informationen danach ohnehin zur Verfügung hat - z. indem Sie die Namenskonventionen irgendwo in ein Wiki schreiben, damit jeder sie nachschlagen kann, und indem Sie die in der Überprüfung identifizierten notwendigen Änderungen - oder zumindest einige Beispiele - in einen Überprüfungszweig übernehmen.

Wenn Sie im Moment nur mündlich Codeüberprüfungen durchführen und dem Junior erklären, was er in einem Gespräch falsch gemacht hat, würde ich dringend empfehlen, entweder direkt sicherzustellen, dass Änderungen vorgenommen werden, die Sie im jeweiligen Code vorschlagen, oder den Junior dazu zu bringen, dies zu tun Änderungen und überprüfen Sie den Code erneut. Im letzteren Fall sollten Sie den Nacharbeitsaufwand pro Sitzung gering halten und stattdessen mehrere Sitzungen durchführen. Wenn Sie die Änderungen bereits vorgenommen haben, weisen Sie sie im Code-Repository darauf hin, dass sich der Junior eher an die Orte als an zufällige Beispiele erinnern kann, die nicht mit Ihrer täglichen Arbeit verbunden sind.

Zeigen Sie ihm, dass er nicht allein ist, gehen Sie an die Öffentlichkeit.

Ich stimme der Antwort von Player One zu und würde dies tun Fügen Sie noch einen Vorschlag hinzu: Haben Sie nicht nur Code-Reviews bei sich. Machen Sie Codeüberprüfungen zu einem offiziellen regulären Bestandteil Ihres Prozesses und führen Sie sie mit allen durch.

Wenn Sie der Meinung sind, dass er defensiv ist, führen Sie (einige) Codeüberprüfungen mit der gesamten Gruppe durch. Beginnen Sie jedoch mit einigen Ihrer älteren Kollegen und behandeln Sie sie genauso, wie Sie ihn behandeln würden: Sprechen Sie über ihren Code , nicht die. Es gibt fast immer etwas, über das es sich zu diskutieren lohnt, auch im Code von Senioren. Und wenn es nur um "Ja, es wird wegen a), b) und c) so gemacht, aber man hätte es allgemeiner machen / Prinzip X folgen können, indem man Z macht, aber das hätte den Nachteil Y". Stellen Sie sicher, dass Sie für alle den gleichen Ton und die gleiche Neutralität verwenden. Dies zeigt dem Junior, dass Sie nicht versuchen, ihn mit Ihren dummen Regeln zu schikanieren, sondern dass jeder unter der gleichen Kontrolle steht und dass es nicht "Ihre" dummen Regeln sind, sondern die gemeinsamen Regeln des Teams - vorzugsweise basierend auf den Vorteilen des Teams als Ganzes mag haben. Darüber hinaus kann der Junior auch aus den Fehlern (oder großartigen Designentscheidungen) anderer lernen. Das macht es für ihn noch weniger persönlich und gibt ihm die Möglichkeit, sich mit anderen Geschäftslogikbereichen und Software-Prinzipien in Verbindung zu setzen, bevor er daran arbeiten muss. Daher hat er möglicherweise die notwendige Zeit, um sie zu "verdauen", bevor er sich bewerben / bearbeiten muss sie.

Ich denke, mit den meisten Tools zur Codeüberprüfung können Sie Codezeilen auswählen und einen Kommentar hinzufügen, der das Problem hervorhebt.Der wahrscheinlich beste Weg, dies zu tun, besteht darin, diese Kommentare so detailliert und mit genügend Referenzen zu schreiben, dass ohnehin keine Notizen erforderlich sind.Lassen Sie die überprüfte Person diese Kommentare zuerst lesen und sich anschließend persönlich treffen, um freier zu diskutieren.
Was meinst du mit "Ich habe die Notizen trotzdem - im Code-Repository!"?Enthalten Ihre Codeüberprüfungen am Ende ein Commit?
@Mars Abhängig von der Codeüberprüfung kann entweder ein Teil der Überprüfung selbst direkt am Code oder über ein Tool mit Kommentaren im Tool durchgeführt werden, die dann implementiert werden, sodass Sie das Ergebnis im Code haben, sobald Sie die angeforderten Änderungen implementiert haben.Dann müssen Sie sich nur noch an die Klasse erinnern, die eine "ordnungsgemäße" Implementierung der Regeln hat, anstatt irgendwo ein separates Beispiel aufzuschreiben.Und komplizierte Designentscheidungen sollten aus dem Code verständlich sein, wenn Sie befürchten, dass Sie vergessen, warum etwas so gestaltet ist, wie es ist, und das Umbenennen nicht hilft, imho, das ist ein guter Fall für einen Kommentar
@Mars-Prozessbeispiele für die direkte Ausführung am Code: a) Überprüfen Sie den zu überprüfenden Zweig und sehen Sie sich den MR an.Wenn Probleme, die Sie finden, geringfügig und ziemlich einfach sind, führen Sie sie direkt im Code aus, schreiben Sie sie fest und führen Sie sie entweder zusammen oder fordern Sie eine Gegenprüfung dieser Festschreibung (en) an.Wenn größere Änderungen erforderlich sind, teilen Sie dem Kollegen (über das Überprüfungstool oder auf andere Weise) mit, was geändert werden muss -> sie ändern es, verpflichten sich -> es befindet sich im Code.b) Treffen Sie sich in einer Gruppe, sehen Sie sich den Code auf einer großen Leinwand / einem großen Projektor an, identifizieren Sie, was Sie als Gruppe ändern möchten, und ändern Sie ihn nach dem Festschreiben des Meetings.
Aha.Meiner Meinung nach scheinen die Bewertungen von OP mündlicher zu sein, weshalb es kein Problem ist, sich Notizen zu machen.Wenn dies der Fall ist, fehlt hier ein Schritt (schreiben Sie während der Überprüfung Kommentare in den Code).
@Mars hmm gültiger Punkt.Mal sehen, ob ich später noch eine Bemerkung dazu machen kann.Danke für den Vorschlag.
Kein Problem.Klingt nach einem ziemlich guten Bewertungssystem!
Kilisi
2020-02-23 15:45:05 UTC
view on stackexchange narkive permalink

Wenn jemand auf Anfängerebene schlecht spielt, bedeutet dies nur, dass er die Grundlagen verstehen muss. Ich analysiere ihre Fehler nicht und versuche, sie so zu lehren. Ich habe diese bereits gelöst, und es gab wahrscheinlich ein bisschen Fluchen in so alten Nachrichten.

Ich habe nur die Grundlagen im Detail durchgearbeitet. Damit meine ich die Konventionen, Verfahren usw. Wichtig ist, dass ich ihm vor dem Start beibringe, wie man ein Projekt plant, und ich werde das nächste überprüfen. Sie bringen ihre Probleme zu mir, wenn sie etwas nicht verstehen.

Ich möchte ihn nicht damit beeindrucken, wie gut ich bin. Ich möchte, dass er lernt, wie man Dinge erledigt, ohne dass ich zusätzlich zu anderen Aufgaben babysitten muss.

Dies erinnert mich an Passagen von Randy Pauschs "dem letzten Vortrag" - selbst brutales Feedback zu bekommen bedeutet, dass sie sich darum kümmern, keine zu bekommen bedeutet, dass sie dich aufgegeben haben.
@KlaymenDK normales Feedback sollte während der Reparatur des Projekts gegeben worden sein, nicht danach.Nach ist, wann die Löcher im Training zu füllen sind
Mein Kommentar war im Zusammenhang mit Coaching, also ja _während_ nicht _nachher_ - aber jetzt ist es schon danach und OP scheint den Wunsch zu haben, besser zu machen, was sie aufgrund von Einschränkungen nicht konnten.
+1 für "Ich möchte ihn nicht beeindrucken, wie gut ich bin".Bei einigen Gelegenheiten war ich fassungslos, dass jemand, der mir etwas beibringen wollte, nur bewies, dass er das Thema bereits kannte - es wurden fast keine Anstrengungen unternommen, um zu sehen, dass ich verstand oder Fortschritte machte.Und solche Lehrer / Trainer scheinen auch zu eilen.
Was Ihren letzten Punkt betrifft, ist eine meiner Lieblingstechniken die Umkehrung - "beeindruckend mit wie vielen Löchern ich gefallen bin".In der Lage zu sein, einen Überprüfungskommentar damit zu veranschaulichen, wie Sie dem nicht gefolgt sind, und die daraus resultierenden Fehler, ist ein effektiver Weg, um die Lektion zu vermitteln.Natürlich wissen Sie mehr als sie, aber wenn Sie klar machen, dass Sie Ihre Lektionen aus dem Fallen in Löcher gelernt haben und versuchen, ihnen dabei zu helfen, dieselben Löcher zu vermeiden, entsteht eine kollegialere Atmosphäre.Ausgehend von "Ich vermassle auch" ist immer eine gute Möglichkeit, eine Bewertung abzugeben, insbesondere wenn es etwas hart sein könnte.
Stephan Branczyk
2020-02-23 18:43:43 UTC
view on stackexchange narkive permalink
  • Wichtige Probleme in der Logik, mangelndes Wissen darüber, wie ein Problem auf die Grundursache zurückgeführt werden kann, und sehr undurchsichtige Namenskonventionen (dies war aufgrund der Art des Projekts sehr problematisch) / li>
      / blockquote>

      Ich würde mit dem einfachsten zuerst beginnen.

      "Namenskonventionen"

      • Ihr Unternehmen verfügt wahrscheinlich über einen Leitfaden. Das Buch Code Complete 2 kann auch eine ziemlich gute Anleitung sein. Es erklärt das Warum und gibt eine Checkliste.
      • Ich würde ihn dazu bringen, seinen eigenen Spickzettel zu erstellen und ihn auf seinen eigenen Computermonitor kleben zu lassen.
      • Wenn er es sich nicht zur Gewohnheit macht, die Unternehmenskonventionen oder seinen eigenen Spickzettel zu befolgen. Zwingen Sie ihn, ein Papier- und Bleistiftlexikon aller Variablennamen zu führen, die er in einem Tabellenformat verwendet. Auch das sollte immer an seinem Schreibtisch neben seiner Tastatur sein.

      Als nächstes würde ich mich mit der Frage befassen, wie man ein Problem auf die Grundursache zurückführt.

      Dies ist kein einfaches Problem, es wird wahrscheinlich mehrere Sitzungen dauern, um jede Technik umfassend zu behandeln. Du kannst ihn auch nicht überstürzen. Selbst wenn Sie ihm alles auf einmal erzählen, wird er nicht alles auf einmal aufnehmen.

      Es ist sogar möglich, dass er bereits weiß, was zu tun ist, aber diese Dinge einfach nicht tut. Sie sollten ihn also zu diesen Themen befragen und sehen, wie er diese Probleme in der Praxis mit minimaler Anleitung von Ihrer Seite behandelt.

      Zum Problem "Hauptprobleme in der Logik". Das sind Ergebnisse. Wenn Sie ihm helfen, die zugrunde liegenden Prozesse zu reparieren, die er verwendet, sollten sich die Ergebnisse verbessern. Sie können seine logischen Fehler erklären, wenn Sie möchten, aber erwarten Sie nicht, dass dies ausreicht.

      Betrachten Sie sich als Lehrer. Sie können einen Schüler nicht mit zu vielen Korrekturen überwältigen. Stattdessen müssen Sie dem Schüler helfen, sich darauf zu konzentrieren, die am einfachsten zu korrigierenden Fehler zu beheben und einige der grundlegenderen Fehler zu beheben, auch wenn dies bedeutet, dass er nicht auf den Rest aller seiner Fehler eingeht.

      Bei aufeinanderfolgenden Codeüberprüfungen können Sie dann auf die Verbesserungen aufmerksam machen, die er im Laufe der Zeit vorgenommen hat, und langsam auf die anderen Arten von Fehlern eingehen, die er möglicherweise noch macht.

Wenn wir über Groß- und Kleinschreibung und Trennzeichen sprechen, ist das ziemlich einfach, aber wenn wir über gute Namen sprechen, ist das notorisch schwierig.
@Dukeling, Ja, das von mir vorgeschlagene Buch Code Complete 2 enthält ein ganzes Kapitel über die Auswahl guter Namen, Kapitel 11.
knallfrosch
2020-02-24 02:52:11 UTC
view on stackexchange narkive permalink

Die Situation ist nicht schlecht, es ist gut. Sobald Sie sich mit dieser Tatsache vertraut gemacht haben, wird das Gespräch viel einfacher.

  • Das Projekt wurde pünktlich abgeschlossen.

  • Sie haben die Zeit und das Fachwissen, um das Projekt weiter zu verbessern, das bereits das tut, was es tun soll.

In der Softwareentwicklung ist es völlig selbstverständlich, Architekturen zu haben, die nicht optimal sind und um sie zu verbessern.

Bei Stilproblemen wie Namenskonventionen folgen die Leute ihnen normalerweise, sobald sie davon wissen. Erkläre sie einfach einmal und es sollte ihm gut gehen. Überprüfen Sie ihn trotzdem.

+1, um dies insgesamt in eine andere (bessere) Perspektive zu bringen!
spickermann
2020-02-23 22:43:37 UTC
view on stackexchange narkive permalink

Ich würde mich nicht zu sehr auf Ihre aktuellen Erfahrungen mit ihrem Code konzentrieren.

Was meiner Meinung nach für alle Junior-Entwickler am besten funktioniert, ist die enge Zusammenarbeit mit mittelständischen und Senior-Entwicklern. Das ist vielleicht nicht immer möglich.

Aber das Unternehmen sollte mindestens regelmäßig wöchentliche Einzelgespräche zwischen Nachwuchsentwicklern und mittelständischen oder noch besseren Nachwuchsentwicklern führen. Das Thema dieses Einzelgesprächs kann alles sein, woran der Junior-Entwickler interessiert ist:

  • eine aktuelle Aufgabe, bei der er Probleme mit
  • einem Blog-Artikel hatte, den er gelesen hat und Ich habe
  • keinen Hinweis auf die Implementierung einer bevorstehenden Story verstanden.
  • detaillierte Schulung basierend auf der neuesten Pull-Anfrage.
  • Der Schlüssel ist :

    • Das Meeting ist eins zu eins. Dadurch kann der Junior alles fragen, ohne sich zu schämen, dass er etwas Offensichtliches vor anderen fragen könnte.
    • Der Junior leitet das Meeting. Es ist an der Zeit, alles zu fragen.
    • Das Meeting findet nicht mit ihrem Manager statt, und es geht nicht um ihre Leistung. Es ist mit einem Senior, der an einer Ausbildung interessiert ist.
    Dies scheint ein anderes Problem zu lösen.Es gibt keine Garantie, dass sie jemals dazu kommen würden, Dinge zu besprechen, von denen Sie ** bereits wissen **, dass sie ein Problem sind.Wenn Senioren Junioren nicht zu den von ihnen identifizierten Problemen beraten, ist dies für ein Team genauso dysfunktional wie für Junioren, die Senioren bei Bedarf nicht um Anleitung bitten.
    Es ist nicht möglich, wenn sie in Ein-Mann / Ein-Frau-Silos arbeiten (häufiger als wir zugeben möchten, selbst in Scrum-Zeiten).Jeder ist viel zu beschäftigt, um sich an Lernaktivitäten zu beteiligen (die Priorität liegt kurzfristig).
    Greg Martin
    2020-02-23 23:32:36 UTC
    view on stackexchange narkive permalink

    Durch die Verwendung der Anführungszeichen in "1: 1 Post-Mortem 'Code Review'" gehe ich davon aus, dass dies ein informeller Prozess ist, den Sie nach Ihren Wünschen gestalten können. In diesem Fall würde ich empfehlen:

    Anstatt mit dem Code des Junior-Entwicklers zu beginnen, beginnen Sie von vorne.

    Dies hat in meiner Meinung die folgenden Vorteile :

    • Es fühlt sich nicht so an, als würde etwas "auseinandergerissen", weil dies nicht der Fall ist.
    • Sie können die von Ihnen gewünschten bewährten Methoden vollständiger demonstrieren Der Junior-Entwickler muss lernen.
    • Für die Teile der Programmierung, die der Junior-Entwickler gut gemacht hat, können Sie sagen: "Und jetzt machen wir diesen Teil genau so, wie Sie es beim ersten Mal getan haben." Das wird sich wie Positives anfühlen, das in die gemeinsame Code-Erstellung eingestreut ist (während es sich in einer "Zerreißen" -Sitzung wie Neutrale anfühlt, die sich in die Kritik einmischen).

    Nebenbei bemerkt, Sie sind es in der Tat versuchen, diesen Entwickler zu betreuen und Fähigkeiten zu installieren, von denen das Team in Zukunft profitieren wird. Eine dieser Fähigkeiten besteht darin, aus dem Feedback zu lernen und dieses Lernen auch in Zukunft aufrechtzuerhalten. In diesem Zusammenhang:

    Führen Sie sie explizit an, wie Sie während einer Feedback-Sitzung Notizen machen. Dies ist eine Fähigkeit, die genauso bewusst gelernt werden kann wie jede andere Fähigkeit.

    Natürlich möchten Sie das Meeting so gestalten, dass Sie sich vom Junior-Entwickler einkaufen lassen. Es sollte vermutlich ausreichen, ehrlich zu sein, dass Ihr Ziel darin besteht, ihnen zu helfen, ihre Fähigkeiten so zu verbessern, dass sie zufriedenstellend sind und für die sie anerkannt werden. Eine Rahmungstechnik, die Sie verwenden können, ist:

    Sprechen Sie immer über Fähigkeiten in einer Wachstumsphilosophie - das heißt, Fähigkeiten sind etwas, das mit der Zeit mit Übung, Anstrengung und bewusster Selbsteinschätzung besser wird. Das Gegenteil wäre ein Problem Denkweise: Programmieren ist etwas, was Menschen entweder tun können oder nicht, wenn sie in die Tür kommen. Die Kombination eines Rahmens mit fester Denkweise und der Bewältigung der eigenen Fehler ist typischerweise das, was Abwehrbereitschaft und Engstirnigkeit auslöst. In einem wachstumsorientierten Rahmen wird es jedoch leichter als goldene Gelegenheit gesehen, sich den eigenen Fehlern zu stellen.

    Schließlich als allgemeine Regel:

    Klar kommunizierte Erwartungen ist ein großer Teil jedes Prozesses, an dem mehr als eine Person beteiligt ist.

    +1 für die Idee, von vorne zu beginnen, anstatt direkt in seinen Code zu springen
    Lawnmower Man
    2020-02-24 02:59:22 UTC
    view on stackexchange narkive permalink

    Paarung

    Anstelle einer Codeüberprüfung würde ich anbieten, stattdessen Paarprogrammierung mit ihm durchzuführen. Es spielt keine Rolle, ob es sich um Ihr oder sein Projekt handelt, aber es kann für einige von beiden hilfreich sein. Wenn er tippt und Sie bemerken, dass etwas verbessert werden kann, stellen Sie einfach sanfte Leitfragen wie: "Glauben Sie, dass es eine Möglichkeit gibt, dies zu verbessern?" Lassen Sie ihn einige Optionen durcharbeiten und verwenden Sie dann Hinweise, um ihn zu Ihrer Lösung zu führen. Versuchen Sie jedoch, jede von ihm angebotene Option zu analysieren, um die Gründe und Vor- und Nachteile zu erläutern. Schließlich sind einige Optionen besser als andere, ohne die beste Option zu sein, und es ist wichtig, die Gründe zu verstehen. Wenn er eine gute Antwort gibt oder Sie mit seinem Wissen überrascht, loben Sie dies, damit er während des Pairings einige Belohnungen erhält.

    Stellen Sie beim Tippen sicher, dass er Fragen stellt, wenn Sie etwas Überraschendes oder Anderes tun als wie du es tun würdest. Wenn Sie wissen, dass Sie etwas tun werden, das sich davon unterscheidet, wie er das ähnliche Problem in seinem Code gelöst hat, halten Sie inne und fragen Sie ihn nach Vorschlägen, wobei Sie die Alternativen durchgehen.

    Auch die wichtigsten Konventionen sind hoffentlich vom Team geübt und gefördert. In diesem Fall sollten Sie in der Lage sein, Code zu finden, den keiner von Ihnen geschrieben hat und der die Punkte veranschaulicht, die Sie ansprechen möchten. Finden Sie einige Beispiele und diskutieren Sie, damit er sehen kann, dass das Lesen von vorhandenem Code ein guter Weg ist, um zu lernen, und dass er aus vorhandenem Code lernen sollte. Lassen Sie ihn wissen, dass das Kopieren von Code style und Mustern eine Tugend ist, die er üben sollte, bis er mehr Erfahrung hat. Das bedeutet natürlich, dass er auch einige schlechte Codegewohnheiten kopieren wird, aber das ist der Preis für das Lernen.

    Sokratische Methode

    Im Allgemeinen lernen Menschen besser, wenn sie das Gefühl haben, selbst zur Lösung gekommen zu sein, insbesondere wenn sie eine "Eureka!" Moment. Anstatt zu sagen: "Du solltest X machen. Es ist am besten." X? Was ist mit diesem Szenario? Welche Lösung ist Ihrer Meinung nach besser? " Wenn Sie also Leitfragen stellen, können Sie den Status Quo in Frage stellen und Ihren Mitarbeiter auf einen aufgeklärteren Weg führen. Manchmal müssen Sie nur einige reale Szenarien anbieten, die veranschaulichen, warum Y besser als X ist, auch wenn Sie keine Codebeispiele zur Hand haben. Aber wenn ich jemanden an den Punkt bringen kann, an dem sie das Prinzip sagen, auf das ich mich einlasse, finde ich, dass es viel besser bleibt, weil sie über ihre eigenen Antworten und Schlussfolgerungen zu diesem Punkt gekommen sind, was bedeutet Sie stimmen mit dem Prinzip überein.

    Testen

    Eines der drei Dinge, von denen kein Softwareentwickler genug tut, ist das Testen. Höchstwahrscheinlich ist Ihr Junior-Partner kein Experte für Unit-Tests. Vielleicht sind Sie auch kein Experte. In beiden Fällen ist es eine hervorragende Möglichkeit, die Vor- und Nachteile einer bestimmten Technik aufzuzeigen, wenn Sie viel Zeit damit verbringen, Komponententests zu schreiben und sie zum Üben von Code zu verwenden. Sie haben vorgefertigte minimale Testfälle, die einfach angepasst werden können, um verschiedene Szenarien zu emulieren. Insbesondere bei Logikfehlern hilft es enorm, seinen Code robuster zu machen, wenn gezeigt wird, wie gute Randbedingungen für Testfälle identifiziert werden können, und wenn alle Codepfade ausgeführt werden. Sie können auch zeigen, wie das Ausführen von Komponententests zur Eingrenzung von Problemen beiträgt, indem Sie sich auf einige Methoden verlassen und andere verdächtig machen. Dies ist oft eine einfachere Teilung und Eroberung, als den Code mit Kommentaren zu halbieren.

    Der wichtige Teil ist, dass all diese Dinge gleichzeitig gleichzeitig viel effektiver sind als eine Vorlesung, in der ein Großteil der Informationen "verloren" geht, weil Ihr Schüler keine Notizen gemacht hat . Wenn Sie ein neues Konzept eingeführt haben, geben Sie Ihrem Partner die Möglichkeit, es anzuwenden, damit Sie Anleitungen und Feedback zu seiner Anwendung geben können. Versuchen Sie dies sowohl kurz nach dem Unterricht als auch viel später, um die Aufbewahrung zu überprüfen. Das Schreiben von Code als Paar bestätigt, dass Sie im selben Team sind und auf dieselben Ziele hinarbeiten und dass es bei dem Prozess um Lernen und nicht um Urteilsvermögen geht. Ich vermute, dass Sie den Junior sehr schnell ausbilden und Ihre eigenen Führungs- und Mentoringfähigkeiten aufbauen werden, was immer eine schöne Leistung ist, die Sie mit dem Chef teilen können.

    Angesichts der Tatsache, dass die betreffende Person dazu neigt, Dinge ins Herz zu schließen, sollte diese sokratische Methode besser mit großer Sorgfalt angewendet werden!Das OP muss absolut klarstellen, dass es sich weder um einen Test noch um eine Bewertung handelt.
    J.G.
    2020-02-24 03:00:42 UTC
    view on stackexchange narkive permalink

    Beim Erlernen des Codierens geht es darum, es zu schreiben oder zumindest zu beobachten, wie jemand anderes es schreibt. Daher denke ich, dass es hilfreich wäre, wenn er sehen würde, was Sie auf einem Bildschirm tun (vorzugsweise in einer IDE, die er bevorzugt oder mit der er vertraut ist, auch wenn Sie etwas anderes verwenden), damit er sehen kann, wie der Prozess besser aussieht. Lassen Sie uns einige Beispiele diskutieren:

    Hauptprobleme in der Logik

    Mit anderen Worten, der Code tut nicht das, was er sollte; Es hat einen Fehler. Erklären Sie ihm einen, wie Sie ihn entdeckt haben und welcher Code dies korrigieren würde. Aber wie machst du das alles? Nun ...

    Unwissen darüber, wie ein Problem auf die Grundursache zurückgeführt werden kann

    Zeigen Sie ihm im Zusammenhang mit dem vorherigen Punkt, wie Sie es tun würden Diagnose und Behebung der oben genannten Fehler.

    undurchsichtige Namenskonventionen

    Machen Sie dies nicht nur , indem Sie sagen: "Wir wollen Dinge, die so benannt sind". Zeigen Sie die besten Möglichkeiten zum Ändern der Namen. Die IDE macht das einfacher; Je nachdem, was für die Erkennung eingerichtet ist, werden möglicherweise auch bestimmte Änderungen vorgeschlagen oder sogar automatisiert. Wenn Sie solche Dinge eingerichtet haben, er es aber nicht tut, ändern Sie diese Situation für ihn oder zeigen Sie ihm, wie es geht.

    Beachten Sie, dass es bei diesem Ansatz nicht nur darum geht, einschüchternd lange Notizen einzubringen, an die Sie geschrieben haben Sagen Sie: "Bitte denken Sie an all diese Regeln." Es geht darum, ihm zu zeigen, wie man das macht, was er tun soll. Es lehrt den savoir-faire.

    [Ich] hatte nicht genug Zeit, um das "Warum" für alles zu besprechen, was ich & empfohlen hatte, ihm zu helfen.

    Ich denke, was ich vorgeschlagen habe, hilft auch bei diesem Zeitproblem. Ich muss niemandem mit Ihrer Erfahrung sagen, um wie viel sich der Code vor den Augen eines Betrachters mit ein paar Minuten dieser Tricks verbessern kann. Er könnte es jedoch als angenehme Überraschung empfinden, je nachdem, wie viele Seile ihm in den letzten Monaten gezeigt wurden.

    Er spricht sehr leise & scheint sich manchmal die Dinge zu Herzen zu nehmen.

    @ PlayerOnes ausgezeichnete Antwort betonte die Notwendigkeit, "dies muss so verbessert werden" zu einer unpersönlichen Beobachtung zu machen. Dies lässt sich leicht in die obige Strategie integrieren. Der Satz "Lassen Sie mich Ihnen zeigen, wie es geht" ist mehr oder weniger persönlich, je nachdem, wie er gesagt wird, aber der edelste Geist dessen, was er sagt, ist der springende Punkt dieser Übung.

    Er wird von unserem Chef eingehend auf seine Leistung überprüft.

    Wenn ihn dies beunruhigt, kann dies seine Zustimmung dazu motivieren, Ihrer Demonstration zu folgen. Wenn Sie nicht wissen, dass er sich darüber Sorgen macht, müssen Sie es nicht ansprechen oder den oben genannten Ansatz darauf basierend moderieren. Ich bin sicher, wenn Sie meinem Vorschlag folgen würden, würden Sie es sowieso auf angstmindernde Weise tun.

    Er scheint während der Überprüfungen / Schulungen keine guten Notizen zu machen, und er auch ist nicht sehr proaktiv beim Stellen von Fragen, wenn er bei Aufgaben hängen bleibt. Daher bin ich mir nicht so sicher, wie sehr diese Codeüberprüfung wirklich in seinem Gehirn "stecken" bleibt.

    Das ist ein klarer Grund, warum das Auslesen Ihrer Notizen ungeachtet dessen die Erfolgschancen verringert wie gemein oder nett du damit bist. Ich kann nicht beweisen, dass es in Aktion funktioniert, da etwas, das passiert, wenn wir mit dem lebenden, atmenden Tier interagieren, das der Code ist, besser funktionieren würde. Aber die Idee, dass es mit meiner Erfahrung vereinbar wäre. Bitten Sie ihn, Sie zu bitten, eine Pause einzulegen oder zu verlangsamen, wenn er etwas aufschreiben möchte, das er für besonders gerechtfertigt hält.

    Was kann ich noch tun, um das Problem zu mildern? Schlag, wenn ich durch die Wäscheliste der Dinge gehe, die er im Code falsch gemacht hat?

    Sie benötigen keine Wäscheliste - jedenfalls nicht alle in einer Sitzung. Der von ihm eingereichte Code ist nicht ganz richtig. Das ist in Ordnung: Der Code, an dem er überhaupt arbeiten musste, war auch nicht ganz richtig, zumindest nicht für moderne Anforderungen. Die Tatsache, dass Sie in dieser persönlichen Demonstration von "seinem" Code ausgehen, ist nebensächlich. Es zeigt ihm, wie er jeden Code adressiert, auf den er stößt. Möglicherweise müssen Sie dies mehrmals tun, je nachdem, wie viele Dinge er aufgreifen muss. Sie können ein paar Tage nach der ersten Sitzung abschätzen, was angesichts der Bedürfnisse von ihm und dem Team für beide Seiten akzeptabel wäre. Aber bringen Sie ihm die wichtigsten Strategien bei, und die Probleme, die dieses Mal auftraten, werden sich auf lange Sicht von selbst erledigen.

    Welche Methoden gibt es, um die Wirkung dieser Schulung / Überprüfung zu steigern? ... Ich glaube nicht, dass er Erfolg haben wird, wenn er sich nicht wirklich bemüht, die Best Practices der &-Methoden zu erlernen, die alle anderen im Team anwenden.

    Ich überlasse es Ihnen Um zu entscheiden, inwieweit Sie ihn einladen sollten, in Momenten, in denen Sie hoffen, dass er anhand eines frühen Teils der Demonstration ableiten kann, was er tun soll, das Steuer zu übernehmen. Abgesehen davon habe ich einen Vorschlag, der von der allgemeinen Prämisse dieser Antwort getrennt ist: Empfehlen Sie ihm einen guten Leitfaden zum Lesen (oder sehen Sie ihn sich an, wenn Sie wirklich gutes Videomaterial kennen). Eine Anleitung für den Moment oder vielleicht zwei oder drei sehr kurze. Wenn es sich um eine Anleitung handelt, die Ihnen geholfen hat, werden weitere Leitfäden weniger Renditen erzielen. Überlasten Sie ihn also nicht oder scheinen Sie es zu tun.

    Es gibt keine Option für automatisierte Codeüberprüfungen, bevor Sie den Code weitergeben zur "Produktion". Dies macht es schwieriger, die oben beschriebenen Arten von Problemen zu erfassen.

    OK, Zeit für eine weitere Idee. Sagen Sie ihm, dass er Sie bitten kann, sich seinen Code anzusehen, bevor er ihn einreicht, um zu sehen, was Sie davon halten. Wenn Sie können, führen Sie solche Codeüberprüfungen durch, auch wenn Sie einen Stuhl überziehen müssen, anstatt etwas zu verwenden, das Sie in diesem Projekt nicht haben können, was im Team häufiger vorkommt. Es geht nicht nur darum, ihn nicht herauszuheben. Die letzte Firma, für die ich gearbeitet habe, war der Meinung, dass der gesamte Code zwei Nicht-Autoren vor einem Push überprüfen sollte. Vielleicht könnte er einer von zwei Rezensenten für den Code von jemandem sein, sogar für Ihren Code! All dies sollte natürlich nur schrittweise eingeführt werden, da er möglicherweise nicht über die richtigen Fähigkeiten verfügt oder sich dieser nicht sicher ist, um sofort ein solcher Rezensent zu sein.

    Dov
    2020-02-24 11:41:01 UTC
    view on stackexchange narkive permalink

    Wenn es um größere Korrekturen an der Arbeit eines anderen geht, Probleme, die das Ego betreffen, ist es sehr schwierig, die Partei zu finden, die die Hilfe benötigt, um die Korrektur zu akzeptieren, und je schlimmer die Fehler, desto schwieriger ist es.

    Der Weg, jemanden dazu zu bringen, Veränderungen zu akzeptieren, besteht darin, ihn dazu zu bringen, sie selbst zu realisieren. Sie können sagen, dass Sie den Code überprüfen und den Programmierer bitten müssen, ihn zu durchlaufen, aber versuchen Sie, alles als Frage zu tun. Versuchen Sie, den Junior-Programmierer dazu zu bringen, es selbst herauszufinden. Beispiel:

      int xj6b7 = 99.2;  

    Können Sie feststellen, dass an dieser Deklaration etwas nicht stimmt? Können Sie erkennen, warum ein anderer Programmierer möglicherweise Probleme mit dem Verständnis hat? Können Sie ein Problem mit der Konstante 99.2 erkennen? Er wird es nicht unbedingt finden. Sie können dieses Problem jeweils einzeln ausführen. Sie können vernünftigerweise darauf bestehen, dass der Junior sich daran erinnert, Notizen zu machen, damit er zurückgehen und es erneut tun kann.

      x = x / 2; // x durch 2 teilen  

    Kannst du mir sagen, warum du diesen Kommentar geschrieben hast? Wem versuchst du diesen Code zu erklären?

    Und ja, es ist besser um es aufzubrechen und nicht zu versuchen, jedes Problem mit dem Code dieser Person in einer Sitzung zu behandeln. Geben Sie ihnen eine einfachere Aufgabe, feinkörniger und lassen Sie sie Fähigkeiten in kleineren Schritten entwickeln. Es war ein Fehler, ihnen offensichtlich einen so großen Teil zu geben.

    schießen, ich habe die Antwort unten verpasst.Meins ist vollständiger, aber ähnlich.
    WGroleau
    2020-02-24 08:11:04 UTC
    view on stackexchange narkive permalink

    Wie erfolgreich dies ist, hängt von der Persönlichkeit des Lernenden ab (und von meinem Talent, es anzuwenden). In solchen Fällen versuche ich, Fragen zu stellen , anstatt Erklärungen abzugeben.

    Beispiele:

    • „Was macht dieses Unterprogramm? …… Oh, dann könnten wir es vielleicht so nennen, anstatt es „M400“ zu nennen.
    • „Macht diese Schleife etwas anderes als diese? Oh, könnten sie dann in ein Unterprogramm einbezogen werden? “
    brichins
    2020-02-26 06:42:54 UTC
    view on stackexchange narkive permalink

    Es gibt repräsentative 2 Zitate, die mir in meiner Zeit als Entwickler begegnet sind und an die ich mich wirklich gewöhnt habe und die ich gerne wiederhole, wenn ich die hier behandelten Probleme diskutiere. Diese Situation muss beide respektvoll angehen - Ihr Coaching ist ein wertvolles Geschenk für jemanden, der neu in der Branche ist, aber die Art und Weise, wie Sie dieses Geschenk präsentieren, wird einen großen Unterschied in der Bewertung bewirken. P. >

    Selbstbewusstsein und Bitte um Hilfe im Kontext eines Teams und des größeren Ökosystems:
    "Der durchschnittliche Entwickler hat das gleiche Ego wie der durchschnittliche Jet-Pilot."

    Nun, beide Charaktere hier sind nette Leute und (abgesehen von Top Gun-Karikaturen) wahrscheinlich vollkommen respektvoll gegenüber anderen. Der Punkt hier ist, dass beide viel trainiert haben, um ihre Fähigkeiten in einem hochspezialisierten Bereich zu entwickeln, und dies führt zu viel Selbstvertrauen in ihre Fähigkeiten. Dies ist vollkommen angemessen und ein wesentlicher Bestandteil der Ausführung beider Aufgaben.

    Das Problem auf der Entwicklerseite ist, dass wir anfangen zu glauben, wir sollten alles wissen und in der Lage sein, jedes Problem anzugehen , normalerweise von uns . Wir werden Stunden und Tage darauf verwenden, selbst nach Lösungen zu suchen und diese zu versuchen, anstatt unsere Unwissenheit zu offenbaren, indem wir einen Mitarbeiter nach dessen Input und Domänenwissen fragen. Und wir werden wahrscheinlich eine großartige Lösung finden, wenn wir genügend Zeit haben.

    Aber beim Codieren geht es nicht um persönliches Wissen oder Können, und es geht definitiv nicht um das Selbstbild. Entwickler werden dafür bezahlt, Probleme effektiv zu lösen, und wir sollten nicht 3 Tage damit verbringen, etwas selbst zu tun, anstatt eine Stunde lang Hilfe zu bekommen, wenn beide das gleiche Ergebnis für den Projektbesitzer liefern. Auch wenn wir das in unseren eigenen Projekten sind.

    Entwicklerzeit ist eine der höchsten Ausgaben für ein Projekt und eine wichtige Fähigkeit, um Ihre eigene Zeit gut zu verwalten. Unabhängig davon, ob es sich um Zeitboxen, Pomodro-Technik oder etwas anderes handelt, müssen Entwickler lernen, zusammenzuarbeiten und die Nutzung ihrer Zeit zu maximieren, nicht ihre Fähigkeiten zu maximieren.

    Trennen Sie sich von Ihrem Arbeitsprodukt: "Sie sind nicht Ihr Code."

    Im Laufe der Jahre wurden viele gute Artikel darüber geschrieben (wie this oder dies). Jeder Handwerker, der so viel Zeit damit verbracht hat, seine Fähigkeiten zu entwickeln und etwas aufzubauen, wird sein Selbstwertgefühl mit dem Endprodukt verbunden fühlen. Schließlich sagt seine Qualität und Nützlichkeit etwas über Ihre eigenen aus.

    Aber auch hier ist der Wert von Code für das Unternehmen und die Benutzer, wie gut dieser Code funktioniert, und nicht, wie intelligent oder unabhängig die Person ist, die ihn erstellt hat ist. Der Wert eines Entwicklers ist nicht der Code, den er bereits erstellt hat. Es ist ihre Fähigkeit, in Zukunft nützlichen Code zu erstellen . Und je länger sie mit einer bestimmten Technologie oder einem bestimmten Unternehmen gearbeitet haben, desto höher sollte dieser Wert sein - aber die einzige Möglichkeit, ihn zu steigern, besteht darin, Zeit und Mühe in ihn zu investieren. Und das bedeutet Feedback zu abgeschlossenen Arbeiten und (hoffentlich) mehr Einblick in die Ziele des Unternehmens, nicht nur eine Aufgabenliste.

    Codeüberprüfungen verbessern den Code, ja, aber sie sollten auch die Fähigkeiten des Entwicklers verbessern Set und Kenntnis der Probleme, mit denen sich der Code befassen soll. Konzentrieren Sie sich nicht darauf, einem Entwickler mitzuteilen, dass sie falsch sind, da ihr Wert derzeit nicht überprüft wird . Die Richtigkeit und Nützlichkeit von diesem Codeabschnitt wird überprüft, ebenso wie die Inspektion von Teilen, die aus einer Montagelinie kommen, qualitätsgeprüft wird und nicht der Arbeiter, der die Maschine betreibt. Aus diesem Grund handelt es sich um eine Code -Überprüfung, nicht um eine Entwickler -Überprüfung.

    Das Aufdecken eines Musters fortgesetzter Fehler im Endprodukt einer Montagelinie kann natürlich zu langfristigen Maßnahmen führen (z. B. mehr Schulung oder Untersuchung zusätzlicher Probleme weiter oben auf der Linie), aber das ist dem unmittelbaren kurzfristigen Ziel völlig untergeordnet - Sicherstellen, dass die bereits abgeschlossene Arbeit versendet werden kann. Im Idealfall hilft dies auch dem Entwickler, seine eigene Arbeit zu verbessern.

    Dies geschieht jedoch nur, wenn sich der Prüfer auf das resultierende Produkt konzentriert und (gegebenenfalls) wie die vorhandenen Tools verwendet werden sollen und welche anderen Tools es sind verfügbar. Die Diskussion darüber, wie die Person die Tools falsch verwendet oder ignoriert, hilft ihnen nicht dabei, es besser zu machen, sondern macht sie nur verlegen und ärgerlich.

    Mike Robinson
    2020-04-25 03:12:32 UTC
    view on stackexchange narkive permalink

    "Ich werde auch meinen ersten Job außerhalb des College nie vergessen. (Auch wenn es 'am College' war.)"

    Hier ist mein Vorschlag:

    "Eines haben Sie beide objektiv gemeinsam: den Quellcode, der erstellt wurde."

    Und außerdem:

    "Der Prozess , der führte (" Lassen Sie uns beide zwinkern, als ob er anonym wäre ... ") Entwickler-X zur Erstellung des Quellcodes-Y als Antwort auf Anforderung-Z. "

    Sprechen Sie über das Arbeitsprodukt ... den Quellcode .. . und der Arbeitsprozess. Nicht über den Arbeiter. Machen Sie absolut (!) klar, dass die Beschäftigung der Person nicht gefährdet ist ... "Wenn wir nicht gedacht hätten, dass Sie darin gut sind, hätten wir Sie nie eingestellt." Machen Sie deutlich, dass das Unternehmen fest entschlossen ist, dieser Person jetzt beim Wachstum zu helfen.

    Vollständige Offenlegung: "Das erste Computerprogramm, das ich jemals geschrieben habe [in BASIC] war acht Zeilen lang, brauchte sechs Monate, um [in den späten 1970er Jahren] zu schreiben, und hatte einen Fehler darin. "

    " Die Entwicklung von Computersoftware ist eine verdammt schwierige Sache " und wir müssen immer klarstellen, dass wir das verstehen. "Ja, wir wissen, dass es schwer ist, und ... wir haben Ihren Rücken."

    nick012000
    2020-02-23 16:03:26 UTC
    view on stackexchange narkive permalink

    Stellen Sie sicher, dass er einen Stift und Papier zur Codeüberprüfung mitbringt.

    Bitten Sie ihn vor der Codeüberprüfung, Stift und Papier mitzubringen, und erwarten Sie, dass er sich Notizen macht. Wenn er ohne sie auftaucht, weisen Sie ihn an, zu seinem Schreibtisch zurückzukehren, sie abzuholen und dann zurückzukehren, sobald er dies tut. Starten Sie es erst, wenn er die benötigten Materialien hat. Stellen Sie sicher, dass Sie während der Überprüfung nach jedem Punkt eine Pause einlegen, damit er entsprechende Notizen machen kann.

    Wenn er bereit ist, zerreißen Sie seinen Code und erklären Sie, warum er schlecht ist und warum Ihr Weg besser ist. Halten Sie sich nur an die Fakten; spekuliere nicht über seine Motive. Wenn er etwas gut gemacht hat, beginnen und beenden Sie Ihre Codeüberprüfung mit diesen Bereichen - der "Sandwich-Technik" für Feedback. Wenn er emotional oder defensiv wird, halten Sie einen Moment inne und stellen Sie sicher, dass ihm klar ist, dass Sie ihn nicht angreifen, sondern versuchen, ihm zu helfen. Er kann sich nicht verbessern, wenn er schließlich nicht versteht, in welchen Bereichen er nicht gut abschneidet.

    Wenn es sich um eine lange Liste handelt, lassen Sie ihn einige (5? 10?) Von diesen ansprechen, bevor Sie eine weitere kurze Überprüfung nur dieser durchführen, bevor Sie zu den nächsten übergehen.
    _ "Zerreißen Sie seinen Code und erklären Sie, warum es schlecht ist" _, _ "Stellen Sie sicher, dass ihm klar ist, dass Sie ihn nicht angreifen" _, stehen diese beiden Aussagen nicht in direktem Konflikt miteinander?
    @PlayerOne Nein, Sie machen nur klar, dass er minderwertige Arbeit geleistet hat, aber das bedeutet nicht, dass er ein schlechter Angestellter ist (es sei denn, er produziert weiterhin minderwertige Arbeit ohne Anzeichen einer Verbesserung).
    In Ordnung.Persönlich zu sagen, dass jemand minderwertige Arbeit geleistet hat, klingt für mich wie ein Angriff (und das war meine Erfahrung, als ich auch auf diese Weise Codeüberprüfungen durchführte).Möglicherweise ist es kulturell abhängig.
    Mann, wenn ich mich auf Stift und Papier verlassen muss, sind wir in Schwierigkeiten.Dies ist etwas, das von Person zu Person sehr unterschiedlich ist.Ich mit einem Notizbuch in der Hand ist ein letzter Ausweg.
    @nick012000 Menschen neigen dazu, sehr emotional an Dinge gebunden zu sein, die sie produziert haben.Zu sagen, dass etwas, das Sie produziert haben, "schlecht" ist, unterscheidet sich nicht wesentlich von dem, dass Sie "schlecht" sind.Das ist zumindest ein Grund, warum Leute es nicht mögen, bei Stack Exchange herabgestimmt zu werden.
    Re "Stift und Papier mitbringen", nein, nein, nein.Wenn das OP Dinge aufschreiben möchte, sollte er / sie das Schreiben machen.
    @jamesqf Ich habe eine formelle Ausbildung als Lehrer.Das ist definitiv falsch - das Notieren verbessert den Rückruf von Schülern dramatisch, selbst wenn sie sie danach nicht konsultieren.
    @nick012000: Ich habe viel praktische Ausbildung als Student (BS bis PhD) und ich weiß, dass ich nicht darauf achten kann, was jemand sagt UND mir Notizen macht.Jetzt werde ich nicht darüber streiten, ob es meinen Rückruf verbessern könnte, wenn ich mir Notizen machen könnte, aber da ich es nicht kann, ist jedes Argument umstritten.
    Sascha
    2020-02-23 20:00:23 UTC
    view on stackexchange narkive permalink

    Teilen Sie zwei Dinge auf:

    • die Namenskonventionen des formalen Teils
      1. nicht verwendeter Code
      2. Codeformatierung
      3. Stil der Kommentare
      4. ol>
    • Der Teil Erfahrung / Logik / Architektur

    Der formale Teil, den Sie mit "Entschuldigung" ansprechen müssen , ich bin dein Chef / Projektleiter ", mach es. Wenn Sie dies nicht tun, hat dies disziplinarische Konsequenzen. Sagen Sie mir, wie viel Zeit Sie benötigen, und wir werden das planen.

    Bitten Sie ihn / sie im Übrigen, Ihnen eine Skizze oder einen Überblick darüber zu zeigen, wie ein neuer Code implementiert wird, bevor Sie ihn starten und mit ihm diskutieren Sie. Erklären Sie bestimmte Dinge vorerst für verboten (das habe ich in einem Projekt getan, als es darum ging, die Datenstruktur zu berühren).

    _Wenn Sie es nicht tun, hat dies disziplinarische Konsequenzen. _ - Ist dies nicht genau die Art von Ton, die das OP speziell vermeiden wollte?


    Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
    Loading...