Je suis obligé d'écrire un mauvais code. Comment sauver ma face? [fermé]

69

Je ne suis qu'un développeur débutant, mais mon travail m'oblige à travailler avec un code PHP vraiment épouvantable (pensez au pire code PHP que vous avez vu; puis pensez au code deux fois plus mauvais). J'essaie généralement de corriger les bugs et de me battre avec la base de code pour ajouter de nouvelles fonctionnalités. Parfois, on me commande de faire fonctionner les choses le plus rapidement possible, ce qui implique le plus souvent des hacks sales.

Le produit était auparavant open source et je crains qu'il ne le devienne à l'avenir. J'aurais honte si quelqu'un (surtout des employeurs potentiels) pouvait trouver mon nom à côté de certains des changesets. Que puis-je faire pour protéger ma réputation?

Je ne sais pas si cela est pertinent, mais j'ajouterai que ni mon chef ni mes collègues ne veulent admettre que le code est mauvais, mais je ne suis pas sûr de pouvoir leur en vouloir, car nombre d'entre eux premier travail.

Honteux
la source
21
Comment êtes-vous obligé d'écrire un mauvais code? Pourquoi ne pouvez-vous pas vous lever, arrêter de mettre votre nom sur un mauvais code et expliquer le problème, la solution, le coût en temps, en efforts et en argent, ainsi que les avantages de résoudre les problèmes maintenant à vos supérieurs?
Thomas Owens
17
"encourager les hacks rapides et sales"? Encourageant? Ce qui est pire Votre fierté (et trouver un nouvel emploi) ou rester avec cet emploi. Ce n'est peut-être pas mauvais de défendre ce qui est juste. Qu'est-ce qui t'arrête? Menaces de violence? Chantage? Procédure pénale? Sérieusement. Qu'est-ce qui vous empêche d'écrire un bon code? S'il vous plaît être spécifique . Et honnête
S.Lott
113
Si cela peut vous consoler, même le bon code que vous écrivez aujourd’hui vous semblera mauvais dans cinq ans.
Kyralessa
7
Face it PHP encourage "rapide et sale" en ne le décourageant pas et en facilitant les choses, je dirais que PHP excelle en "qucik et sale" mieux que n’importe quel autre langage, sauf peut-être Perl, une fois que cet élan est acquis, difficile à arrêter surtout si la direction encourage également le comportement. En fin de compte, le code qui semble fonctionner, quelles que soient les pratiques, a plus de valeur pour l'entreprise que l'absence de code.
7
Désolé, mais il existe de bonnes et de mauvaises manières d'écrire du code. La bonne façon utilise les pratiques standard de l'industrie; la mauvaise façon de pirater la merde et dit que cela "fonctionne".
Wayne Molina

Réponses:

132

Rome ne s'est pas construite en un jour, mais vous pouvez être un bon "scout". Chaque fois que vous touchez le code, laissez-le meilleur qu'avant. Il ne faut pas beaucoup de temps pour utiliser des noms de fonctions sensibles, de bonnes normes de codage et des commentaires honnêtes lorsque vous travaillez.

Je pense que le danger est de penser que c'est tout ou rien. Ce n’est pas parce que vous ne pouvez pas passer le temps que vous voulez écrire du code élégant que vous devez abandonner totalement et écrire des ordures.

Amy Anuszewski
la source
2
+1 Vous n'avez pas à sacrifier tout ce en quoi vous croyez, simplement pour en faire une solution rapide.
tdammers
4
+1: pour tout ou rien - très vrai.
Umber Ferrule
3
La règle du scoutisme entre de mauvaises mains peut être exactement ce qui cause le problème, car la définition du 'nom de fonction sensible' de son supérieur pourrait être 'bolChkLst' (la notation hongroise pour répondre au guide de style, ChkLst au lieu de CheckList car 'short is better '). Voici quelques implémentations de Boy Scout Rule que j’ai rencontrées à différents postes et que j’ai essayé de ne pas suivre: "Joindre les fonctions pour en avoir le moins possible", "Ne transportez pas d’arguments via 3 appels, utilisez plutôt des fonctions globales", "utilisez du SQL intégré dans les vues faire plus vite '
keppla
40
+1 pourEvery time you touch the code, leave it better than it was before.
Qwerky
3
+1 Si de nombreuses améliorations claires sont engagées, quiconque examine réellement votre contribution ne pensera pas que vous êtes un programmeur de merde. Les employeurs potentiels qui pensent que vous êtes de merde parce que le projet est de merde ne sont pas des gens pour qui vous voulez travailler.
Matthew Lu
59

