Choisissez l'effort de conception de code ou la paresse dans le monde de la Banque


23

Je travaille depuis deux ans dans une grande banque d'investissement.

J'ai réalisé quelques projets techniques avec le désir de créer le code le plus optimisé, en respectant les bons schémas de conception adaptés, le principe SOLIDE, la loi de déméter et en évitant toutes sortes de codes en double ...

Lorsque la livraison en production => zéro bogue, tout s'est passé comme prévu.

Mais, une majorité de développeurs sont venus me voir afin de préciser que tout mon code est trop complexe pour la compréhension en lecture. J'ai écouté par exemple: "faites des if et instanceof, oubliez le polymorphisme pour qu'il soit très facile de corriger les bugs de production d'urgence". Je n'ai pas préféré répondre ......

Sachant que ces développeurs ne sont pas du tout curieux, refusant les efforts pour comprendre une bonne conception (par exemple, 90% des développeurs ne savent pas ce qu'est un modèle de stratégie et font du code procédural et jamais oo-design parce qu'ils veulent, disent-ils, la simplicité ), mes chefs de projet m'ont dit que je suis vraiment dans le mauvais sens et trop idéaliste pour le monde de la Banque.

Que me conseillez-vous? Devrais-je garder le désir de vraiment bon code ou m'adapter à la majorité des développeurs qui sont, je le répète, vraiment pas intéressants par le code de conception qui est selon moi, toute la beauté de notre travail de développeur.

Ou au contraire, doivent-ils apprendre les principes de base OO et les meilleures pratiques pour s'adapter à mon code?


19
Il est difficile de planer comme un aigle lorsque vous travaillez avec des dindes ;-)
JonnyBoats

8
Changez votre organisation ou changez votre organisation. - Martin Fowler
Don Roby

