Wählen Sie den Aufwand für das Code-Design oder die Faulheit in der Bankwelt

23

Ich habe zwei Jahre in einer großartigen Investment Bank gearbeitet.

Ich habe einige technische Projekte mit dem Wunsch gemacht, den Code unter Berücksichtigung der angepassten guten Entwurfsmuster, des SOLID-Prinzips, des Demeter-Gesetzes und der Vermeidung aller Arten von doppelten Codes zu optimieren.

Bei Auslieferung in Produktion => Null Fehler ist alles wie erwartet verlaufen.

Eine Mehrheit der Entwickler kam jedoch zu mir, um zu präzisieren, dass mein gesamter Code zu komplex ist, um das Leseverständnis zu verbessern. Ich habe zum Beispiel zugehört: "Machen Sie einige wenn und wenn, vergessen Sie Polymorphismus, so dass es sehr einfach sein wird, Produktionsfehler im Notfall zu korrigieren". Ich wollte nicht antworten ......

Zu wissen, dass diese Entwickler überhaupt nicht neugierig sind, verweigert die Bemühungen, ein gutes Design zu verstehen (zum Beispiel wissen 90% der Entwickler nicht, was ein Strategiemuster ist, und schreiben prozeduralen Code und entwerfen niemals, weil sie, wie sie sagten, Einfachheit wollen ), sagten mir meine Projektmanager, dass ich wirklich falsch und zu idealistisch für die Bankwelt bin.

Was würdest du mir raten? Sollte ich mich nach wirklich gutem Code sehnen oder mich an die Mehrheit der Entwickler anpassen, die, wie ich wiederhole, nach dem Design-Code, der meiner Meinung nach die ganze Schönheit unserer Entwicklerarbeit ausmacht, wirklich nicht interessant sind.

Oder sollten sie im Gegenteil grundlegende OO-Prinzipien und Best Practices erlernen, um sich an meinen Code anzupassen?

Mik378
quelle
19
Es ist schwer, wie ein Adler zu schweben, wenn man mit Truthähnen arbeitet ;-)
JonnyBoats
8
Ändern Sie Ihre Organisation oder ändern Sie Ihre Organisation. - Martin Fowler
Don Roby
9
@ Mik378 Möglicherweise liegt ein Kommunikationsproblem vor. Wenn Sie Ihren Code so schlampig dokumentieren, wie Sie diese Frage geschrieben haben (und je mehr OO "cruft" vorhanden ist, desto mehr Dokumentation benötigen Sie, damit die Leute wissen, was diese ITradeSettlementVisitorSchnittstelle tun soll), können sich Ihre Kollegen zu Recht beschweren. Es ist eine Sache, schönen Code zu schreiben, den Sie mögen, und eine andere, ihn so zu strukturieren und zu dokumentieren, dass er für andere zugänglich und verwendbar ist.
quant_dev
2
@quant_dev: Ich denke, du nimmst etwas zu viel von Mik378 an. Seine Frage scheint mir nicht schlecht formuliert zu sein; Er ist einfach kein Muttersprachler. Ich mag Ausführlichkeit und überentwickeltes Design in OO nicht so sehr, wie Sie es zu tun scheinen, aber die Situation, die Mik378 beschreibt, läutet auch eine Glocke: Ich habe mit viel zu vielen Programmierern gearbeitet, die einfache Dinge wie boolesche Ausdrücke nicht verstehen konnten (so würden sie es) schreibe "if (exp) then True else False") ... Es ist wahrscheinlich, dass diese Art von Menschen auch Angst vor Entwurfsmustern und Polymorphismus hat und daher zu einfachem alten Verfahrenscode zurückkehrt.
Andres F.
2
Ich bin absolut nicht der Meinung, dass es faul ist, den Code für Ihre Mitarbeiter einfach und leicht zu pflegen, wie im Titel angegeben.

Antworten:

20

Meine Projektmanager sagten mir, dass ich wirklich falsch und zu idealistisch für die Bankwelt bin.

GTFO!

