Sollten wir darauf bestehen, dass ein Mitarbeiter nach vielen Jahren immer noch schlechten Code schreibt? [geschlossen]

13

Ich stelle diese Frage an C ++ - Programmierer, weil: a) Nur ein C ++ - Programmierer die technischen Vorzüge der Beispiele beurteilen kann; b) Nur ein Programmierer hat ein Gefühl für das Temperament eines anderen Programmierers, der Code wie diesen schreibt.

HR und die Direktoren sind sich bewusst, dass es ein Problem gibt, nur weil sie Beweise vor Ort sehen. Ich rufe an, ob wir dem fraglichen Programmierer mehr Zeit geben. Viele der Fehler sind sehr grundlegend - meine Frage (an Programmierer) lautet, ob jemandem, der sich als leitender C ++ - Entwickler ausgibt, aufgrund von Beispielen seines aktuellen Codes der Vorteil eines Zweifels eingeräumt werden sollte. Nicht-Programmierer - auch Leute außerhalb der C ++ - Programmierung - können dies nicht beurteilen.

Als Hintergrund wurde mir die Aufgabe übertragen, Entwickler für ein etabliertes Unternehmen zu managen. Sie haben einen einzigen Entwickler, der sich (seit Ewigkeiten) auf die gesamte C ++ - Codierung spezialisiert hat, aber die Qualität der Arbeit ist miserabel. Codeüberprüfungen und -tests haben viele Probleme aufgedeckt, eines der schlimmsten sind Speicherlecks. Der Entwickler hat seinen Code noch nie auf Lecks getestet, und ich stellte fest, dass die Anwendungen mit nur einer Verwendungsminute viele MB auslaufen können. Der User berichtete von enormen Verlangsamungen und sagte: "Das hat nichts mit mir zu tun - wenn sie beendet und neu gestartet werden, ist alles wieder gut."

Ich habe ihm Werkzeuge zur Erkennung und Verfolgung von Lecks gegeben und mich viele Stunden mit ihm zusammengesetzt, um zu demonstrieren, wie die Werkzeuge verwendet werden, wo die Probleme auftreten und was zu tun ist, um sie zu beheben. Wir sind 6 Monate später, und ich habe ihn beauftragt, ein neues Modul zu schreiben. Ich habe es überprüft, bevor es in unsere größere Codebasis integriert wurde, und war bestürzt, die gleiche schlechte Codierung wie zuvor zu entdecken. Der Teil, den ich unverständlich finde, ist, dass ein Teil der Codierung schlechter als amateurhaft ist. Zum Beispiel wollte er eine Klasse (Foo), die ein Objekt einer anderen Klasse (Bar) füllen könnte. Er entschied, dass Foo einen Verweis auf Bar haben würde, zB:

class Foo {
public:
    Foo(Bar& bar) : m_bar(bar) {}
private:
    Bar& m_bar;
};

Aber (aus anderen Gründen) brauchte er auch einen Standardkonstruktor für Foo und anstatt sein ursprüngliches Design in Frage zu stellen, schrieb er dieses Juwel:

Foo::Foo() : m_bar(*(new Bar)) {}

Jedes Mal, wenn der Standardkonstruktor aufgerufen wird, ist ein Balken durchgesickert. Um die Sache noch schlimmer zu machen, reserviert Foo Speicher aus dem Heap für zwei andere Objekte, hat aber keinen Destruktor oder Kopierkonstruktor geschrieben. Jede Zuweisung von Foo verliert also tatsächlich 3 verschiedene Objekte, und Sie können sich vorstellen, was passiert ist, als ein Foo kopiert wurde. Und - es wird nur besser - er wiederholte dasselbe Muster bei drei anderen Klassen, so dass es kein einmaliger Ausrutscher ist. Das ganze Konzept ist auf so vielen Ebenen falsch.

Ich würde mich verständnisvoller fühlen, wenn dies von einem absoluten Neuling kommen würde. Aber dieser Typ macht das schon seit vielen Jahren und hat in den letzten Monaten sehr gezielt trainiert und beraten. Mir ist klar, dass er die meiste Zeit ohne Mentoring oder Peer Reviews gearbeitet hat, aber ich fange an zu spüren, dass er sich nicht ändern kann. Also meine Frage ist, würden Sie mit jemandem bestehen, der solch offensichtlich schlechten Code schreibt?