9
@ Mik378 Vous pouvez avoir un problème de communication. Si vous documentez votre code aussi négligemment que vous avez écrit cette question (et plus il y a d'OO "cruft", plus vous avez besoin de documentation, pour que les gens sachent ce que cette ITradeSettlementVisitorinterface est censée faire), vos pairs ont raison de se plaindre. C'est une chose d'écrire du beau code que vous aimez, c'est une autre chose de le structurer et de le documenter de manière à le rendre accessible et utilisable pour les autres.
quant_dev

2
@quant_dev: Je pense que vous en supposez un peu trop sur Mik378. Sa question ne me semble pas mal formulée; il n'est tout simplement pas natif. Je déteste la verbosité et le design trop ingénieux en OO autant que vous semblez le faire, mais la situation décrite par Mik378 sonne également: j'ai travaillé avec beaucoup trop de programmeurs qui ne pouvaient pas comprendre des choses simples telles que les expressions booléennes (alors ils le feraient écrire "si (exp) alors Vrai sinon Faux") ... Il est probable que ce type de personnes serait également effrayé par les modèles de conception, le polymorphisme, et reviendrait donc à l'ancien code de procédure.
Andres F.

2
Je ne suis pas du tout d'accord pour dire que garder le code simple et facile à entretenir pour vos collègues est paresseux comme indiqué dans le titre.

Réponses:


20

mes chefs de projet m'ont dit que je suis vraiment dans le mauvais sens et trop idéaliste pour le monde de la Banque.

GTFO!

Il est temps de partir et de les plaindre. Pourquoi devriez-vous vous en foutre? Vous savez que cela leur coûtera de l'argent à long terme avec leur personnel incompétent. Ce n'est pas un jeu de discussion technique. Il s'agit de politique. Demandez-leur de former les autres développeurs ou GTFO! Si vous n'avez pas assez de poids politique, alors GTFO! Recherchez une entreprise avec de meilleures pratiques.

La seule raison de rester là-bas est une compensation adéquate pour vos maux de tête. Alors ils feraient mieux de payer bien au-dessus de la moyenne ou du GTFO! Je doute que vous puissiez également vous développer en tant que développeur de logiciels. La croissance de notre profession est principalement réalisée en travaillant avec des personnes qui sont meilleures que vous et qui encouragent les meilleures pratiques. Et mieux vous vous portez, plus votre valeur marchande est élevée pour les entreprises qui s'en soucient.

Oui, je sais que ce n'est pas une de mes réponses habituelles mais vraiment, si vous ne pouvez pas jouer au jeu politique dans cette entreprise, GTFO.

Que me conseillez-vous? Devrais-je garder le désir de vraiment bon code ou m'adapter à la majorité des développeurs qui sont, je le répète, vraiment pas intéressants par le code de conception qui est selon moi, toute la beauté de notre travail de développeur.

Je ne travaillerais pas pour une entreprise qui souhaite que je fournisse des solutions sous-optimales. Je veux graver mon nom dans le logiciel. Je veux en être fier. Je n'écris pas d'applications procédurales dans des langages basés sur le paradigme OO. Je crois en un logiciel de haute qualité et si l'entreprise ne le fait pas, je vais GTFO! J'espère que vous en avez assez "va te faire foutre de l'argent".


4
+1 - Une fois que j'ai pensé à ce qu'était GTFO ... ( urbandictionary.com/define.php?term=gtfo )
Reddog

2
@Falcon Je suis totalement d'accord avec vous et c'est un plaisir de trouver des gens partageant mon idée; et surtout quand vous dites: "La croissance de notre profession se fait principalement en travaillant avec des gens qui sont meilleurs que vous et qui encouragent les meilleures pratiques." Le plus étonnant et le plus frustrant est que je suis le développeur le plus jeune et que je n'ai pas vraiment appris des plus anciens. Merci pour votre réponse :)
Mik378

+1, je suis entièrement d'accord. Cette banque ne semble tout simplement pas être un bon environnement de travail, et ses problèmes semblent insurmontables: mauvais programmeurs, mauvaise gestion. GTFO en effet!
Andres F.

2
@ Mik378: Votre employeur actuel n'est pas en mesure d'utiliser pleinement vos capacités et ne pourra donc pas vous payer ce que vous valez. Une meilleure organisation sera en mesure d'obtenir plus de valeur de vous et peut vous payer plus.
Kevin Cline

+1, si je pouvais vous donner plus de votes positifs, vous en obtiendriez 1000. Ayant moi-même travaillé dans une banque d'investissement, je sais exactement à quoi Mik378 est confronté. C'est un terreau fertile pour les comportements toxiques, les répondeurs de polarité et l'égomanie. Pas un environnement d'idées pour promouvoir l'excellence technique.
Desolate Planet

18

Endroit difficile. Je pense que vous pouvez aller de deux façons en parallèle, en tenant bon et en faisant preuve de volonté de compromis:

  • C'est une question d'argent. Comme tout travail de développement en fait, mais comme vous mettez l'accent sur l'environnement bancaire, cela devrait fonctionner encore mieux;). Montrez-leur que votre style permet d'économiser de l'argent. Trouvez un exemple de la façon dont une modification des exigences pourrait être effectuée très facilement en raison de votre conception. Essayez de trouver un morceau d'un autre code (vous devez vous assurer de ne pas être trop agressif ici, mais bon, il s'agit de comparer des styles de code) qui est susceptible de se casser bientôt, et montrez-leur comment vous n'avez pas à le faire se soucier de ces problèmes parce que votre code est de meilleure qualité pour commencer.

  • C'est une question d'argent. Et si votre style de codage coûte de l'argent? Cela peut très bien faire, si d'autres personnes passent plus de temps à essayer de comprendre votre code que ce qui est enregistré par une conception appropriée. Vous faites peut-être la bonne chose techniquement et ne contribuez toujours pas positivement à l'effort d'équipe. En outre, il est possible d'exagérer la conception de la POO. Je suis avec vous du côté "un bon design, c'est beau", mais j'essaie de vous faire prendre conscience ici de leur point de vue et de la façon dont ils peuvent réellement être justes de leur point de vue. Parallèlement au point précédent, essayez de trouver un endroit où vous en avez fait trop. Cela vous donne une certaine marge de manœuvre: vous pouvez dire, ok, je peux être un peu plus pragmatique ici et là, mais regardez, il y a aussi des endroits où ce code est vraiment meilleur.


