Frage

Ich schreibe häufig Wegwerf-Code (in einer Forschungsumgebung ) - zum Beispiel einen Algorithmus oder ein Modell für eine wissenschaftliche Eigenschaft oder Prozess zu erkunden. Viele dieser „Experimente“ sind einmalig, aber ich manchmal feststellen, dass ich später ein paar verwenden müssen. Zum Beispiel habe ich ausgegraben Code nur für String-Matching ich vor 7 Jahren schrieb (wegen anderer Prioritäten gestoppt), aber die für einen Mitarbeiter des Projekts jetzt wertvoll ist. Nachdem es sieht (habe ich wirklich so undurchdringlich Code schreiben?) Ich weiß, es gibt einige Dinge, die ich dann getan konnte mir helfen, wenn ich das „Projekt“ neu gestartet ( „Experiment“ ist immer noch ein besseres Wort). Das frühere Experiment „gearbeitet“ aber ich weiß, dass zu der Zeit würde ich nicht Zeit zu refactor gehabt habe als meine Prioritäten woanders liegen.

Was Ansätze sind kosteneffizient in dem solche Arbeiten werden ausgegraben und wiederverwendet?

Bearbeiten :. Ich habe meine eigene Frage beantwortet (siehe unten), weil es Probleme über die eigentliche Quelle selbst

War es hilfreich?

Lösung

Ich bin nicht einverstanden mit all den Antworten sagen „Kommentar schreiben“. Das ist, als catch-all für den Code angeboten selbst nicht verständlich zu sein.

Holen Sie sich eine Kopie von Code Complete (Steve McConnell, 2. Auflage). Wenn Sie die Techniken des Schreibens wartbaren Code in erster Linie lernen, wird es nicht, dass Sie mehr Zeit in Anspruch nehmen, und Sie werden später mit weniger Mühe, um Ihre Arbeit zurückkehren können.

Welche bevorzugen Sie:

  • Cryptic Code mit Kommentaren?
  • Meist OK-Code ohne?

Ich ziehe stark dieser, wie der OK-Code einfacher ist, in den Situationen zu verstehen, wo der kryptische Code war unkommentiert und Kommentare sind ein weiterer Ort, dass der ursprüngliche Entwickler Fehler machen kann. Der Code kann sein Buggy , aber es ist nie falsch .

Wenn Sie bequem mit Code Complete , würde ich empfehlen,

Andere Tipps

[Answering eigene Frage] Es gibt einige andere Aspekte des Problems, das nicht angesprochen wurden und die ich nützlich wäre gefunden, wenn es erneuten Besuch. Einige von ihnen können „selbstverständlich“ sein, aber denken Sie daran dieser Code wurde vorge SVN und IDEs.

  • Auffindbarkeit . Es war wirklich schwierig, den Code zu finden. Ich glaube, es ist in meinem Source Projekt, aber es gibt so viele Versionen und Zweige über 7 Jahre, dass ich es nicht finden kann. Also ich würde ein System haben, den Code gesucht und bis IDEs erscheinen ich glaube nicht, dass jeder war.
  • Was bedeutet das? . Die aktuelle Kasse enthält etwa 13 Klassen (alle in einem Paket, da es nicht einfach zu refactor war zu der Zeit). Einige sind klar (DynamicAligner), aber andere sind opak (MainBox, genannt, weil es eine Swing-Box erweitert). Es gibt vier main() Programme und es gibt tatsächlich etwa 3 Teilprojekte im distrib. So ist es wichtig, einen externen manifestieren sich als zu dem, was die Komponenten tatsächlich waren.
  • Anweisungen, wie es laufen . Wenn das Programm läuft, wird main() eine kurze Kommandozeilen-Nutzung bieten (zum Beispiel DynamicAligner file1 file2), aber es sagt nicht, was der Inhalt von Dateien tatsächlich aussieht. Ich wusste, das zu der Zeit, natürlich, aber jetzt nicht mehr. So soll es in Verbindung gebracht werden Beispiel: Dateien in Geschwister Verzeichnissen. Dies sind wertvoller als der Versuch, zu Dokument-Dateiformaten.
  • es funktioniert noch? . Es sollte möglich sein, jedes jedes Beispiel, ohne zu denken laufen. Die erste Frage wird sein, ob die zugehörigen Bibliotheken, Laufzeiten, etc. sind immer noch relevant und verfügbar. Ein Ex-Mitarbeiter schrieb ein System, das nur mit einer bestimmten Version von Python läuft. Die einzige Antwort ist neu zu schreiben. So sicher sollten wir keine Lock-in, wo möglich, vermeiden, und ich habe mich trainiert (wenn auch nicht unbedingt Mitarbeiter), dies zu tun.