user94986
quelle
14
Wenn Sie bereits gesehen haben, dass er schlechten Code geschrieben hat, warum haben Sie ihn 6 Monate lang seine Scheiße schreiben lassen, ohne ihn zu beaufsichtigen?
Billy McNuggets
4
IMO, wenn Sie jemanden sehen, der eine Weile schlechte Arbeit leistet, KÖNNEN Sie ihn NICHT alleine arbeiten lassen, auch wenn es nur um das Debuggen / Reparieren geht. Wenn es Ihr Wille ist, ihn in Ihrer Firma zu halten, MÜSSEN Sie ihn beaufsichtigen und NACHHER sehen, ob Sie immer noch schlechte Ergebnisse von ihm bekommen. Ihn 6 Monate lang alleine arbeiten zu lassen, ohne ihn anzusehen, ist IMO ein schlechtes Management.
Billy McNuggets
3
@ user94986 Wenn Sie dann Zeit mit ihm verbringen und ihm erklären, dass seine Gewohnheiten schlecht sind, sollten Sie ihn im Auge behalten. Wenn sich nichts ändert, warten Sie nicht 6 Monate, um mit ihm zu sprechen.
Billy McNuggets
4
Wenn er nicht glaubt, dass Speicherlecks ein Problem sind, macht es keinen Sinn, ihm beizubringen, wie man sie vermeidet und Tools zur Verfügung stellt, die ihm dabei helfen. Das Hauptproblem kann sein, dass er die Ziele und Anforderungen für das Produkt falsch versteht.
Maxim1000
2
Diese Frage scheint inoffiziell zu sein, da es darum geht, was eine effektive Rechtsberatung für die Personalabteilung ist, deren Erbringung für uns im besten Fall problematisch ist.
Weltingenieur

Antworten:

22

Mein Rat wäre, ihn mit diesem speziellen Beispiel zu konfrontieren und zu sehen, was er sagt. Wenn er bestreitet, dass der Code irgendetwas Schlechtes enthält, kann man leider nicht viel tun. Wenn er akzeptiert, dass er einen Fehler begangen hat (auch wenn er in dieser Hinsicht defensiv ist), gibt es zumindest Raum für Verbesserungen. Wenn Sie die Zeit und Mühe akzeptieren, ihn zu verbessern, müssen Sie oder ein leitender Programmierer sich hinsetzen und gemeinsam programmieren, bis alle diese Tendenzen abgeflacht sind (seien Sie bereit, diese Person mindestens 1 Monat lang zu beschäftigen).

Ein schlechter Programmierer, mit dem ich normalerweise arbeiten kann, aber ein Programmierer, der sich nicht verbessern kann, kann ich nicht.

Neil
quelle
12
+1 für "Ein schlechter Programmierer, mit dem ich normalerweise arbeiten kann, aber ein Programmierer, der sich nicht verbessern kann, kann ich nicht."
Ja, ich würde den Typen auch wissen lassen, dass es ziemlich ernst ist. Es hört sich so an, als hätte man ihm seit Jahren nichts gesagt oder nicht anerkannt, dass es ein Problem gibt. Kommen Sie zu dem Gespräch und zeigen Sie Beispiele für Dinge auf, die er nicht hätte tun sollen, und wie sich dies auf die Qualität der App auswirkt. Wenn er immer noch nicht bereit ist, ein Problem mit seinem Code anzugehen, würde ich ihn wahrscheinlich gehen lassen. Und ich würde ihm wahrscheinlich nicht viel Zeit geben, um seinen Auftritt zusammenzubringen, wenn er es tat. Sie müssen auf jeden Fall betonen, dass es um seine Zukunft im Unternehmen geht und dass ihm eine ziemlich kritische Fähigkeit für einen C ++ - Entwickler fehlt.
Erik Reppen
@ErikReppen Ich stimme zu, aber ich denke auch, dass Programmierer die stursten Typen von Menschen auf der Erde sein können. Wenn Sie zu viel Druck ausüben, kann er Probleme mit seinem Code einfach deshalb ablehnen, weil er defensiv ist. Ich denke , es ist wichtig , den Ernst der Lage zu betonen, aber ich würde immer noch versuchen , mit ihm zu sympathisieren „Ich war zufällig zu bemerken , diese kleinen Fehler gemacht . Sie passieren es zu fangen? Glauben Sie, Sie diesen gleichen Fehler gemacht in anderen Bereichen Ihr Programm? "
Neil
@Neil Der einzige Weg durch eine störrische Mauer ist ein Tritt in den Arsch. Und ich spreche aus Erfahrung als die hartnäckige Seite dieser Gleichung. Das heißt, wenn es das erste Mal ist, dass er von einem Problem mit seinem Code erfährt, würde ich es etwas leiser angehen lassen, aber es scheint, als hätten sie schon einmal versucht, ein Problem zu kommunizieren
Erik Reppen,
@ErikReppen Vielleicht, aber du riskierst, dass er sich formt, nur um dich von seinem Schwanz zu holen. In diesem Tempo könnten Sie genauso gut sagen: "Form auf, oder Sie sind gefeuert." Zumindest stellt dieser Ansatz fest, ob er sich seiner Fehler bewusst ist.
Neil
17

