Wege, das "Syndrom des perfekten Programmierers" zu brechen [geschlossen]

16

Ich bin wahrscheinlich nicht der Einzige, der sich so fühlt. Aber ich habe das, was ich "Das Syndrom des perfekten Programmierers" nenne, was viele als Perfektionisten bezeichnen, aber in diesem Fall liegt es im Bereich der Programmierung. Der Bereich der Programmierung ist für ein solches Syndrom jedoch etwas problematisch.

Haben Sie jemals das Gefühl gehabt, dass Sie beim Programmieren nicht sicher oder nicht sicher genug sind, dass Ihr Code sauber und gut ist und den meisten Best Practices entspricht? Es gibt so viele Regeln, dass ich das Gefühl habe, irgendwie überfordert zu sein. Nicht, dass ich die Regeln nicht befolgen möchte. Natürlich bin ich Programmierer und ich liebe das Programmieren. Ich sehe das als Kunst und ich muss die Regeln befolgen. Aber ich liebe es auch, ich meine, ich will und ich liebe es, die Regeln zu befolgen, um ein gutes Gefühl dafür zu haben, was ich tue, geht in die richtige Richtung. Aber ich wünschte nur, ich könnte alles ein bisschen mehr unter Kontrolle haben. in Bezug auf Best Practices und guten Code.

Vielleicht mangelt es an Organisation? Vielleicht mangelt es an Erfahrung? Vielleicht mangelnde Übung? Vielleicht mangelt es an etwas anderem, worauf jemand hinweisen könnte? Gibt es eine Möglichkeit, dieses Syndrom irgendwie loszuwerden?

Rushino
quelle
1
Diese Frage kann nur beantwortet werden, wenn Sie etwas mehr über Ihren persönlichen Hintergrund wissen. Das Tao of Programming ist vielleicht ein guter Ausgangspunkt für Sie.
back2dos
Da stimme ich nicht überein. Ich glaube, jeder, egal wie der Hintergrund ist, kann sich auf diese Weise fühlen, vielleicht in unterschiedlichem Ausmaß, aber dennoch.
Rushino
2
Während jeder die gleichen Symptome erleiden kann, variiert die Ursache in der Tat sehr stark und führt somit die "Heilung" durch.
back2dos
Es gibt keinen perfekten Programmierer. Sie werden vielleicht einen erfahrenen und detailorientierten Menschen finden, der Schwung und Lust hat, seine Fähigkeiten zu verbessern. - Sie können sie "go Getters" nennen ...
Yusubov
"Ich muss die Regeln befolgen" ... und da ist dein Problem. "Best Practices" sind keine Regeln, sondern Vorschläge, die auf kollektiven Erfahrungen basieren. Wenn Sie sie als unzerbrechliche Regeln behandeln, kann ich die Wurzel Ihres Stresses sehen.
GroßmeisterB

Antworten:

21

Priorisieren . Das wichtigste zuerst. Konzentrieren Sie sich darauf, worauf es ankommt.

Ihre Prioritäten können variieren, aber im Allgemeinen sollten Sie Folgendes beachten:

  • Code korrigieren
  • Wartungsfähiger Code
  • Code bereinigen
  • Einfacher, eleganter Code
  • Effizienter Code

Vielleicht in dieser Reihenfolge. Der erste Punkt ist jedoch der wichtigste. Ohne das ist Code nutzlos. Was machen Sie mit einem Programm, das nicht richtig funktioniert?

Lass es funktionieren, alles andere ist für die Lösung der Probleme, die du lösen musst, nahezu irrelevant. Natürlich leide auch ich darunter. Was ich gelernt habe, das hilft, ist sich nur auf Lösungen zu konzentrieren, die funktionieren . Das reicht. Das sind 99% der Arbeit.

Vielleicht möchten Sie an so etwas wie guten Code denken . Was ist es? Was für Leute schreiben das? Wie schreibe ich guten Code ? Es ist sehr einfach. Schreiben Sie Code, der funktioniert . Arbeitscode ist guter Code. Alles andere kommt später.

