Le cas pour ou contre .NET (la bête)

La société pour laquelle je travaille utilise C ++ Builder 6. Nous développons du code natif depuis sa conception. Notre produit phare est entièrement écrit en code natif.

Entre le .NET Framework avec ses options et ses sifflets. Je tombe, accroche, longe et plomb. Je convainque la direction que .NET devrait absolument être notre nouvelle infrastructure pour tout nouveau développement de logiciel et que nous devrions commencer à migrer notre code existant dès que possible. Avec tous les avantages, cela ne demande pas grand chose de convaincant. Ils acceptent ma proposition comme d’habitude.

À ce stade, je commence à développer ma toute première application .NET. Tout se passe comme prévu. Le projet n’est qu’un composant de notre produit. J’en viens donc à créer un installateur pour ce nouveau composant. En tant qu’entreprise, nous sums fiers de rendre les choses pour l’utilisateur aussi faciles que possible. Même Microsoft, avec des milliers de développeurs, ne crée pas d’installateurs comme nous. Lorsque vous installez, par exemple, Microsoft CRM, vous obtiendrez uniquement une liste des défaillances et des prérequirejs à installer avant de pouvoir continuer. Pas nous. Jamais. Si vous avez besoin de quelque chose, nous l’installerons pour vous.

Cela rend nos installations si faciles. .NET Framework non installé? Aucun problème! Nous le ferons pour vous. Besoin d’un client SQL natif? Bien!

Le problème est le suivant: maintenant qu’un composant unique de notre solution est écrit en .NET, cela complique énormément le processus d’installation. Avant même de pouvoir installer notre produit, je dois procéder comme suit:

  • Détecter si la condition préalable est installée

  • Installez-le s’il ne l’est pas

  • Vérifiez qu’il a été installé avec succès

  • Condition préalable

Pour installer .NET Framework, j’ai d’abord besoin de Windows Installer 4.5. Mais il existe différentes versions pour les différents systèmes d’exploitation, alors j’ajoute une détection de système d’exploitation et lance le fichier EXE correct. Oh, .NET Framework est déjà fourni avec 2k8 et le programme d’installation exe ne peut pas s’exécuter, vous devez exécuter OCSetup.exe avec les parameters pour l’installer.

Et ainsi de suite. Ensuite, SQL Express 2005 doit être installé. Les dépendances augmentent à nouveau.

Je soutiens avec la direction que même Microsoft ne rend pas cela aussi facile pour l’utilisateur. Leur réponse est qu’il n’y a aucune raison pour que nous ne soyons pas meilleurs qu’eux de cette façon. Je ne peux pas contester cela, sauf que j’estime qu’il y a de très bonnes raisons pour lesquelles ils ont adopté leur approche.

Soudain, notre installateur est énorme. Toutes les conditions préalables pour .NET, ne parlent même pas de la prise en charge 64 bits qui a toute une gamme séparée de fichiers EXE à installer. Alors maintenant, nous en arrivons au point où nous voulons que les utilisateurs puissent télécharger une évaluation “rapide”. Quelle blague. Vous devez télécharger 500 Mo pour lancer une application de 30 Mo. La majorité du package d’installation est prérequirejs.

La direction estime que nous avons trop de dépendances / prérequirejs. Je comprends totalement. Ils suggèrent que nous nous éloignions du framework .NET pour revenir dans le pays natal où les choses étaient encore “faciles” en termes d’installation. C’est là que l’une des parties souhaite défendre .NET en expliquant les avantages de la grande image, l’amélioration de l’expérience de développement, la maintenance simplifiée et la qualité globale du code. L’autre partie de moi est d’accord avec eux de tout coeur! Le développement sous .NET nécessite simplement que vous installiez trop de prérequirejs, ce qui complique l’installation.

Oui, certains défenseurs de .NET vont prétendre que tout doit être installé sur un système d’exploitation mis à jour et corrigé. C’est vrai, mais tous les clients ne l’ont pas, et dire simplement “Je suis désolé, mettez d’abord à jour” ne suffira pas. Rappelez-vous, nous sums fiers de l’expérience utilisateur globale.

