Wie bringe ich die Leute dazu, mit dem Fahrradfahren aufzuhören (wobei ich mich auf Kleinigkeiten konzentriere)?


139

Ich wurde beauftragt, anderen Teams eine neue Codebasis beizubringen, stoße aber immer wieder auf ein Problem. Immer wenn ich mit Leuten durch den Code gehe, kommen wir nicht weit, bevor die gesamte Übung in ein Bikeshedding- Training übergeht (Mitglieder einer Organisation, die belanglosen Themen ein unverhältnismäßiges Gewicht beimessen ). Da sie die Code - Basis nicht wissen, aber denken sie brauchen , um es zu verbessern, konzentrieren sie sich auf die Dinge , die sie können verstehen:

Why is that named that? (2 Minuten, um zu erklären, warum es so heißt, mehr als 10 Minuten, um einen neuen Namen zu debattieren)

Why is that an abstract base class rather than an interface? (2 Minuten zur Erläuterung, mehr als 10 Minuten zur Erörterung der relativen Vorzüge dieser Entscheidung)

...und so weiter. Verstehen Sie mich nicht falsch - gute Namen und ein gutes, konsistentes Design sind wichtig, aber wir werden nie darüber diskutieren, was der Code tatsächlich tut oder wie das System in irgendeiner sinnvollen Weise aufgebaut ist. Ich habe ein paar Schiedsrichter-Meetings durchgeführt, um die Leute aus diesen Tangenten herauszuholen, aber sie sind weg - abgelenkt von dem, was der Code sein wird / sollte, wenn ihre Pet-Trivialität behoben ist und sie das Gesamtbild verpassen.

Also versuchen wir es später noch einmal (oder mit einem anderen Teil der Codebasis) und da die Leute nicht genug Wissen haben, um den Bikeshedding-Effekt zu überwinden, wird es wiederholt.

Ich habe es mit kleineren Gruppen, größeren Gruppen, Code, Whiteboarding, Visio-Diagrammen und riesigen Textwänden versucht. Ich habe sie einfach zu Tode streiten lassen und die Argumente sofort gekürzt ... einige helfen mehr als andere, aber nichts funktioniert . Zum Teufel, ich habe sogar versucht, dass andere Leute aus meinem Team es erklären, weil ich dachte, es könnte sein, dass ich nur schlecht darin bin, Dinge zu erklären.

Wie können Sie andere Programmierer so weit ausbilden, dass sie sich nicht mehr auf Trivialitäten konzentrieren und einen sinnvollen Beitrag zum Design leisten können?


44
Ich hasse es, es zu sagen, aber es klingt für mich so, als ob dieses Phänomen eher ein Problem mit der Codebasis als mit den Neulingen darstellt.
Nicole

30
Haben Sie versucht, Fragen bis zum Ende zu verschieben? "Warte noch ein paar Minuten und ich kann es am Ende erklären" und dann einfach den Rest des Inhalts durchgehen. Vielleicht beantworten sich einige dieser Fragen von selbst
jozefg

21
@ NickC, ich glaube, ob der Code gut ist oder nicht, hat nichts damit zu tun, wie Sie ihn verstehen, wie Sie es schaffen, ein klares Gesamtbild davon zu erhalten. Es ist schlecht, von Anfang an Zeit mit kleinen Details zu verschwenden, ohne sich die Zeit zu nehmen, um ein erstes Gesamtbild zu erhalten, und es wird nie helfen, diesen potenziell schlechten Code zu reparieren.
Shivan Dragon

11
Was ist das Ziel, jemandem die Codebasis beizubringen? Vielleicht können Sie dieses Ziel klarer kommunizieren und herausfinden, warum es wichtig ist, damit sie erkennen, dass das Debattieren eines neuen Namens für ein Objekt von diesem Ziel ablenkt und für ein anderes Meeting reserviert werden sollte.
LarsH