Natürlich werden beim Schreiben von Code in einer professionellen Teamumgebung offensichtlicher, lesbarer Code und wartbarer Code immer wichtiger. Die erste Aufgabe ist es jedoch , es zum Laufen zu bringen und sich darauf zu konzentrieren. Erst dann können Sie bei Bedarf mit der Verbesserung und Umgestaltung beginnen.

Es ist oft ganz offensichtlich, dass die Code-Korrektheit sehr wichtig ist - aber wir alle erkennen diese Bedeutung beim Schreiben von Code nicht an. Wir schneiden Ecken, wir vorzeitige Optimierung verwenden, wir versuchen zu schreiben elegant Code , noch bevor wir haben Arbeits Code geschrieben. Es ist die menschliche Natur, von Anfang an nach Perfektion zu streben, aber Programmierung und Softwareentwicklung sind iterative Prozesse, und es gibt Prioritäten. So wieder, damit es funktioniert , Sorgen über alles andere später. Verstehe die Wichtigkeit des richtigen Codes und strebe danach.

Zwar gibt es Tonnen und Tonnen von sogenannten guten Praktiken , aber ich denke, gesunder Menschenverstand ist das Wichtigste. Überlegen Sie, warum die Praktiken als gut angesehen werden und wann und wo sie anzuwenden sind. Bemühen Sie sich jedoch nicht, jedes einzelne Bit der guten Praktiken zu erfüllen. Es gibt keinen Ersatz oder Ersatz für persönliche Erfahrungen. Sie können häufige Fallstricke nicht vermeiden - egal, wie viele Bücher Sie lesen, an welchen Seminaren Sie teilnehmen oder was nicht. Was zählt, ist das Lernen, indem man Dinge richtig macht und Spaß hat - wann immer es möglich ist.

zxcdw
quelle
9
Die beste Optimierung ist die, die Ihr Programm von einem nicht funktionierenden Zustand in einen funktionierenden Zustand bringt.
Deadalnix
1
@deadalnix Perfekte Beratung! Es ist so einfach, so offensichtlich und doch so wahr im gesamten Code.
ZXCDW
7
+1. Ich würde prüfen , setzen wartbar oben korrigieren . Immerhin ist eine Qualität des wartbaren Codes, dass es eine Frage des vernünftigen Aufwands ist, ihn zu korrigieren;)
back2dos
1
EFficient sollte alles andere als korrekt sein, wenn Sie über Datenbankcode und viel mehr als elegant sprechen. Guter SQL-Code (gut für die Datenbank, die nicht der Entwickler ist) ist selten elegant. Es gibt bekannte ineffiziente Methoden, um Dinge zu tun, und sie sind nicht weniger wartbar oder schwerer zu verstehen, wenn Sie sie regelmäßig verwenden.
HLGEM
2
@HLGEM In der Tat können in bestimmten Bereichen die Prioritäten vollständig umgekehrt werden. Zum Beispiel schreibe ich manchmal Assembler-Code, der unter extremen Größen- und Geschwindigkeitsbeschränkungen (Demoscene-Produkte) geschrieben wurde, und überarbeite ihn. In solchen Situationen kann sogar die Programmkorrektheit in Frage gestellt werden - viele fehlerhafte Codeteile haben sich als äußerst gut erwiesen (schöne visuelle und akustische Artefakte, die beispielsweise auf falschem Code basieren).
ZXCDW
6

Die einfachste Möglichkeit, dieses Problem zu vermeiden, besteht darin, nur das zu ändern, was weh tut. Polieren Sie keinen Code, der korrekt, lesbar und wartbar ist, auch wenn Sie der Meinung sind, dass einige Änderungen ihn möglicherweise noch verbessern. Aber wenn Sie zum Beispiel versuchen, etwas und Stables über eine Variable zu ändern, deren Zweck unklar ist, oder eine Funktion, die einfach zu lang ist, um sie zu verstehen, reparieren Sie sie. Nicht früher

