... et codé la fonctionnalité "manuellement"?
À titre d'exemple plutôt métaphorique, vous n'auriez guère besoin d'une bibliothèque pour résoudre des équations quadratiques, bien que de telles bibliothèques existent et que quelqu'un les prenne au sérieux.
Comme un cas plus discutable, selon les circonstances, je peux abandonner jQuery (par exemple lorsque je n'ai pas besoin de prendre en charge certains navigateurs de l'âge de pierre): cela simplifie certaines choses, mais il ajoute une autre couche de complexité et de manque de fiabilité au DOM. Et la surutilisation de jQuery conduit à des problèmes absurdes, comme celui vu récemment sur SO: comment attribuer un href vide à une a
balise avec jQuery? Il s'est avéré que c'était une question HTML, pas même JavaScript.
Un autre cas absurde et pourtant non évident pour beaucoup consiste à utiliser un moteur / langage de modèle basé sur un autre système de modèle: PHP. Troisième niveau de modèle pour quelqu'un?
Et un autre: parfois, cracher XML avec (au sens figuré) printf
est beaucoup plus facile que de le faire avec un moteur XML monstrueux.
D'autres cas de votre expérience?
la source
Réponses:
Une grande partie de la bibliothèque d'entreprise MS et de la plupart des contrôles tiers pour .net m'a laissé ce sentiment après un peu d'utilisation.
Votre kilométrage peut varier
la source
Windows Communication Foundation
Le fait qu'il y ait une photo d'un couteau de l'armée suisse sur la page d'accueil résume tout cela pour moi. Imaginez que la configuration XML soit environ quatre fois plus longue que le code réel que vous écrivez, et il est toujours très difficile d'écrire des services SOAP qui sont interopérables entre C #, Java, PHP, Python et tous les autres langages qu'il était "supposé" être interopérable avec ...
Dans tous les projets futurs, je vais simplement m'en tenir à REST.
la source
L'un des problèmes que j'ai rencontrés avec les gens "qui roulent les leurs" est que - bien que leur approche soit souvent plus rapide et plus simple - elle est également plus susceptible d'être fragile, d'avoir des bogues, d'être incomplète et / ou de contenir des failles de sécurité .
Exemple simple: il pourrait être 10 fois plus facile d'utiliser printf pour émettre du XML que d'utiliser une bibliothèque:
mais avez-vous pensé à échapper à des caractères spéciaux dans
str
? Par exemple '<
' et '&
'? Certaines personnes pourraient dire "non, je ne l'ai pas fait" et écrire ceci:Mais il émettra toujours du XML cassé s'il
str
contient la sous-chaîne "]]>
" n'importe où. Cas de bord - bien sûr. Mais encore un scénario valable qui pourrait conduire à des problèmes inattendus aux conséquences graves.Il y a de nombreux moments et endroits où «rouler le vôtre» peut être approprié, mais il faut parfois beaucoup d'expérience et de connaissances pour identifier le moment approprié. C'est pourquoi j'encourage souvent les programmeurs à préférer utiliser des bibliothèques établies (le cas échéant) plutôt que des routines auto-implémentées.
la source
Log4Net
La bibliothèque est bonne, mais la documentation est horrible. C'était exagéré pour ce que je voulais faire.
J'ai utilisé Trace à la place.
la source
SharePoint
Ne vous méprenez pas, SharePoint est génial si vous avez besoin de la plupart des choses qu'il contient (et il en vient beaucoup!), Mais si vous ne savez pas ce que vous faites ou n'en avez besoin que pour un ou deux les choses, cela ne vaut MASSIVEMENT pas la peine et la configuration.
la source
ASP.NET WebForms - Bien qu'en tant que développeur Web .NET, ce soit mon pain et mon beurre depuis longtemps, depuis que j'ai commencé à utiliser le framework MVC (et à venir d'un environnement PHP / Smarty Template) - vous vous rendez compte que parfois il y a juste mieux les moyens de faire du développement Web et l'abstraction qu'il utilise sont exagérés et fuyants .
la source
Dans presque tous les cas où je l'ai fait, j'ai fini par le regretter:
Je suis arrivé à la conclusion qu'il est préférable de choisir quelques cadres tiers fiables et de les utiliser comme base de tout ce que vous faites. Ces cadres sont développés et débogués par quelqu'un d'autre, ce qui représente un gain de temps incroyable une fois que vous les avez normalisés et bien compris.
la source
System.Text.RegularExpressions
Regex est si complexe et si lent. Je vais très rarement utiliser Regex et j'écris habituellement mon propre analyse et correspondance de texte.
Parfois, je trouve Regex utile pour une correspondance vraiment complexe.
la source
Non pas que Delphi4PHP ait besoin d'une mauvaise presse, mais je l'ai essayé (version 2.0) et il était extrêmement difficile de le plier à ma volonté. Je voulais l'utiliser pour créer une application web de style youtube pour que les clients puissent voir les vidéos de formation, mais c'était trop lourd et quand je l'ai essayé pour combiner les frameworks PHP (VCL4PHP, Zend, Smarty et Recess), j'ai rencontré l'inévitable, je dois renommer tout parce qu'il n'y a pas d'espace de noms dans PHP 5.
Cela étant dit, je n'ai finalement pas roulé le mien. J'ai utilisé juste appris de mes erreurs et décidé de rester très simple et d'utiliser CodeIgniter et FlowPlayer (avec JQuery).
J'ai une envie que quels que soient les frameworks qui sortent de PHP 5, PHP 6 va avoir des frameworks géniaux qui pourraient en fait bien fonctionner ensemble.
la source
Weka
Je fais beaucoup de travail d'apprentissage automatique, et si j'ai besoin de quelque chose de simple comme Naive Bayes ou la régression logistique, j'adore abandonner Weka. Il a de bonnes implémentations de certains algorithmes d'apprentissage machine assez compliqués, mais l'API est une API Java old-school (pré-génériques) excessivement ingénieuse et trop orientée objet. Choses qui m'ennuient à ce sujet:
Il roule sa propre matrice redimensionnable que rien d'autre n'utilise, garantissant une conversion de travail intense d'avant en arrière.
Beaucoup de couplage séquentiel où les méthodes doivent être appelées dans un ordre spécifique et à moins que vous ne fassiez vraiment attention à RTFM, vous ne le réaliserez pas.
Chaque instance doit être un objet Instance et je dois déclarer explicitement avec un objet Attribute qu'il soit nominal ou numérique. Cela conduit à beaucoup de travail chargé de convertir les données sous la forme souhaitée par Weka. Ceci est particulièrement ennuyeux car l'API Weka lève tellement d'exceptions que la compilation de code ne signifie pas qu'elle est susceptible de fonctionner de toute façon. Si je concevais l'API, je serais libéral dans ce que j'ai accepté (peut-être simplement prendre un tableau d'objets) et juste introspecter les données pour comprendre ce que j'ai obtenu et quelle est la bonne chose à faire avec.
la source
Sur un projet particulier, j'ai abandonné EJB3. Cela m'a donné l'injection de dépendances et la gestion des transactions gérées par conteneur. Mais cela introduit d'énormes dépendances (par exemple JBoss) et a rendu le système difficile à écrire pour les tests automatisés. Maintenant, je l'ai réduit à l'injection de dépendance de constructeur JPA +.
la source
Cracher du HTML sur un port de débogage sur une application. J'avais besoin d'un moyen simple pour obtenir des données actuelles (avec rafraîchissement automatique). Il aurait été bien de tirer une bibliothèque pour la formater, mais il était plus facile de simplement l'imprimer.
J'ai également rejeté la bibliothèque pour une autre: nous utilisons une grande bibliothèque XML complexe dans la plupart de nos applications. Après avoir passé 4 heures par jour à essayer de le faire fonctionner dans une nouvelle application, je viens de dire 'bag it' et j'ai ajouté TinyXML. Ce n'est pas aussi puissant, mais cela prend beaucoup moins d'efforts pour le faire faire des choses simples.
la source
Récemment, j'ai travaillé sur un compilateur de langage de script que je peux utiliser dans mes applications. J'en ai utilisé d'autres, mais aucun ne fait exactement ce dont j'ai besoin. J'ai donc pensé pourquoi ne pas essayer d'écrire le mien? Cela peut prendre un an ou deux avant de vraiment convenir à un usage général, mais c'est correct. De plus, c'est une excellente expérience d'apprentissage.
Une autre solution 'roll my own' est les pièces utilisées pour traduire mes applications. Il y a des bibliothèques existantes, mais je n'en ai aimé aucune. J'ai donc fait le mien.
Et les composants de base de données de Delphi. Je les déteste. Toujours avoir. J'ai donc créé ma propre interface de base de données qui fonctionne comme je le souhaite (et exactement comme celle que j'ai créée pour PHP fonctionne, ce qui facilite le codage entre les langues).
Fondamentalement, quand on me donne une option, je finis généralement par créer ma propre bibliothèque.
la source
Ohhh, tellement. J'ai travaillé sur pas mal de projets agiles en utilisant des API open source. Génial quand ils fonctionnent, mais souvent, nous avons souffert des développeurs fétichistes d'avoir apporté toutes sortes d'API tierces, certaines obscures, d'autres non, simplement parce qu'ils veulent utiliser une ou deux classes. Le résultat final étant un méli-mélo de code et des systèmes piratés ensemble. Ils le remettent en prétendant que c'est le meilleur code de tous les temps, partent et les pauvres slobs qui le ramassent trouvent un gâchis inintelligible et sans papiers plein de problèmes de dépendance et de hacks.
la source