Ich bin gezwungen, schlechten Code zu schreiben. Wie rette ich mein Gesicht? [geschlossen]

69

Ich bin nur ein Junior-Entwickler, aber mein Job zwingt mich, mit wirklich schrecklichem PHP-Code zu arbeiten (denken Sie an den schlechtesten PHP-Code, den Sie gesehen haben, und denken Sie dann an doppelt so schlechten Code). Normalerweise versuche ich, Fehler zu beheben und mit der Codebasis zu kämpfen, um neue Funktionen hinzuzufügen. Manchmal muss ich die Dinge so schnell wie möglich zum Laufen bringen, was meistens mit schmutzigen Hacks einhergeht.

Das Produkt war zuvor Open Source und ich befürchte, dass es in Zukunft Open Source werden könnte. Ich würde mich schämen, wenn jemand (insbesondere potenzielle Arbeitgeber) neben einigen Änderungssätzen meinen Namen finden könnte. Was kann ich tun, um meinen guten Namen zu schützen?

Ich bin mir nicht sicher, ob dies relevant ist, aber ich möchte hinzufügen, dass weder mein Chef noch meine Kollegen zugeben möchten, dass der Code schlecht ist, aber ich bin nicht sicher, ob ich ihnen die Schuld geben kann - für viele von ihnen ist dies ihr erster Job.

Beschämter
quelle
21
Wie werden Sie gezwungen, schlechten Code zu schreiben? Warum können Sie nicht aufstehen und aufhören, Ihren Namen in einen schlechten Code zu verwandeln, und das Problem, die Lösung, die Kosten in Bezug auf Zeit, Aufwand und Geld sowie die Vorteile der Behebung der Probleme jetzt Ihren Vorgesetzten erklären?
Thomas Owens
17
"Aufmunternde schnelle und schmutzige Hacks"? Ermutigend? Welches ist schlimmer. Ihr Stolz (und das Finden eines neuen Jobs) oder das Festhalten an diesem Job. Es mag nicht schlecht sein, für das einzustehen, was richtig ist. Was hält dich auf? Bedrohung durch Gewalt? Erpressung? Strafverfahren? Ernsthaft. Was hindert Sie daran, guten Code zu schreiben? Bitte seien Sie genau . Und ehrlich.
S.Lott
113
Wenn es ein Trost ist, wird selbst guter Code, den Sie heute schreiben, in fünf Jahren für Sie schlecht aussehen.
Kyralessa
7
face it PHP fördert "schnell und schmutzig", indem es es nicht entmutigt und es einfach macht. Ich würde sagen, PHP ist besser als jede andere Sprache, außer vielleicht Perl, wenn diese Dynamik erst einmal hergestellt ist Schwer zu stoppen, besonders wenn das Management das Verhalten ebenfalls fördert. Am Ende ist der Code, der zu funktionieren scheint, für das Unternehmen wertvoller, als überhaupt kein Code.
7
Es tut uns leid, aber es gibt richtige und falsche Möglichkeiten, Code zu schreiben. Der richtige Weg nutzt branchenübliche Praktiken. Der schlechte Weg hackt Scheiße zusammen und sagt, dass es "funktioniert".
Wayne Molina

Antworten:

132

Rom wurde nicht an einem Tag erbaut, aber Sie können ein guter Pfadfinder sein. Lassen Sie den Code bei jeder Berührung besser als zuvor. Es dauert nicht allzu lange, um bei der Arbeit vernünftige Funktionsnamen, gute Codierungsstandards und anständige Kommentare zu verwenden.

Ich denke, die Gefahr besteht darin, zu denken, es sei alles oder nichts. Nur weil Sie nicht die Zeit damit verbringen können, eleganten Code zu schreiben, heißt das nicht, dass Sie aufgeben und Müll schreiben müssen.