Zeit zu gehen und sie zu bemitleiden. Warum solltest du ficken? Sie wissen, dass sie mit ihren inkompetenten Mitarbeitern auf lange Sicht Geld kosten werden. Dies ist kein Spiel der technischen Diskussion. Hier geht es um Politik. Lassen Sie sie die anderen Entwickler oder GTFO schulen! Wenn Sie nicht genug politisches Gewicht haben, dann GTFO! Suchen Sie nach einem Unternehmen mit besseren Praktiken.

Der einzige Grund, dort zu bleiben, ist eine angemessene Entschädigung für Ihre Kopfschmerzen. Also zahlen sie besser weit überdurchschnittlich oder GTFO! Ich bezweifle, dass Sie dort auch als Softwareentwickler wachsen können. Wachstum in unserem Beruf wird hauptsächlich durch die Zusammenarbeit mit Menschen erreicht, die besser sind als Sie und die Best Practices fördern. Und je besser Sie sind, desto höher ist Ihr Marktwert für Unternehmen, die sich darum kümmern.

Ja, ich weiß, dass dies nicht meine übliche Antwort ist, aber wirklich, wenn Sie das Politikspiel in dieser Firma, GTFO, nicht spielen können.

Was würdest du mir raten? Sollte ich mich nach wirklich gutem Code sehnen oder mich an die Mehrheit der Entwickler anpassen, die, wie ich wiederhole, nach dem Design-Code, der meiner Meinung nach die ganze Schönheit unserer Entwicklerarbeit ausmacht, wirklich nicht interessant sind.

Ich würde nicht für ein Unternehmen arbeiten, das von mir suboptimale Lösungen verlangt. Ich möchte meinen Namen in die Software einarbeiten. Ich möchte stolz darauf sein. Ich schreibe keine prozeduralen Anwendungen in Sprachen, die auf dem OO-Paradigma basieren. Ich glaube an qualitativ hochwertige Software und wenn das Unternehmen dies nicht tut, werde ich GTFO! Hoffe du hast genug "Fick dich Geld".

Falke
quelle
4
+1 - Einmal fiel mir ein, was GTFO war ... ( urbandictionary.com/define.php?term=gtfo )
Reddog
2
@ Falcon Ich stimme Ihnen voll und ganz zu und es ist mir eine Freude, Menschen zu finden, die meine Idee teilen. und besonders, wenn Sie sagen: "Wachstum in unserem Beruf wird hauptsächlich durch die Zusammenarbeit mit Menschen erreicht, die besser sind als Sie und die Best Practices fördern." Das Erstaunlichste und Frustrierendste ist, dass ich der jüngere Entwickler bin und nicht wirklich von älteren gelernt habe. Vielen Dank für Ihre Antwort :)
Mik378
+1 stimme ich voll und ganz zu. Diese Bank scheint einfach kein gutes Arbeitsumfeld zu sein, und ihre Probleme scheinen unüberwindbar: schlechte Programmierer, schlechtes Management. GTFO in der Tat!
Andres F.
2
@ Mik378: Ihr aktueller Arbeitgeber kann Ihre Fähigkeiten nicht voll ausschöpfen und kann Sie daher nicht bezahlen, was Sie wert sind. Eine bessere Organisation kann mehr Nutzen aus Ihnen ziehen und Sie mehr bezahlen.
Kevin Cline
+1, Wenn du mehr Upvotes geben könntest, würdest du 1000 von mir bekommen. Nachdem ich selbst in einer Investmentbank gearbeitet habe, weiß ich genau, mit was Mik378 zu tun hat. Es ist ein Nährboden für toxisches Verhalten, Polaritätsstörungen und Egomanie. Kein ideelles Umfeld für die Förderung technischer Spitzenleistungen.
Desolate Planet
18

