Mein Kollege versteht die Dinge nicht, mit denen er arbeitet. Was ist zu tun? [geschlossen]

13

Ich habe 3 Tage damit verbracht, einen sehr undurchsichtigen Fehler in einer von meinem Kollegen erstellten Bibliothek zu beheben. Dieser Fehler tritt sehr selten auf. Immerhin stellte ich fest, dass dieser Fehler auf einen Thread-übergreifenden Zugriff auf ein Objekt ohne Sperre zurückzuführen ist. Eigentlich ist dies kein erster Fehler dieser Art, es gab ähnliche Fehler zuvor. Er führt gerade seine Unit-Tests durch, und wenn etwas fehlschlägt, setzt er irgendwo ein Schloss auf. Und wenn nichts ausfällt, ist sein Code perfekt. Anscheinend hat er keine Ahnung, was die Sicherheit des Einfädelns angeht. Ich bin mir zu 100% sicher, dass es viele ähnliche Bugs gibt, die noch nicht aufgetaucht sind. Es sieht so aus, als ob PM das Threading nicht versteht.
Das Problem ist, dass er viel mehr Zeit in der Firma arbeitet als ich. Wie auch immer, ich kann nicht einfach sagen "dieser Typ ist in diesem Bereich inkompetent", weil dies immer einen "schlechten Teamplayer" anzeigt.

tika
quelle
Welches Land ist das?
Es ist ein internationales Unternehmen.
Tika
2
Wenn es wirklich ein großes Problem ist und Sie zu 100% sicher sind, dass Ihr Kollege einen Fehler macht, ist es das erste, höflich darauf hinzuweisen, dass er nicht bedroht ist. Das zweite ist, wenn Ihr Kollege nicht zuhört, nur auf die möglichen Schäden in bar hinzuweisen. Das hören sich alle Manager genau an, und das sehr genau. Ein Threading-Problem wie das von Ihnen beschriebene ist möglicherweise sehr schädlich. Wenn Sie in Ihren Aussagen nicht zu 100% sicher sind, fahren Sie mit diesen fort.
NB
Gehört wahrscheinlich auf die Project Management SE-Site.
Bernard
1
Die Project Management SE-Site verfügt nicht über ein "Multithreading" -Tag, über das diese Frage verfügen sollte.
RalphChapin

Antworten:

13

Überzeugen Sie den Premierminister, dass das Know-how des Teams zum Thema Threading verbessert werden sollte, um solche Fehler zu vermeiden, und sagen Sie ihm, dass Sie bereit sind, einen Workshop oder eine Präsentation darüber zu organisieren. Machen Sie es nicht zu einer persönlichen Sache zwischen Ihnen und Ihrem Kollegen.

Doc Brown
quelle
Ich fürchte, dieser Typ wird das nicht begrüßen, weil er glaubt, er sei auf diesem Gebiet professionell (und kann es jedem selbst beibringen). Aber ich kann es versuchen.
Tika
Ah ja, und ein großes Problem - Englisch ist nicht meine Muttersprache, ich spreche nicht sehr gut.
Tika
Wenn sowohl Ihr Kollege als auch Ihr PM nur begrenzte Kenntnisse über das Einfädeln und die Fadensicherheit haben, ist die Schulung definitiv der beste Ansatz. Es ist nicht die Inkompetenz eines Mannes, sondern die Kompetenz des Teams, die das Problem darstellt.
Boisvert
1
Ein Workshop ist etwas, bei dem jeder sein Wissen einbringen kann und von dem jeder etwas lernen sollte. Wenn Ihr Kollege denkt, dass er etwas über das Einfädeln weiß, können Sie vielleicht auch einige Dinge von ihm lernen.
Doc Brown
8

Schreiben Sie einen Komponententest, der den Fehler aufzeigt, und bitten Sie ihn, ihn zu beheben.


