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?