Amy Anuszewski
quelle
2
+1. Sie müssen nicht alles opfern, woran Sie glauben, nur um eine schnelle Lösung zu finden.
Tdammers
4
+1: für alles oder nichts - sehr wahr.
Umber Ferrule
3
Die Boy-Scout-Regel in den falschen Händen kann genau das sein, was das Problem verursacht, da die Definition des "sinnvollen Funktionsnamens" seiner Vorgesetzten "bolChkLst" lauten könnte (ungarische Notation, um den Styleguide zu erfüllen, ChkLst anstelle von CheckList, weil "kürzer ist besser") '). Hier sind einige Implementierungen der Pfadfinder-Regel, die ich bei verschiedenen Jobs erlebt habe, denen ich nicht folgen wollte: 'Join-Funktionen, um so wenig wie möglich zu haben', 'Argumente nicht über drei Aufrufe übertragen, stattdessen Globals verwenden', 'Inline-SQL in Views verwenden' mach es schneller '
keppla
40
+1 fürEvery time you touch the code, leave it better than it was before.
Qwerky
3
+1. Wenn Sie viele klare Verbesserungen vorgenommen haben, wird jeder, der sich Ihren Beitrag tatsächlich ansieht, nicht glauben, dass Sie ein beschissener Programmierer sind. Potenzielle Arbeitgeber, die annehmen, dass Sie beschissen sind, weil das Projekt beschissen ist, sind keine Menschen, für die Sie arbeiten möchten.
Matthew Read
59

Stimmen Sie S.Lott von den Kommentaren zu * (einmalig :) Niemand zwingt Sie, schlechten Code zu schreiben. Die Sache ist, junior dev. Oft (diese Seite ist auch schuld daran) verirren Sie sich in bewährten Methoden, "schönem Code", ... wie auch immer Sie es nennen möchten ... und sie werden nicht viel erledigt. oder sie erledigen das, verschwenden aber viel Zeit. Indem man ihnen sagt, dass sie schlechten Code schreiben sollen (das ist Code, der auch funktioniert), bringt man sie dazu, etwas zu liefern. Mit der Zeit hat ein (inzwischen nicht mehr) Junior-Entwickler sehr schnell eine schnelle und schmutzige Lösung gefunden, verbringt aber den Rest der Zeit damit, sie zu verbessern. Und mit der Zeit lernen Sie mehr und irgendwann liefern Sie schnelle und schmutzige Lösungen, die eigentlich guter Code sind.

Aber wenn Sie Ihren Weg gegangen wären und von Anfang an versucht hätten, perfekten Code zu schreiben, hätten Sie höchstwahrscheinlich viel Zeit verbracht und fast nichts getan.

Also ... schlechten Code schreiben, ... viel davon ... Code, der kaum funktioniert, und dann ITERIEREN. Jede Iteration ein bisschen besser!

Niemand hat beim ersten Mal die perfekte Lösung geschrieben.

* Wäre es kürzer, wäre es ein Kommentar gewesen.

Turm
quelle
1
+1 Ich stimme dieser Antwort voll und ganz zu. Ich würde dich zweimal belohnen.
Vitor Py
3
Genau. Dies ist eine großartige Möglichkeit, die "Analyse-Lähmung" zu überwinden, die sich durchsetzen kann, wenn Sie versuchen, die "perfekte" Lösung für ein Problem zu finden. Ich habe etwas Ähnliches über StackOverflow geschrieben .
Kyralessa
4
+1. Ich habe dies bereits über Programmierer gelesen (kenne aber die Quelle nicht): Zwei Gruppen wurden beauftragt, innerhalb eines bestimmten Zeitrahmens Keramik herzustellen. Einer, um einen Artikel von bestmöglicher Qualität zu erstellen, und einer, um so viele Artikel wie möglich zu erstellen. Letztendlich lieferte die letztere Gruppe Gegenstände von besserer Qualität, weil Wiederholung der Weg zur Meisterschaft ist. Kontemplation allein bringt dich nirgendwo hin. Am Ende lernen wir alle durch Handeln und unsere Angst, etwas falsch zu machen, ist das, was uns daran hindert, es zu versuchen, möglicherweise zu scheitern, aber definitiv aus unseren Fehlern zu lernen.
back2dos
1
Verwenden Sie daher ein Repository! Auch wenn es nur eine persönliche ist, die Sie auf Ihrem eigenen Computer eingerichtet haben. Nachdem Sie sie verwendet haben, werden Sie feststellen, wie befreiend es ist, eine Reihe von Änderungen vorzunehmen, festzustellen, dass sie nicht funktioniert haben, und einen Rollback durchzuführen. Mein persönlicher Favorit ist Fossil
Spencer Rathbun
1
"Also ... schreibe schlechten Code, ... viel davon ... Code, der kaum funktioniert, und dann ITERATE. Jede Iteration ein bisschen besser!" Was ist, wenn Sie einfach nie iterieren, weil sich immer wieder neue Projekte ansammeln ... und Sie beginnen zu erkennen, dass das, was Sie als Alpha rausschieben, so lange anhält, bis das Projekt stirbt. Was natürlich aufgrund des anfänglich beschissenen Codes und der mangelnden Aktualisierung einhergeht. Ich denke, es sind solche Situationen, in denen viele Junior-Entwickler denken, sie müssten von Anfang an "schönen Code" schreiben ...
Serhiy,
40