Das bedeutet nicht, dass Sie nicht unbedingt nach gutem, sauberem Code streben sollten, aber Sie sollten Ihren ersten Versuch als "gut genug" betrachten, sofern nichts anderes bewiesen ist.

user281377
quelle
+1 Ich mag das Teil .. "Ihr erster Versuch" gut genug ", sofern nicht anders nachgewiesen."
Rushino
Abgeordnet und aufgewertet. Auf jeden Fall ein goldener Rat!
ZXCDW
4

Ich denke, das beste Gegenmittel ist es, sich daran zu erinnern, dass all diese Best Practices und Regeln zur Codebereinigung nicht für sich selbst existieren und dass der Code selbst auch nicht existiert.

Am Ende zählt vor allem, dass die Software funktioniert und verwendet werden kann. Und das wird nicht passieren, wenn Sie es nicht beenden.

Ich mag den Vergleich von Codierung mit Kunst nicht, aber in dieser Hinsicht funktioniert er: Künstler ( insbesondere Autoren ) möchten auch oft weiter an einem Stück arbeiten, weil es immer etwas gibt, das nicht perfekt ist. Aber welchen Wert hat Perfektion, wenn sie die Veröffentlichung auf unbestimmte Zeit verzögert und somit verhindert, dass jemand die Arbeit wertschätzt ?

Michael Borgwardt
quelle
2

Das Wichtigste ist, dass sich Ihr Code ständig ändert und es immer Raum für Verbesserungen gibt. Kein Code ist jemals perfekt. Meistens wird eine Klassenbibliothek, an der Sie heute arbeiten, sechs Monate später ganz anders aussehen. Sie lernen eine neue Technik oder finden ein Muster, das wirklich zu Ihnen passt. Solange der Code leicht zu pflegen und lesbar ist, sollten Sie gut sein. Im Idealfall würden Sie Unit-Tests durchführen, um die spätere Umgestaltung zu vereinfachen.

Es ist einfach, den Code perfekt aussehen zu lassen und alle erdenklichen Standards zu befolgen. Es passiert uns allen. Wenn ich mir den Code anschaue, den ich vor ein paar Wochen geschrieben habe, denke ich darüber nach, Änderungen vorzunehmen. Fügen Sie hier eine Eigenschaft hinzu, und ändern Sie dort die Methode. Und es scheint am Ende des Projekts zu geschehen. Aber wenn Sie zu sehr damit beschäftigt sind, könnten Sie am Ende einen aufsehenerregenden Fehler machen. Ich habe das ein paar Mal zu Beginn meiner Karriere gemacht. Ein paar Fehlerbehebungssitzungen um 3 Uhr morgens haben mich von diesem Problem befreit.

bwalk2895
quelle
1

Mach es anders herum.

Anstelle von "Was kann man besser machen?" suche nach "was pisst mich an?" bis nichts mehr geht.

Arnis Lapsa
quelle
4
"Ein Buch ist nicht fertig, wenn nichts mehr hinzugefügt werden kann, sondern wenn nichts mehr daraus entfernt werden kann." - Code Complete
Jonathan
Eigentlich ist es eine Umschreibung von Saint-Exupéry, komisch, dass er hier weniger Glaubwürdigkeit hat als Code Complete.
Scrwtp
1

Als Programmierer müssen Sie Code erstellen. Der Zweck von Best Practices ist es, Ihre Produktionsrate zu erhöhen, indem Dinge leichter zu verstehen / zu tun / zu merken sind. Wenn das Festhalten an diesen Praktiken die Erledigung von Aufgaben behindert, machen Sie etwas falsch. Versuchen Sie einfach, Code so schnell wie möglich zu erstellen, und Ihre Methoden sollten sich weiterentwickeln, damit Sie genau das tun können.

