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?
quelle
Antworten:
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.
quelle
"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.
quelle
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 "
quelle
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ß:
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:
Wenn die Antwort ausreicht, ist das großartig. Wenn nicht, und es geht weiter:
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.
quelle
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.
quelle
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 ...
quelle
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.
quelle
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.
quelle