La décision de conception ou de programmation la plus regrettable que vous ayez prise? [fermé]


57

J'aimerais savoir quel genre de décisions de conception vous avez prises et comment elles se sont retournées contre vous. A cause d'une mauvaise décision de conception, j'ai fini par devoir supporter cette mauvaise décision pour toujours (j'y ai également pris part). Cela m'a fait comprendre qu'une seule erreur de conception peut vous hanter pour toujours. Je veux apprendre des gens plus expérimentés quel genre de gaffes ont-ils vécu et qu'ont-ils appris d'eux?

Je suis sûr que cela aidera beaucoup les autres programmeurs en leur évitant de répéter ces décisions.

Merci d'avoir partagé votre expérience.


19
passer trop de temps sur SO !! ;)
Mitch Wheat

6
@ George: il semble que votre premier lien concerne une ingénierie excessive, qui peut être liée de manière tangentielle à ce fil, mais ce n'est pas un doublon. Les deuxième et dernier liens concernent les erreurs de codage et les manœuvres de gestion, qui ne sont aucunement des doublons de ce fil.
Juliette

1
Cela devrait probablement être transformé en un wiki de la communauté (il y a une boîte quand vous éditez le post).

3
J'aimerais qu'il y ait un moyen de voter pour contrer la clôture. Downvote un proche?
Kieveli

5
Quel est le problème avec tous les électeurs fermés? Alors que se passe-t-il si ce n'est pas une CW laisser le demandeur obtenir des votes pour avoir posé la question. Je suis vraiment intéressé par ce sujet. Ne laissez pas CW vous mettre en travers d'une bonne question subjective. Sheesh, SO est plein de hurleurs "CW THIS".
syaz

Réponses:


73

Ignorant YAGNI , encore et encore ...


22
C'est vrai pour la plupart, mais il y a aussi des gens qui pourraient utiliser un peu moins de YAGNI. Aucun des deux extrêmes n'est le meilleur endroit pour être.
Console 80x24

56

"Je le ferai plus tard"
"Plus tard" ne vient jamais.


8
Plus tard ne vient jamais.

Ça ne fait jamais.

Il a été dit, si vous n'avez pas le temps de le faire maintenant, qu'est-ce qui vous fait penser que vous aurez le temps de le réparer plus tard?

4
Nous appelons cette "itération jamais"
NotMe

10
Il n'y a rien de plus permanent qu'une solution temporaire.
dietbuddha


44

La configurabilité dans une application est agréable. Trop de configurabilité est un cauchemar à utiliser et à maintenir.


2
Oui. Vrai. C'est l'idéalisme de rendre tout configurable et d'avertir le patron que nous n'aurons plus jamais besoin de changer une seule ligne de code.

1
Étant malheureux coincé dans l’un de ces systèmes extrêmement configurables pour notre gestion de projet, je peux seulement dire que je vous inviterais à nouveau un million de fois si je le pouvais.
HLGEM

La trop grande flexibilité dans la configuration est généralement due au fait que vous ne pouvez pas exécuter de code arbitraire au moment de l'exécution, vous devez donc tout anticiper.

C'est ce qu'on appelle «spoftcoding» par opposition à «hardcoding»
deadalnix

42

Une de mes erreurs m'a appris que la normalisation de la base de données ne devrait pas être suivie aveuglément. Vous pouvez, et dans certaines situations, vous DEVEZ aplatir vos tables.

J'ai fini par gérer des charges de tables (via des modèles) et les performances n'étaient pas aussi bonnes que possible avec un peu d'aplatissement des tables.


5
Je suis tout à fait d’accord… Je suis un ingénieur en logiciel et on nous dit de toujours normaliser. Quel tas de conneries. C’est uniquement parce que les enseignants n’ont pas essayé de travailler avec des bases de données véritablement complexes et dépendantes des performances.

8
J'ajouterais que la normalisation peut également être très positive.

12
Je pense que les programmeurs sont trop prompts à la dénormalisation pour des raisons inadéquates, mais oui, le respect esclave des règles de la normalisation est une grave erreur. En général, l’une de mes grandes frustrations dans le développement logiciel, c’est quand on me dit "Nous devons faire X", et quand je souligne tous les problèmes que cela va causer, ils répondent: "Cela n’a aucune pertinence. Tous les experts sont d’accord pour dire que X est bon, donc nous devons faire X, toujours, sans exception. "