D'accord avec S.Lott à partir de commentaires * (pour une fois :) Personne ne vous oblige à écrire un code incorrect. La chose est, junior dev. souvent (ce site est également à blâmer pour cela) se perdre dans les meilleures pratiques, "beau code", ... comme vous voulez l'appeler ... et ils ne font pas grand-chose; ou ils le font mais perdent beaucoup de temps. En leur disant d'écrire du mauvais code (c'est-à-dire du code qui fonctionne également), cela leur donne plus que "grâce à cela"; À mesure que le temps passe, il en résulte qu'un jeune développeur (qui n'est plus maintenant :) trouve très rapidement une solution rapide et sale, mais passe le reste du temps à l’améliorer. Et à mesure que le temps passe, vous en apprenez plus et à un moment donné, vous commencez à fournir des solutions rapides et compliquées qui constituent en fait un bon code.

Mais si vous aviez essayé et écrit du code parfait dès le début, vous auriez probablement passé beaucoup de temps et presque rien fait.

Alors ... écrivez du mauvais code, ... beaucoup ... du code qui fonctionne à peine, puis ITERATE. Chaque itération un peu mieux!

Personne n'a écrit la solution parfaite la première fois.

* ceci, s'il avait été plus court, cela aurait été un commentaire.

Tour
la source
1
+1 Je suis tout à fait d'accord avec cette réponse. Je te vote deux fois.
Vitor Py
3
Je suis d'accord. C’est un excellent moyen de réduire la «paralysie de l’analyse», qui peut s’imposer lorsque vous essayez d’atteindre la solution «parfaite» à un problème. J'ai écrit quelque chose de similaire sur StackOverflow .
Kyralessa
4
+1 J'ai déjà lu ceci sur les programmeurs (mais je ne connais pas la source): deux groupes ont été chargés de créer des poteries dans un laps de temps donné. Un pour créer un article de la meilleure qualité possible et un pour créer autant d'articles que possible. À la fin, ce dernier groupe a fourni des éléments de meilleure qualité, car la répétition est le chemin menant à la maîtrise. La contemplation seule ne vous mènera nulle part. En fin de compte, nous apprenons tous par l'action et notre peur de faire quelque chose de mal est ce qui nous retient dans nos tentatives d'essayer, peut-être d'échouer, mais d'apprendre définitivement de nos erreurs.
back2dos
1
En corollaire, utilisez un référentiel! Même s’il s’agit d’un projet personnel que vous avez configuré sur votre propre ordinateur. Une fois que vous avez commencé à les utiliser, vous vous rendez compte à quel point il est libérateur d’apporter beaucoup de changements, de constater que cela ne fonctionnait pas et de revenir en arrière. Mon préféré est fossile
Spencer Rathbun
1
"Alors ... écris un mauvais code, ... beaucoup ... de code qui fonctionne à peine, puis ITERATE. Chaque itération est un petit peu meilleure!" Et si vous n'arriviez jamais à itérer parce que les nouveaux projets ne cessaient de s'accumuler ... et que vous commenciez à vous rendre compte que ce que vous transmettez en tant qu'alpha a tendance à rester jusqu'à la fin du projet. Ce qui est bien sûr accéléré à la suite d'un code initialement merdique et d'un manque de mise à jour. Je pense que ce sont ces situations-là qui poussent de nombreux développeurs débutants à penser qu'ils ont besoin d'écrire du "beau code" dès le départ ...
Serhiy
40

Les commentaires de code sont votre ami ici.

Chaque fois que vous sentez que vous devez écrire un hack pas cher à cause de la pression, dites quelque chose du type "Ce code fait X à cause des contraintes de temps. Idéalement, je ferais plutôt Y. - Ashamed One, 5 juillet 2011"

Ensuite, si les employeurs potentiels le voient, ils comprendront que vous préférez écrire du bon code, mais vous êtes également disposé à adapter votre style de codage aux besoins de votre entreprise. La plupart des employeurs verront ces deux choses comme de bonnes choses.

