Wie gehen Sie mit absichtlich schlechtem Code um?

21

Es gibt viele Geschichten über absichtlich schlechten Code, nicht nur auf TheDailyWTF, sondern auch auf SO. Typische Fälle sind:

  • Mit einem unnötig zeitraubenden Konstrukt (z. B. einer leeren Schleife, die bis zu einem gewissen Wert zählt) können Programmierer die Anwendung auf einfache Weise "beschleunigen", indem sie sie entfernen, wenn sie dazu aufgefordert werden.
  • Bereitstellung absichtlich irreführender, falscher oder keiner Dokumentation zur Generierung teurer Supportanfragen.
  • Bereit, Fehler zu generieren, oder schlimmer noch, es wird generiert, obwohl alles einwandfrei funktioniert hat, und die Anwendung wird gesperrt, sodass zum Entsperren ein teurer Supportanruf erforderlich ist.

Diese Punkte weisen eine mehr oder weniger böswillige Haltung auf (auch wenn dies manchmal aus Versehen geschieht), insbesondere der erste Punkt tritt eher häufig auf.

Wie soll man mit solchen Konstrukten umgehen? Das Problem ignorieren oder einfach den fehlerhaften Code entfernen? Benachrichtigen Sie ihren Vorgesetzten oder sprechen Sie mit der Person, die die "Funktion" eingeführt hat?

Mafu
quelle
10
Ist es „manchmal durch Zufall“ oder ist es „absichtlich schlecht“? Ich sehe nicht , wie es beides sein kann.

Antworten:

7

Die meisten schlechten Code ist aufgrund eines Mangels an Verständnis und die Lösung ist die Bildung.

Absichtlich fehlerhafter Code unterscheidet sich grundlegend von dem, was der Programmierer oder der Rest des Projekts erlebt hat. Als solches müssen Sie herausfinden, warum sie den Code absichtlich sabotieren, und sich mit diesem Problem befassen. Dies bedeutet meistens keine Büropolitik, und das ist für niemanden eine angenehme Situation.

Wie ich mit der Politik umgehen würde, hängt von vielen (oben nicht genannten) Umständen ab. Wie ich mit dem Code umgehen würde, ist zunächst sicherzustellen, dass ich nicht das einzige Missverständnis bin - dass es sich wirklich um schlechten Code handelt - und dann die offensichtlichen Mängel zu beheben. Wenn möglich, schreiben Sie Tests, bei denen der fehlerhafte Code fehlschlägt. Eine Überprüfung, ob ich den Code richtig verstanden habe, würde bedeuten, mit der Person zu sprechen, die den Code geschrieben hat. Dies sollte auf eine sehr nette, höfliche Art und Weise geschehen, ohne die Absicht zu übernehmen, und es kann hilfreich sein, den zugrunde liegenden (politischen) Grund zu finden, der später benötigt wird.

Die Schifffahrt ist wichtiger als die Perfektion des Elfenbeinturms, aber es gibt zwei Punkte, die es wert sind, angesprochen zu werden. Wenn Sie offensichtliche Mängel beheben, erhalten Sie 80% der Ergebnisse mit 20% des Aufwands, und diese Art von tief hängenden Früchten ist es selten wert, ignoriert zu werden. Aber was noch wichtiger ist: Wenn Sie den zugrunde liegenden (politischen) Grund nicht ansprechen, wird wahrscheinlich absichtlich schlechter Code geschrieben, der weitere Probleme verursacht - und möglicherweise den Versand verhindert.


quelle
28

Ich bin (in über 20 Jahren) nie auf absichtlich schlechten Code gestoßen, aber die Beispiele, die Sie zitieren, scheinen (zumindest für mich, aber für IANAL) Versuche zu sein, entweder einen Arbeitgeber oder einen Kunden zu betrügen, sodass Sie wahrscheinlich einen legalen haben Verpflichtung, Ihren Vorgesetzten darauf hinzuweisen.

Kroger
quelle
2
Einverstanden. Niemand schreibt absichtlich schlechten Code. Sie lösen ein Problem und sie lösen es auf die beste Art und Weise, die sie kennen. Sie können fehlgeleitet, untergebildet, ignorant usw. sein. Aber ich kann nicht wirklich verstehen, dass ein Entwickler absichtlich etwas schreibt, von dem er weiß, dass es schlecht ist.
Dan Ray
8
Auch wenn dies nicht legal ist, besteht zumindest eine ethische Verpflichtung.
Chris Farmer
@ChrisFarmer Sie können ethische Verpflichtungen nicht vom weiteren Kontext trennen - es gibt einige Kontexte, in denen absichtlich schlechter Code legitimen kollektiven Widerstand darstellt, sei es in wirtschaftlicher oder politischer Hinsicht. (Und ein Arbeitsvertrag verdient es nur in gutem Glauben, gewürdigt zu werden, wenn die Beziehung, die er formalisiert, weder individuell noch strukturell ausbeuterisch ist.)
user234461
11

Kommt auf die Kultur des Unternehmens an. Meistens ist es nicht Ihre Aufgabe, schlechten Code zu reparieren und zu bereinigen.

Jamie Zawinskis Überlegungen zu Overengineering von Coders at Work , die auch in dieser Situation angewendet werden können:

Versende am Ende des Tages das verdammte Ding! Es ist großartig, Ihren Code neu zu schreiben und sauberer zu machen, und bis zum dritten Mal wird er tatsächlich hübsch sein. Aber darum geht es nicht - Sie sind nicht hier, um Code zu schreiben. Sie sind hier, um Produkte zu versenden.