56
Diese Antworten enthalten gute Ratschläge. Ich möchte kurz hinzufügen: Betrachten Sie "Prozess" als Ihren Verbündeten. Wenn jemand sagt, dass "dieses Design suboptimal ist", ist die richtige Antwort "ausgezeichnet". Ich bin froh, dass Sie dies bemerkt haben. Geben Sie nach dieser Besprechung einen Fehler in die Tracking-Datenbank mit einer detaillierten Beschreibung des Problems und Ihrer vorgeschlagenen Lösung ein. Das Triage-Team wird Ihren Vorschlag überprüfen, ihn mit den übrigen Arbeitselementen vergleichen und einem geeigneten Entwickler zuweisen, um ihn zu reparieren, sobald alle Elemente mit höherer Priorität behoben sind. Weiter ... "
Eric Lippert

Antworten:


159

Ich denke, das Problem ist die Aufgabe: "Ich wurde beauftragt, anderen Teams eine neue Codebasis beizubringen".

Sie haben den falschen Job erhalten oder den Job, den Sie erhalten haben, falsch interpretiert.

Indem Sie auf Codeebene präsentieren, fordern Sie zum Nachdenken auf Codeebene auf.

Beginnen Sie auf Systemebene und stellen Sie das Design und die getroffenen Designentscheidungen vor. Erlaube keine erweiterten Diskussionen: Du überprüfst sie nicht. Lassen Sie Fragen zu: Sie möchten, dass sie das System verstehen. Wenn die Leute "es anders gemacht hätten", gut. Vielleicht stimme ich zu. Oder nicht. Aber mach weiter. So ist es jetzt.

Wenn Sie zur Codeebene gelangen, haben Sie sie bereits mit der Systemterminologie vorbereitet. Die Namen (nehme ich an) werden Sinn machen. Wie oben: keine ausführliche Diskussion, Fragen zum Verständnis. Mach weiter.

Stellen Sie nun einige Klassenprobleme auf. Wie können wir die Erweiterung X vornehmen? Wählen Sie etwas Nicht-Triviales, das zum Ablauf des Systemdesigns passt, und arbeiten Sie sich durch, was Sie ändern würden. Sie sollten jetzt die Grundlagen des Systems verstehen. Wählen Sie eine andere Verbesserung, die das System beschädigen könnte, wenn sie falsch ausgeführt wird, und zeigen Sie, wie sie richtig ausgeführt werden kann. Das sollte ein Ah-Ha- Moment für sie sein. Einige könnten Sie sogar schlagen!

Es ist ein harter Auftritt, besonders nach dem Fehlstart. Es hört sich so an, als hätten Sie bereits viel Zeit und Mühe investiert, und vielleicht gibt es ein bisschen ein Gefühl von mir gegen sie. »Mach's gut und fang von vorne an. Wir gehen davon aus, dass sie kluge Leute sind. Geben Sie ihnen die Herausforderung, auf höherer Ebene zu denken. Teilen Sie die bereits vorhandenen Gruppen auf, indem Sie verschiedene Gruppenquerschnitte für die neuen Sitzungen auswählen.


3
Ich habe zuerst ein paar hochrangige Designanweisungen durchgeführt und einige neue / unbekannte Technologien (IoC-Container, Dynamik) geschult, um die Vorbereitung zu erleichtern. Das Training ist ziemlich gut gelaufen. Es ist ein guter Punkt, um zu erheben.
Telastyn

+1 Ich versuche nicht mit Leuten mit "psychischen Hacks" zu kämpfen, wie "Ich beantworte deine Fragen außerhalb des Themas in und zu deiner Zeit!" sondern die Sichtweise
ändern

3
Fantastische Antwort. Mir gefällt vor allem der Vorschlag, den Fokus eher auf das zu richten, was es tut, als auf die Bezeichnung seiner internen Komponenten.
Daniel Hollinrake

66

"Park sie". Erklären Sie zu Beginn der Lektion, worüber Sie sprechen sollen, und erläutern Sie deutlich, was als Off Topic gilt. Wenn Ihnen eine Frage gestellt wird, die eindeutig OT ist, sagen Sie dies und fahren Sie fort. Wenn sie darauf zurückkommen, schreiben Sie die Frage für eine spätere Diskussion auf ein Whiteboard (dies ist wichtig) und fahren Sie fort. Beobachten Sie am Ende der Lektion, wenn sie in ihrer Freizeit sind und nicht Ihre, wie schnell diese Fragen gelöst werden.