4
Mon approche de la normalisation est toujours simple. Je normalise toujours, MAIS si je vois une amélioration potentielle des performances sur un léger aplatissement - je teste toujours et me compare et dans la plupart des cas, il est rentable d'aplanir.
Eimantas

7
Mais la normalisation est amusante! :) Je suis sérieux, j'aime bien concevoir des structures de données. Ce que je dirais, c'est que s'il est facile de dé-normaliser un schéma normalisé, l'inverse n'est PAS vrai. Vous devez connaître les règles avant de les enfreindre.

36

Utiliser un seul caractère dans les bases de données pour les statuts, etc. Cela ne sert à rien, la surcharge liée à l'utilisation d'un caractère plus long () ou de nvarchar2 () est minuscule par rapport au réseau et à l'analyse effectuée par tout appel SQL, mais les caractères finissent toujours plutôt obscurci, ou à court (pas pour les statuts, mais d'autres choses). Mieux vaut mettre simplement la version lisible par l’homme et avoir également dans votre modèle Java (dans mon cas) une énumération avec des valeurs correspondantes.

J'imagine qu'il s'agit d'une forme d'optimisation prématurée inutile et aveugle. Comme si l’utilisation d’un seul personnage sauverait le monde de nos jours. Mis à part les booléens Y / N dans les bases de données qui ne prennent pas en charge les booléens / bits.


+1 Nous venons d'avoir une réunion sur cette question. Nous sommes arrivés à la même conclusion.
APC

Et si votre client travaille avec de telles abréviations et ne veut pas les abandonner?

Pour les systèmes existants, vous devez être compatible (je créerais quand même une énumération Java de valeurs appropriées, avec une méthode <code> MyEnum fromChar (char c) </ code>) bien sûr. Pour les nouveaux designs, n'y allez pas!

Certaines bases de données prennent en charge les énumérations, qui sont à la fois compactes et lisibles et servent également à interdire les valeurs inattendues. Si vous le pouvez, utilisez-les.
Karl Bartel

2
Presque aussi grave: utiliser le type BIT dans MS SQL Server avant de découvrir qu'il ne peut pas faire partie d'un index.
finnw

32

Ne pas développer une couche d'accès aux données appropriée , et avoir SQL partout dans mon code, juste pour obtenir quelque chose de "rapide" et opérationnel. Plus tard, lorsque le projet a commencé à se développer et que les exigences ont changé, il est devenu un cauchemar. Je ne savais pas ce qu'est un DAL à l'époque.

Je suis heureux d'avoir dépassé cela, même si je vois encore des programmeurs ayant plus de 20 ans d'expérience dans ce domaine.


16
Je ne me souviens pas où je l'ai lu, mais il y a une différence entre 20 ans d'expérience et un an d'expérience répété 19 fois.
CaffGeek

@Chad: C'était quelque part dans les écrits de Joel Spolsky.

+1: Ouais. Et essayez de refactoriser toute cette logique liée à ce SQL ... Qu'il s'agisse de processus SQL en ligne, de forme libre ou stockés. [Ouais - Je n'ai pas peur de cette guerre sainte.]
Jim G.

26

Penser que je pourrais être architecte, développeur et PM sur le même projet.

2 mois de sommeil 3 heures par nuit m'a appris que vous ne pouvez pas le faire.


15
Alors arrête de dormir autant! oh, attends ... tu veux dire que ce n'est pas normal ... ?? Hmm, je dois me chercher d'autres personnes sur ce projet ...
AviD

On dirait que le PM-vous avez besoin de formation avec des estimations :)

21

Choix de Microsoft Foundation Classes (MFC) pour l'écriture d'un IDE Java.


3
Owwww. Cela ferait mal à mon cerveau.
Greg D

2
Ce n'était pas une mauvaise décision en 1999. AWT était alors laid et lent.
finnw

finnw - eh bien, au moins c'est toujours moche!
Niklas H

