Was soll ich tun, wenn mein Code riecht?


13

Ich bin ein Anfänger in der Programmierung, und wenn ich an meinen eigenen Projekten arbeite, habe ich oft das Gefühl, dass das Design meines Codes nicht das Beste ist, was es sein könnte, und ich hasse dieses Gefühl. Am Ende verbringe ich Zeit damit, Dinge nachzuschlagen, aber dann werde ich leicht von vielen Details überwältigt, z. Soll ich versuchen, ein bisschen von allem auf einmal zu lernen?


15
Verwenden Sie Deo;)
Pemdas

6
Und vielleicht ein Desinfektionsmittel / Insektizid, um die Wanzen loszuwerden :-)
Stephen C

3
Iss etwas Knoblauch. Die Leute werden Ihren schlechten Atem wahrscheinlich mehr bemerken.
Mateen Ulhaq

4
und jetzt haben Sie: codereview.stackexchange.com, wo Sie Hilfe mit bestimmten Beispielen Ihres Codes erhalten können.
LRE

1
Offene Fenster ... oh warte ...
Mchl

Antworten:


18

Ein paar Vorschläge:

  1. Verwenden Kapselung , um die Komplexität zu verwalten, indem Sie die Funktionalität in verschiedene Bausteine ​​unterteilen. Beweisen Sie, dass jeder Block funktioniert (durch Unit-Tests), und Sie können ihn verwenden, ohne sich um seine inneren Details kümmern zu müssen.

  2. Lernen und lernen Softwaremuster . Softwaremuster sind bewährte Methoden zur Ausführung bestimmter allgemein bekannter Aufgaben.

  3. Studiere und verstehe Datenstrukturen . Lernen Sie die geeigneten Verwendungen und Leistungsmerkmale für jeden Datenstrukturtyp kennen.

  4. Kennen Sie Ihre Programmiersprache gut, kennen Sie ihre Stärken und Schwächen und wissen Sie, wie Sie ihre Funktionen am besten nutzen.

Sie müssen nicht alles auf einmal wissen, aber Sie sollten alles im Laufe der Zeit studieren.


12

Mein Rat ist: Hör auf, dir Sorgen zu machen.

Erfahrung ist der beste Lehrer, und Sie erhalten keine Erfahrung, wenn Sie keinen Code schreiben. Auch schlecht gestalteter Code, wird geschrieben ist besser als großer Entwurf, ist nicht .

Schreiben Sie also mehr Code. Beenden Sie Ihre Projekte. Das Gefühl, dass der Code nicht ideal ist, ist wahrscheinlich richtig. Und Sie werden wahrscheinlich Probleme mit diesem Code haben. Und wenn Sie diese Probleme haben, dann würden Sie lernen, warum genau es schlecht war. Man lernt viel mehr aus eigener Erfahrung als aus dem Nachschlagen.

Hoffen Sie auch nicht, dass dieses Gefühl des "Code-Geruchs" jemals verschwinden wird. Wenn Sie besser werden, werden Sie einige Probleme beheben, aber neue, obskurere / fortgeschrittenere bemerken.


+1 für schlecht gestalteten geschriebenen Code ist besser als ungeschriebenen tollen Code!
GroßmeisterB

Es klingt nach Binsenweisheit, ist es aber nicht. Schlecht gestalteter Code , der das tut, was er soll, ist besser als gut gestalteter ungeschriebener Code. Wenn der Code jedoch schlecht entworfen ist, wie wahrscheinlich ist es, dass er das tut, wofür er gedacht ist?
Matt Ellen

Wir sprechen hier über persönliche Projekte. Natürlich ist kein Code besser als schlechter Code, wenn wir Software zur Steuerung von Nuklearraketen in Betracht ziehen.
Nevermind

@Matt - hängt davon ab, wie schlecht es wirklich geschrieben ist. IMO riecht fast jeder Code der realen Welt bis zu einem gewissen Grad, und Elfenbeintürme reagieren nicht gut auf Änderungen (eines der Probleme mit zu vielen versteckten Daten und zu vielen Abstraktionsebenen). Erfahrung ist wirklich die einzige Lösung, obwohl es einen guten Grund gibt, warum die Standardregeln natürlich gelehrt werden. Die wichtigste Erfahrung ist, weniger die Regeln zu kennen und mehr zu wissen, wann und wie sie zu brechen sind. Was das Erlernen der Regeln angeht: Ich bin seit fast 30 Jahren Programmierer, einschließlich Kinderhobby und lerne immer wieder neue Dinge.
Steve314