suszterpatt
quelle
Ich stimme dir nicht zu. Als Programmierer haben Sie die Aufgabe, Probleme zu lösen. Zu viele Programmierer sehen sich ein Problem an und sagen "Ich kann eine Lösung für dieses Problem programmieren". Suchen Sie nicht nach bereits vorhandenen Lösungen . Die beste Lösung ist die, die Sie nicht schreiben müssen. Als Programmierer, der die Lösung codieren muss, müssen Sie jedoch die Anforderungen erfüllen. Es gibt Best Practices, um sicherzustellen, dass der Code, der die Anforderungen erfüllt, leicht geändert werden kann, wenn sich die Anforderungen ändern (nicht wenn , sondern wann ).
KeithS
1

Lassen Sie es funktionieren, machen Sie es sauber, machen Sie es fest, machen Sie es performant.

Die ersten drei sind ein Sprichwort, für das ich mich ausspreche, wenn sich jemand fragt, wie man SOLID-Code auf einer Timeline schreibt. Wenn Sie zum ersten Mal eine Codezeile schreiben, muss diese einfach funktionieren. Tun Sie also, was Sie tun müssen, und werden Sie nicht schick. Wenn Sie zum ersten Mal eine Codezeile erneut aufrufen, ist dies kein einmaliger Vorgang mehr und Sie sollten den Code bereinigen, damit er lesbarer und damit wartbarer wird. Wenn Sie den Cursor zum dritten Mal in diese Zeile setzen, ist dies wahrscheinlich eine große Sache, und Sie sollten ihn überarbeiten, um die SOLID-Methode einzuhalten, Abhängigkeiten zu abstrahieren, Muster zu implementieren und den Code im Allgemeinen einfacher einzufügen oder einzufügen für zukünftige Verbesserungen.

Eleganz im Code soll erreicht werden, wenn der Programmierer eine Gelegenheit wahrnimmt, und ist im Allgemeinen eine Funktion zur Vereinfachung, Reinigung und allgemeinen Verbesserung der Lesbarkeit und Wartbarkeit von Code, während die vorhergehenden Schritte befolgt werden. Es ist nicht etwas zu maximieren .

Leistungsfähiger Code ist in Sprachen mit Speicherverwaltung (Java, die .NET-Familie, die meisten funktionalen Sprachen usw.) fast immer am wenigsten von Bedeutung. In diesen Umgebungen ist das Ziel schreiben richtigen Code ( „richtig“ hier definiert als die Herstellung des erwarteten Ergebnisses in allen erwarteten Fällen undverständlich und gut strukturiert sein und somit gewartet werden können), und die Leistung ist zweitrangig (normalerweise wird sie bis zu einem gewissen Grad von korrektem Code ausgehen). In allen Fällen ist ein Algorithmus leistungsfähig, wenn er "gut genug" ist. Denken Sie daran, "vorzeitige Optimierung ist die Wurzel allen Übels"; Optimierungen vorzunehmen, von denen Sie nicht wissen, dass Sie sie benötigen, reicht nicht aus, um Zeit zu verschwenden, Code zu verschleiern und im Allgemeinen den Fortschritt zu verhindern. Es muss zuerst funktionieren, und sobald es funktioniert, können Sie es ausführen und sehen, wie schnell es ausgeführt wird. Wenn es nicht schnell genug ist (wie durch einen veröffentlichten Benchmark definiert), verbessern Sie es, bis es ist, und hören dann auf .

KeithS
quelle
0

Bei der Programmierung muss man wirklich pragmatisch sein. Ja, wir alle tun gerne alles richtig, aber Sie werden dafür bezahlt, dass Sie funktionierende Software liefern, und nicht dafür, dass Sie sie für den Rest Ihres Lebens polieren.

Der Ansatz besteht darin, dies in Ihrem Berufsleben zu "erledigen". Liefern und weitermachen. Speichern Sie Ihren Perfektionismus für persönliche Projekte.

James McLeod
quelle
Ich verstehe, aber ich glaube, wir können dieses "Schwarz oder Weiß" nicht in Betracht ziehen.
Rushino