Wie kann ich also und Mitarbeiter vermeiden Probleme in der Zukunft? Ich denke, der erste Schritt ist, dass es eine Disziplin, ein „Projekt“ zu schaffen (aber klein) sein sollte, wenn Sie Code erstellen und dass diese Projekte unter Versionskontrolle sein sollten. Das klingt offensichtlich, einige von Ihnen, aber in einigen Umgebungen (Wissenschaft, im Inland) gibt es einen erheblichen Aufwand ein Projekt-Management-System einrichten. Ich vermute, dass die Mehrheit der akademischen Code ist nicht unter Versionskontrolle.

Dann gibt es die Frage, wie sollen die Projekte organisiert werden. Sie können nicht auf Sourcestandardmäßig sein, wie der Code (a) trivial und (b) nicht standardmäßig geöffnet. Wir brauchen einen Server, auf dem es sowohl kommunale Projekte und Privaten sein kann. Ich würde berechnen, dass der Aufwand dieses bis zu setzen und führen Sie es etwa 0,1 FTE sind - die von allen Parteien 20 Tage pro Jahr ist (Installation, Schulung, Wartung) - wenn es einfache Optionen Ich würde gerne wissen, wie diese ist ein große in einigen Fällen Kosten - verbringe ich meine Zeit, um einen Server einrichten oder schreibe ich Papiere

Das Projekt sollte versuchen, gute Disziplin zu fördern. Das ist wirklich das, was ich hatte gehofft, von dieser Frage zu bekommen. Es könnte gehören:

  1. Eine Vorlage der benötigten Komponenten (manifest, Readme, log der Commits, Beispiele, benötigten Bibliotheken usw. Nicht alle Projekte unter maven laufen kann - zum Beispiel Fortran).
  2. ein Mittel, eine große Anzahl Benutzer (Hunderte mindestens) von kleinen Projekten für mnemonic Strings (ich mochte die Idee, den Code in googledocs Dumping, und dies kann ein fruchtbarer Weg sein - aber es ist zusätzlicher Wartungsaufwand)
  3. Löschen Namenskonventionen. Dies sind wertvoller als Kommentare. Ich habe jetzt regelmäßig Namen des Typs iterateOverAllXAndDoY. Ich versuche createx () statt getX () zu verwenden, wenn die Routine tatsächlich Informationen erstellt. Ich habe eine schlechte Gewohnheit Routinen Prozess des Aufrufs () statt convertAllBToY ().

Ich bin mir bewusst, aber nicht GIT und Mercurial und Googlecode verwendet.Ich weiß nicht, wie viel Mühe diese einzurichten sind und wie viele meiner Bedenken, die sie beantworten. Ich würde begeistert sein, wenn es eine IDE-Plugin war die besseren Code erzeugen half (beispielsweise „schlechte Wahl der Methode name“).

Und was auch immer die Ansätze sie bekommen haben natürlich den Menschen kommen, die sie naturraly nicht gut Code Disziplin haben und die Mühe wert zu sein.

Da die ausgezeichneten Antworten in Ihrem andere post zeigen und aus meiner eigenen Erfahrung, gibt es eine schwer zu greif Lücke zwischen der Software für Forschung und Software verwendet, die dazu entworfen wurde. Meiner Meinung nach, Code Complete könnte helfen, ein wenig, aber nicht viel. Als wirtschaftliche Frage, wird es für die Wiederverwendung zu refactor allem wett sein im Vergleich zu der gelegentlichen Belohnung für eine spätere Verwendung für etwas zu finden? Ihr Schwerpunkt variieren kann.

Hier ist ein praktischer Tipp Schnipsel zum Speichern. Statt ausgewachsener Kommentare, wirft in einigen keywords:

  • "Graphisomorphie Wrapper"
  • "Polymer Simulated Annealing"
  • "string Match Feynmann"
  • "Gleichgewicht"

und setzen Sie dann den Code irgendwo Google-Suchfunktion, wie ein Google Mail-Konto.

Edit:. Ich könnte hinzufügen, dass kostenlose Google Sites sind wirklich durchsuchbare Wikis, die ein guter Ort sind Code zu setzen, entweder in Form von Anhängen oder eingefügt in