Starker Punkt. Ich denke, Sie können zwei Wege parallel gehen, Ihren Standpunkt vertreten und Kompromissbereitschaft zeigen:

  • Hier geht es um Geld. Wie jeder Entwicklerjob in der Tat, aber da Sie das Bankumfeld betonen, sollte dies noch besser funktionieren;). Zeigen Sie ihnen, dass Ihr Stil Geld spart. Finden Sie ein Beispiel dafür, wie eine Änderung der Anforderungen aufgrund Ihres Designs sehr einfach durchgeführt werden kann. Versuchen Sie, einen anderen Code zu finden (Sie müssen sicherstellen, dass Sie hier nicht zu aggressiv werden, aber hey, es geht darum, Codestile zu vergleichen), der leicht kaputt geht, und zeigen Sie ihnen, wie Sie das nicht müssen Kümmern Sie sich um solche Probleme, weil Ihr Code von Anfang an eine bessere Qualität aufweist.

  • Hier geht es um Geld. Was ist, wenn Ihr Codierungsstil tatsächlich Geld kostet? Dies kann durchaus sinnvoll sein, wenn andere Personen mehr Zeit damit verbringen, Ihren Code zu verstehen, als durch das richtige Design gespart wird. Möglicherweise tun Sie technisch das Richtige und tragen dennoch nicht positiv zur Teamleistung bei. Es ist auch möglich, das OOP-Design zu übertreiben. Ich bin mit Ihnen auf der Seite "Gutes Design ist schön", aber ich versuche Sie hier auf ihre Sichtweise aufmerksam zu machen und wie sie aus ihrer Perspektive tatsächlich richtig sind. Versuchen Sie parallel zum vorherigen Punkt, eine Stelle zu finden, an der Sie sie übertrieben haben. Das gibt Ihnen einen gewissen Handlungsspielraum: Sie können sagen, ok, ich kann hier und da etwas pragmatischer sein, aber schauen Sie, es gibt auch Stellen, an denen dieser Code wirklich besser ist.

Nicolas78
quelle
Vielen Dank für Ihre Antwort. Ich habe Ihren Rat zur Kenntnis genommen :)
Mik378
Ich werde das einfache FizzBuzz-Problem hinzufügen. Schreibe es in Java und wiederhole es dann auf TDD-Weise, es wird plötzlich unlesbar, oder?
Martijn Verburg
@Martijn Verburg - Glauben Sie, dass TDD zu unlesbarem Code führt?
Don Roby
@ Don Roby - manchmal ja, besonders wenn es um so etwas wie FizzBuzz in einer OO-Sprache geht
Martijn Verburg
+1 @ Nicolas78 "Es ist auch möglich, das OOP-Design zu übertreiben" - z. B. das Erstellen primitiver Datentypen von Objekten wie int.
Therobyouknow
16

Aber eine Mehrheit der Entwickler kam zu mir, um genau zu sagen, dass mein gesamter Code zu komplex für das Leseverständnis ist

Ist Ihnen überhaupt in den Sinn gekommen, dass sie Recht haben könnten?

Ich habe mit jemandem zusammengearbeitet, der sich viel Mühe gegeben hat, Code zu schreiben, den er als elegant bezeichnet. Er verbrachte viel Zeit damit, die Arbeit anderer Leute als nicht elegant zu entschlüsseln. Wenn es notwendig ist, Code zu pflegen, ist sein Code nicht der Code, den ich ändern möchte. Es ist so präzise und genau, dass es mit einer großen Gefahr verbunden ist, es zu ändern.

Das interessante Wort, das Sie hier erwähnen, ist "komplex". Code, der als komplex bezeichnet werden kann, kann selten auch als besonders gut bezeichnet werden.