@ Steve314: Ja, da stimme ich zu, daher meine Einschränkung, was zu tun ist. Wie Sie bereits betont haben, können Sie das Codieren nicht ohne das Codieren lernen. Wenn Sie an persönlichen Projekten arbeiten, um ein Verständnis für Grundlagen oder fortgeschrittenere Themen zu erlangen, ist es meines Erachtens wichtig, darüber nachzudenken, was Sie erreichen möchten , anstatt sich zu beeilen und mit dem Programmieren zu beginnen. Ein bisschen Design kann viel bewirken, denn wie Sie sicher wissen, geht es beim Programmieren nicht nur um Codierung.
Matt Ellen

3

Dies ist ein häufiges Problem bei Programmieranfängern. Lähme dich nicht, indem du denkst, dass alles perfekt sein muss. Das ist der sicherste Weg, ein Projekt niemals zu beenden. Eine der wichtigsten Fähigkeiten, um als Entwickler zu lernen, ist der Unterschied zwischen perfekt und gut genug . Akzeptieren Sie, dass jedes von Ihnen erstellte System verbessert werden kann. Konzentrieren Sie sich auf die Fertigstellung Ihrer Projekte. Nachdem Sie fertig sind, können Sie zurückgehen und sie verbessern. Deshalb haben wir ja auch die Version 2.0.


Guter Anruf! Zu wissen, dass etwas besser hätte sein können, ist ein guter Anfang.
ozz

2

Soll ich versuchen, ein bisschen von allem auf einmal zu lernen?

Ich hoffe nicht. Auf der anderen Seite, Sie sollten die ganze Zeit lernen und zu verbessern.

Lesen Sie Bücher, belegen Sie Kurse, qualifizieren Sie sich, arbeiten Sie daran, und Sie sollten sich verbessern.


2

Mein bester Rat ist, mich auf die Grundlagen zu konzentrieren, wie die von Robert Harvey vorgeschlagene Liste. Die Softwareentwicklung ist ein komplexes Monster, in dem es Jahre dauert, bis es auch nur annähernd funktioniert, insbesondere beim Thema gutes Interface-Design. Es ist wirklich schwer, viele Aspekte der Softwareentwicklung zu verstehen, ohne sie zuerst zu erleben. Sogar etwas so Grundlegendes wie das Kommentieren von Code kann unterschätzt werden. Vom ersten Tag an lernen Sie, gut dokumentierten Code zu schreiben. Ich gebe zu, dass ich erst vor Monaten wirklich versucht habe, Code zu verstehen, bevor ich den Wert guter Kommentare wirklich zu schätzen wusste. Gleiches gilt für viele Programmierkonzepte. Zum Beispiel Datenkapselung, niedrig gekoppelte Module und klare Schnittstellen.

Die wertvollste Ressource, der ich begegnet bin, sind meine Mitarbeiter. Sie werden schlecht Code schreiben. Akzeptiere das einfach. Sie sorgen dafür, dass Sie im Laufe der Zeit einen besseren Code schreiben, der Sie als Programmierer auszeichnet. Als ich zum Beispiel anfing zu arbeiten, verfügte mein Unternehmen über keinerlei formellen Code oder Verfahren zur Entwurfsprüfung. Ich habe es auf mich genommen, meine Arbeit der Kritik meiner älteren Mitarbeiter zu unterwerfen, und um ehrlich zu sein, ich fühlte mich für einen Großteil meines ersten Arbeitsjahres wie ein Idiot.

Softwareentwicklung ist eine kontinuierliche Lernerfahrung. Stellen Sie Unmengen von Fragen, lassen Sie Ihren Code überprüfen, verstehen Sie die Gründe für die Vorschläge, die ältere Leute machen, haben Sie keine Angst, die Gültigkeit der Vorschläge, die ältere Entwickler machen, in Frage zu stellen, und haben Sie vor allem keine Angst, falsch zu liegen. Irgendwann schwindet der Andeutungsfaktor oder das Gefühl, überfordert zu sein. Für den Rekord ... Lernkurven saugen.


2
  • Erstens: Refactoring (es wird immer noch riechen, aber ein bisschen besser organisiert sein)
  • Zweitens: Sehen Sie, ob Sie Design Patter verwenden können, um die überarbeiteten Teile Ihrer Logik anzupassen.
  • Drittens: Wenn die Dinge besser aussehen, erinnern Sie sich an die Zeit, die Sie mit dem ersten und zweiten Schritt verbracht haben. Auf diese Weise werden Sie beim Schreiben einer neuen Funktion daran denken, während Sie dies tun, und nicht an einen anderen Prozess.