Bob Murphy
la source
4
Exactement. Commentaires et commit-messages aussi. Je ne l'ai jamais fait, mais il serait intéressant d'évaluer un développeur en se basant uniquement sur les ensembles de modifications annotés qui lui sont attribués dans certains vcs.
timdev
Eh bien, vous pouvez dire quelque chose à propos de quelqu'un dont les commentaires de commit sont "corrigés", "faits", "blahblahblah" :)
gbjbaanb
+1 je l'ai fait plusieurs fois et dans le cas de développeurs pairs, cela fonctionne.
Jacek Prucia
7
Je supprime généralement les commentaires comme celui-ci chaque fois que je les croise. Un commentaire marqué TODO ou FUTURE-ENHANCEMENT pourrait mériter de rester, mais nos excuses ne sont que des ordures.
Kristopher Johnson
1
D'accord avec une explication indiquant pourquoi une solution moins qu'optimale a été mise en œuvre (et quelle pourrait être cette solution), je le fais de temps en temps. Cependant, je ne pense pas qu'il y ait de quoi avoir honte ou s'excuser. Cela signifie simplement qu'il y avait des choses plus importantes à faire au moment où vous travailliez sur ce code et que la mise en œuvre donnée était suffisante.
Justin Ohms
10

Cela dépend de la façon dont ils vous forcent.

D'après mon expérience, il y a deux possibilités:

Vous vous sentez obligé par un calendrier serré, code hérité, etc.

Dans ce cas, comme la plupart des autres réponses le disent déjà, il vous incombe d’optimiser pour vous rafraîchir. Vous n’avez peut-être pas le temps de réécrire la base de code sur MVC, mais dans un premier temps, par exemple, vous pouvez arrêter de coller manuellement votre code SQL et écrire à la place un script agréable execute_sql($query, $params), qui jette les bases d’abstractions telles que fetch_customer($filter_params), etc. En fin de compte, les pratiques permettent à votre patron d’obtenir un produit plus tôt, il n’ya donc qu’un conflit quant au temps qu’il faut pour investir dans le futur par rapport au présent.

Lorsque vous définissez le bon contexte ("dans les 6 mois, sans délai supplémentaire, je refactore le code monolithique en MVC"), vous devez laisser votre nom sur le code et essayer d'être fier comme un thérapeute, qui apprend à une victime d'accident vasculaire cérébral dites encore des mots simples.

Vous êtes explicitement chargé de le mettre en œuvre de la manière que vous jugez inapte

Essayer de séparer la vue du modèle ne survit pas à la révision, car "c'est trop compliqué, pourquoi ne pas simplement faire des requêtes SQL simples?". Vous execute_sqlêtes mis en veilleuse, car «un codeur discipliné n'a pas besoin de ça».

Cette affaire est nul. D'après mon expérience, il s'agit généralement de microgestion et de chefs d'équipe qui ont été promus là-bas pour des raisons politiques et non pour leurs succès. Le vrai problème est que vous êtes chargé de quelque chose (le code) que vous ne pouvez pas contrôler (vous devez le faire à leur manière). La meilleure solution serait de résoudre la cause première (c.-à-d. Que vous êtes traité comme un grognement). La deuxième solution (et selon mon expérience, la solution habituelle) consiste à arrêter de fumer.

L'avantage est que, dans ce scénario, votre nom ne sera probablement pas publié de toute façon, car le chef d'équipe prend le crédit de tout succès.

keppla
la source
8

Je suis persuadé que votre patron vous demande de livrer rapidement quelque chose, mais pas que vous fassiez un effort supplémentaire pour le rendre délibérément mauvais. Ce qui signifie que chaque fois que vous avez le choix entre un très mauvais code et un code légèrement moins mauvais, et que les deux options vous prennent autant de temps à mettre en œuvre, vous optez pour l'option légèrement moins mauvaise. C'est la solution à court terme, qui ne nécessite aucun effort.