Auch sollte ich sagen, dass ich ein Fan von-Code bin komplett und haben gegeben Kopien grad Studenten-Software für die wissenschaftliche Forschung seit einigen Jahren zu schreiben. Es ist ein guter Anfang, aber kein Allheilmittel. Ich schreibe ein Papier gerade jetzt auf Open-Source-Frameworks Probleme wissenschaftliche Datenmanagement zu lösen und eine der Schlussfolgerungen ist, dass einige Software-Engineering-Know-how für langlaufende Systeme wesentlich ist. Viele wissenschaftliche Projekte sollten wahrscheinlich Budget für das von Anfang an.

Kommentare - beschreiben, was Sie dachten, und warum haben Sie sich etwas auf eine bestimmte Weise mit, welche Alternativen Sie darüber nachgedacht, zu implementieren. Es gibt wahrscheinlich allerlei ausgefallenen Lösungen, sondern nur den Code richtig zu dem Zeitpunkt zu kommentieren Sie schreiben es die am besten zu funktionieren scheint.

Ich würde wiederholen, was die andere gesagt haben, soweit kommentiert die „warum“, warum der Code geschrieben wurde und es Nutzung gedacht, aber ich würde dies auch hinzufügen:

-Code, als ob Sie in die Produktion planten dies auch über die Umsetzung, wenn Sie Herumspielen einfach. Code für:

  • Klarheit und Lesbarkeit
  • Folgen Sie den Codierungskonventionen der Zeit. (Benennungskonventionen, etc). Auch wenn solche Konventionen im Laufe der Zeit ändern, wenn Sie an die Standards halten sind Sie eher, es verstehen später zu können.
  • Sicherheit (falls zutreffend)
  • Leistung (falls zutreffend)

Besonders möchte ich den ersten Punkt betonen, aber die anderen sind ebenso wichtig. Ich finde, dass, wenn ich später auf „Testcode“ verwenden, neige ich dazu, es nur zu verwenden, wenn es funktioniert, anstatt es Refactoring.

Ich habe wahrscheinlich den Punkt dieser ganzen Diskussion verpasst, ich häufig tun, aber hier geht, eine Einladung für brickbats und Downvoting ...

Wenn es Wegwerf-Code ist, werfen Sie es weg!

Wenn Sie nicht wollen, es wegzuwerfen dann den guten Rat oben. Für mich, und ich schreibe einen fairen Betrag von Wegwerf-Code, die Frage, ob es weg oder in einen wieder verwendbaren Zustand versetzt geworfen wird und gehalten gegen einen regnerischen Tag läuft darauf hinaus, die Wirtschaft nach unten.

voraussehen kann ich Umstände, unter denen dieser Code wieder nützlich sein wird? Einmal in einem blauen Mond, zweimal im Jahr, jeder Monat?

Kann ich diesen Code in weniger Zeit neu zu schreiben, als es sich wiederverwendbar zu machen braucht? Wenn die Antwort auf diese Frage Nein ist, dann, wie oft muss ich es wieder verwenden, um es wert zu machen, während es jetzt zu verbessern? (Zurück zur vorherige Frage.)

Wenn ich diesen Code wiederverwendbar zu tun machen, kann ich es wieder finden, wenn ich es nächstes will? (Wer hatte schon einmal die Erfahrung zu wissen, mit absoluter Sicherheit, dass irgendwo im Code-Repository gibt es nur das Fragment Sie wollen, aber mit keine Ahnung, was es hieß, noch wo sie suchen müssen, noch was für grep?)

Schließlich wird die 3-Schritt-Methode, um die schnell geschriebener Code wiederverwendbar. Stopp nach welchen auch immer diesen Schritten, die Sie mag:

1) Dokumentieren Sie den Code als Black-Box. Eingänge, Ausgänge, Betrieb (s). Datei dieses Dokument sorgfältig durch.

2) schreiben Anweisungen, wie zu bauen / interpretieren / installieren Sie den Code, falls Sie jemals in den Hafen haben es. Die Datei diese Anweisungen sorgfältig.

3) Nur wenn die Mühe wert - Verbesserung der Quellcode Qualität des Code wartbar in Zukunft zu machen. Stellen Sie sicher, dass die Quellen in dem Quellensteuersystem und auffindbar.

Viele Grüße

Mark

Ich denke, das Wichtigste, was (wenn Sie nicht tun Refactoring es wird nicht passieren) ist zu kommentieren und dokumentieren Sie Ihren Denkprozess zu der Zeit. Es wird helfen, den Code weniger undurchdringlich und dazu beitragen, dass Sie die guten Seiten zu finden, wenn nötig.

