Ich arbeite seit ungefähr einem Jahr an meinem Arbeitsplatz. Ich arbeite hauptsächlich in unserer GUI-Oberfläche, die Methoden aus einem C-Backend verwendet, aber ich muss mich im Allgemeinen nicht mit ihnen befassen, außer mit Rückgabewerten. Unsere Benutzeroberfläche ist angesichts unserer Einschränkungen ziemlich vernünftig strukturiert.
Ich wurde beauftragt, dem Befehlszeilenteil des Programms eine Funktion hinzuzufügen. Die meisten dieser Funktionen haben eine Länge von 300 Zeilen und sind schwierig zu bedienen. Ich versuche, Teile davon zu sammeln, um bestimmte Alarminformationen zu erhalten, und ich habe Probleme, mich zu organisieren. Ich weiß, dass ich meine Tests komplizierter mache, indem ich sie in einer einzigen langen Funktion durchführe.
Sollte ich einfach alles in einer riesigen Funktion gemäß dem Stil der vorhandenen Funktionen halten oder sollte ich die Alarme in ihren eigenen Funktionen einkapseln?
Ich bin mir nicht sicher, ob es angemessen ist, gegen die aktuellen Kodierungskonventionen zu verstoßen oder ob ich einfach in die Kugel beißen und den Code für mich selbst etwas verwirrender machen sollte.
Zusammenfassend vergleiche ich
showAlarms(){
// tons of code
}
gegen
showAlarms(){
alarm1();
alarm2();
return;
}
alarm1(){
...
printf(...);
return;
}
BEARBEITEN: Vielen Dank für den Rat an alle, ich habe beschlossen, meinen Code faktorisiert zu gestalten und dann zu fragen, was sie wollen. Wenn sie alles in einem wollen, kann ich einfach meinen faktorisierten Code ausschneiden und ihn wieder in 1 umwandeln große Funktion. Dies sollte es mir ermöglichen, es zu schreiben und einfacher zu testen, selbst wenn sie den gesamten Code in einer einzigen Definition haben möchten.
UPDATE: Am Ende waren sie mit dem faktorisierten Code zufrieden und mehr als eine Person hat mir dafür gedankt, dass ich diesen Präzedenzfall geschaffen habe.
quelle
Antworten:
Dies ist wirklich zwischen Ihnen und Ihren Teamkollegen. Niemand sonst kann dir die richtige Antwort geben. Wenn ich es jedoch wage, zwischen den Zeilen zu lesen, liefert die Tatsache, dass Sie diesen Stil als "schlecht" bezeichnen, einige Informationen, die darauf hindeuten, dass es besser ist, langsam zu fahren. Sehr wenige Codierungsstile sind tatsächlich "schlecht". Es gibt solche, die ich selbst nicht verwenden würde, aber sie haben immer einen Reim oder Grund dafür. Dies legt für mich nahe, dass die Geschichte mehr enthält, als Sie bisher gesehen haben. Herumzufragen wäre ein sehr weiser Anruf. Jemand weiß vielleicht etwas, was Sie nicht wissen.
Ich bin persönlich darauf gestoßen, als ich zum ersten Mal in die missionskritische Echtzeit-Codierung vordrang. Ich habe folgenden Code gesehen:
Als der helle und glänzende OO C ++ - Entwickler, den ich war, machte ich sie sofort auf die Fehlerrisiken aufmerksam, die sie hatten, indem ich Mutexe manuell sperrte und entsperrte, anstatt RAII zu verwenden . Ich bestand darauf, dass dies besser war:
Viel einfacher und sicherer, oder ?! Warum müssen Entwickler daran denken, ihre Mutexe auf allen Kontrollflusspfaden freizuschalten, wenn der Compiler dies für Sie tun kann?
Was ich später herausfand, war, dass es einen prozeduralen Grund dafür gab. Wir mussten bestätigen, dass die Software tatsächlich korrekt funktionierte, und es gab eine endliche Liste von Tools, die wir verwenden durften. Mein Ansatz mag in einer anderen Umgebung besser gewesen sein, aber in der Umgebung, in der ich gearbeitet habe, würde mein Ansatz den Aufwand für die Verifizierung des Algorithmus leicht verzehnfachen, da ich gerade ein C ++ - Konzept von RAII in einen Codeabschnitt gebracht habe das wurde nach Maßstäben gehalten, die für das Denken im C-Stil wirklich zugänglicher waren.
Also, was für mich wie ein schlechter, geradezu gefährlicher Codierungsstil aussah, war eigentlich gut durchdacht und meine "gute" Lösung war tatsächlich die gefährliche, die später Probleme verursachen würde.
Also fragt herum. Es gibt sicherlich einen erfahrenen Entwickler, der mit Ihnen zusammenarbeiten kann, um zu verstehen, warum er das so macht. Oder es gibt einen erfahrenen Entwickler, der Ihnen helfen kann, die Kosten und den Nutzen eines Refactors in diesem Teil des Codes zu verstehen. Fragen Sie in jedem Fall nach!
quelle
Glauben Sie wirklich, dass es nur eine Frage des Stils ist, Funktionen zu haben, die mit 300 Zeilen schwierig zu bedienen sind? Wenn Sie also dem schlechten Beispiel folgen, könnte das Gesamtprogramm aus Gründen der Konsistenz in einem besseren Zustand bleiben? Ich vermute, Sie glauben es nicht, sonst hätten Sie diese Frage hier nicht gestellt.
Ich vermute, dass diese Funktionen so lang sind, weil es in unserem Geschäft viele mittelmäßige Programmierer gibt, die nur Features über Features stapeln, ohne auf Lesbarkeit, Codequalität, korrekte Benennung, Komponententests und Refactoring zu achten, und sie haben nie gelernt, richtige Abstraktionen zu erstellen . Sie müssen selbst entscheiden, ob Sie dieser Herde folgen oder ein besserer Programmierer sein möchten.
Nachtrag, aufgrund der Kommentare: "300 Zeilen" und "schwer zu bedienen" sind meiner Meinung nach starke Anzeichen für schlechten Code. Nach meiner Erfahrung ist es sehr unwahrscheinlich, dass es einen "versteckten technischen Grund" gibt, warum ein solcher Code nicht besser lesbar implementiert werden kann, vergleichbar mit dem Beispiel von Cort Ammons Antwort. Ich stimme jedoch Cort zu, dass Sie dies mit den Verantwortlichen im Team besprechen sollten - nicht um obskure Gründe zu finden, warum der Code oder diese Art von Stil nicht geändert werden kann, sondern um herauszufinden, wie der Code sicher überarbeitet werden kann, ohne Dinge zu beschädigen .
quelle
Nein.
In dem Buch Pragmatic Programmer spricht der Autor über die Broken Window Theory .
Diese Theorie besagt:
In dem Buch schreibt der Autor eine Parallele zwischen dieser Theorie und dem Code. Sobald Sie einen Code wie diesen gefunden haben, hören Sie auf und stellen sich die gleiche Frage.
Und die Antwort lautet: Nein.
Sobald Sie dieses zerbrochene Fenster verlassen - in unserem Fall ein fehlerhafter Code - wird dies den Effekt hervorrufen, dass jeder zerbrochene Fenster zurücklässt.
Und eines Tages wird der Code zusammenbrechen.
Geben Sie allen eine Kopie von Clean Code und Clean Coder .
Und während Sie im Fach sind, ist eine Kopie von TDD auch eine gute.
quelle
Ja, mach es. Struktur! = Stil
Sie sprechen von Struktur, nicht von Stil. Stilrichtlinien schreiben (normalerweise) keine Struktur vor, da die Struktur im Allgemeinen aufgrund ihrer Angemessenheit für ein bestimmtes Problem und nicht aufgrund ihrer Angemessenheit für eine Organisation ausgewählt wird.
Achtung
Seien Sie einfach verdammt sicher, dass Sie keine negativen Konsequenzen in anderen Bereichen haben, die Ihnen möglicherweise nicht in den Sinn gekommen sind. Zum Beispiel,
Sei sanft
Denken Sie daran, dass Sie Teil eines Teams sind, und obwohl guter Code wichtig ist, ist es auch sehr wichtig, dass Ihre Teammitglieder in der Lage sind, die Dinge, die Sie geschrieben haben, zu pflegen, wenn Sie in den Urlaub fahren. Versuchen Sie, sich an einen Fluss zu halten, der für Menschen, die an den alten Stil gewöhnt sind, sinnvoll ist. Nur weil du der klügste Typ im Raum bist, heißt das nicht, dass du über alle Köpfe hinweg reden solltest!
quelle
Ich sehe das nicht als Code-Konvention. Ich sehe dies als jemanden, der nicht versteht, wie man wartbaren Code schreibt, der leicht zu verstehen ist. Ich würde Ihren Code in verschiedene Funktionen aufteilen, während Sie Ihrem Team die Vorteile dieser Vorgehensweise vorschlagen und erläutern, während Sie versuchen, zu verstehen, warum Funktionen mit 300 Zeilen als akzeptabel erachtet werden. Es würde mich sehr interessieren, ihre Argumentation zu hören.
quelle
Die Antwort ist in der Codeüberprüfung.
Die eigentliche Frage ist, ob Sie, wenn Sie gut faktorisierten Code einreichen, der einzige sind, der bereit ist, damit zu arbeiten.
Ich glaube, wie die meisten Leute hier, dass 300 Linienfunktionen ein Gräuel sind. Windex auf eine Mülldeponie zu bringen, bringt jedoch nicht viel. Das Problem ist nicht der Code, es sind die Codierer.
Nur Recht zu haben, ist nicht genug. Sie müssen Leute auf diesem Stil verkaufen. Zumindest beim Lesen. Wenn Sie nicht wie dieser arme Kerl enden, werden Sie entlassen, weil Ihre Fähigkeiten zu weit über Ihren Kollegen liegen
Fangen Sie klein an. Fragen Sie nach und finden Sie heraus, ob jemand andere kleinere Funktionen bevorzugt. Besser noch, stöbern Sie in der Codebasis und sehen Sie, ob Sie herausfinden können, wer die Kleinsten schreibt (Sie stellen möglicherweise fest, dass der hässlichste Code der älteste Code ist und die aktuellen Codierer besseren Code schreiben). Sprechen Sie mit ihnen darüber und finden Sie heraus, ob Sie einen Verbündeten haben. Fragen Sie, ob sie jemanden kennen, dem es genauso geht. Fragen Sie, ob sie jemanden kennen, der kleine Funktionen hasst.
Sammeln Sie diese kleine Gruppe und sprechen Sie über Änderungen. Zeigen Sie ihnen die Art von Code, den Sie schreiben möchten. Stellen Sie sicher, dass sie es lesen können. Nehmen Sie Einwände ernst. Nehmen Sie die Änderungen vor. Lassen Sie Ihren Code genehmigen. Sie haben jetzt die Macht eines Meetings hinter sich. Mit ein paar weiteren Schritten können Sie ein einseitiges Dokument erstellen, das den von Ihnen eingeführten neuen Stil ausdrücklich akzeptiert.
Meetings sind überraschend mächtige Dinge. Sie können Schlagkraft erzeugen. Mit Schlagkraft werden Sie gegen diejenigen kämpfen, die sich dieser Bewegung widersetzen. Und genau das ist es an diesem Punkt. Eine Bewegung. Sie kämpfen für das Recht, den Status Quo zu verbessern. Die Menschen fürchten Veränderungen. Sie müssen süß reden, cajole und stoßen. Aber mit ein bisschen Glück werden Sie sofort akzeptiert.
quelle
Manchmal muss man mit dem Strom gehen.
Wie Sie sagten, wurden Sie beauftragt, eine Funktion in eine vorhandene Arbeitscodebasis zu implementieren.
Ungeachtet der Unordnung, und ich verstehe, es ist verlockend, es aufzuräumen. In der Geschäftswelt haben Sie jedoch nicht immer die Möglichkeit, Code umzugestalten.
Ich würde sagen, mach einfach das, wozu du aufgefordert wurdest und mach weiter.
Wenn Sie der Meinung sind, dass es sich lohnt, das Produkt zu überarbeiten oder neu zu schreiben, müssen Sie es zur Diskussion mit dem Team bringen.
quelle
Bevor ich feststelle, dass die Praktiken schlecht sind, würde ich zunächst einen Schritt tun, um den Grund für große Methoden und andere Praktiken zu verstehen, die sich als schlecht herausstellen könnten.
Dann müssten Sie sicherstellen, dass die Testabdeckung ziemlich hoch oder wirklich hoch ist (soweit Sie dies ohne größere Umgestaltung tun können). Wenn dies nicht der Fall ist, würde ich darauf hinarbeiten, dass die Abdeckung wirklich hoch ist, obwohl Sie den Code nicht geschrieben haben. Auf diese Weise können Sie eine Beziehung aufbauen, und Ihr neues Team wird Sie ernster nehmen.
Sobald Sie diese Grundlagen abgedeckt haben, würde niemand in ihrem Verstand Sie herausfordern. Führen Sie als Bonus-Item ein Micro-Benchmarking durch, und das wird Ihren Fall wirklich bereichern.
Oft trägt die Art und Weise, wie Sie es ausdrücken, wesentlich dazu bei, die Codekultur zu ändern. Mit gutem Beispiel vorangehen. Oder noch besser, warten Sie auf ein Stück Code, das Sie schreiben können - refaktorieren und Unit-Test, verdammt noch mal, und Viola - Sie werden gehört.
quelle
Diese Art von Frage ist im Grunde " Bitte lesen Sie meine Teamkollegen ". Zufällige Leute im Internet können das nicht. Alle Antworten, die Sie erhalten, sind nur die persönlichen Meinungen der Leute über den Codierungsstil. Der Konsens ist, dass kürzere Methoden vorzuziehen sind, aber Sie scheinen das bereits selbst zu denken, so dass Sie das nicht wiederholen müssen.
Die aktuelle Codebasis scheint also einen anderen Codierungsstil zu verwenden als den, den Sie bevorzugen. Was sollte man tun? Zuerst müssen Sie herausfinden:
Es gibt nur einen Weg, dies herauszufinden. Fragen Sie .
Es kann mehrere Gründe für lange Funktionen geben. Dies könnte daran liegen, dass das Team glaubt, lange Funktionen seien besser als mehrere kurze Funktionen. Dies könnte auch daran liegen, dass es sich um Legacy-Code handelt und das Team bevorzugt, dass neuer Code einem saubereren Design folgt. Also entweder konnte Wahl , die Sie in Schwierigkeiten als Entwickler landen, wenn Sie mit dem Team sprechen nicht und verstehen ihre Argumentation.
quelle
Es gibt verschiedene Ebenen des "Stils".
Auf einer Ebene, die in der Regel Teil von Kodierungskonventionen ist, bedeutet dies, wo Leerzeichen, Leerzeilen, Klammern und Namen (gemischte Groß- und Kleinschreibung, Unterstriche usw.) eingefügt werden.
Auf einer anderen Ebene geht es um das Programmiermodell, manchmal um das Vermeiden von Statik oder die Verwendung von Schnittstellen über abstrakte Klassen, um das Aufdecken von Abhängigkeiten und vielleicht sogar um das Vermeiden einiger esoterischer Sprachfunktionen.
Hinzu kommen die vom Projekt verwendeten Bibliotheken und Frameworks.
Manchmal gibt es eine maximale Begrenzung der Funktionsgröße. Aber selten gibt es ein Mindestlimit! Sie sollten also herausfinden, welche dieser Dinge für die Mächte wichtig sind, und versuchen, dies zu respektieren.
Sie müssen herausfinden, ob das Team eine Umgestaltung des vorhandenen Codes ablehnt. Dies sollte nach Möglichkeit unabhängig vom Hinzufügen eines neuen Codes erfolgen.
Auch wenn sie den vorhandenen Code nicht umgestalten möchten, können Sie möglicherweise einige Ebenen in Abstraktionen für den neuen Code einfügen, den Sie hinzufügen. Dies bedeutet, dass Sie im Laufe der Zeit eine bessere Codebasis entwickeln und den alten Code möglicherweise als migrieren können Wartung erfordert.
quelle