Merci pour votre réponse développée. J'ai noté vos conseils :)
Mik378

J'ajouterai à cela le simple problème FizzBuzz. Écrivez-le en Java et recommencez-le de manière TDD, cela devient soudainement illisible, n'est-ce pas ;-).
Martijn Verburg

@Martijn Verburg - Pensez-vous que TDD mène à un code illisible?
Don Roby

@Don Roby - parfois oui, surtout lorsqu'il s'agit de quelque chose comme FizzBuzz dans une langue OO
Martijn Verburg

+1 @ Nicolas78 "En outre, il est possible d'exagérer la conception de POO" - par exemple en créant des types de données primitifs comme Int, par exemple.
therobyouknow

16

Mais, une majorité de développeurs sont venus me voir afin de préciser que tout mon code est trop complexe pour la compréhension en lecture

Vous est-il venu à l'esprit qu'ils avaient peut-être raison?

J'ai travaillé avec quelqu'un qui a mis beaucoup d'efforts pour écrire du code qu'il a décrit comme élégant. Il a passé beaucoup de temps à dénoncer le travail des autres comme n'étant pas élégant. Lorsqu'il s'agit de maintenir le code, son code n'est pas celui que je choisirais de modifier. Il est si précis et exigeant que le changer est profondément chargé de danger.

Le mot intéressant que vous mentionnez ici est "complexe". Un code qui peut être décrit comme complexe peut rarement être également décrit comme particulièrement bon.


1
+1000 d'accord. Le code est pour les humains. La mise en garde étant, bien sûr, que les autres codeurs devraient être capables de lire ce que la plupart des codeurs écrivent. Quiconque ne comprend pas les bases devrait être amené à s'améliorer.
Iain Holder

3
+1 @temptar pour "Vous est-il venu à l'esprit qu'ils pouvaient avoir raison?" et "Un code qui peut être décrit comme complexe peut rarement être également décrit comme particulièrement bon."
therobyouknow

2
-1: Je ne pense pas qu'ils aient raison, juste un peu plus âgés, et je pense qu'une lecture plus approfondie de la question rend cela évident. La phrase clé du PO est "éviter toutes sortes de codes en double ..." Il essaie de SECHER le code, mais cela nécessite une sophistication qui manque à ses collègues. Il a également cité les suggestions de ses collègues visant à "simplement ajouter un if ... instanceof". Cela me dit également que le PO est sur la bonne voie, et ses collègues sont en train de construire une grande WTF.
Kevin Cline

ce qui m'inquiète, c'est que la POO "trop ​​complexe" peut être une bonne chose mais elle peut aussi devenir très complexe très rapidement. Je soupçonne que l'affiche originale a peut-être bu l'aide cool OOP et n'a pas compris que ce n'est pas toujours la meilleure façon de coder, et qu'il peut introduire beaucoup de complexité supplémentaire là où elle n'est pas nécessaire.
Zachary K

On dirait que votre collègue n'a pas ses tests en place pour une maintenance future. Vous voudrez peut-être en parler avec le chef de projet.

10

Les fabricants de meubles de l'époque victorienne (du moins ceux dont nous voyons encore le travail aujourd'hui) étaient de véritables artisans, ce qu'ils fabriquaient était fonctionnel, beau, bien conçu et conçu et construit pour durer toute une vie. Cependant, au cours des 150 dernières années, le monde a changé. Peu de gens sont prêts à payer pour un tel savoir-faire, lorsque des alternatives moins chères sont plus pragmatiques commercialement lors de l'achat d'une table de salle à manger.

De nombreux programmeurs veulent être les artisans d'autrefois, malheureusement, le commerce exige que cela ne se produise pas tout le temps. Vous avez le choix, vous adaptez ou partez. Il y a des entreprises qui veulent des artisans, mais elles sont massivement plus nombreuses que celles qui veulent des produits qui fonctionnent surtout, bon marché et maintenant.

L'indice pour moi que vous n'êtes pas adapté à la plupart des développements de logiciels commerciaux est le "Lorsque la livraison en production => zéro bogue". Même la Nasa n'y est pas parvenue avec les navettes spatiales.