8
+1 Auf diese Weise fühlen sich die Menschen nicht ignoriert.
andy256

Ich stimme dem zu. WENN das Problem darin besteht, zu lange irrelevante Dinge zu besprechen, dann besprechen Sie keine irrelevanten Dinge ...
Chris

7
Bitten Sie den Fragesteller, die OT-Fragen auf einem Whiteboard zu notieren, anstatt sich die Zeit zu nehmen (auf einer bestimmten Wiki-Seite, JIRA-Ausgabe, wo immer).
LarsH

14
Ich denke, die physische Handlung, sich einen Moment Zeit zu nehmen, um ihre Frage an die Pinnwand zu schreiben, zeigt dem Fragesteller deutlich, dass Sie ihre Frage zurückstellen (anstatt sie zu ignorieren), und zeigt sie dem Rest des Publikums, der alle Fragen stellt und sich somit verzögert Fortschritt.
JBRWilkinson

1
@ LarsH - genau. Wenn Sie die weiße Tafel aufsetzen, wird das Gespräch für alle sichtbar gestoppt. Wenn es wieder auftaucht, zeigt der Ausbilder nur auf die Frage und sagt: "Ich verspreche, wir werden darauf zurückkommen."
Mattnz

21

Setzen Sie die Erwartungen richtig und seien Sie ehrlich, offen und offen.

Stellen Sie sicher, dass Ihre Ziele offen und transparent sind.

Starten Sie Diskussionen mit der von andy256 (+1) beworbenen High-Level-Ansicht, und achten Sie auch darauf, dass Sie Ihre Ziele angeben, z

"... Wenn wir uns dieses Problem ansehen, sollten wir sicherstellen, dass wir uns nicht auf x, y und z konzentrieren. Stellen Sie außerdem sicher, dass wir uns nicht mit Implementierungsdetails wie a, b, c oder trivialen Details befassen wie j, k, l. Ich weiß, dass es im Code viele Details gibt und Details, die behoben, verbessert oder standardisiert werden könnten "


+1 für die ersten 2 Sätze. Es ist jedoch kein guter Weg, die Leute dazu zu bringen, nicht an etwas zu denken. "Was auch immer du tust, denk nicht an rosa Einhörner." Hast du darüber nachgedacht, bevor ich rosa Einhörner erwähnte? Wahrscheinlich nicht. Wenn ich stattdessen sagte: "Lassen Sie sich nicht von imaginären Tieren ablenken und konzentrieren Sie sich stattdessen auf australische Tiere", dann sind Ihnen vielleicht Koalas und Kängurus eingefallen, aber wahrscheinlich keine rosa Einhörner.
Michael Shaw

Guter Punkt. Der eigentliche Punkt ist jedoch nicht zu verhindern, dass Leute denken (und nicht sagen), sondern zu vermeiden, dass Menschen in langwierige Gespräche geraten, in denen sie Mörder und Moralsauger treffen. Die Leute werden immer eine Menge ungesagter Dinge denken. Das ist okay. In einer professionellen Geschäftssituation werden einige Dinge gesagt und viele nicht.
Michael Durrant

17

Wie können Sie andere Programmierer so weit ausbilden, dass sie sich nicht mehr auf Trivialitäten konzentrieren und einen sinnvollen Beitrag zum Design leisten können?

Stellen Sie sich ihre Bedenken nicht als "Kleinigkeiten" oder "Bikeshedding" vor. Das sind wertende Worte, und sie beleidigen. Ihre Bedenken sind berechtigt. Sie sind im Moment einfach nicht wichtig.

Der Schlüssel zu einem guten Meeting ist, dass jeder weiß:

  • warum hast du ein Treffen und
  • was hoffst du raus zu bekommen
  • wie lange sollte es dauern

Erklären Sie diese Dinge ausdrücklich und erläutern Sie die Ziele.

Sie könnten zum Beispiel sagen: "In dieser Besprechung möchte ich Sie mit dem Foo-Paket und dessen Verwendung in unserem Berichtsmodul vertraut machen. Mein Ziel ist es, dass Sie genug über Foo wissen, damit Sie an dem bevorstehenden Bar Reports-Projekt arbeiten können nächste Woche. Ich möchte, dass wir in den nächsten 90 Minuten fertig sind. "