Versuchung
quelle
1
+1000 Zustimmen. Code ist für Menschen. Die Einschränkung besteht natürlich darin, dass die anderen Codierer lesen können sollten, was die meisten Codierer schreiben. Wer die Grundlagen nicht versteht, sollte sich verbessern.
Iain Holder
3
+1 @temptar für "Ist Ihnen überhaupt der Gedanke gekommen, dass sie Recht haben könnten?" und "Code, der als komplex bezeichnet werden kann, kann selten auch als besonders gut bezeichnet werden."
Therobyouknow
2
-1: Ich denke nicht, dass sie Recht haben, nur ein bisschen älter, und ich denke, dass eine genauere Lektüre der Frage dies offensichtlich macht. Der Schlüsselbegriff aus dem OP lautet: "Vermeiden Sie alle möglichen doppelten Codes ..." Er versucht, den Code zu trocknen, aber dies erfordert eine Raffinesse, die seinen Kollegen anscheinend fehlt. Er zitierte auch die Vorschläge seiner Kollegen, "nur eine if ... -Instanz von" hinzuzufügen. Das zeigt mir auch, dass das OP auf dem richtigen Weg ist und seine Kollegen eine große WTF aufbauen.
Kevin Cline
Was mich beunruhigt hat, ist, dass das "zu komplexe" OOP eine gute Sache sein kann, aber es kann auch sehr schnell sehr komplex werden. Ich vermute, dass das Original-Poster die OOP-Hilfe getrunken hat und nicht verstanden hat, dass dies nicht immer der beste Weg ist, Code zu schreiben, und dass er möglicherweise eine Menge zusätzlicher Komplexität einführt, wenn er nicht benötigt wird.
Zachary K
Klingt so, als ob Ihr Mitarbeiter seine Tests für zukünftige Wartungsarbeiten nicht eingerichtet hat. Vielleicht möchten Sie das mit dem Projektmanager besprechen.
10

Möbelhersteller aus der viktorianischen Zeit (zumindest diejenigen, deren Arbeit wir heute noch sehen) waren echte Handwerker, was sie machten, war funktional, schön, gut verarbeitet und entworfen und gebaut, um ein Leben lang zu halten. In den letzten 150 Jahren hat sich die Welt jedoch verändert. Nicht viele Menschen sind bereit, für diese Handwerkskunst zu zahlen, wenn billigere Alternativen beim Kauf eines Esstisches kommerziell pragmatischer sind.

Viele Programmierer möchten die Handwerker der alten Zeit sein. Leider schreibt der Handel vor, dass dies nicht immer passieren kann. Sie haben die Wahl, passen sich an oder gehen. Es gibt Unternehmen, die Handwerker wollen, aber sie sind massiv unter denjenigen, die Produkte suchen, die meistens funktionieren, billig und jetzt.

Der Hinweis für mich, dass Sie für die meisten kommerziellen Softwareentwicklungen nicht geeignet sind, lautet "Bei Auslieferung in Produktion => Null Fehler". Nicht einmal die Nasa hat das mit den Space Shuttles geschafft.

Die einzigen Stellen, an denen die Liebe zum Detail und damit die anfänglichen Kosten akzeptabel sind, sind lebenswichtige Systeme der Stufe 1 - z. B. Avionik / Luft- und Raumfahrt, Automobil, Militär und Medizin.

mattnz
quelle
1
+1 @mattnz für "Sie haben die Wahl, anpassen oder verlassen."
therobyouknow
2
Ich bin anderer Meinung - das ist eine Bank . Sie neigen dazu zu mögen, dass es keine Fehler in ihrer Software gibt, da Fehler ziemlich teuer werden können. Auch Lösungen können Jahre oder Jahrzehnte dauern.
2

Das Problem ist, dass Sie am falschen Ort arbeiten. Es hört sich so an, als ob Sie ein sehr akademisch orientierter Programmierer wären. Sie werden in der Umgebung, in der Sie sich befinden, nicht gut abschneiden und es ist sehr wahrscheinlich, dass eine Ausrede erfunden wird, um Sie und Ihren "zu komplexen" Code loszuwerden. Möglicherweise erhalten Sie Junk-Aufträge und / oder schlechte Leistungsbeurteilungen und dergleichen, bis Sie entweder von sich aus abreisen oder eine ausreichende Papierspur vorhanden ist, um Sie zu entlassen.

Ich würde empfehlen, dass Sie einen Arbeitsplatz suchen, der Ihre akademischen Neigungen wertschätzt. Sie sind da draußen. Sie werden auch einige finden, die zwischen pragmatisch und akademisch angesiedelt sind. Ein Job wie dieser könnte Ihre beste Option sein, da Sie dadurch ein gewisses Chaos in Ihre Herangehensweise einladen können, während Sie anderen dabei helfen, ihr Chaos einzudämmen.

jfrankcarr
quelle
+1 @jfrankcarr für die kluge Beobachtung von "kann Junk Assignments gegeben werden" (eine Form der konstruktiven Entlassung)
wissen,
2