quelle
1
Er ist sich dieses Fehlers bereits bewusst. Er kann den Grund einfach nicht finden.
Tika
Haben Sie den Grund in der dreitägigen Debug-Sitzung nicht gefunden? Oder lese ich deine Frage falsch?
1
@ scarfridge Hängt von der Plattform ab. Für Java können Sie Bytecode-Instrumentierung oder aspektorientierte Programmierung verwenden, um eine Wartezeit genau dort einzufügen, wo das Problem liegt (oder JVMTI verwenden, um die Ausführung zu steuern). Das ist möglich!
1
Es ist nicht nur eine Frage der Reihenfolge. Viele andere Faktoren spielen eine Rolle - welche Kerne führen Code aus, wann GC ausgeführt wird und wie Objekte verschoben werden, wie Änderungen vom Cache eines Kerns auf einen anderen übertragen werden usw.
tika
1
Tatsächlich ist es nur eine Reihe von Methoden, die milliardenfach wiederholt werden. Aber das macht nicht viel aus. Der wahre Grund ist der Zugriff auf ein Dictionary-Objekt von 2 Threads ohne Sperre (dh ohne Speicherbarrieren). Thread A erstellt es, Thread B liest es.
Tika
4
  • Es ist Aufgabe eines leitenden Entwicklers, seinen Code zu überprüfen und Verbesserungen vorzuschlagen.
  • Sie sind nicht da, um nach seiner Arbeit zu überprüfen. Ich würde es persönlich hassen, wenn jemand alle meine Änderungen erneut überprüft, um festzustellen, ob etwas kaputt gegangen ist
  • Wenn er Ihren Rat nicht annimmt, muss PM das Kommunikationsproblem beheben.
  • Das Threading-Problem in einem Komponententest lässt mich fragen, ob dieser Test tatsächlich ein Komponententest ist und nicht ein Integrations- oder Komponententest.
CodeART
quelle
Ich verstehe deine Idee. Gehorche deinem Befehl.
Tika
2
Was macht es aus, wenn ein Test, der ein Problem aufzeigt, "Komponententest" oder "Integrationstest" heißt? Die ganze Situation bleibt gleich.
Doc Brown
1
Ich befürchte, dass sein Kollege den Unterschied zwischen dem Geräte- und dem Komponententest möglicherweise nicht kennt, weshalb möglicherweise weitere Schulungen erforderlich sind, um dieses Problem anzugehen.
CodeART
@CodeRush - Ich nehme an, Sie glauben nicht an Peer Review? Was würde es für Sie bedeuten, um zu schätzen, dass jemand anderes Ihren Code erneut überprüfte (im Gegensatz zum Absturz in der Produktion)?
Ich habe die Idee, aber ich habe in meinen vorherigen Jobs nicht gesehen, dass sie effektiv funktioniert. Ich denke, dass Bewertungen durch einen Senior-Entwickler ein besserer Feedback-Mechanismus sind.
CodeART
-5

Ich denke, Ihr Unternehmen sollte kein Multithreading verwenden.

Nachdem ich ein massives Multithread-Projekt durchgeführt hatte, stellte ich fest, dass zwei Techniken entscheidend dafür waren, dass Dinge funktionieren. Zuerst musste der Code richtig geschrieben werden. Jedes Feld musste manuell überprüft werden, um sicherzustellen, dass es ordnungsgemäß deklariert und synchronisiert wurde, wo immer darauf verwiesen wurde. (Warnung: Ich vereinfache die Dinge hier ein wenig, um meine Antwort kurz zu halten - oder zumindest kürzer.) Zweitens musste der Code getestet werden, indem er auf Einzel- und Mehrkerncomputern vollständig ausgeführt wurde - viele Minuten mit 100% von jedem Kern. (Und wenn es nur 2% jedes Kerns verwendet, wie es oft bei mir der Fall war, ist das auch ein Fehler.)

Möglicherweise können Sie dies verwalten, Ihre Organisation jedoch nicht. Selbst wenn sie das Problem verstanden haben, haben sie nicht das Fachwissen.

