Ich bin auf der Suche nach einem effizienten Weg, der sich auch nicht als Beleidigung herausstellt, um bestehenden Teammitgliedern OOP-Konzepte vorzustellen. Meine Teamkollegen sind nicht neu in OO-Sprachen. Wir arbeiten schon lange mit C ++ / C #, daher ist die Technologie an sich bekannt.
Ich sehe mich jedoch um und ohne großen Aufwand (meist in Form von Code-Reviews) scheint es, dass wir C-Code produzieren, der sich zufällig in Klassen befindet. Das Prinzip der einmaligen Verantwortung, Abstraktionen oder Versuche, die Kopplung zu minimieren, um nur einige zu nennen, werden kaum angewendet. Ich habe Klassen gesehen, die keinen Konstruktor haben, aber jedes Mal, wenn sie instanziiert werden, memset auf 0 setzen.
Aber jedes Mal, wenn ich OOP aufrufe, nickt jeder und macht den Eindruck, dass er genau weiß, wovon ich spreche. Die Konzepte zu kennen ist gut, aber wir (einige mehr als andere) scheinen es sehr schwer zu haben, sie anzuwenden, wenn es darum geht, tatsächliche Arbeit zu liefern.
Codeüberprüfungen waren sehr hilfreich, aber das Problem bei Codeüberprüfungen besteht darin, dass sie erst nachträglich auftreten, sodass es so aussieht, als würden wir den gerade geschriebenen Code am Ende umschreiben (meistens umgestalten, aber immer noch viel Zeit in Anspruch nehmen). Auch Code-Reviews geben nur Rückmeldungen an einen einzelnen Ingenieur, nicht an das gesamte Team.
Ich spiele mit der Idee, eine Präsentation (oder eine Serie) zu machen, und versuche, OOP erneut aufzurufen, zusammen mit einigen Beispielen für vorhandenen Code, der besser hätte geschrieben und überarbeitet werden können. Ich könnte einige wirklich alte Projekte gebrauchen, die niemand mehr besitzt, so dass zumindest dieser Teil kein heikles Thema sein sollte. Wird dies jedoch funktionieren? Wie ich bereits sagte, haben die meisten Leute C ++ schon lange gemacht, also denke ich, dass a) sie dort sitzen und darüber nachdenken, warum ich ihnen Dinge erzähle, die sie bereits kennen, oder b) sie es möglicherweise als Beleidigung ansehen, weil ich es bin Ich sage ihnen, dass sie nicht wissen, wie sie ihre jahrelange, wenn nicht jahrzehntelange Arbeit verrichten sollen.
Gibt es einen anderen Ansatz, der ein breiteres Publikum erreichen würde als ein Code Review, der sich aber gleichzeitig nicht wie ein Strafvortrag anfühlt?
Ich bin kein frischgebackener Student, der utopische Ideale für perfekt gestalteten Code hat, und das erwarte ich auch von niemandem. Der Grund, warum ich das schreibe, ist, dass ich gerade eine Rezension von einer Person gemacht habe, die tatsächlich ordentliches High-Level-Design auf Papier hatte. Wenn Sie sich jedoch Klassen vorstellen: A -> B -> C -> D, implementieren im Code B, C und D alle fast dieselbe öffentliche Schnittstelle, und B / C verfügt über One-Liner-Funktionen, sodass die oberste Klasse A absolut funktioniert Die gesamte Arbeit (bis hin zur Speicherverwaltung, zum Parsen von Zeichenfolgen, zum Einrichten von Verhandlungen ...) erfolgt hauptsächlich in 4-Mongo-Methoden und ruft in jeder Hinsicht fast direkt D auf.
Update: Ich bin ein Tech Lead (6 Monate in dieser Rolle) und habe die volle Unterstützung des Gruppenleiters. Wir arbeiten an einem sehr ausgereiften Produkt und die Wartungskosten lassen sich auf jeden Fall bekannt geben.
Antworten:
Warum entwickeln Sie kein kurzes Training in den SOLID- Prinzipien und geben Ihnen dieses Training? In meiner jetzigen Organisation hat es anscheinend ganz gut geklappt, und ich finde, dass es Spaß macht, kurze Trainings zu geben (für alle Beteiligten).
Bei meiner Schulung habe ich einige Zeit gebraucht, um nach pathologischen "schlechten" Beispielen im vorhandenen Code (verschiedener Projekte) zu suchen, und diese in der Präsentation Schritt für Schritt anhand der Prinzipien überarbeitet. Dies hat gezeigt, dass
quelle
Bei einem Projekt haben wir Überprüfungen durchgeführt.
15 Minuten. An der weißen Tafel. Sprechen Sie vor dem Codieren durch das Design.
Der wichtigste Teil ist die Planung der Entwurfsprüfung vor jeglichen Implementierungsarbeiten.
Wir hatten auch "Critical Design Reviews", die eine große, schweißtreibende Sache waren. Sie beinhalteten viele Dokumente und eine lange Präsentation. Sie waren schwer einzuplanen und wurden fast immer erst nach Beginn der Codierung herausgeschoben, wodurch sich ihr Wert auf Null verringerte.
Informelle Entwurfsprüfungen - vor dem Codieren - ohne Druck - ohne Dokumentation - ermöglichen eine bessere Diskussion darüber, wie Verantwortlichkeiten zugewiesen werden und wie Objekte zusammenarbeiten.
quelle
Ich gehe davon aus, dass Sie jünger sind als einige der Entwickler, aber weiter oben in der Nahrungskette.
Es besteht die Gefahr, dass die „erfahrenen Ingenieure“ das Richtige tun - oder da es sich um ein ausgereiftes Produkt handelt, das es möglicherweise schon seit Jahrzehnten gibt, war es das Richtige.
Älterer Code wurde in der Regel so optimiert, dass er auf der Hardware der damaligen Zeit schnell ausgeführt werden kann. Dies bedeutet unter anderem, die Vererbung zu reduzieren und Funktions- / Methodenaufrufe für triviale Operationen zu vermeiden.
Compiler sind im Laufe der Jahre viel intelligenter geworden, sodass nicht alles, was früher zutrifft, jetzt zutrifft. Beispielsweise kann ein Compiler eine kleine Funktion inline setzen.
Möglicherweise besteht ein Weg vorwärts darin, einen anderen Ansatz zu wählen - bitten Sie die Entwickler, zu erklären, wie / warum ihre Methode besser ist als die Theorie, die Ihnen beigebracht wurde - und ehrlich zu sein.
quelle
Würde die Forderung nach Komponententests mit einer 100% igen Zweigabdeckung für jede neue / geänderte Methode nicht zu einer Minimierung der Kopplung zwischen den Methoden führen.
quelle
Vielleicht möchten Sie das Buch "Design Patterns" von der Gang of Four abholen. Es ist nicht spezifisch für C ++, sodass Sie das C ++ - Wissen Ihrer Kollegen nicht offen kritisieren, wenn Sie darauf verweisen. Gleichzeitig werden Themen angesprochen, die Sie für relevant halten. Außerdem wird das Buch weithin als relevant akzeptiert, sodass es nicht einfach als theoretisch oder unpraktisch abgetan werden kann.
Bedenken Sie andererseits, dass C ++ weder im Design noch in der Praxis eine reine OO-Sprache ist. Die gesamte Konstruktor- / Memset-Story klingt, als ob Sie RAII einführen sollten. Dies ist überhaupt keine OO-Technik, sondern C ++ -spezifisch. Die relevanten Bücher sind (More) Effective C ++ und (More) Exceptional C ++.
quelle
But every time I bring up OOP, everyone always nods and makes it seem like they know exactly what I'm talking about
undMy teammates are not new to OO languages
, aber ich kann sehen, dass es in der Tat ein bisschen vage ist, da sie möglicherweise nur darüber lügen, OOP zu kennen, wenn OP mit ihnen darüber spricht.