Wenn dann ein Thema auftaucht, könnte es so aussehen:

Neue Person: "Warum wird FooWidget als Fassadenmuster implementiert?"

Sie: "Nun, ich denke, es liegt daran (kurze Erklärung der Entwurfsentscheidung)" oder "Ich weiß nicht."

Wenn die Antwort ausreicht, ist das großartig. Wenn nicht, und es geht weiter:

NP: Glaubst du nicht, es wäre besser als Singleton?

Sie: "Ich hatte nicht wirklich darüber nachgedacht, aber ich würde gerne weiter erklären, wie FooWidget funktioniert."

NP: "Aber wenn es als Singleton gemacht wird, dann können wir--"

Sie: "Es tut mir leid, Sie zu unterbrechen, aber ich muss mich weiterhin darauf konzentrieren, wie FooWidget funktioniert. Dieses Meeting ist nur bis 11:00 Uhr angesetzt und wir müssen noch viel durchstehen. Die Designdiskussion muss auf ein anderes Mal warten . "

Nachdem Sie das ein- oder zweimal durchgearbeitet haben, können Sie es mit der Abkürzung "Das liegt außerhalb des Rahmens dieser Besprechung" versehen.

Beachten Sie, dass Sie nicht sagen "Das ist dumm, sich Sorgen zu machen" oder "Es spielt keine Rolle" oder "Halt die Klappe" oder "Sie sind zu neu, um Eingaben zu haben". Sie konzentrieren die Besprechung lediglich auf das, was erledigt werden muss, und den damit verbundenen Zeitaufwand.


1
Es ist leicht zu erkennen, wann ein Moderator wirklich kein Interesse an Feedback hat. Diese Treffen verlaufen schnell. Keinen interessiert es.
Chux

4

In bestimmten Unternehmen werden Sie dies niemals erreichen können. Viele Organisationen legen mehr Wert auf politisches Ringen und Klettern als auf intellektuelle Fähigkeiten, Fleiß und Loyalität. Und warum sollten sie es nicht tun? Das Klettern auf einer Leiter versetzt die Menschen in Machtpositionen, ermöglicht es ihnen, ihr persönliches Leben mit mehr Ermessensspielraum zu verbessern, und wird niemals obsolet.

Vergleichen Sie diese Machtkämpfe mit tatsächlichen Problemen, abstraktem Denken und dem Treffen von Entscheidungen zu schwierigen Themen, die möglicherweise für die Konsequenzen von später verantwortlich sind, und viele Mitarbeiter sind sehr bemüht, so viel wie möglich mit dem Fahrrad zu fahren.

Der einzige Rat, den ich vorschlage, ist, dass Sie im Kontext Ihrer Organisation möglichst klar machen, dass das persönliche Schicksal dieser Teilnehmer von ihrem Verständnis, ihrem Beitrag und ihrem Einsatz für das eigentliche Problem abhängt, das Sie zu lösen versuchen. Wenn das die Unternehmensarchitektur ist, die in dieser -errant-Codebasis ausgedrückt wird, und alles, was fehlschlägt, dann ist es das. Machen Sie es ihnen klar, dass sie erhebliche sinnvolle Eingaben sorgen müssen , dass . Nicht irgendeine andere Zufälligkeit, die zufällig ein Tiergesicht eines älteren Menschen ist und ihm nette Brownie-Punkte einbringt, wenn er mit diesem älteren Menschen einverstanden ist.

Dies ist oft schwierig, da der leitende Angestellte normalerweise die aktuelle Technologie nicht versteht, sich nicht dafür interessiert und leider die Rohstoffe kontrolliert: Arbeitszeit; Hire & Fire, Konferenzraumpolitik, Beförderungen usw. usw. im Ernst und so weiter bis zum n-ten.


3

Was du Bikeshedding nennst, würde ich das Umwandeln des Gedankenflusses von jemandem in unseren eigenen nennen. Durch das Erörtern von Namen und Mustern lernen sie, den Code in ihren eigenen Begriffen zu verstehen, und es gibt keine Möglichkeit, dies zu verhindern, es ist erforderlich.

