Open Source Etikette

14

Ich habe angefangen, an meinem ersten Open-Source-Projekt auf Codeplex zu arbeiten, und bin auf schrecklichen Code gestoßen. (Ich habe erfahren, dass C # immer noch die "goto" -Anweisung enthält) Ich habe angefangen, Funktionen hinzuzufügen, die der "Eigentümer" haben wollte, und nachdem ich die Codebasis untersucht und gesehen hatte, was für ein Durcheinander es war (z. B. mit "goto"), wollte ich es bereinigen ein bisschen. Aber ich bin ein bisschen besorgt und deshalb wende ich mich an Sie alle: Ist es für mich eine angemessene Etikette, den "schlechten Code" zu "reparieren", oder sollte ich das zulassen und an neuen Funktionen arbeiten? Wie ich bereits sagte, bin ich neu in der gesamten OSS-Szene und arbeite generell in einem Team, also möchte ich es nicht vermasseln.

Jetti
quelle
13
gotoist nicht unbedingt ein Chaos. Es gibt viele Fälle, in denen seine Verwendung vollkommen gerechtfertigt ist.
SK-logic
1
@ SK-Logic - obwohl ich die Quelle nicht vor mir habe, schien es eine Situation zu sein, in der es sinnvoller (und klarer) wäre, eine Methode anstelle von goto zu verwenden. Meine Entwicklungserfahrung ist jedoch begrenzt, so dass ich mich irren könnte :)
Jetti
2
Haben Sie den Erstautor kontaktiert und ihn gefragt, woran er denkt?
k3b
@ k3b - habe ich noch nicht. Ich werde das auf jeden Fall heute Abend tun und sehen, was er denkt.
Jetti

Antworten:

18

Es ist in Ordnung, dies zu tun, wenn Sie bescheiden sind und es nichts kaputt macht . Sie können nicht um das Neuformatieren von Code und das Einführen von Fehlern herumgehen. Hat es gute Unit-Tests? Wenn nicht, würde ich anfangen, durch Hinzufügen von Komponententests einen Beitrag zu leisten, und die Struktur später korrigieren.