Pour le long terme, parlez à votre patron. Expliquez comment investir 15 minutes ici peut vous faire gagner des heures. Assurez-vous d’avoir des exemples convaincants - pas le type "si j’ai fait ceci et cela ici, j’espère que je serais capable de faire cette autre chose l’année prochaine", mais plutôt "regardez, j’ai fait ça ici, et parce de cela, il m’a fallu trois heures pour trouver le problème là-bas; si je l’avais fait ceci et cela, le bogue aurait été apparent tout de suite ". Un avertissement ici: bien qu'un code élégant et maintenable se sente beaucoup mieux et plus efficace, parfois il ne l'est pas. Il existe des situations dans lesquelles une solution rapide bâclée est parfaitement justifiée: vous écrivez parfois du code à usage unique, parfois vous gardez un bloc obsolète en vie, en attente de la réalité; Parfois, le bénéfice d'une solution appropriée ne

Si tout échoue, allez chercher un autre emploi.

tdammers
la source
3

Personne ne vous oblige à écrire du mauvais code. Vous pouvez inverser la situation et en faire une situation positive. Pionnier du changement pour les politiques et les procédures. Et vous ne pouvez pas toujours être le "oui" homme / femme non plus. S'ils disent qu'ils ont besoin d'une fonctionnalité x avant la fin de la journée, dites-leur que ce n'est pas faisable, mais donnez des justifications pour expliquer pourquoi ce n'est pas le cas. En cas de problème, proposez des solutions. Pas seulement un œil aveugle, ou pire ... en plus.

Votre dev shop n'est pas le premier à respecter des délais rigoureux, tout en souhaitant conserver un code bien conçu.


la source
4
-1: Aux Etats-Unis, si votre patron dit "Ecrivez du code rapide et merdique" et que vous refusez de le faire, ils peuvent vous renvoyer. Désobéir à une instruction directe de faire quelque chose de légal est un motif de licenciement involontaire. Ainsi, même si cela ne vous «force» pas, les alternatives à ce que votre patron dit sont bien pires.
Bob Murphy
Tout dépend de votre approche. Idéalement, vous auriez une figure supérieure qui valoriserait votre expertise et votre jugement devrait être hautement considéré. Souvent, les personnes qui dictent les échéances ne sont pas des développeurs et doivent prendre en compte ce qui est possible et ce qui ne l’est pas. Bien sûr, vous pourriez écrire du code "merdique" sous les couvertures, mais le refoulement pourrait être suffisant pour que tout le monde soit content: de bons résultats avec un bon code.
1
Les personnalités supérieures idéales pour lesquelles vous ne travaillez pas réellement sont formidables, mais la personne qui signe votre chèque de règlement est celle qui vous convient. Demander aux percepteurs de factures d'appeler à toute heure lorsque vous êtes au chômage est vraiment, vraiment nul.
Bob Murphy
1
Il n'y a pas que l'intérêt personnel. Je suis un dirigeant et un entrepreneur, et je peux vous assurer que si tout ce que le client paie est rapide, un bon travail qui perd de l'argent entraînera des licenciements. Une fois, j'ai dû licencier toute une entreprise et je ne veux plus jamais le faire. Donc, bien que je sois définitivement en faveur de prendre des positions morales ... écrire un code insignifiant n’est généralement pas un problème moral, et à un moment donné, il faut choisir entre les préférences personnelles et les problèmes pratiques des personnes occupant ou non un emploi.
Bob Murphy
1
Je ne préconiserais presque jamais une réécriture à grande échelle d'un grand système, mais cela ne signifie pas que le code que vous écrivez à l'avenir doit être horrible.
PeterAllenWebb
3

Toute entreprise doit trouver un équilibre entre l'écriture de code brillant, une documentation exhaustive et des tests unitaires et la mise sur le marché de produits dans des budgets et des délais raisonnables.

Le meilleur code au monde n'a pas d'importance s'il est obsolète avant sa sortie.

Être pragmatique, c'est essayer de trouver cet équilibre. Obtenir des fonctionnalités corrigées rapidement peut être commercialement essentiel pour le moment, cela ne signifie pas que cela le sera toujours.

Il faut beaucoup d'expérience (plus que la plupart des codeurs) pour obtenir cet équilibre. Il est très facile d'opter pour l'un ou l'autre extrême. Il est plus difficile de trouver un moyen terme.

Je ne dis pas que votre patron a raison. En tant que codeur, il est tentant d'essayer de créer en permanence un code magnifique, qui n'est pas viable commercialement. Être conscient de cette tentation peut vous aider à réaliser que certains de ces hacks ne sont pas si mauvais.