Die meisten Sprachen bieten Möglichkeiten, dies zu vermeiden. Wenn Sie einen Socket-Reader haben, der normalerweise einen eigenen Thread hat, lassen Sie ihn die Informationen so schnell und einfach wie möglich an den Haupt-Thread senden. Besser noch, suchen Sie nach Systemklassen / Funktionen, die den Thread-Teil des Lesens für Sie erledigen. Verwenden Sie eine Warteschlange, die "Ereignisse" nacheinander ausführt, wie es die meisten GUI-APIs tun. (Verwenden Sie im Übrigen die Ereigniswarteschlange der GUI-API selbst.) Wenn Sie eine parallele Verarbeitung benötigen, finden Sie möglicherweise eine Art "Arbeitsthread", mit dem Sie Daten / Felder in einem einzigen Thread behalten und alle Übertragungen für Sie abwickeln können.

Betonen Sie alle Gefahren von Multithreading. (Gruselgeschichten: Mein Lieblingsfehler umfasste ein paar Zeilen wie:, int i = 5; i = i * i;was zu ieinem Wert von 35 führte. Eine, die ich oft gesehen habe, war: if (thing != null) thing.reset();eine Nullzeiger-Ausnahme auslösen.) Ich denke, Ihre einzige Hoffnung ist, dass sie verstehen, dass sie sind Treten Sie ein in eine völlig neue, fremde Welt, und vielleicht sollten sie einen großen Schritt zurücktreten.

Ich bin mir nicht sicher, wie Multithreading behandelt werden soll. Wenn der Auftrag an eine Person vergeben werden kann und alles, was sie tun, weggeworfen wird, wenn sie versagt, ist das in Ordnung. Aber ein Team wird nur so stark sein wie sein schwächstes Mitglied, und selbst ein guter Programmierer wird Probleme mit dem vollständigen Multithreading haben. Ich hoffe, die Menschen in der Sprache werden einen Weg finden, es sicher zu machen. Ich habe da draußen eine hilfreiche Software gesehen. Ich halte es jedoch für das Beste, Multithreading zu vermeiden, es sei denn, die Ausführungszeit ist kritisch und ein guter Programmierer oder ein bewährtes Team ist verfügbar.

RalphChapin
quelle
2
Sie haben keine Ahnung, um welches Unternehmen es sich handelt oder was sie tun. Daher ist der Kommentar "Sie können dies möglicherweise verwalten, aber Ihre Organisation kann dies nicht" ein wenig unbegründet - nach allem, was Sie wissen, könnte tika bei Microsoft arbeiten . Wer auch immer sie sind, Multithreading ist möglicherweise der beste Weg, um ihr Problem zu lösen. Es gibt viele Situationen, in denen es passt. Abgesehen davon geht es nicht um Multithreading, sondern darum, einen Kollegen zu behandeln, der aufgrund mangelnden Fachwissens Probleme verursacht.
Anaximander
@anaximander: Multithreading erzeugt Fehler, die sehr schwer zu reproduzieren und daher nur sehr schwer aufzuspüren sind. Um brauchbare, festlegbare MT-Software zu erstellen, müssen Sie mindestens Programmierer und ein Management haben, die sich der Gefahren bewusst sind. Tikas Organisation konnte dies offensichtlich nicht bewältigen. Ich habe gesehen, dass Test- / QA-Leute Programmierer dazu zwingen, Soundcode zu schreiben, indem sie umfangreiche und anspruchsvolle Korrekturen für jeden Fehler testen. Das geht mit MT nicht. Wenn dem Kollegen die Fähigkeit, das Interesse und die Motivation fehlen, halten Sie ihn von MT fern.
RalphChapin
@anaximander: Du musst bessere Erfahrungen mit Microsoft gemacht haben als ich. Um fair zu sein, ich habe noch nie etwas gesehen, das von ihnen wie ein Multithreading-Bug aussah. .... und danke für den Kommentar.
RalphChapin
1
Unabhängig davon, ob die Frage "Wie gehe ich mit einem Kollegen um, dem es an Fachwissen mangelt?" Keine gültige Antwort ist. Unabhängig davon, wie umfangreich und sachkundig ein Unternehmen ist, gibt es immer Unternehmen mit Wissenslücken. Ohne zu wissen, wer das Unternehmen ist oder was die Software tut, kann man meines Erachtens nicht zuverlässig beurteilen, dass das Unternehmen nicht weiß, was es tut, oder dass sein Problem ohne Multithreading gelöst werden kann.
Anaximander