Scott Whitlock
quelle
2
Genau. Gute Dokumentation und Tests sind wertvoller als hässlicher Code, der bereits funktioniert.
Filip Dupanović
keine Unit-Tests. Keine Klassen zum Testen. Der gesamte Code befindet sich derzeit im UI-Code. (zB button1_click () {// all code})
Jetti
5
@Jetti - Unit-Tests hinzufügen und dann den Code aus dem GUI-Code-Behind heraus migrieren, wäre dann ein wertvoller Beitrag. Danach können Sie nach Herzenslust umgestalten.
Scott Whitlock
13

Der Zweck von Open Source ist es, mehr Augen auf ein Projekt zu werfen und es zu verbessern. Dazu gehört, den Code zu verbessern. Das heißt, es ist eine gute Form, auf der Liste zu werben, was Sie vorhaben. Möglicherweise werden Sie etwas zurückgedrängt, oder Sie erhalten ein paar +1. Diese gotoAussagen könnten da sein, weil der ursprüngliche Autor sich keinen besseren Weg ausdenken könnte, um die Arbeit zu erledigen. Wenn Sie zurückgedrängt werden, ist es gut, einen Dialog aufzurufen, um herauszufinden, woher der Druck kommt. Versuchen Sie, es nicht persönlich werden zu lassen und versuchen Sie, die Bedenken auszuräumen.

Unterm Strich sprechen Unit-Tests mehr als ein Dogma. Wenn Sie nachweisen können, dass der Code in bestimmten Fällen nicht wie bisher funktioniert, werden Sie entweder die Daumen hochheben oder der ursprüngliche Autor wird eingreifen und die Probleme beheben.

Denken Sie daran, dass in Open Source Community wichtiger ist als Code. Wenn es keine Community (sowohl von Benutzern als auch von Entwicklern) gibt, gibt es kein Projekt.

Berin Loritsch
quelle
1
+1 für die Community ist wichtiger als Code. Viele Leute dafür.
Wyatt Barnett
6

Leute, die ihren Code eifersüchtig verteidigen, veröffentlichen ihn im Allgemeinen nicht, damit die Welt ihn hinterfragt, und wenn ja, hält die Community nicht lange an. Seien Sie taktvoll, aber ärgern Sie sich nicht, dass Sie Gefühle verletzen.

Sagen Sie ihnen einfach, was Sie tun möchten, bevor Sie zu viel Zeit investieren. Manchmal gibt es historische Gründe für Dinge, die nicht offensichtlich sind. Der Grund, warum Gotos vermieden werden, ist, dass sie unerwartete Pfade durch den Code erzeugen können. Dementsprechend besteht die Gefahr des Entfernens von gotos darin, dass Sie einen der nützlichen Pfade nicht bemerken und ihn versehentlich aus dem Refactor auslassen.

Andererseits konnte sich der ursprüngliche Autor zu diesem Zeitpunkt vielleicht einfach keine sauberere Art des Schreibens vorstellen. Hier spricht Code lauter als Worte, weil sie vielleicht nicht glauben, dass es sauberer geht, bis Sie es ihnen zeigen. Einer meiner ersten Open-Source-Beiträge war ein Undo-Stack-Fix, der die Leistung erheblich verbesserte, der jedoch von einigen Kernentwicklern als zu komplex eingestuft wurde, als ich ihn zum ersten Mal beschrieb. Ein kurzes Codebeispiel brachte sie an Bord.

Wenn sich herausstellt, dass es wirklich gute Gründe gibt, es zu belassen, würde ich zumindest auf einen Kommentar drängen, in dem diese Gründe erläutert werden.

Karl Bielefeldt
quelle
6

Aus Erfahrung sprechen ...

Das erste Open Source-Projekt, an dem ich mitgewirkt habe. Als ich anfing, war alles voller Pisse und Essig.

Ich habe sofort eine Reihe von Quelldateien durchgesehen und angefangen, die Dinge nach meinen persönlichen Vorlieben zu gestalten, einen massiven Patch zu erstellen und ihn einzureichen.

Wenn Sie mit jemandem zusammenarbeiten, der "gut" ist (wie ich), wird er den Patch sofort ablehnen. Meistens, weil Sie, wenn Sie zu einem Open-Source-Projekt beitragen, Ihre Fixes in Stichproben zerlegen müssen, die ein einzelnes Problem beheben. 'Alle gotos entfernt' ist kein gutes Beispiel für ein atomares Commit. Selbst wenn Sie es zuerst in kleinere, gut dokumentierte Commits aufteilen, wird es möglicherweise dennoch abgelehnt.

Der Grund dafür ist, dass der Code im Laufe der Zeit von mehreren Personen (mit unterschiedlichen Stilen) bearbeitet wird und es nicht wirklich machbar ist, Änderungen in der gesamten Bibliothek zu akzeptieren, die dem Stil eines Entwicklers entsprechen. Wenn es möglich wäre, den Stil um des Stils willen zu ändern, würde sich jedes Open-Source-Projekt niemals vorwärts bewegen, da der Code ständig bearbeitet würde, um ihn an verschiedene Entwicklerstile anzupassen.

Das Refactoring von Code und das Hinzufügen von Funktionen (oder das Entfernen veralteter Cruft) haben normalerweise Vorrang vor dem Bereinigungscode.

Der schwierigste und lohnendste Teil der Arbeit an einem Open Source-Projekt ist, dass Sie gefragt werden, warum Sie beabsichtigen, die von Ihnen eingereichten Änderungen vorzunehmen. Wenn Sie einen guten Grund angeben können, besteht eine bessere Chance, dass Ihr Patch gesendet wird.

Mein Rat ist, einige dieser Änderungen in einer Quelldatei vorzunehmen, um einen Eindruck davon zu bekommen, was Sie zuerst versuchen. Wenn die Änderungen gut begründet und akzeptiert sind, fragen Sie, ob weitere Änderungen die Qualität des Projekts verbessern würden. Auf diese Weise werden Sie nicht viel Mühe für nichts verschwenden, wenn Ihre Patches in Zukunft abgelehnt werden.

Open Source zu entwickeln ist mehr als nur Code zu schreiben. Sie arbeiten eine Vertrauensbeziehung zu bauen , weil die Torwächter (Devs , die Steuer Push - Zugriff) wird tun , was sie die Integrität des Projekts zu schützen. Wenn Sie mehr Patches einreichen, bekommt der Gatekeeper ein besseres Gefühl für Ihren Stil und Sie müssen Ihre Änderungen nicht so stark begründen.

Es ist ein Prozess, der Zeit braucht, aber sehr lohnend ist. Sie werden nicht nur viel lernen, wenn Sie in der Lage sind, den Code anderer zu betrachten und zu kritisieren, sondern auch, wenn Sie Ihren eigenen Stil kritisieren.

Bevor Sie viel Zeit damit verschwenden, "die Ungerechtigkeit der Fehler des anderen Codierungsstils zu korrigieren", fragen Sie sich Folgendes:

Basieren die Änderungen, die Sie vorschlagen, auf dem Mehrwert für das Projekt oder auf Ihrer eigenen internen Stilreligion?

Auf Stack Overflow (und verwandten Stack Exchange-Sites) gibt es eine Menge Religion. Ich meine viel . Die Leute denken und reden endlos über Stil. Je mehr Sie darüber sprechen, desto näher rückt man dem „perfekten, idealen, unzerstörbaren, unfehlbaren“ Codierungsstil. Meistens rede ich auch viel darüber, weil es Spaß macht.

In der Open Source-Welt ist Stil nicht so wichtig. Funktion ist .

Hinweis: Bei all diesen Ratschlägen wird davon ausgegangen, dass Ihr Gatekeeper ein vernünftiger und talentierter Programmierer ist. Wenn dies der Fall ist, können Sie sich glücklich schätzen, dass Sie nicht an einem der weinerlichen B & # & es hängen geblieben sind, deren einziges Anliegen es ist, ihr "Baby" zu beschützen. Sie haben existieren in der Natur aus, also nicht überrascht sein , wenn Sie eine Begegnung.

Evan Scholle
quelle
1

Qualität> Etikette

Meiner Meinung nach sollten Sie sich keine Gedanken über die Bearbeitung des Codes anderer machen, sobald Sie feststellen, dass dieser eine schlechte Qualität aufweist. Um eine gute Softwarequalität zu erreichen, muss lediglich auf sauberen Code geachtet werden. Ich sehe kein Problem darin, den Code anderer Leute zu verbessern. Andere Leute sollten sich bewusst und dankbar sein, dass es Codierer gibt, die an ihrem Code arbeiten.

Ham Vocke
quelle
0

Wenn Sie einen besseren Weg finden könnten, um das Problem zu lösen, ohne "goto" zu verwenden, dann schlage ich vor, es zu versuchen. Ein bisschen Aufwand, um den Code heute noch besser zu machen, kann Ihnen in Zukunft viel mehr Aufwand ersparen.

Die Kommunikation mit dem Originalautor ist ebenfalls eine gute Idee.

Ida
quelle
0

Daran ist implizit nichts auszusetzen goto. Schauen Sie sich den Assembler-Code an - viele Sprünge und Verzweigungen.

Der Grund, warum gotoes heutzutage einen schlechten Ruf gibt, ist die Go To-Anweisung von Dijkstra, die als schädlich eingestuft wird und die goto-Anweisung als sehr schlecht ansah.

Beachten Sie, dass es vor 50 Jahren noch keinen Namen für Software Engineering gab und die meisten Programmiersprachen im Wesentlichen Abstraktionen der zugrunde liegenden Maschine waren, so wie die Maschinensprache goto enthielt. Sie können versuchen, einige in Microsoft Basic (das Original auf dem Apple] [oder Commodore 64) zu programmieren, um eine Vorstellung davon zu bekommen, wie diese Einstellung war.

Was Dijkstra argumentierte, war, dass, um die Dinge einfach zu halten, nicht überall herumgesprungen wird, sondern stattdessen ein einfacherer Programmpfad mit einem gemeinsamen Ende beibehalten wird. ZB eine Rückkehr von einer Methode. Mit anderen Worten - nur lokale Sprünge, keine globalen.

Dies war ein Schritt in Richtung der Einführung von Methodenaufrufen mit Argumenten, der Modularisierung von Code, Paketen usw., die alle eingeführt wurden, um die Komplexität der Softwareentwicklung zu zähmen. Die goto-Anweisung war nur der erste Zuschauer in diesem Krieg.

Thorbjørn Ravn Andersen
quelle
Dies beantwortet nicht die Frage: "Ist es für mich die richtige Etikette, den" schlechten Code "zu" reparieren ", oder sollte ich das zulassen und an neuen Funktionen arbeiten?"
@Schneemann, wenn der Code nicht von sich aus und automatisch durch gotos schlecht ist, dann lautet die Frage "Soll ich den Code reparieren, der nicht kaputt ist oder nicht"
Thorbjørn Ravn Andersen