Nous envisageons maintenant d’écrire à nouveau le code natif et je sais que nous perdons en vitesse de développement et tous les avantages de .NET. Mais nous gagnons dans ce domaine, que ce soit petit si vous regardez la grande image ou non. Comme nous avons des compétences en développement de code natif et que .NET est en fait un nouveau terrain pour nous, il est même logique de revenir en arrière.

Ma question est la suivante: quel est le sharepoint vue de votre entreprise sur cette question si elle pose problème et à quoi ressemblera l’parsing de rentabilisation que je propose à la direction en supposant que je souhaite continuer à migrer tous nos produits vers .NET?

C’est la raison pour laquelle de nombreuses entresockets se sont tournées vers les installateurs Web qui téléchargent tous les prérequirejs à la volée depuis votre page d’accueil. Dans la plupart des cas, le système d’exploitation dispose de 99% de ce qui est nécessaire (s’il a été mis à jour à l’aide de Windows Update).

Je ne mettrais pas tout pour x64 et x32 dans le même installateur. Créez deux programmes d’installation, un pour chaque architecture.

Paint.NET encapsule bien l’installation des prérequirejs sans intégrer par défaut l’infrastructure .NET. Le résultat final est un exécutable shim non géré qui vérifie le framework .NET et d’autres éléments et retient votre main lorsqu’il est installé; tous téléchargés à la volée comme ils sont nécessaires. Ils exécutent ensuite une application WinForms qui pInvokes dans MSI pour envelopper l’installation dans du coton.

Vaut un Google.

Il est également probable que de nombreuses machines clientes disposent déjà d’une version du .NET Framework intégrée à Microsoft Update, ce qui la rend plus facilement consommable dans le monde des affaires.

Articles de blog Paint.NET sur l’installation:

http://blog.getpaint.net/2008/08/24/the-paintnet-install-experience-part-1-version-3xx/

http://blog.getpaint.net/2008/08/25/the-paintnet-install-experience-part-2-version-40/ (merci Rup!)

En lisant un peu plus l’histoire, la direction a dû au moins subir une fois de plus le déploiement avec l’application C ++, mais elle est maintenant terminée et classée comme «facile». Mettez du temps sur le déploiement et présentez-le à la direction et, en cachant la douleur, montrez-leur la facilité d’installation 🙂

Revenons à la raison pour laquelle vous vouliez passer du code natif au code .NET en premier lieu: il est plus efficace pour vous, en tant que programmeur. Beaucoup de choses sont plus faciles dans .NET qu’en C ++ (ou dans tout autre langage que vous utilisez), et vous pouvez donc développer vos applications beaucoup plus rapidement.

Alors, comment le temps passé à développer l’application se compare-t-il au temps que vous consacrez au développement de l’installateur? Même si vous devez passer quelques semaines à installer l’installateur (en particulier la partie d’installation du framework), cela devrait être plus ou moins le seul moment où vous devez passer par là.

Pour toutes les applications futures, vous utiliseriez un installateur presque identique. vous feriez toujours toutes les vérifications préalables, mais au lieu de copier les fichiers dans C: \ Foo, vous copiez des fichiers différents dans C: \ bar.

À mon avis, il s’agit d’une simple question d’économie. Oui, il est plus coûteux de développer un programme d’installation (correct / complet) pour une application .NET, mais si c’est l’étape que vous devez franchir une fois pour améliorer considérablement votre temps de développement, c’est une évidence. Votre retour sur investissement serait probablement de l’ordre de quelques semaines.

Je sens que je dois répondre à cette déclaration:

Oui, certains défenseurs de .NET vont prétendre que tout doit être installé sur un système d’exploitation mis à jour et corrigé. C’est vrai, mais tous les clients ne l’ont pas, et dire simplement “Je suis désolé, mettez d’abord à jour” ne suffira pas. Rappelez-vous, nous sums fiers de l’expérience utilisateur globale.