Also meine Frage ist, würden Sie mit jemandem bestehen, der solch offensichtlich schlechten Code schreibt?

Nein. Ich würde jeden professionellen C ++ - Entwickler entlassen, dem das grundlegende Verständnis der Speicherverwaltung fehlt.

Wenn es jemand ist, der aus Java oder C # kommt oder so, würde ich ihm eine gewisse Lattitude geben, aber das ist reine Inkompetenz.

Telastyn
quelle
9
Ich kann nicht verstehen, wie diese Antwort positiv bewertet werden kann. Jemanden zu feuern ist keine Angelegenheit, die leicht genommen werden sollte.
Florian Margaine
3
@FlorianMargaine - Klar, aber das scheint ein klarer Fall zu sein. Wie viel kostet dieser Mitarbeiter das Unternehmen bei Umsatzverlusten aufgrund von Speicherlecks oder Sicherheitslücken? Wie viel Zeit verloren, um diesen Mist zu testen / zu reparieren? Wie viel kostet es, dass der OP sie babysittet? Wie sehr leidet es, wenn andere Programmierer an seiner bloßen Anwesenheit leiden ? Solange der Mitarbeiter keine absurde Menge an Domänenkenntnissen (oder Erpressung) hat, ist deren Ersetzung auf keinen Fall teurer.
Telastyn
1
@FlorianMargaine, Diese Art von Angestellten wird nicht genug entlassen, es lähmt das Unternehmen in Schwierigkeiten, technische Schulden zu beheben. In großen roten Ampeln steht: "Es ist ihnen egal, warum sollten wir?". Wissen Sie, was der gewünschte Mitarbeiter wirklich sagen würde? "... aber es interessiert mich, also muss ich zu einem Ort gehen, der es tut". Die Bösen kümmerten sich bereits nicht darum, also bleiben sie in Ihrem Büro. Sie MÜSSEN Menschen entfernen, die die Produktivität beeinträchtigen, mehr als sie beitragen. Dies ist keine leichte Entscheidung, aber es ist wirklich eine klare Linie. Das Versäumnis zu handeln ist eine klare Handlung.
JM Becker
13

Wir können den weiteren Teil Ihrer Frage nicht beantworten. Nämlich, wenn Sie diesen Mitarbeiter behalten oder entlassen. Es ist schwierig, einen Mitarbeiter zu entlassen, aber das ist eine Entscheidung, die außerhalb des Zuständigkeitsbereichs einer solchen Community liegt.

Sie haben Ihre Frage aktualisiert, um die Antworten auf C ++ - Programmierer einzuschränken. Zu meinem Hintergrund / meinen Qualifikationen: Ich schneide meine Zähne in C und kann in C ++, C # und Java programmieren. Und ich mag es, Rennbedingungen zwischen Threads zu jagen, weil ich denke, dass es Spaß macht. Ja, ich "kriege" ein bisschen herum.

Ihre Antwort und Entscheidung dreht sich darum : Ob sich jemand ändern kann oder nicht, hängt von der Person ab und davon, ob sie sich ändern möchte.

Aber fangen wir mit ein paar Fragen an:

  1. Haben Sie ihn nach dem Code und dem von Ihnen erwähnten Beispiel gefragt? Wie war sein Eindruck von der Kritik?
  2. Haben Sie ihm in diesen 6 Monaten Einzelheiten zum Verständnis der Speichermanipulation und zur Sicherstellung, dass sein Code keine Speicherlecks aufweist, mitgeteilt?
  3. Haben Sie in diesen 6 Monaten regelmäßig Feedback gegeben, um anzuzeigen, ob er Fortschritte erzielt hat oder nicht?
  4. Haben Sie ausdrücklich darauf hingewiesen, dass seine alte Art der Codierung in neuem Code nicht mehr akzeptabel war?