Es gibt viele schlechte Programmierer und Codes, und der Versuch, sie alle zu beheben, wenn Sie auf sie stoßen, auf Kosten des aktuellen Projekts / der aktuellen Aufgabe, kann sich einfach nicht lohnen, wenn das Produkt "funktioniert". Zu oft sind wir alle nur Klebebandprogrammierer.

Siehe auch Joel Spolskys Beitrag: The Duct Tape Programmer

Schwamm
quelle
+1 Ich bin wirklich ein Fan des Konzepts der Versandprodukte. Ich denke, zu viele technische Profile vermissen dieses Konzept.
+1 Ich auch. Es gibt viel zu viele "Clean Code" -Bücher usw., die eine verzerrte Sicht auf das Wesentliche bestätigen. Codequalität ist nur so wichtig. Die Gewinner sind nicht die, die das beste Produkt haben. Es sind diejenigen, die ein Produkt haben, das gut genug ist und das schnell genug geliefert wird.
Joonas Pulakka
4
Ich denke, Sie haben den Punkt in der Frage verpasst - der Typ hat über absichtlich schlechten Code gesprochen, nicht einfach über Code, der von schlechten Programmierern geschrieben wurde.
Hila
@Hila Ich glaube, mein Punkt ist immer noch gültig, ob der fehlerhafte Code beabsichtigt war oder nicht. Es sei denn, es handelt sich um ein Problem, das in der zugewiesenen Projekt- / Aufgabenliste aufgeführt ist, liegt nicht in der Verantwortung eines Klebebandprogrammierers, fehlerhaften Code zu beheben und zu bereinigen . Die Kultur da draußen ist nicht akademisch und sauberen / schönen Code zu schreiben. Es geht darum, ein Produkt / Geschäft zu versenden und zu unterstützen. Ich persönlich würde gerne den ganzen schlechten Code reparieren, der mir begegnet, aber ich kann nicht 100% meiner Zeit dafür aufwenden. Ich würde dann einfach nie in der Lage sein, die mir zugewiesene Aufgabe / das Projekt zu beenden.
Spong
3
@sunpech Aber das Bereinigen von absichtlich schlechtem Code ist nicht gleichbedeutend mit dem Bereinigen von Code. Es geht nicht darum, Ihre Anwendung "schöner" zu machen, es geht darum, schädlichen Code zu reparieren, der absichtlich dort abgelegt wurde. Es ist, als würde man sagen, ein Arzt solle keine Schere herausnehmen, die ein Kollege in einem Patienten vergessen hat, weil es bei einer kardiothorakalen Operation um Lebensrettung geht und nicht darum, wie hübsch die Stiche sind.
Hila
4

Diese Haltung ist das Symptom für etwas Schlimmeres.

  • Fördert das Management den Wettbewerb der Entwickler?

  • Wo ist der Teamgeist?

  • Werden Aufgaben von einer anderen Person als dem Team selbst zugewiesen?

  • ...

In jedem Fall reicht es nicht aus, den fehlerhaften Code zu entfernen. Sich bei seinem Manager zu beschweren, wird sicherlich nicht dazu beitragen, den Teamgeist zu verbessern.

Ich würde versuchen, mit der Person direkt zu sprechen und zu verstehen, warum, indem ich viele Fragen stelle, ohne sie zu beurteilen. Das ganze Team muss auf Aggressivität verzichten.

In den meisten Fällen hat dieses konstruktive Verhalten das eigentliche Problem (das schlimmere) ins Licht gerückt, und dann können Sie daran arbeiten.

Wenn es wirklich nicht geht. Entfernen Sie diesen Entwickler aus dem Team.


quelle
4

Wenn ich es für beabsichtigt halten würde, würde ich den Kerl wahrscheinlich feuern! Wenn jemand nicht gut genug programmiert, würde ich an seinen Fähigkeiten arbeiten. Wenn es von oben geschoben würde, würde ich wahrscheinlich anfangen, nach einem neuen Job zu suchen.

Zachary K
quelle
2

Wie soll man mit solchen Konstrukten umgehen? Das Problem ignorieren oder einfach den fehlerhaften Code entfernen? Benachrichtigen Sie ihren Vorgesetzten oder sprechen Sie mit der Person, die die "Funktion" eingeführt hat?

Abhängig vom Kontext ist möglicherweise einer davon der am besten geeignete. Andere Möglichkeiten umfassen die Aufforderung, zu einem anderen Projekt zu wechseln, einen neuen Job zu bekommen, und verschiedene fragwürdige moralische und / oder rechtliche Handlungen.

Da wir jedoch die wahren Fakten und die beteiligten Personen nicht kennen, sollte niemand in der von Ihnen beschriebenen Position unseren Ratschlägen / Wert von 2 Cent viel Aufmerksamkeit schenken.

Wenn es sich um eine reale Situation handelt, über die Sie sprechen, kann es sich lohnen, mit Ihrem Vorgesetzten ein leises Gespräch zu führen und ihn um Rat zu fragen, was Sie tun sollten. Wenn möglich, versuchen Sie das Gespräch darüber zu führen, was Sie tun können / sollten, und nicht, mit dem Finger zu zeigen. Nennen Sie möglichst keine Namen. Es besteht die Möglichkeit, dass Ihr Manager das Problem bereits ahnt.

Aber die Kehrseite ist, dass Sie dies überproportional blasen könnten. Denken Sie lange und gründlich darüber nach, bevor Sie etwas unternehmen. Denken Sie an die Konsequenzen, einschließlich der Möglichkeit, dass alle Schritte, die Sie unternehmen, auf Sie zurückschlagen könnten ... schlimm.

Stephen C
quelle