Außerdem ist es nicht erforderlich, eine sehr detaillierte Anleitung für eine ganze Codebasis zu erstellen, da Details lange bevor sie daran arbeiten, vergessen werden.

Basierend auf diesen beiden Ideen würde ich vorschlagen, die Codebasis in Einheiten und die Lernenden in Zweiergruppen aufzuteilen. Für jede Codeeinheit hat jede Gruppe beispielsweise 25 Minuten Zeit (hängt natürlich vom LOC ab ), um in der Lage zu sein, den Code für die anderen 5-10 Minuten durchzuspielen. Drei Minuten Fragen und mit der nächsten Einheit wiederholen. Erklären ist das Schlüsselwort; Sie müssen sicherstellen, dass die anderen alles verstanden haben.

Sie wären nur da, um Zeit durchzusetzen, kein Off-Topic und die Kontrolle der Einheit wurde ausreichend verstanden. Sie werden Akteure ihres Lernens sein und sich mehr darauf konzentrieren, den anderen etwas zu erklären, als sich mit dem Fahrrad zu beschäftigen.

Möglicherweise benötigen Sie von der Codeeinheit ein handgezeichnetes Schema auf hoher Ebene, das kopiert und in den gemeinsam genutzten Teamdokumenten aufbewahrt wird, sodass Sie in Zukunft auf etwas Greifbares verweisen können. Das ist auch gut, um Erinnerungen zu verankern.

Entschuldigung, wenn Sie das schon versucht haben ...


1

Haben Sie versucht, Vorlesungen zu machen, die die Leute einzeln ansehen?

Erstellen Sie kurze Videos oder Präsentationen, die den Inhalt, die Funktionsweise des Codes oder alles, was Sie ihnen beibringen möchten, in einem Format erläutern, in dem sie es selbst betrachten und die Informationen erlernen müssen, die Sie ihnen beibringen möchten.

Anschließend verwenden Sie die teambasierten Sitzungen, um inhaltsbezogene Themen zu erörtern. Sie müssen eindeutig angeben, dass die Teamsitzungen nur zum Erörtern und Beheben von inhaltsbezogenen Problemen vorgesehen sind.

Wenn Sie den Unterricht individuell anbieten, können Sie möglicherweise andere soziale Probleme vermeiden, bei denen eine einzelne Angelegenheit zur Stimme der Gruppe als Kollektiv werden und vom eigentlichen Zweck des Unterrichts ablenken kann.


13
Nein ......., keine Videos ..... "Death By Powerpoint" wurde von einem noch schlimmeren Schicksal abgelöst ......, obwohl es den gewünschten Effekt haben wird, Fragen zu stoppen - bedrohen Sie sie mit mehr Videos , die 10 Minuten zu erklären , was in Sekunden in 30 gelesen und verstanden werden kann ....
mattnz

6
+1 mattnz Es ist unwahrscheinlich, dass sich Kommunikationsprobleme durch Einweginteraktionen verbessern lassen.
Michael Durrant

1
Ich möchte nicht pausiert werden, auch wenn ich in einem Video bin! Welches Videoformat / welcher Videocodec deaktiviert das Pausieren? :) :) :)
Kaz

1

Versuchen Sie, ihnen zuerst das Design der Codebasis beizubringen und sie durch die Architektur zu führen, BEVOR Sie beginnen, sich bestimmte Beispiele anzusehen. Auf diese Weise sehen sie möglicherweise, wie die von Ihnen betrachteten Codebeispiele in das Gesamtbild passen. Überlegen Sie, wie Ihr Trainingsprogramm aufgebaut ist. Und schließen Sie die Geschäftsmotivation hinter dem Entwurf ein.

Ich habe mehrere Jahre damit verbracht, andere Entwickler zu schulen, und ich habe mich nie mit dem Code befasst, bevor ich ihnen gezeigt habe, wie das System zusammenpasst. Als ich sie dann dazu brachte, Code-Übungen im Framework durchzuführen, waren die Fragen strukturiert und thematisch.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.