La plupart du code, après un temps suffisant, contiendra des piratages pour des situations spécifiques trop coûteuses pour être restructurés dans un cadre général.

Jeremy French
la source
2

Je voudrais ajouter que vous ne devriez pas simplement continuer comme vous le faites maintenant, ne rien dire et juste du piratage et du piratage.

Vous devez vous lever, pointer du code concret et leur dire ce qui est nul. Soyez précis et utilisez des métriques de code pour sauvegarder vos revendications. Rien n’est plus embarrassant que de prétendre qu’un code est mauvais alors qu’en fait, vous n’avez pas compris ce qui se faisait.

Je suis sûr qu'il existe de nombreux outils disponibles gratuitement pour l'analyse de code PHP http://en.wikipedia.org/wiki/Code_analysis

Aussi, bien sûr, ce http://en.wikipedia.org/wiki/Code_smell

Lisez-le, résumez ce que vous pouvez trouver dans votre application et, bien sûr, énumérez des alternatives . C'est une mauvaise pratique que de se lever et de crier "Je n'aime pas la façon dont cela est fait" sans présenter une meilleure (de préférence) meilleure façon de le faire.

Les hacks rapides coûtent de l'argent. Et ne le voyez pas de manière totalement négative - Vous pouvez apprendre beaucoup de ce travail maintenant et tirer profit des expériences que vous faites maintenant dans votre prochain.

hth

UrbanEsc
la source
0

Avant toute chose, vous utilisez le contrôle de code source, non? Sinon, commencez par là. Cela vous aidera d'abord et sera rapidement adopté par le reste de l'équipe.

Si vous avez le contrôle de code source, vous ne devez pas entrer votre nom dans le code, mais simplement le nom de votre entreprise. Il est courant, dans un code incorrect, de placer un historique de révision dans les commentaires en haut des fichiers. Il est préférable de le déléguer au contrôle de source.

Maintenant, en ce qui concerne la qualité du code, vous ne pourrez pas le changer comme une approche big bang. Lentement, un par un, ajoutez de nouvelles approches à différents problèmes. Si vous le faites correctement, cela vous fera gagner un peu de temps et vous l'utiliserez pour améliorer la qualité générale.

Pour vous donner un exemple, je suis arrivé une fois au milieu d'un projet avec une application Perl / CGI où tout le code HTML était dans le code. L'ensemble de l'application était dans un seul fichier sans structure claire. Rien n'était versionionné. J'ai commencé par configurer un dépôt CVS (pas de SVN disponible à ce moment-là), et y ai mis une interface Web. Au début, je m'occupais moi-même des commits de mes collègues. Ensuite, je scinde toutes les méthodes dans différents modules (fichiers). À ce moment-là, les collègues ont commencé à adopter CVS. Ensuite, j'ai sorti le code HTML du code. Ensuite, chaque fois que je devais apporter une modification à une partie du code, je prenais un peu de temps pour la refactoriser. Au final, la vitesse de développement avait tellement augmenté que le client était extrêmement heureux. Ils demanderaient un changement cosmétique et au lieu de nous leur dire "cela prendra 2 jours",

Cette approche ne fonctionnera cependant que si vous maîtrisez suffisamment le code général. Si vous ne comprenez pas la situation dans son ensemble, si certaines parties de l'application restent incompréhensibles, cela rendra votre travail très difficile.

Une dernière chose, une réécriture complète est parfois la seule solution mais il est généralement très difficile de justifier son coût pour la direction.

Eric Darchis
la source
0

Puisque vous êtes un développeur junior, c'est en fait une bonne chose. Etre jeté au milieu d'un grand bazar de code vous en apprendra beaucoup plus sur ce qu'il ne faut pas faire que travailler uniquement avec du code parfaitement «propre». Tirez parti de la situation et apprenez à reformuler le code défectueux et à le convertir lentement en quelque chose de plus gérable. Et ne vous plaignez pas d'être obligé d'être dès que possible. C'est le point - apprendre à refactoriser et nettoyer le code tout en faisant les choses dans des délais serrés. Après tout, n'importe qui peut écrire du code parfait s'il dispose de temps infini.

Grand maître b
la source