Mon entreprise est une petite entreprise d'ingénierie de vingt personnes. Toute la programmation d'application ici est effectuée en VB6 par deux personnes, qui ont appris elles-mêmes le VB6 à partir d'un arrière-plan d'assemblage tout en travaillant ici depuis plus de 25 ans, et moi-même.
En conséquence, le code VB6 est criblé d'odeurs de code horribles, comme des tonnes de variables typées en chaîne , des fonctions terriblement longues, des centaines de variables globales publiques (dont certaines sont préférées à la transmission d'arguments et au renvoi de valeurs) et pas un seul objet classe. Le refactoring est presque impossible, et tout changement nécessite trop de fouille dans le code, et une fois effectué, semble toujours introduire plus de trous.
Mon patron se rend compte que VB6 est une technologie morte et est prêt à écouter mes appels à passer à .NET pour de nouveaux développements. Nous allons de l'avant vers .NET, mais il le voit comme un moyen de maintenir la compatibilité avec les nouveaux systèmes d'exploitation Windows, et non comme un moyen d'écrire un meilleur code.
Comment puis-je mieux expliquer les avantages du langage .NET sur VB6, au-delà de la simple mise à jour? Que puis-je dire pour souligner au mieux que le passage à .NET est une bonne décision, mais aussi que cela signifie que notre paradigme de programmation actuel devrait également commencer à changer? Dès que mon patron apprend que Visual Basic .NET ressemble à VB6, je sais que son premier réflexe sera de simplement convertir notre ancien désordre de code en .NET.
Je comprends qu'il sera impossible de changer la mentalité de qui que ce soit en un seul après-midi, mais comment puis-je au moins convaincre mon patron de l'assemblage que des choses comme les variables fortement typées, les classes personnalisées et les champs privés ne sont pas un total perte de temps et l'énergie?
la source
Réponses:
Réponse courte: Il n'y a rien que vous puissiez faire pour changer d'avis en fonction des critères que vous avez énumérés dans la question qui sont tous techniques . C'est l'équivalent d'un débat religieux . Le chemin le plus rapide vers l'échec est de présenter un argument qui n'est pas du point de vue du public, en l'occurrence les propriétaires d' entreprise .
Réponse plus longue: le changement dans les affaires est motivé par une seule et unique chose. Profitez de la ligne du bas.
Ils peuvent non seulement être une perte de temps et d'énergie, mais surtout ils vous coûtent de l' argent ! Vous devez être en mesure de montrer quantitativement que vos suggestions conduiront à un profit substantiel au fil du temps. Il ne suffit pas de prétendre que le code propre est «meilleur» , car le code propre coûte beaucoup plus cher à produire.
Si vous pouvez expliquer comment entraînera le coût d'utilisation de la technologie moderne
($COST + X) * TIME = $PROFIT
, où seX
trouve un nombre positif non trivial etTIME
relativement court, vous pouvez créer un scénario convaincant.Une autre façon de calculer le ROI (Return On Investment)
Si ce ROI / ROR est un nombre trivial, en particulier sur une longue période de temps, vous n'avez pas non plus beaucoup de business case.
Comment votre entreprise gagne-t-elle réellement son argent?
Il est difficile pour un bon homme d'affaires d'ignorer l'argent déposé sur la table.
Bien sûr, vous devez être en mesure de sauvegarder vos déclarations avec des faits concrets. Cela signifie que vous devez être en mesure de fournir des chiffres réels qui montrent que vous comprenez vraiment l'entreprise réelle et pas seulement les détails techniques académiques.
Pas seulement les pros
Fournir également une analyse détaillée des risques et ce que ces risques feraient
$COST
s'ils se produisaient, les convaincrait que vous avez un cas réaliste et ne vous contentez pas de pleurnicher que vous ne voulez plus faire de VB6.Enseigner de nouveaux trucs aux vieux chiens
Changer ou ne pas changer le paradigme de programmation pour être aussi idiomatique que possible de la nouvelle technologie fait partie de l'analyse des risques. Mais il s'agit d'un argument distinct uniquement après avoir prouvé qu'il y a beaucoup d' argent à faire en effectuant un changement en premier lieu.
Les gens d'affaires ont tendance à écouter les analyses de rentabilisation tout comme les techniciens ont tendance à écouter les études de cas techniques. Tous vos cas dans votre question épousent des mérites techniques qui sont au mieux académiques dans votre situation.
Prédiction
Je fais quelques hypothèses ici.Application VB6, petite boutique, peu de développeurs, 2 développeurs / propriétaires d'entreprise plus âgés pointent vers une application de niche qui est probablement mature (les bogues et les solutions sont connus), assez complet et relativement stable, peu importe du "gâchis" la base de code est. Cela m'amène à croire que la petite base d'utilisateurs ne croît pas non plus de façon spectaculaire d'une année à l'autre, ce qui m'amène à la conclusion suivante.
Qu'il n'y aura vraiment aucune raison commerciale impérieuse de changer la direction technique avec cette application. Et le portage vers VB.Net est également une perte de temps parce que vous aurez juste le bordel mais maintenant avec plus de lui, et 2/3 de l'équipe de développement ne se consacre pas à l'apprentissage de quelque chose de nouveau. Bonne chance.
la source
J'ai un client dont le produit phare est écrit en VB6 et maintenu par 3 personnes. Je suis venu les aider car ils avaient un partenaire qui voulait qu'ils appellent un service web. C'est très difficile à faire à partir de VB6, mais facile à partir de VB.NET ou C #, et je leur ai écrit un assemblage .NET qui ressemblait à VB6 comme un composant COM pour qu'ils puissent l'appeler. Ils devaient ensuite offrir un service Web à quelqu'un. Ensuite, ils voulaient écrire un petit utilitaire autonome et il allait devoir crypter et décrypter certaines informations, et analyser du XML. Je leur ai appris à écrire cela en .NET. Au cours des 5 dernières années environ, de plus en plus de leur code est en .NET même si le produit phare n'a pas du tout diminué. Ils détestent certaines parties - chaque application en a - et où ils peuvent les retirer (maintenant la réduction commence) et les mettre dans des services ou des utilitaires séparés. Le reste sera converti en holus-bolus en .NET. Oui, mauvais noms de variables et tout - à mon avis, il y a beaucoup d'avantages à passer à .NET même s'ils ne changent pas leur paradigme de programmation actuel. Ceux-ci inclus:
Il y a plus, mais ça suffit sûrement?
La question des paradigmes de programmation, de la frappe forte, le compilateur est votre ami, l'encapsulation est votre ami et ainsi de suite (et je suis payé pour avoir ces opinions) entièrement séparé. Si vous voulez mourir sur cette colline, allez-y, mais vous allez mourir avec une copie de VB6 ouverte.
la source
J'ai commencé avec un projet VB6 il y a quelques années (le système ERP personnalisé de l'entreprise) et je l'ai lentement migré vers .NET. C'est quelque part à moitié fait.
Tout d'abord, la conversion de VB6 en VB.Net est presque toujours une mauvaise idée (et j'ai fait beaucoup de recherches à ce sujet). Il y a trop de différences. De plus, si votre patron pense que VB.Net est "tout comme VB6", il se trompe complètement et vous devez changer rapidement ses perspectives.
Ma stratégie consistait à garder les deux bases de code séparées et à les maintenir séparément, puis à déplacer lentement des modules entiers de VB6 vers .NET, mais uniquement lorsqu'il y avait un changement important sur le point d'arriver à ce module, afin que nous puissions amortir une partie du coût. Même ainsi, la réécriture est une grosse tâche coûteuse et risquée.
Il y a deux façons d'intégrer le VB6 existant avec le nouveau code .NET (et vous le ferez probablement pendant très longtemps, donc vous feriez mieux de vous habituer à l'idée). La première façon d'y arriver a été de commencer à écrire de petits modules en .NET, puis de faire lancer l'application exécutable .NET par l'application principale VB6 en transmettant certains paramètres de ligne de commande. Cela a fonctionné, mais sachez que .NET a un temps de démarrage de 4 à 10 secondes, vous êtes donc limité dans ce que vous pouvez faire de cette façon.
Une fois que cela a commencé à devenir vraiment douloureux, j'ai inversé la stratégie et utilisé la méthode de cet article CodeProject pour afficher les formulaires VB6 existants dans mon application .NET principale. Une fois que j'ai emprunté cette voie, je n'ai pu subir qu'un seul coup de démarrage .NET et utiliser ClickOnce pour le déploiement, ce qui était une aubaine par rapport à la façon dont l'application VB6 était précédemment déployée.
Cela dit, voici les avantages que je trouve dans .NET par rapport à VB6:
Action
etFunc
typesDecimal
type (VB6 n'a jamais eu de type décimal de première classe, même s'il a CDec)Guid
Inconvénients du VB6:
Pour être honnête, voici quelques inconvénients à maintenir une solution combinée VB6 / .NET:
Maintenant, comme vous l'avez laissé entendre, vous devez vraiment reconstruire votre architecture à partir de zéro si vous commencez à écrire du code dans .NET. Cependant, il semble qu'aucune personne de votre entreprise ne soit familiarisée avec le monde de la programmation .NET et / ou Java, d'où proviennent de nombreux modèles et pratiques communs aux cadres des grandes entreprises.
Si vous prenez quelqu'un qui a l'habitude de faire glisser un bouton sur un formulaire, de double-cliquer dessus et d'écrire des chaînes SQL directement dans le gestionnaire d'événements click, et cela fonctionne pour eux, il est vraiment difficile de leur faire voir un avantage à suivre SOLID principes de conception. D'un autre côté, si vous mordez la balle et décidez que tout le nouveau code sera couvert à 90% ou plus par des tests unitaires automatisés, alors vous vous rendrez rapidement compte que c'est vraiment difficile à faire à moins d'adopter les principes de conception SOLIDE.
Il faut donc regarder de très près la réalité de la situation. Dans mon cas, j'étais le seul programmeur et j'étais déterminé à faire tester tout le nouveau code unitaire, même si je n'avais aucune expérience avec celui-ci. Je ne saurais trop insister sur la façon dont cela a eu un impact négatif sur ce que je pouvais faire pendant la première semaine, même les premiers mois. Pourtant, j'étais déterminé à le faire, et j'avais l'adhésion de la direction. La plupart des gens n'ont pas ce luxe. Maintenant, j'ai beaucoup de code et je viens de terminer une refactorisation majeure avec presque aucun problème.
En réalité, vous n'allez pas faire de tests unitaires, ce qui signifie qu'il est plus difficile de justifier des principes tels que l'injection de dépendance à vos coéquipiers. Vous allez devoir vendre .NET sur les mérites autres que les avantages architecturaux. Vous devez vous concentrer sur un meilleur support de bibliothèque et de meilleurs outils. C'est la seule chose qui résonnera. Je suggérerais ce qui suit dans votre démo:
DataGridView
sur la fenêtre principaleAction
un paramètre. Faites-le d'abord en passant une autre méthode comme paramètre, puis soufflez leur esprit en passant un délégué anonyme en utilisant la syntaxe lambdaList<T>
etDictionary<T1,T2>
collection et montrez comment il crée du code fortement typé (VB6 a des choses similaires, mais il est typé dynamiquement)foreach
boucle qui est embarrassamment parallèle, utilisezSystem.Diagnostics.Stopwatch
pour mesurer le temps qu'il faut pour exécuter, puis utilisez la bibliothèque parallèle de tâches pour changer la boucle en uneParallel.Foreach
boucle et démontrer l'accélération, en supposant que vous êtes sur une machine multicœur.Voilà ce que je ferais.
la source
Il me semble que c'est une situation où vous devrez mettre votre chapeau de politicien au lieu de celui de programmation. Vous devez être très attentif à la façon dont vous présentez votre argument et à ce que vous ne contrariez pas votre public. Assurez-vous que vous montrez les avantages de .Net au lieu de montrer les inconvénients de VB. Faire valoir les inconvénients de VB mettra vos collègues dans une position où ils doivent défendre leurs décisions et les forcer à admettre qu'une langue dans laquelle ils investissent beaucoup est une mauvaise langue. Au lieu de cela, montrez-leur comment le passage à .NET augmentera les outils dont ils disposent et leur facilitera la vie.
Ma façon idéale de présenter cet argument serait de trouver une tâche ou un morceau de code dont tout le monde se plaint constamment et de le corriger à l'aide de .NET. Je ne suis pas particulièrement familier avec VB, mais voici une courte liste de tâches ennuyeuses qui seraient probablement rendues plus faciles en utilisant .NET au lieu de VB.
Choisissez l'une des tâches ci-dessus, ou une autre tâche spécifique aux projets sur lesquels vous travaillez habituellement, et asseyez-vous avec eux et écrivez en fait du code, à partir de zéro, qui gère le problème rapidement et facilement. En fait, montrer le processus d'écriture du code montrera les outils que les nouvelles versions de VS apportent à la table et prouvera que le passage à .NET ne rendra la vie de personne plus difficile.
Pour cela, vous devez absolument et positivement faire vos devoirs. Si vous ne savez pas comment fonctionnent les outils ou si le code ne fonctionne pas correctement, vous ne pourrez jamais les gagner à vos côtés.
la source
La première chose que vous dites est que VB6 n'est plus pris en charge par Microsoft. Bien que vous puissiez le faire fonctionner, vous devez comprendre que ses options à long terme sont nulles. Je ne sais même pas si les applications VB6 fonctionneront sur Windows8 ou si l'IDE lui-même fonctionnera sur Win8.
Donc, vous devez finalement faire une réécriture, et si c'est le cas, vous pourriez aussi bien commencer maintenant plutôt que plus tard, ce qui vous donne beaucoup de temps pour déterminer quelle nouvelle technologie vous souhaitez utiliser (alors que VB.NET semble idéal, c'est l'occasion d'essayer quelque chose de plus avant-gardiste, comme faire fonctionner l'application sur iPad).
À court terme, vous pouvez atténuer un peu le problème en introduisant de nouvelles sections en tant que composants COM pour l'application existante à utiliser, espérons que ces composants resteront lorsque l'inévitable réécriture se produira.
Je ne m'embêterais pas avec des arguments techniques sur pourquoi .NET est meilleur que VB6. Vous serez sur un argument perdant là-bas, la technologie en soi ne résout jamais les problèmes. C'est à vous de décider comment appliquer cette technologie, et si l'application VB6 résout des problèmes pour vous, il n'y a pas d'argument pour répondre. Vous pouvez parler de facilité de maintenance ou de disponibilité de personnel expérimenté, mais une fois que vous avez fait cela, vous admettez que votre personnel actuel n'a aucune expertise dans la nouvelle technologie et devra être formé, puis prendre un certain temps pour se mettre à niveau. avec ça. Vous devrez également répondre aux questions sur la façon dont un grand nombre de réécritures finissent pire que le projet d'origine (parfois en raison du manque d'expertise, parfois en raison de conceptions trop grandes).
la source
Donnez-lui l'analogie "vieille voiture nouvelle vs voiture":
la source
Tout d'abord, je pense que vous devriez changer la question (pas sur stackexchange mais au sein de votre entreprise). Ce n'est pas tellement pourquoi .Net est meilleur que VB6, mais plus comme VB6 n'est plus supporté, il est temps de passer à autre chose. Demandez aux parties prenantes quelle devrait être cette «nouvelle» technologie? Ce n'est peut-être pas .Net.
Mais il semble que vous ayez besoin de passer à une nouvelle technologie ET de mettre en place de bons modèles et pratiques de programmation. La réponse à la deuxième partie est beaucoup plus difficile. Vous devez probablement le faire dans une petite section de l'application et prouver qu'elle en vaut la peine, c'est-à-dire qu'elle est plus stable, plus facile à entretenir, etc.
la source
Dites à vos patrons d'écrire deux petites annonces. Un pour les développeurs C #. Un pour les experts VB6. Mettez-les là-bas. Comparez les résultats.
la source