Codekommentare sind dein Freund hier.

Wann immer Sie das Gefühl haben, aufgrund von Druck einen billigen Hack schreiben zu müssen, sagen Sie einfach etwas wie: "Dieser Code macht X aus Zeitgründen. Idealerweise würde ich stattdessen Y tun. - Beschämt Eins, 5. Juli 2011"

Dann werden potenzielle Arbeitgeber erkennen, dass Sie es vorziehen, guten Code zu schreiben, aber Sie sind auch bereit, Ihren Codierungsstil an die geschäftlichen Anforderungen anzupassen. Die meisten Arbeitgeber werden beides als gute Dinge ansehen.

Bob Murphy
quelle
4
Genau. Kommentare und Commit-Nachrichten auch. Ich habe es noch nie gemacht, aber es wäre interessant, einen Entwickler auf der Grundlage von nichts anderem als kommentierten Änderungssätzen zu bewerten, die ihnen in einigen vcs zugeschrieben werden.
Timdev
Nun, Sie können etwas über jemanden erzählen, dessen Commit-Kommentare "behoben", "erledigt", "blahblahblah" sind :)
gbjbaanb
+1 Ich habe dies mehrere Male gemacht und im Falle von Peer-Entwicklern funktioniert es einfach.
Jacek Prucia
7
Im Allgemeinen lösche ich solche Kommentare, wenn ich auf sie stoße. Ein Kommentar, der als "TODO" oder "FUTURE-ENHANCEMENT" gekennzeichnet ist, sollte möglicherweise beibehalten werden, aber Entschuldigungen sind nur Müll.
Kristopher Johnson
1
Ich stimme zu, eine Erklärung beizufügen, warum eine weniger als optimale Lösung implementiert wurde (und wie diese Lösung aussehen könnte). Ich mache dies von Zeit zu Zeit. Ich denke jedoch nicht, dass es etwas ist, für das man sich schämen oder entschuldigen muss. Es bedeutet nur, dass zu der Zeit, als Sie an diesem Code gearbeitet haben, wichtigere Dinge zu tun waren und dass die angegebene Implementierung ausreichend war.
Justin Ohms
10

Es kommt darauf an, wie sie dich zwingen.

Nach meiner Erfahrung gibt es zwei Möglichkeiten:

Sie fühlen sich durch einen engen Zeitplan, einen alten Code usw. gezwungen.

In diesem Fall liegt es, wie die meisten anderen Antworten bereits sagen, an Ihnen, „auf Coolness zu optimieren“. Sie haben möglicherweise nicht die Zeit, die Codebasis in MVC umzuschreiben, aber als ersten Schritt können Sie beispielsweise aufhören, Ihre SQL von Hand zu kleben, und stattdessen ein nettes schreiben execute_sql($query, $params), das die Grundlage für Abstraktionen wie fetch_customer($filter_params)usw. bildet. Denken Sie daran, alles Gute Letztendlich gibt es Praktiken, bei denen Ihr Chef ein Produkt früher bekommt, sodass es nur einen Konflikt darüber gibt, wie viel Zeit in die Zukunft investiert werden muss, und nicht in das Jetzt.

Wenn Sie den richtigen Kontext festlegen ("innerhalb von 6 Monaten, ohne zusätzliche Zeit zu haben, habe ich den monolithischen Code an MVC überarbeitet"), sollten Sie Ihren Namen auf dem Code belassen und versuchen, stolz zu sein wie ein Therapeut, der ein Schlaganfallopfer unterrichtet sage noch einmal einzelne wörter.