Les seuls endroits où votre attention aux détails, et donc le coût initial, sont susceptibles d'être acceptables sont les systèmes vitaux de niveau 1 - par exemple, avionique / aérospatiale, automobile, militaire et médical.


1
+1 @mattnz pour "Vous avez le choix, vous adaptez ou partez."
therobyouknow

2
Je ne suis pas d'accord - c'est une banque . Ils ont tendance à aimer qu'il n'y ait pas de bogues dans leur logiciel car les erreurs peuvent devenir assez chères. Les solutions peuvent également fonctionner pendant des années ou des décennies.

2

Le problème est que vous travaillez au mauvais endroit. On dirait que vous êtes un programmeur très académique. Vous ne réussirez pas bien dans l'environnement dans lequel vous vous trouvez et il est fort probable qu'une excuse soit inventée pour se débarrasser de vous et de votre code "trop ​​complexe". Vous pouvez recevoir des affectations indésirables et / ou des évaluations de performances médiocres et ainsi de suite jusqu'à ce que vous partiez de votre propre chef ou qu'ils aient une trace papier suffisante pour vous licencier.

Je vous recommande de trouver un lieu de travail qui valorisera vos tendances académiques. Ils sont là-bas. Vous en trouverez également sur la frontière entre pragmatique et académique. Un travail comme celui-ci peut être votre meilleure option car cela vous permettrait d'inviter du chaos dans votre approche tout en aidant les autres à maîtriser la leur.


+1 @jfrankcarr pour l'observation astucieuse de "peut se voir confier des tâches indésirables" (une forme de licenciement constructif)
therobyouknow

2

Avant de prendre des mesures aussi radicales que de changer d'employeur, j'essaierais d'améliorer votre propre capacité d'expliquer aux non-programmeurs comme vous les cadres supérieurs pourquoi votre façon de coder est meilleure pour l'entreprise et de leur faire gagner du temps et de l'argent. Et aussi, assurez-vous que vous n'avez pas appliqué de modèles de conception uniquement pour des motifs de conception - êtes-vous sûr que vous avez également suivi les règles de KISS et YAGNI? (D'accord, le modèle de stratégie et le polymorphisme ne sont pas sorciers, donnez à vos collègues le temps de s'adapter et d'expliquer pourquoi vous choisissez cette approche.)


Je suis d'accord, le problème est qu'ils ne veulent pas apprendre, ne veulent pas changer leur mentalité (je ne suis pas un génie à Java mais quand je ne comprends pas quelque chose que la majorité des gens considèrent comme une excellente chose à sais, je vais faire des efforts pour l'apprendre (livres, articles internet, stackoverflow etc ...) Pour résumer, ils ne veulent pas avoir mal à la tête avec les patterns (je dis pattern mais je pourrais dire "Excellent" principe de programmation plus généralement) qui ne leur rapporte pas beaucoup plus d'argent ... C'est difficile à dire mais c'est tellement vrai. Si seulement l'application fonctionnait bien => je n'écrirais sûrement pas ce sujet.
Mik378

@ Mik378: vous parlez beaucoup de ce que "les autres font de mal". Sûr que tout ce que vous faisiez était vrai?
Doc Brown

Le polymorphisme @DocBrown a l'inconvénient de fragmenter la logique entre les fichiers où de simples instances le conservent dans une seule méthode. Peut-être que les unités de travail sont trop petites?

2

Dans mon entreprise, nous avons organisé une série d'ateliers basés sur Clean Code Developer . Le but était de créer un forum en dehors des activités quotidiennes normales avec ses délais trépidants et ses compromis fâcheux, où les développeurs pourraient se renseigner sur les principes de conception de logiciels (comme vous l'avez mentionné), les techniques de programmation, etc. et réfléchir sur leurs projets et leur propre travail.

Des exemples réels de projets réels ont également été discutés. Les retours des participants ont été très positifs pour l'AFAIK. Il est cependant difficile de mesurer un avantage réel.