20

Ce n’était pas ma décision (j’ai rejoint la société un peu plus tard), mais quelque part, j’ai pris un peu trop de chemin, y compris la traduction de tous leurs messages de journal.

Résultats:

  • Plus difficile d'ajouter une nouvelle journalisation
  • Plus de coût pour la traduction
  • Les journaux sont plus difficiles à lire après

Oops.


Je fais un peu ici, et essayer de comprendre ce qui va à l'utilisateur et ce qui va dans les journaux. Je veux que toutes les sorties orientées vers l'utilisateur soient localisables, mais je veux que les journaux restent les mêmes. Dans le processus, je dois faire plus pour déterminer où va une exception que je ne le souhaite.
David Thornley

1
Laisse-moi deviner, ton Américain? Et si non, vous ne parlez que l'anglais? Utilisez l'internationalisation lorsque de nouvelles entrées de journal sont en anglais. Si une autre langue est disponible, vous affichez la langue de l'utilisateur. CONSEIL: L’utilisation de codes d’erreur nous aide ici car cela signifie que vous pouvez toujours grep / analyser les journaux quelle que soit la langue.

2
@ Jacob: Je suis anglais, mais je ne parle que l'anglais. Mais c'était pour une société où toute la base d'ingénierie se trouvait en Angleterre. Avoir des fichiers journaux (qui sont utilisés à des fins de diagnostic et non d'informations visibles par l'utilisateur) dans d'autres langues ne serait qu'un gaspillage de ressources. Je conviens que l'utilisation de codes d'erreur au lieu de texte permet une traduction à la volée - mais cela représente toujours plus de travail que de n'utiliser qu'une seule langue pour commencer. Il s’agit de réduire le travail en déterminant où quelque chose qui semble utile n’apportera en réalité aucune valeur significative.
Jon Skeet

10
Je suis Suédois. Je devrais avoir une idée médiévale sur quiconque suggérant même que le code / les commentaires / les journaux devraient être en autre chose que l'anglais. L'anglais est LA langue à utiliser pour tout sauf les interfaces utilisateur. Tout le reste rend le code difficile à lire et à discuter. L'utilisation d'une langue maternelle est ridicule puisque tout autre framework / bibliothèque que vous utilisez est en anglais.
Jgauffin

1
+1 l'anglais est la lingua franca de la programmation. Le faire traduire, c'est simplement ajouter une couche supplémentaire où vous avez besoin du moins de couches possible et de la plus grande clarté possible.


19

Faire trop de design . Créer de nombreux diagrammes UML, en particulier des diagrammes de séquence pour chaque opération, dont une grande partie s'est finalement révélée inutile. À la fin, il s'est avéré qu'un gain de temps considérable aurait pu être gagné en omettant une conception / des diagrammes inutilement détaillés et en commençant à coder directement.


Si la question était: "Quelle est la décision de conception ou de programmation la plus regrettable que vous ayez jamais vue prise?" par opposition aux erreurs que nous avions commises nous-mêmes, je mettais "UML" en haut de ma liste. Juste en dessous de "le registre Windows".

2
UML est une bonne chose pour discuter entre les membres d’une équipe, mais quand il s’agit de la conception, implémentez-la conformément à la conception, elle finit toujours mal. C’est une sorte de rêve de certaines entreprises, mais en réalité, les logiciels d’écriture ne fonctionnent pas de cette façon. +1!
deadalnix

17

Les clients qui croient savent ce qu'ils veulent et en font trop avant de vérifier avec eux.


15