Sie werden ausdrücklich angewiesen, es auf eine Art und Weise umzusetzen, die Sie für ungeeignet halten

Der Versuch, die Ansicht vom Modell zu trennen, überlebt die Überprüfung nicht, weil "es zu kompliziert ist, warum machen Sie nicht einfach nur SQL-Abfragen?". Sie werden execute_sqleingemacht, weil "ein Programmierer mit Disziplin das nicht braucht".

Dieser Fall ist zum Kotzen. Nach meiner Erfahrung handelt es sich in der Regel um Mikromanagement und Teamleiter, die aus politischen Gründen und nicht wegen ihrer Erfolge befördert wurden. Das eigentliche Problem ist, dass Sie für etwas (den Code) verantwortlich sind, das Sie nicht kontrollieren können (Sie müssen es auf ihre Weise tun). Die beste Lösung wäre, die Grundursache zu lösen (dh, Sie werden wie ein Grunzer behandelt). Die zweitbeste (und meiner Erfahrung nach die übliche) Lösung ist, aufzuhören.

Der Vorteil ist, dass in diesem Szenario Ihr Name wahrscheinlich sowieso nicht veröffentlicht wird, da der Teamleiter den Verdienst für jeden Erfolg auf sich zieht.

keppla
quelle
8

Ich bin mir ziemlich sicher, dass Ihr Chef von Ihnen verlangt, dass Sie schnell etwas liefern, aber nicht, dass Sie zusätzliche Anstrengungen unternehmen, um es absichtlich schlecht zu machen. Das heißt, wenn Sie die Wahl zwischen wirklich schlechtem Code und etwas weniger schlechtem Code haben und die Implementierung beider Optionen gleich lange dauert, entscheiden Sie sich für die etwas weniger schlechte Option. Das ist die kurzfristige Lösung und erfordert keinerlei Aufwand.

Sprechen Sie langfristig mit Ihrem Chef. Erläutern Sie, wie Sie durch das Investieren von 15 Minuten hier Stunden sparen können. Stellen Sie sicher, dass Sie überzeugende Beispiele haben - nicht den Typ "wenn ich dies und das hier mache, hoffe ich, dass ich nächstes Jahr das andere machen kann", sondern "schauen Sie, hier habe ich das gemacht und weil" davon habe ich drei stunden gebraucht, um das problem dort zu finden; wenn ich es so und so gemacht hätte, wäre der fehler sofort aufgetaucht ". Eine Warnung hier: Während sich eleganter und wartbarer Code viel besser und effizienter anfühlt, ist dies manchmal nicht der Fall. Es gibt Situationen, in denen eine schlampige Schnellreparatur durchaus gerechtfertigt ist: Manchmal schreiben Sie Code für den einmaligen Gebrauch, manchmal halten Sie einen veralteten Müll am Leben und warten auf die echte Sache. manchmal ist der Nutzen einer richtigen Lösung nicht

Wenn alles andere fehlschlägt, suchen Sie einen anderen Job.

tdammers
quelle
3

Niemand zwingt dich, schlechten Code zu schreiben. Sie können diese Situation umkehren und positiv ausdrücken. Pionierwechsel bei Richtlinien und Verfahren. Und Sie können auch nicht immer der "Ja" -Mann / Frau sein. Wenn sie vor dem Ende des Tages angeben, dass sie Funktionalität benötigen x , sagen Sie ihnen, dass dies nicht machbar ist, und begründen Sie, warum dies tatsächlich nicht der Fall ist. Wo es ein Problem gibt, bieten Sie Lösungen an. Nicht nur ein blindes Auge, oder schlimmer noch ... noch dazu.

Ihr Entwickler-Shop ist nicht der erste, der strenge Fristen einhält, aber dennoch den Wunsch hat, ausgereiften Code zu pflegen.