Nein, Nein, Nein, Nein, Nein!

Do Wegwerf-Code auch in einer Forschungsumgebung nicht schreiben. Bitte!

Zur Zeit bin ich durcheinander mit einem solchen „Wegwerf-Code“, nämlich Projekt BLAST. Die Sache ist, dass es als Spielplatz begonnen, aber dann geschah etwas erfolgreich zu werden, Jetzt ist es ein nützliches Werkzeug mit vielen Konzepten umgesetzt, aber der Code ist praktisch wartbaren. Aber das ist nicht die Hauptsache.

Der wichtigste Punkt ist, tun Sie Forschung für Ingenieure später profitieren von Ihren Erkenntnissen. Nachdem eine gute wissenschaftliche Arbeit über die allgemeine Konzept getan und ein Tool zu schreiben, das diese als erfolgreich erweist, kann man leicht vergessen, dass Sie es nicht für die Veröffentlichung und Promotion nur tun. Sie tun es zum Wohle der Menschheit. Ihr Code kann eine Reihe von „Sonderfällen“ enthält, die zu debuggen hart waren, eine Reihe von Macken und Hacks, die passen in jede Konferenz Artikel nicht. Es ist besonders wichtig zu dokumentieren und kommentieren solche Dinge im gesamten Code.

Wenn ein Entwickler entschieden, Ihre Konzepte in einem kommerziellen Produkt zu implementieren, er hätte die Macken und Hacks aus dem Code untersucht und die Implementierung würde zehn hat wenige Fehler, als es hätte haben können. Jeder sagt: „Wow, seine Forschung auf einem wirklich nützlich ist!“ Aber wenn Sie „Wegwerf“ schreiben, sagen sie „sein Konzept schön auf dem Papier aussieht, aber X versuchte, es zu implementieren und ertrank in einem Haufen von Fehlern“.

( Bearbeiten : genommen von Kommentaren unten), um Hilfe zukünftige Entwickler Ihrer Code-Basis, müssen Sie nicht viel brauchen. Zuerst Kommentar, was jede Funktion funktioniert . Zweitens stellen Sie sicher, dass jede nicht-offensichtliche Verlegenheit eines kniffligen Fehlers in einem separaten platziert begeht in dem Revisionskontrollsystem (mit einem entsprechenden Kommentar, natürlich). Das reicht. Und wenn Sie auch Dinge modular machen (auch wenn sie für die endgültige Wiederverwendung nicht bereit sind -, die dreimal teurer ist, nach Brooks). Sie werden von den Ingenieuren verehrt werden, die Ihre Forschung implementieren

ich glaube, dass die Welt ein besserer Ort wäre, wenn Forscher warfen ihre Hybris weg und hielt hochmütig denken, dass sie nicht diese schmutzigen Programmierer, die untergeordneten Job machen einen guten Code zu schreiben. einen guten Code zu schreiben ist nicht nur ein Job für diese dummen Programmierer. Es ist ein wirklich wertvolle Sache, die jeder danach streben sollte. Ohne diesen Ihr Experimentierfeld, Ihr Code, Ihre Idee wird nur sterben.

Einige Strategien:

  1. Gute Kommentare. Schwer wieder zu verwenden, was Sie können später nicht mehr finden oder verstehen.
  2. Speichern jede Abfrage in einem Ordner, die gesichert ist oder unter Quellcodeverwaltung.
  3. Haben Sie eine gemeinsame Bibliothek von nützlichen Funktionen, dass Sie „fördern“ etwas zu, sobald es wieder verwendet wurde.

Sie können auch die Idee von Unit-Tests aus dem TDD (Test-Driven Development) Leute leihen. Sie müssen sicherstellen, dass der Wegwerf-Code tatsächlich funktioniert OK sowieso, warum also nicht das Kontroll linken eine kleine Einheit Test ausdrücken? Dies würde zwei Vorteile:

  1. den Testcode Lesen in Verbindung steht die Absicht des Wegwerf ganz klar: schließlich ist es seine Erwartungen in derselben Sprache zum Ausdruck bringt:. Code

  2. Es wäre auch Hilfe bei der 4. Problem Ihrer Selbst Antwort: „es funktioniert immer noch?“. Nun, es ist einfach: die Unit-Tests laufen und sie sagen Ihnen, was und wo (und mit etwas Glück), warum (es) nicht funktioniert

  3. .
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top