Bevor Sie so drastische Maßnahmen wie den Wechsel Ihres Arbeitgebers ergreifen, würde ich versuchen, Ihre eigene Fähigkeit zu verbessern, Nicht-Programmierern wie Ihren Führungskräften zu erklären, warum Ihre Codierungsmethode für das Unternehmen besser ist, und ihnen Zeit und Geld zu sparen. Stellen Sie außerdem sicher, dass Sie Designmuster nicht nur zum Zweck der Designmuster angewendet haben - sind Sie sicher, dass Sie auch die Regeln von KISS und YAGNI befolgt haben? (Okay, Strategiemuster und Polymorphismus sind keine Hexerei. Geben Sie Ihren Kollegen Zeit, sich anzupassen, und erklären Sie ihnen, warum Sie sich für diesen Ansatz entschieden haben.)

Doc Brown
quelle
Ich stimme zu, das Problem ist, dass sie nicht lernen wollen, ihre Mentalität nicht ändern wollen (ich bin kein Genie in Java, aber wenn ich etwas nicht verstehe, was die Mehrheit der Leute für eine hervorragende Sache hält) Wissen Sie, ich werde mich bemühen, es zu lernen (Bücher, Internetartikel, Stapelüberlauf usw.). Zusammenfassend gesagt, wollen sie keine Kopfschmerzen mit Mustern haben im Allgemeinen), die ihnen nicht viel mehr Geld bringen ... Es ist schwer zu sagen, aber es ist so wahr. Wenn nur die Anwendung gut funktionieren würde => Ich würde dieses Thema sicherlich nicht schreiben.
Mik378
@ Mik378: du redest viel darüber, was "die anderen falsch machen". Sicher, dass alles, was Sie getan haben, richtig war?
Doc Brown
Der @ DocBrown-Polymorphismus hat den entscheidenden Nachteil, dass die Logik auf mehrere Dateien aufgeteilt wird, wobei einfache Instanzen sie in einer einzigen Methode aufbewahren. Vielleicht sind die Arbeitseinheiten zu klein?
2

In meiner Firma haben wir eine Reihe von Workshops durchgeführt, die auf Clean Code Developer basierten . Ziel war es, ein Forum außerhalb des normalen Geschäftsalltags mit hektischen Terminen und unlauteren Kompromissen zu schaffen, in dem Entwickler die Prinzipien des Softwaredesigns (wie von Ihnen erwähnt), Programmiertechniken usw. kennenlernen und über ihre Projekte nachdenken können ihre eigene Arbeit.

Auch Beispiele aus der Praxis aus konkreten Projekten wurden besprochen. Das Feedback der Teilnehmer war von AFAIK sehr positiv. Es ist jedoch schwierig, einen tatsächlichen Nutzen zu messen.

Die Teilnahme an diesen Workshops war zum Teil von der Firma gesponsert, zum Teil von der Freizeit der Teilnehmer. Sie werden die Kollegen nicht erreichen, denen das Lernen egal ist und die einfach ihren Job machen und nach Hause gehen möchten, aber für alle anderen, die Interesse an ihrer eigenen Arbeit haben, könnte dies interessant sein.

Robert Petermeier
quelle
Ich mag diese Idee sehr.
Versuch
2

Ich würde zuallererst überprüfen, ob dein Weg wirklich besser ist. Objektorientierter Code kann sehr schön sein, aber auch ein Albtraum von versteckten Nebenwirkungen sein, und jede Aktion kann mehrere verschiedene Klassen erfordern.

Gehen Sie noch besser zu InfoQ und sehen Sie sich Rich Hickeys Vortrag über "Simple Made Easy" an.

Zachary K
quelle
1

Sie werden ein wenig nachgeben müssen, wenn Sie dort ohne ständige Kämpfe weiterarbeiten möchten. Eine Dev-Gruppe, die nur prozedural arbeitet, wird Polymorphismus nicht sofort akzeptieren. Obwohl sie möglicherweise nicht in der Lage sind, auf OO-Weise zu entwerfen, können sie aus Ihrem Code lernen. Sie mögen es zu schätzen wissen, dass einige von Ihnen Code einfacher zu pflegen sind.