2

Lesen Sie das Buch Refactoring: Verbessern des Designs von vorhandenem Code von Martin Fowler. Als erstes sollten Sie Ihren Code überarbeiten überarbeiten, um die Lesbarkeit des Codes zu verbessern und die Komplexität zu verringern, um die Wartbarkeit zu verbessern.

Wenn Sie Ihren Code überarbeiten, verwenden Sie bereits Design Patterns , Encapsulating code usw.

Dies ist eines der besten Bücher, die ich je zu diesem Thema gelesen habe. Es bietet viele nützliche Rezepte.


2

Eine gute Ressource ist The Pragmatic Programmer . Das Kapitel "Defekte Fenster" beschreibt, wo Sie sich selbst sehen. Die kurze und prägnante Antwort ist, die Probleme zu beheben.

Wenn Sie anfangen, Ihr Design zu reparieren, hilft es Ihnen zu verstehen, was Ihnen daran nicht gefällt. Es ist einfach, vage Antworten zu finden wie "Es geht überall" oder "Warum habe ich das dort gemacht?". Nehmen Sie sich jedoch die Zeit, um zu prüfen, ob es gemeinsame Muster gibt, die Sie verwendet haben.

  • Gutes Design wird eine kleine Anzahl von Konzepten in der gesamten Codebasis wiederverwenden (das Ideal ist ein Konzept, aber in der Praxis benötigen Sie möglicherweise ein paar mehr).
  • Ein gutes Design macht es einfach herauszufinden, wo Probleme zu beheben sind (DRY-Prinzip, SRP-Prinzip)
  • Ein gutes Design weist eine gute Fehlerberichterstattung auf (im Zusammenhang mit dem obigen Punkt, wird jedoch als separates Element bezeichnet, da dies ein häufig übersehener Aspekt ist).

Wenn Sie herausfinden , wo Sie gehen möchten, nehmen kleine, leicht umkehrbar Schritte , um dort (also das ist , was Refactoring ist etwa). Berücksichtigen Sie bei jeder Verbesserung Ihres Codes die Auswirkungen auf den Rest des Codes. Hast du es besser oder schlechter gemacht? Zumindest ist dies mein Ansatz, um Ordnung ins Chaos zu bringen.


1

Wenn Sie bereits Programmiererfahrung haben, warum studieren Sie nicht einige Open Source-Projekte, die sauberen Code enthalten ? Sie könnten sich DIESE Frage von SO ansehen, die einige relevante Links hat.

Auch Designmuster sind ein Muss - denken Sie darüber nach. Die ganze Idee, Muster zu haben, besteht darin, bekannte Probleme zu lösen, ohne das Rad neu zu erfinden oder Buggy-Code zu schreiben.

Sieht schließlich so aus, als bräuchten Sie eine Portion funktionale Programmierung, um den Kopf frei zu bekommen. Schauen Sie sich zunächst Haskell oder Ocaml an.


0

Wenn Sie kein gefährliches Monster sind, sollten Sie einen sogenannten Freund finden , der Ihren Code überprüfen kann und umgekehrt. Auch, wenn Sie Dinge machen, die überarbeitet werden oder nur von anderen übersehen werden, ist es eine gute Pression, es besser zu machen.

Und vergessen Sie nicht, dass die Programmierung vor dem Programmieren beginnt. Überdenken Sie immer Ihre Ideen und Pläne. Wenn Ihr Plan schlecht ist, ist es eine freudige Handlung, ihn rauszuwerfen: Sie haben sich gerade die Frustration erspart, einen Haufen Code (und den Zeitpunkt seiner Erstellung) auf der Grundlage eines schlechten Plans rauszuwerfen.


0

Mein Rat ist, jeden Geruch ernst zu nehmen und zu versuchen, ihn zu beseitigen. Es gibt viele gute Bücher zum Thema (Clean Code und GOOS sind meiner Meinung nach die besten). Aber mehr als Bücher gehen zu Konferenzen, um mit anderen Menschen und über Online-Communities (Mailing-Liste, Gruppen) zu hören und zu diskutieren. Versuchen Sie noch besser, Ihrem lokalen xxug (dotnetug, jug, xpug usw.) beizutreten oder einen zu finden.

Das Gespräch mit anderen Programmierern ist der einzige Weg, den ich wirklich verbessern kann (es sei denn, Sie können glücklicherweise mit anderen engagierten Programmierern zusammenarbeiten).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.