La participation à ces ateliers était en partie sur le temps parrainé par l'entreprise, en partie sur le temps libre des participants. Vous n'atteindrez pas ces collègues qui ne se soucient pas d'apprendre et qui veulent simplement faire leur travail et rentrer chez eux, mais pour quiconque ayant un intérêt pour son propre travail, cela pourrait être intéressant.


J'aime beaucoup cette idée.
temptar

2

Je voudrais tout d'abord vérifier que votre chemin est vraiment meilleur. Le code orienté objet peut être très agréable, mais il peut aussi être un cauchemar d'effets secondaires cachés et chaque action peut nécessiter plusieurs classes différentes.

Mieux encore, allez à InfoQ et regardez la conférence de Rich Hickey sur "Simple Made Easy"


1

Vous allez devoir céder un peu si vous voulez continuer à y travailler sans difficultés constantes. Un groupe de développeurs entièrement procédural n'acceptera pas immédiatement le polymorphisme. Bien qu'ils ne puissent pas concevoir de manière OO, ils peuvent apprendre de votre code. Ils peuvent apprécier que certains d'entre vous soient plus faciles à gérer.

En remarque, vous devez poser des questions pendant le processus d'entrevue pour voir quel processus de développement et méthodologie de codage est utilisé si vous pensez qu'il est important de correspondre à vos préférences.


0

Des urgences se produisent. Vous n'êtes pas parfait et leurs mains se gâcher votre code à un moment donné. À moins que vous ne preniez jamais de congé, ce qui, comme le confirmera votre médecin, n'est pas bon pour votre santé. Et conduit à des chances plus élevées d'émettre un mauvais code.

Votre code peut avoir une qualité supérieure (fait non prouvé), mais ils ont des politiques . (comme un fait infernal)

Vous avez été averti de suivre les politiques et serez responsable de ne pas les avoir suivies. En situation d'urgence. Dans une application bancaire. Je veux dire, si votre objectif est de finir pauvre et en prison, je peux trouver de nombreuses façons plus amusantes et plus significatives d'obtenir le même résultat.

Vos camarades de cellule, cependant, seraient ravis de vous entendre divaguer sur le manque de curiosité de vos anciens collègues.

(là encore, votre entreprise n'a probablement pas de politiques internes contre la conception OO, mais l'ingénieur maladroit et formé à COBOL qui tentera de réparer votre code en inventera un peu et, à mon humble avis, dans le pire des cas, il '' ll a 40% de chances de marquer un coup critique)


1
Personnellement, je pense qu'un vrai très bon développeur fait du bon code aussi rapidement que du code sale. Je suis d'accord avec vous pour l'aspect urgence ... mais quand un projet est planifié pendant 4 mois, et que les développeurs n'ont même pas une vision globale de ce qu'ils vont faire, comment et si quelque chose existe déjà dans l'application qui va les aider, je ne pouvais pas l'accepter. Quand un développeur dit: "Je sais que ce code est horrible mais je ne le refacturerai jamais car je risque de le casser", c'est ridicule. Sont-ils ingénieurs ou non? Un ingénieur devrait prendre des risques et faire de très bons tests unitaires pour être confiant
Mik378

1
Je serais d'accord si nous ne parlions pas des banques ici. J'ai toujours l'impression que c'est un groupe différent des autres programmeurs. Ils sont également généralement plus âgés. (Dans mon environnement, à tout le moins, comme partout, je déduis) Leur calcul est simple, mais leur précision ne l'est pas.
ZJR

@ZJR Vous vous laissez emporter ici, avec vos prophéties de l'OP faisant de la prison pour avoir utilisé OO. La plupart des codes bancaires ne sont pas soumis à un tel examen.
quant_dev

0

Essayez de vous rappeler que la programmation est considérée par certains comme un moyen de parvenir à une fin plutôt que pour elle-même. Pensez à tous les produits et services que vous utilisez: passez-vous beaucoup de temps à déterminer si le code ci-dessous est fait avec élégance? Ou les appréciez-vous simplement car ils fonctionnent? Trouvez une industrie ou une cause qui vous passionne, puis trouvez une organisation avec cela, puis offrez-leur des solutions qui incluent la programmation, mais pas seulement. Les problèmes peuvent être résolus avec brio de différentes manières.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.