Mon pire décision de conception? Dans les années 80, je travaillais sur un projet dans lequel nous avons eu l’idée géniale de créer une sorte de modèle pour nos écrans de saisie de données, qui serait interprété au moment de l’exécution. Ce n'est pas une mauvaise décision: cela rendait la conception des écrans de saisie facile. Fondamentalement, il suffit de créer un fichier qui ressemble à l’écran de saisie, avec des codes spéciaux pour identifier ce qui était une étiquette, c’est ce qui était un champ de saisie, et pour déterminer si les champs de saisie étaient alphanumériques ou numériques. Ensuite, j'ai décidé d'ajouter quelques codes spéciaux à ces fichiers pour identifier les validations à effectuer. Ensuite, j'ai ajouté plus de codes pour permettre la construction conditionnelle de l'écran, le champ X inclus uniquement lorsqu'une condition était vraie, etc. Ensuite, j'ai ajouté plus de codes pour effectuer un traitement simple des entrées. Etc. Finalement, nous avons transformé notre modèle d’écran en un nouveau langage de programmation complet avec des expressions, des structures de contrôle et une bibliothèque d’e / s. Et pour quoi faire? Nous avons fait une tonne de travail pour réinventer FORTRAN. Nous avions une étagère pleine de compilateurs pour des langages mieux conçus et mieux testés. Si nous avions consacré autant d’efforts à la fabrication de produits pour lesquels nous possédions une certaine expertise, cette société pourrait toujours être en activité aujourd’hui.


C'est à la fois drôle et tragique :)

Ce qui est triste, c’est que cette approche est parfois la meilleure solution. Le client peut choisir soit "l'écran peut être changé à tout moment" ou "l'écran fait tout, y compris préparer le thé" mais pas les deux!

3
Je n'ai rien contre l'utilisation de modèles ou d'autres codes génériques. L'erreur était de transformer un morceau de code générique en un langage dans un langage.

J'ai vu cette chose exactement faite ... en 2004! Toute la logique métier est répartie sur une quinzaine de tables de configuration et plusieurs tentatives à demi cuites de «langages» dynamiques ont été lancées pour faire bonne mesure (voir la Dixième règle de Greenspun)!

1
Ne voulez-vous pas dire COBOL plutôt que Fortran?
finnw

15

Application trop zélée de YAGNI (désignée Conception par énumération dans les pièges du développement orienté objet ) dans un environnement où toute personne sensée pourrait dire que les exigences allaient définitivement changer. Et changer à plusieurs reprises.

Si vous avez tout codé (en dur) exactement selon les exigences actuelles, en écrasant tous ceux qui disent: "est-ce que cela ne pourrait pas être plus générique?" avec votre maillet YAGNI - et les exigences changent radicalement (mais d’une manière qui aurait pu être raisonnablement anticipée), alors cela peut être la différence entre prendre deux semaines pour s’adapter et prendre 20 minutes.

UPDATE: Pour clarifier, voici un exemple fictif qui n'est pas très éloigné de ce qui s'est passé. Stack Overflow a été conçu pour prendre en charge les badges, mais supposons qu’ils ne puissent penser qu’à quatre badges au début. Seulement quatre, un si petit nombre, ils ont donc codé en dur la prise en charge de quatre badges exactement dans toute la logique du site. Dans la base de données, dans les informations utilisateur, dans tout le code d'affichage. Parce que "tu n'auras pas besoin" de badges auxquels tu ne penses pas, n'est-ce pas? Supposons ensuite que le site soit mis en ligne et que les gens suggèrent de nouveaux badges. Chaque badgeCela prend jusqu'à deux semaines à ajouter, car il y a tellement de codage difficile à modifier un peu partout. Néanmoins, "vous n’aurez pas besoin de" plus de badges que la liste actuelle, il n’ya donc jamais de refactoring pour prendre en charge une collection générique de badges. Une telle collection générique aurait-elle pris plus de temps à l’avance? Pas beaucoup, le cas échéant.

YAGNI est un principe précieux, mais il ne doit pas être utilisé pour excuser une conception médiocre et un codage dur inapproprié. Il y a un équilibre et avec l'expérience, je crois que je m'en approche.


1
Oui et non, pouvez-vous prédire dans quelle direction cela va changer? J'ai l'expérience de systèmes douloureusement complexes qui se sont révélés totalement inadéquats pour la première réutilisation, mais qui ne cadraient pas avec la généricité prédite ...
Benjol

^ Ouais, je préfère m'occuper de YAGNI que de cette merde.

Vous pensez donc que vous auriez dû passer les 2 semaines au début?
finnw

4
Cet exemple n'est pas YAGNI du tout. DRY fait partie de YAGNI, et sans cela, vous ne pouvez pas rester réactif au changement.