Si votre utilisateur insiste pour se tirer dans le pied en utilisant un système que le fournisseur lui a indiqué ne plus convenir , il n’y a rien à faire pour les aider. Je suis conscient que cela me fait ressembler à un activiste odieux, mais je le vois de la même manière qu’un commerçant manuel pourrait le faire: il appartient au client de s’assurer que l’environnement dans lequel sonore et approprié pour le produit. Si ce n’est pas le cas, j’accepterai une nouvelle rémunération pour faire ce travail également, mais cela pourrait encore leur causer du travail supplémentaire parce qu’ils n’ont pas eu la clairvoyance de s’assurer qu’ils comprenaient ce qu’ils achetaient.

Je crois que les clients de logiciels ont été autorisés à restr ignorants assez longtemps, et qu’ils devraient maintenant être obligés de comprendre ce qu’ils achètent. Utiliser un environnement informatique d’entreprise qui n’est pas correctement patché revient à continuer à faire fonctionner un véhicule qui a fait l’object d’un rappel du fabricant – un service pack Windows équivaut à un rappel à de nombreux égards. Vous n’êtes pas légalement obligé de vous soumettre à un rappel, mais c’est dans votre intérêt en tant qu’entreprise et vous pouvez être tenu responsable des dommages causés par votre délit de responsabilité.

Toute application Visual C ++ a également des dépendances / dépendances externes: runtime 6.0, 2003, 2005, 2008 ou 2010? pas de SP, SP1 ou SP2? x86 ou x64? Quelle version de Windows Installer 2005 SP2 requirejs-elle? Et quoi 2008 SP1? Et ainsi de suite, etc.

Voilà donc des arguments farfelus! Comme les grognements de Joel à propos de .NET. Et regarde ce qui est maintenant !

Je ne vois pas comment il y a beaucoup plus de pré-requirejs pour .net sur C ++ Builder. Vous vous plaignez de SQL Server, mais vous ignorez le fait que vous devez également installer une firebase database avec C ++ Builder. Vous vous plaignez du x64 contre x32, mais .NET ne nécessite aucun changement. Le même exe s’exécute sur les deux (et se comstack de manière optimale pour chaque environnement). On ne peut pas en dire autant de C ++ Builder. Vous pourriez avoir besoin de versions séparées du serveur SQL, mais là encore, cela s’appliquerait au constructeur C ++ (sauf si vous installez simplement x32 sur tout).

Oui, il y a les nouveaux problèmes de version du programme d’installation, mais ces composants ne sont pas très gros. Et vous pouvez vraiment amener les installateurs à télécharger et à installer uniquement les tablettes nécessaires.

C ++ Builder est probablement plus facile pour vous car vous avez déjà investi du temps dans la création d’un bon programme d’installation. Vous devez faire la même chose pour .NET, et ensuite vous pouvez choisir en fonction de problèmes réels .. et non pas ceci.

Soit dit en passant, la raison pour laquelle Microsoft choisit de faire les choses comme ça, c’est que de nombreux utilisateurs, en particulier les utilisateurs professionnels, n’apprécient pas que des choses soient automatiquement installées (peut-être et vous venez et l’effacez avec une nouvelle version qu’ils ne peuvent pas facilement désinstaller).

Ce que vous considérez comme «facilitant» pour les personnes moins bien informées est en fait de rendre les choses BEAUCOUP plus difficiles pour ceux qui savent ce qu’ils font.

Voici un bon exemple. Une chose que je méprise absolument est lorsque j’installe une application qui nécessite SQL Server, et installe sa propre instance de SQL Server, même si je peux déjà avoir plusieurs instances à utiliser. Facile pour le novice, un mal pour moi d’essayer de faire en sorte que votre application fonctionne avec mon instance unique.

Si votre application s’exécute sous Mono, l’envoi de votre application avec l’environnement d’exécution Mono peut être moins pénible.