Sie müssen sicherstellen, dass Sie all diese Fragen mit Ja beantworten können. Wenn nicht, liegt immer noch eine Beweislast für Ihre Kommunikation mit ihm vor.

Seine Antwort auf Ihre jüngste Rezension wird der aufschlussreichste Teil sein.

Wenn er es versucht hat und einige Anzeichen von Fortschritt zeigt, müssen Sie möglicherweise Ihren Mentoring-Prozess überprüfen. Wenn überhaupt, sollten Sie in Betracht ziehen, ihn mit einem erfahrenen Programmierer zusammenzubringen, damit er sofort Feedback erhält, während er Designentscheidungen trifft. Ich bin kein Fan von Pair Programming, aber in einem solchen Fall kann es sehr nützlich sein. Es ist nicht immer ein praktischer Weg, ihn dazu zu bringen, den alten Code immer weiter zu überarbeiten.

Wenn er es nicht versucht hat, müssen Sie seine Motivation besser verstehen. Hat er nicht verstehen , dass er muss härter versuchen? Ist es ihm einfach egal? Gibt es andere Bereiche im Team, in denen seine Fähigkeiten besser passen würden und die ihn mehr interessieren? Wenn er es nicht versuchen wollte, dann musst du verstehen warum.

Von dort aus wissen Sie, ob er sich ändern möchte und ob er sich ändern kann . Kein Wunsch, sich zu ändern, ist gleichbedeutend damit, sich nicht ändern zu können. Wenn es Verlangen und einen gewissen Fortschritt gibt, sollten Sie nachdrücklich überlegen, wie Sie versuchen, ihn zu rehabilitieren.


quelle
1
+1 für "Ihn
Bill
+1 für die letzten Absätze. Fortschritte, die von jemandem erzielt wurden, im Vergleich zu Anstrengungen, die unternommen wurden, um zu bestimmen, ob beide Personen die Leistung beurteilen müssen.
Marjan Venema
10

Ich fürchte, sein schlechter Code ist nicht das einzige Problem in Ihrem Team.

  1. Wer überprüft seinen Code? Warum ist er ohne Warnung davongerutscht, weil er Code mit einer Sicherheitsanfälligkeit aufgrund eines Speicherverlusts akzeptiert hat?
  2. Warum haben Stresstests dieses Problem nicht gefunden? Benutzt du sie? Wenn ja, warum arbeiten sie dann nicht?
  3. Er blieb lange Zeit unbeaufsichtigt. Warum?
  4. Er benutzt nicht die Werkzeuge, die Sie ihm gegeben haben. Wie haben Sie ihn motiviert, geeignete Werkzeuge einzusetzen?

Sie sagen, er ist schon länger in der Firma. Eine solche Person zu entlassen, ist selten eine gute Idee (es sei denn, er ist ein Wally-Mitarbeiter). Ihr Wissen über Kundenbedürfnisse, Produkte, die Sie besitzen usw. ist oft viel wertvoller als der Code, den sie schreiben.

Lösungen:

  • Bringen Sie ihn zur Qualitätssicherung, damit er lernt, was zu vermeiden ist
  • Koppeln Sie die Programmierung mit jemandem, der auf seine Fehler hinweisen kann
  • Erweiterte QA-Bemühungen für seinen Code
  • Lassen Sie ihn Stresstests schreiben. Wenn er sieht, dass seine Entwicklungsmaschine abgestürzt ist, nachdem er 10.000 Objekte erstellt und zerstört hat, lernt er es vielleicht
  • ein paar / alle von ihnen oben :)
Andrzej Bobak
quelle
3

Die Entscheidung, jemanden zu feuern, fällt jedem schwer. Ihre Situation wird jedoch durch mehrere Faktoren verschärft:

  1. Es scheint, dass dieser Entwickler seit mehreren Jahren im Unternehmen ist
  2. Der Entwickler schreibt den gesamten C ++ - Code der Firma
  3. Offenbar hat noch niemand zuvor mit dem Entwickler über den Grad des schlechten Codes gesprochen
  4. Als neuer Manager haben Sie keine Ahnung, wer / was der Entwickler im / über das Unternehmen weiß und welche politischen Konsequenzen es hat, den Entwickler zu entlassen

Das heißt, Sie haben die letzten 6 Monate damit verbracht, dem Entwickler den Fehler seines Verhaltens zu zeigen, und sein neuer Code hat sich noch nicht verbessert.