3
Stephan, l'exemple montre un abus désinvolte et inapproprié du slogan, ce qui était mon propos. DRY (avec sa variante OAOO) est également un bon principe, mais tout à fait distinct: c2.com/cgi/wiki?OaooBalancesYagni . Cependant, je ne trouve rien qui puisse corroborer votre affirmation selon laquelle "le séchage fait partie de YAGNI". La moutarde va bien avec les hot-dogs, mais cela ne veut pas dire que la moutarde fait partie des hot-dogs. Si vous pouviez clarifier, peut-être avec des références, je comprendrai peut-être.
Console 80x24

15

Ressources humaines incompétentes

Essayer de faire quelque chose de bien avec les mauvaises personnes!
Même s’ils jouent le rôle d’un Premier ministre superflu de l’ego (ce qui est plutôt courant, en particulier dans les grandes entreprises où leur incompétence peut perdurer plus longtemps).


1
Je comprends votre douleur :(

13

À chaque fois, je crée une dette technique, rédige un code de procédure, passe des tests, etc. parce que je me dépêche. Presque inévitablement, je trouve que cela me fait souffrir plus tard.


13

Utilisation des services d’intégration SQL Server (SSIS).

Je ne le souhaite pas à mon pire ennemi.

Après avoir construit plusieurs packages SSIS au cours des deux derniers mois, il ne reste plus qu'à découvrir que les packages que j'ai développés ne sont ni distribuables, ni non déployables. Spécifiquement dans un environnement non Web, sous licence non SQL Server.

C'est une très mauvaise situation, quand vous avez moins de 48 heures pour réécrire vos packages SSIS dans du code POCO .NET pur ou que vous manquez votre échéance cible.

Je suis étonné de pouvoir réécrire trois packages SSIS (cela m'a pris deux mois pour tester et développer), en 12 heures en code .NET pur, avec les adaptateurs OLEDB et les adaptateurs SQL.

SSIS n'est pas distribuable et n'exécutera pas de packages à partir d'un ordinateur client si aucune licence SQL Server n'y est installée (en particulier le fichier DTSPipeline.dll). Ce serait formidable de savoir à l'avance. Je vois maintenant l'avertissement (en petits caractères) sur MSDN. Cela ne sert à rien si vous avez des exemples de code sur Internet avec du code machine uniquement sous licence SQL. En gros, vous devez créer un service Web qui communiquera avec votre serveur SQL pour exécuter vos packages SSIS par programme. Vous ne pouvez pas les exécuter à partir de code .NET pur, sauf si une licence SQL est installée sur la machine en cours d'exécution. Comment irréaliste est-ce? Microsoft s'attend-il vraiment à ce que SSIS soit utilisé à partir de machines nécessitant l'installation d'un serveur SQL? Quel gaspillage complet de deux mois.

Mon entreprise n'utilisera plus jamais SSIS à cause de cette petite impression "gotcha".


Peut-être devriez-vous éviter d'utiliser un logiciel "d'impression fine"! Talend par exemple est un IDE ETL open source.

+1: Ouais. L’expérience de développement de SSIS est aussi un cauchemar. Il y a probablement au moins une demi-douzaine de meilleures façons de réaliser l'ETL.
Jim G.


10

Jeter des œufs de Pâques «drôles» dans un code que j'ai écrit avant de partir en vacances pendant deux semaines. Je pensais que je serais la seule personne à le lire à mon retour, cela me ferait rire et me préparer à le recoder.

Inutile de dire que mon patron n’a pas été impressionné lorsqu’il a relu le texte en mon absence et qu’il était encore moins impressionné lorsque l’un des «œufs de Pâques» touchait son visage avec un drôle de dessin dans ASCII.

Mmmmmm ...


1
OMI, c'est "Bon travail Monsieur!"

18
Tout récemment, mon équipe s'est moquée de moi pour des messages de suivi du type "ajout de la table à la valeur!" J'ai dit, regarde, ils m'ont fait travailler pour Talk Like A Day, ils méritent ce qu'ils ont.

3
Arr, tes journaux cherchent une keel'haulin!

10

Utiliser des thèmes ASP.Net alors qu’un simple dossier classique aurait bien fonctionné.


Lol à ça, oui!

1
Cette réponse pourrait être abrégée "Utilisation de ASP.NET"
fin

Les skins sont utiles pour configurer le CssClass par défaut.
Min

8

Prendre le chemin rapide pour faire fonctionner un code plutôt que le bon chemin (un peu général, mais nous l'appellerons une abstraction et donc une réponse «juste»).


7

Mon entreprise a un modèle de développement semblable à une cascade, dans lequel nos utilisateurs et nos analystes définissent les exigences des projets. Sur l’un de nos «gros» projets, nous avons reçu une pile d’exigences et j’ai remarqué que certaines exigences contenaient des détails d’implémentation , en particulier des informations relatives au schéma de base de données utilisé par notre système de comptabilité.

J'ai fait remarquer aux utilisateurs professionnels que la mise en œuvre était mon domaine, elle ne devrait pas être contenue dans les exigences. Ils n'étaient pas disposés à modifier leurs exigences car, après tout, ils sont THE BUSINESS, et il est donc logique que les comptables conçoivent un logiciel de comptabilité. En tant que modeste développeur qui est trop éloigné du sondage totem, je suis payé pour le faire au lieu de penser . Même si je me suis battu, je ne pouvais pas les persuader de réécrire les exigences - il y a trop de paperasserie et de paperasserie autour des changements, ce qui est trop compliqué.

Alors, je leur ai donné ce qu'ils ont demandé. Au moins, ça fonctionne , mais la base de données est étrangement conçue:

  • Beaucoup de normalisation inutile. Un seul enregistrement contenant 5 ou 10 champs est divisé en 3 ou 4 tables. Je peux m'occuper de cela, mais j'aimerais personnellement que tous les champs 1: 1 soient placés dans une seule table.

  • Beaucoup de dénormalisation inappropriée. Nous avons une table qui stocke les données de facturation qui stocke plus que les données de facturation. Nous stockons un certain nombre de drapeaux divers dans la table InvoiceData, même si l'indicateur n'est pas lié logiquement à la table InvoiceData, de sorte que chaque indicateur a une valeur de clé primaire magique et codée en dur et que tous les autres champs sont annulés dans la table InvoiceData. Comme le drapeau est représenté comme un enregistrement dans la table, j'ai suggéré de tirer le drapeau dans sa propre table.

  • Beaucoup plus de dénormalisation inappropriée. Certains indicateurs à l'échelle de l'application sont stockés sous forme de colonnes dans des tables inappropriées, de sorte que la modification de l'indicateur d'une application nécessite la mise à jour de tous les enregistrements de la table.

  • Les clés primaires contiennent des métadonnées. Ainsi, si une clé primaire varchar se termine par "D", nous calculons les factures en utilisant un ensemble de valeurs, sinon, nous le calculons avec un autre ensemble. Il serait plus judicieux d'extraire ces métadonnées dans une colonne distincte ou d'extraire l'ensemble de valeurs à calculer dans une autre table.

  • Les clés étrangères accèdent souvent à plusieurs tables, de sorte qu'une clé étrangère se terminant par "M" peut être liée à notre table de comptes de crédit, alors qu'une clé étrangère se terminant par "A" peut être liée à notre table de comptes automatiques. Il serait plus facile de scinder les données en deux tables, MortageData et AutoInsuranceData.

Toutes mes suggestions ont été abattues avec beaucoup de pleurs et de grincements de dents. L'application fonctionne comme prévu, et bien que ce soit une grosse boule de boue, tous les programmes malveillants, les cas particuliers et les règles commerciales étranges sont documentés de manière sarcastique et humoristique dans le code source.


3
Bon sang, espérons que votre CV est agréable et à jour pour une évasion rapide avant que la grosse boule de boue ne succombe à la gravité!
Benjol

7

S'en tenir à une technologie plus ancienne, car il semble trop fastidieux de laisser vos clients passer à une nouvelle version du framework .NET, mais la création du logiciel prendra plus de temps, car vous ne pouvez pas utiliser certains composants (qui permettent de gagner du temps). version plus récente du framework.


+1: Ouais - J'y suis allé ... Et dès que j'ai réalisé que les n00bs ne s'amélioreraient pas, j'ai commencé à planifier mon évasion vers des pâturages plus verts.
Jim G.

Et c'est ce que j'ai fait, je viens de prendre ma retraite le mois prochain!
vignes

6

De retour à l'université, je travaillais sur mon projet de design senior. Un autre gars et moi écrivions un système de suivi des bogues basé sur le Web. (Rien de révolutionnaire, mais nous voulions tous les deux avoir une expérience Web.) Nous avons fait la même chose avec les servlets Java, et cela a fonctionné assez bien, mais pour une raison idiote, au lieu d’opter pour Exceptions comme mécanisme de traitement des erreurs, nous avons choisi utiliser des codes d'erreur.

Lorsque nous avons présenté notre projet de grade et qu'un membre du corps enseignant a demandé l'inévitable: "Si vous deviez le refaire, que feriez-vous différemment?" J'ai instantanément su la réponse: "J'utiliserais des exceptions, c'est pour cela qu'elles sont là."


Ahhh les joies de réinventer la roue! :-) Ca c'est drôle.

J'appelle cela des défauts intentionnels, simplement pour pouvoir l'améliorer lors de la prochaine itération.
Whatnick

2
Les exceptions concernent uniquement la gestion des exceptions. Trop de gens abusent des exceptions en transformant tout en exception.

@jacob - Je suis d'accord avec votre sentiment que les exceptions devraient être utilisées pour des choses que vous pouvez prédire (conditions exceptionnelles), mais d'après ce que j'ai vu (et n'étant pas un programmeur Java), Java semble utiliser des exceptions pour tout ce qui se cache sous le soleil. Donc, ne pas utiliser d'exceptions dans le code Java pourrait être considéré comme allant à contre-courant du langage.

6

Ce n’était pas mon choix de méthode, mais un XSLT a été créé pour convertir un fichier XML basé sur des lignes en un rapport HTML basé sur des colonnes.

Cela ne fonctionnait que dans IE, il était complètement impossible de décoder comment cela fonctionnait. Chaque fois que nous avions besoin de l'étendre, c'était incroyablement difficile et cela a pris des siècles.

À la fin, j'ai remplacé par un minuscule script C # qui faisait la même chose.


J'ai fait ça aussi. J'ai mis en place un moteur de création de modèles de messagerie utilisant XSL et le trouvais difficile à lire et à maintenir.
TrueWill

Oui. Remplacé l'arborescence énorme de fichiers XSLT de quelqu'un par quelques fonctions simples de VB.NET. Très satisfaisant, surtout quand la prochaine demande de changement de client qui aurait été faite aurait été impossible à faire dans XSLT.

J'ai constaté que la plupart des programmeurs considèrent XSLT comme un mauvais choix, tout simplement parce qu'ils ne l' obtiennent pas. C'est extrêmement utile pour un petit ensemble de problèmes, beaucoup plus efficace que beaucoup d'autres solutions. Par contre, il est utilisé beaucoup trop souvent, et surtout PAS dans cette petite série de problèmes ...
AviD

6

essayer d'utiliser toutes les nouvelles technologies (pour apprendre de nouvelles technologies) même si cela n'a même pas besoin.


5

Je n'ai pas pris assez de temps pour évaluer le modèle d'entreprise. J'ai fait ce que le client a demandé, mais 6 à 12 mois plus tard, nous sommes tous deux arrivés à la conclusion que nous aurions dû faire autrement.


4

Concevoir sans spécification.


3
Les spécifications ne sont pas toujours possibles

Devrait être "Mettre en œuvre la solution sans demander au client si c'est ce qu'il voulait"; ce qui signifie généralement que vous avez suivi les spécifications.
dietbuddha

3

J'ai implémenté une sous-section d'une application en fonction des besoins.

Il s’avère que les exigences étaient gonflées et plaquées or, et mon code était sur-conçu. J'aurais dû concevoir ma sous-section pour fonctionner uniquement avec ce que j'avais ajouté à ce moment-là, mais prévoir d'ajouter tous les autres éléments sans inclure de support générique dès le départ.

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.