quelle
4
-1: Wenn Ihr Chef in den USA sagt "Schreiben Sie schnell beschissenen Code" und Sie sich weigern, können Sie gefeuert werden. Das Nichtbefolgen einer direkten Anweisung, etwas zu tun, das legal ist, ist ein Grund für eine unfreiwillige Kündigung. Während das Sie also nicht "zwingt", könnten die Alternativen zu dem, was Ihr Chef sagt, viel schlimmer sein.
Bob Murphy
Es hängt alles von Ihrer Herangehensweise ab. Idealerweise hätten Sie eine überlegene Persönlichkeit, die Ihre Fachkenntnisse wertschätzt, und Ihr Urteilsvermögen sollte hoch geschätzt werden. Oft sind die Leute, die Zeitpläne diktieren, keine Entwickler, und sie sollten berücksichtigen, was möglich ist und was nicht. Natürlich könnte man "beschissenen" Code unter die Decke schreiben, aber das Zurückschieben könnte ausreichen, damit alle zufrieden sind: Gute Ergebnisse aus gutem Code.
1
Ideale Vorgesetzte, für die Sie eigentlich nicht arbeiten, sind großartig, aber die Person, die Ihren Gehaltsscheck unterschreibt, ist die Person, die Sie zufrieden stellen müssen. Geldautomaten rufen zu jeder Zeit an, wenn Sie wirklich arbeitslos sind.
Bob Murphy
1
Es steckt mehr dahinter als das reine Eigeninteresse. Ich war Manager und Unternehmer, und ich kann Ihnen versichern, dass, wenn der Kunde nur schnell und schmutzig bezahlt, ein guter Job, bei dem er Geld verliert, dazu führt, dass die Leute entlassen werden. Ich musste einmal eine ganze Firma entlassen, und ich möchte es nie wieder tun. Also, obwohl ich definitiv dafür bin, moralische Standpunkte zu vertreten ... ist das Schreiben von beschissenem Code normalerweise keine moralische Angelegenheit, und irgendwann muss man zwischen persönlichen Vorlieben und praktischen Problemen von Menschen wählen, die einen Job haben oder nicht.
Bob Murphy
1
Ich würde fast nie befürworten, ein großes System in großem Maßstab umzuschreiben, aber das bedeutet nicht, dass der Code, den Sie in Zukunft schreiben, schrecklich sein muss.
PeterAllenWebb
3

Jedes Unternehmen muss ein Gleichgewicht zwischen dem Schreiben von brillantem Code mit umfassenden Dokumentationen und Komponententests und der Markteinführung von Produkten in einem angemessenen Budget und Zeitrahmen finden.

Der beste Code der Welt spielt keine Rolle, wenn er vor seiner Veröffentlichung veraltet ist.

Pragmatisch zu sein bedeutet, dieses Gleichgewicht zu finden. Eine rasche Behebung von Problemen kann derzeit kommerziell unerlässlich sein. Das bedeutet jedoch nicht, dass dies immer der Fall sein wird.

Es braucht viel Erfahrung (mehr als die meisten Programmierer jemals), um dieses Gleichgewicht herzustellen. Es ist sehr einfach, sich für beide Extreme zu entscheiden. Einen Mittelweg zu finden ist schwieriger.

Ich sage nicht, dass Ihr Chef Recht hat. Als Programmierer besteht die Versuchung, ständig schönen Code zu erstellen, der kommerziell nicht realisierbar ist. Wenn Sie sich dieser Versuchung bewusst sind, können Sie erkennen, dass einige dieser Hacks nicht so schlimm sind.

Der meiste Code enthält nach einiger Zeit Hacks für bestimmte Situationen, die zu kostspielig waren, um sie in ein allgemeines Framework umzugestalten.

Jeremy French
quelle
2

Ich möchte hinzufügen, dass Sie nicht einfach so weitermachen sollten, wie Sie es jetzt tun, nichts sagen und nur hacken und hacken.

Sie müssen aufstehen und auf konkreten Code zeigen und ihnen sagen, was daran scheiße ist. Seien Sie genau und verwenden Sie Codemetriken, um Ihre Ansprüche zu sichern. Nichts ist peinlicher, als zu behaupten, ein Code sei schlecht, obwohl Sie nicht verstanden haben, was getan wurde.

Ich bin sicher, dass es viele Tools gibt, die kostenlos für die PHP-Code-Analyse zur Verfügung stehen. Http://en.wikipedia.org/wiki/Code_analysis