Als Randnotiz müssen Sie während des Interviewprozesses Fragen stellen, um zu sehen, welcher Entwicklungsprozess und welche Codierungsmethode verwendet werden, wenn Sie der Meinung sind, dass es wichtig ist, Ihre Präferenzen zu erfüllen.

JeffO
quelle
0

Notfälle passieren. Sie sind nicht perfekt und ihre Hände werden irgendwann Ihren Code verderben. Das ist nicht gut für Ihre Gesundheit, es sei denn, Sie nehmen sich niemals frei, was Ihr Hausarzt bestätigt. Und führt zu höheren Chancen, schlechten Code zu emittieren.

Ihr Code hat möglicherweise eine höhere Qualität (unbewiesene Tatsache), aber sie haben Richtlinien . (verdammt sicher)

Sie wurden gewarnt, Richtlinien zu befolgen, und sind dafür verantwortlich, dass Sie diese nicht befolgt haben. In einer Notsituation. In einer Bankanwendung. Ich meine, wenn Ihr Ziel schlecht endet und ich im Gefängnis bin, kann ich viele lustigere und sinnvollere Wege finden, um das gleiche Ergebnis zu erzielen .

Ihre Zellengenossen würden sich freuen , wenn Sie über die mangelnde Neugier Ihrer ehemaligen Kollegen schwärmen würden.

(Andererseits hat Ihr Unternehmen wahrscheinlich keine internen Richtlinien gegen das OO-Design, aber der ungeschickte COBOL-geschulte Ingenieur, der versucht, Ihren Code zu reparieren, wird einiges aus der Luft schaffen, und im schlimmsten Fall wird er ' (40% Chance einen kritischen Treffer zu erzielen)

ZJR
quelle
1
Persönlich denke ich, dass ein wirklich sehr guter Entwickler großartigen Code so schnell wie schmutzigen Code macht. Ich stimme Ihnen in Bezug auf den Notfall zu ... aber wenn ein Projekt für 4 Monate geplant ist und die Entwickler nicht einmal einen Überblick darüber haben, was sie tun werden, wie und ob in der Anwendung bereits etwas vorhanden ist, das dies bewirkt Helfen Sie ihnen, ich konnte es nicht akzeptieren. Wenn ein Entwickler sagt: "Ich weiß, dass dieser Code schrecklich ist, aber ich werde ihn nie überarbeiten, weil ich ihn möglicherweise beschädige", ist das lächerlich. Sind sie Ingenieur oder nicht? Ein Ingenieur sollte Risiken eingehen und einige wirklich gute Komponententests durchführen, um sicher zu sein
Mik378
1
Ich würde zustimmen, wenn wir hier nicht über Banken reden würden. Ich habe immer das Gefühl, sie sind ein anderer Haufen als die anderen Programmierer. Sie sind in der Regel auch älter. (Zumindest in meiner Umgebung, wie überall, schließe ich daraus.) Ihre Mathematik ist einfach, aber ihre Genauigkeit nicht.
ZJR
@ZJR Sie werden hier mitgerissen, wenn Ihre Prophezeiungen des OP die Gefängniszeit für die Verwendung von OO verkürzen. Die meisten Bankcodes unterliegen keiner solchen Prüfung.
quant_dev
0

Denken Sie daran, dass die Programmierung von manchen eher als Mittel zum Zweck denn für sich selbst betrachtet wird. Denken Sie an all die Produkte und Dienstleistungen, die Sie nutzen: Nehmen Sie sich viel Zeit, um zu überlegen, ob der Code darunter elegant gestaltet ist? Oder schätzen Sie sie einfach, weil sie einfach funktionieren? Suchen Sie sich eine Branche oder eine Branche, für die Sie eine Leidenschaft haben, und finden Sie dann eine Organisation, die Ihnen Lösungen anbietet, die nicht nur die Programmierung umfassen . Probleme lassen sich auf verschiedene Arten hervorragend lösen.

wie Sie wissen
quelle