Zu diesem Zeitpunkt müssen Sie wirklich ein proaktives Management starten, damit Sie innerhalb von 3 Monaten Zeit haben

  • Ein anständiger C ++ - Programmierer, der weiß, was er tut

oder

  • Beendet den Entwickler.

Dazu müssen Sie sich mit dem Entwickler zusammensetzen, schriftlich / per E-Mail erläutern, was falsch ist, wie sich der Entwickler verbessern kann, und ganz klar angeben, dass er in 3 gekündigt wird, wenn die erwartete Verbesserung nicht eintritt Monate.

Sie müssen sich auch darüber im Klaren sein, dass die Verbesserung von diesem Punkt an für den Rest seiner Anstellung im Unternehmen und nicht nur für den Zeitraum von drei Monaten erwartet wird!

Sie sollten auch Ihren eigenen Vorgesetzten und die Personalabteilung (falls vorhanden) informieren.

Während dieses Vorgangs müssen Sie den Entwickler aktiv verwalten und die Aufgaben / den Code alle 1-2 Tage überprüfen und sicherstellen, dass sie auf dem neuesten Stand sind. Dabei müssen Sie die nicht vorhandenen Aufgaben genau beschreiben und erläutern, wie Sie sie verbessern können.

Armitage
quelle
1

Entweder war dir nicht klar, wie ernst du seine schlechte Verarbeitung nimmst (dh es ist möglich, dass er sieht, wie viel Zeit du mit ihm verbracht hast, wenn er sich verbessern will, anstatt eine absolute Notwendigkeit), oder er hat eine unglaublich schlechte Haltung, die nicht nachhaltig ist. Wenn diesem Entwickler nicht bereits klar ist, dass Sie über seine Position zu diesem Thema nachdenken, muss dies klar formuliert werden (vorausgesetzt, Ihre Führung ist mit Ihrer Kündigungsbefugnis einverstanden). Der Schock wird hoffentlich eine Veränderung bewirken.

Die Einstellungsentscheidung hat jedoch weitaus größere Auswirkungen als nur dieser Typ. Sie müssen die Auswirkungen auf das Team berücksichtigen. Wenn seine Haltung gedeihen darf, kann dies entweder zu Ressentiments von anderen führen oder andere fühlen, dass solche Dinge auch in Ordnung sind. Aus Sicht der Mannschaft muss jedoch klar sein, dass dies aus den richtigen Gründen geschah und er reichlich Gelegenheit hatte, sich zu verbessern.

Ein Juwel, das ich vor Jahren aufgegriffen habe, ist die Tatsache, dass Leute mit technischem Wissen, das andere nicht haben, das Management dazu bringen können, dass sie nachlassen. Es ist schlecht für das Team. Sie haben möglicherweise Angst, den einzigen c ++ - Entwickler zu verlieren, aber sie können ersetzt werden. Natürlich gibt es Risiken, wenn er die veröffentlichten Produkte gut kennt, aber ich habe oft gesehen, dass Menschen mit scheinbar unersetzlichem Produkt- / technischen Wissen leichter als erwartet ersetzt wurden. Teams und Organisationen können häufig Lücken schließen, die zunächst schwer zu schließen sind. Natürlich, wenn er nicht über C ++ - Kenntnisse oder organisationsspezifisches Wissen verfügt, von dem Sie glauben, dass es schwer zu ersetzen ist, gibt es viel weniger Probleme!

Wayne M
quelle
1
Ich vermute, dieser Typ wäre absolut verblüfft, als er herausfand, dass sein Manager daran denkt, ihn zu entlassen. Einige Leute, die man einfach mit einem Brett über den Kopf schlagen muss, sagen ihnen, dass sie sich verbessern müssen, oder sie werden gefeuert.
HLGEM
0

Natürlich solltest du nicht. Denken Sie daran, dies ist keine Wohltätigkeitsorganisation, Sie tauschen Geld gegen Arbeit. Wenn er nicht seine Seite des Geschäfts hält, dann würde ich wie bei jeder Transaktion aufhören zu zahlen.

MetaGuru
quelle
-1

Wenn Sie ihm eine Chance geben möchten, entwickeln Sie einen standardisierten Test, der Messdaten zu Speicherverlusten erfasst. Überwachen Sie wöchentlich seinen Fortschritt und bestehen Sie darauf , den von ihm geänderten Code zu sehen und nach Verbesserungen zu suchen. Wenn er es zu diesem Zeitpunkt nicht schafft, entlassen Sie den nutzlosen Beschimpfer.

Jack Aidley
quelle