Auch das natürlich http://en.wikipedia.org/wiki/Code_smell

Lesen Sie es nach, fassen Sie zusammen, was Sie in Ihrer Anwendung finden, und listen Sie natürlich Alternativen auf . Es ist eine schlechte Praxis, einfach aufzustehen und zu rufen, "Ich mag es nicht, wie das gemacht wird", ohne einen alternativen (vorzugsweise) besseren Weg zu präsentieren, um es zu tun.

Schnelle Hacks kosten Geld. Und sehen Sie es nicht ganz negativ - Sie können jetzt viel von diesem Job lernen und von den Erfahrungen profitieren, die Sie jetzt in Ihrem nächsten machen.

hth

UrbanEsc
quelle
0

Vor allem verwenden Sie eine Art Quellcodeverwaltung, oder? Wenn nicht, fangen Sie dort an. Es hilft Ihnen zuerst und wird vom Rest des Teams schnell adoptiert.

Wenn Sie die Quellcodeverwaltung haben, sollten Sie Ihren Namen nicht in den Code einfügen, sondern nur den Namen Ihres Unternehmens. In fehlerhaftem Code ist es üblich, einen Versionsverlauf in die Kommentare oben in den Dateien einzufügen. Dies wird besser an die Quellcodeverwaltung delegiert.

In Bezug auf die Codequalität können Sie dies nicht als Big-Bang-Ansatz ändern. Fügen Sie nach und nach neue Ansätze zu verschiedenen Themen hinzu. Wenn Sie es richtig machen, sparen Sie Zeit und verbessern die Gesamtqualität.

Um Ihnen ein Beispiel zu geben: Ich war einmal mitten in einem Projekt mit einer Perl / CGI-Anwendung, in der der gesamte HTML-Code enthalten war. Die gesamte App befand sich in einer einzigen Datei ohne klare Struktur. Nichts wurde versioniert. Ich begann mit der Konfiguration eines CVS-Repos (zu diesem Zeitpunkt noch kein SVN verfügbar) und stellte dem Kunden ein Webinterface zur Verfügung. Zuerst habe ich die Aufträge meiner Kollegen selbst ausgeführt. Dann habe ich alle Methoden in verschiedene Module (Dateien) aufgeteilt. Zu diesem Zeitpunkt begannen die Kollegen, CVS einzuführen. Dann habe ich den HTML-Code aus dem Code entfernt. Jedes Mal, wenn ich einen Teil des Codes ändern musste, nahm ich mir etwas Zeit, um einen Teil zu überarbeiten. Am Ende war die Entwicklungsgeschwindigkeit so stark gestiegen, dass der Kunde äußerst zufrieden war. Sie forderten eine kosmetische Änderung an und anstatt dass wir ihnen sagten "es wird 2 Tage dauern",

Dieser Ansatz funktioniert jedoch nur, wenn Sie den gesamten Code gut genug beherrschen. Wenn Sie das Gesamtbild nicht verstehen und einige Teile der Anwendung unverständlich bleiben, wird dies Ihre Arbeit sehr erschweren.

Eine letzte Sache, ein vollständiges Umschreiben ist manchmal die einzige Lösung, aber es ist normalerweise sehr schwierig, die Kosten für das Management zu rechtfertigen.

Eric Darchis
quelle
0

Da Sie ein Junior-Entwickler sind, ist dies eigentlich eine gute Sache. Wenn Sie sich mitten in einem großen Durcheinander von Code befinden, erfahren Sie weit mehr darüber, was Sie nicht tun sollten, als wenn Sie nur an perfekt 'sauberem' Code arbeiten würden. Nutzen Sie die Situation und lernen Sie, wie Sie den fehlerhaften Code umgestalten und ihn langsam in etwas Verwaltbareres umwandeln. Und beschweren Sie sich nicht, dass es so schnell wie möglich sein muss. Das ist der Punkt - lernen Sie, Code umzugestalten und zu bereinigen, während Sie Dinge innerhalb einer engen Frist erledigen. Schließlich kann jeder perfekten Code schreiben, wenn er unendlich viel Zeit zur Verfügung hat.

GroßmeisterB
quelle