Der Fall für oder gegen .NET (das Biest) [geschlossen]

92

Das Unternehmen, für das ich arbeite, verwendet C ++ Builder 6. Seit der Konzeption entwickeln wir nativen Code. Unser Flaggschiff-Produkt ist vollständig in nativem Code geschrieben.

Betritt das .NET Framework mit seinen Schnickschnack. Ich falle, hake, schnüre und versinke. Ich bin davon überzeugt, dass .NET unbedingt unser neues Framework für die gesamte neue Softwareentwicklung sein sollte und dass wir so schnell wie möglich mit der Migration unserer vorhandenen Codeline beginnen sollten. Bei all den Vorteilen braucht es nicht viel Überzeugungsarbeit. Sie akzeptieren meinen Vorschlag wie gewohnt.

An diesem Punkt beginne ich mit der Entwicklung meiner ersten .NET-Anwendung. Es läuft alles wie geplant. Das Projekt ist nur eine Komponente unseres Produkts. Und so komme ich dazu, ein Installationsprogramm für diese neue Komponente zu erstellen. Als Unternehmen sind wir stolz darauf, die Dinge für den Benutzer so einfach wie möglich zu gestalten. Selbst Microsoft mit Tausenden von Entwicklern erstellt keine Installationsprogramme wie wir. Wenn Sie beispielsweise Microsoft CRM installieren, erhalten Sie nur eine Liste der Fehler und Voraussetzungen, die installiert werden müssen, bevor Sie fortfahren können. Nicht wir. Noch nie. Wenn Sie etwas benötigen, werden wir es für Sie installieren.

Dadurch fühlen sich unsere Installationen so einfach an. .NET Framework nicht installiert? Kein Problem! Wir erledigen das für Sie. Benötigen Sie einen SQL Native-Client? Fein!

Das Problem ist, dass jetzt, da eine einzelne Komponente unserer Lösung in .NET geschrieben ist, der Installationsprozess unglaublich kompliziert wird. Bevor ich überhaupt mit der Installation unseres Produkts beginnen kann, muss ich Folgendes tun:

  • Ermitteln Sie, ob die Voraussetzung installiert ist

  • Installieren Sie es, wenn dies nicht der Fall ist

  • Stellen Sie sicher, dass es erfolgreich installiert wurde

  • Nächste Voraussetzung

Um .NET Framework zu installieren, benötige ich zuerst Windows Installer 4.5. Es gibt jedoch unterschiedliche Versionen für die verschiedenen Betriebssysteme. Daher füge ich die Betriebssystemerkennung hinzu und starte die richtige EXE-Datei. Oh, .NET Framework ist bereits mit 2k8 gepackt und die Installations-Exe kann nicht darauf ausgeführt werden. Sie müssen OCSetup.exe mit Parametern ausführen, um es zu installieren.

Und so geht es weiter. Dann muss SQL Express 2005 installiert werden. Die Abhängigkeiten nehmen wieder zu.

Ich argumentiere mit dem Management, dass selbst Microsoft es dem Benutzer nicht so einfach macht. Ihre Antwort ist, dass es keinen Grund für uns gibt, auf diese Weise nicht besser als sie zu sein. Ich kann damit nicht streiten, außer dass ich das Gefühl habe, dass es sehr gute Gründe gibt, warum sie sich für ihren Ansatz entschieden haben.

Plötzlich ist unser Installer massiv. Alle Voraussetzungen für .NET, nicht einmal die 64-Bit-Unterstützung, für die eine ganze Reihe von EXE-Dateien installiert werden müssen. Jetzt ist es soweit, dass Benutzer eine "schnelle" Bewertung herunterladen können. Was für ein Witz. Sie müssen 500 MB herunterladen, um eine 30 MB-Anwendung auszuführen. Der Großteil des Installationspakets sind Voraussetzungen.

Das Management ist der Ansicht, dass wir zu viele Abhängigkeiten / Voraussetzungen haben. Ich verstehe vollkommen. Sie schlagen vor, dass wir uns vom .NET-Framework entfernen und in ein Heimatland zurückkehren, in dem die Installation noch "einfach" war. Hier möchte der eine Teil von mir für .NET eintreten und die Vorteile im Großen und Ganzen, die verbesserte Entwicklungserfahrung, die einfachere Wartung und die allgemeine Codequalität erläutern. Der andere Teil von mir stimmt ihnen von ganzem Herzen zu! Für die Entwicklung in .NET müssen Sie lediglich zu viele andere Voraussetzungen installieren, was die Installation erschwert.

Ja, einige der .NET-Befürworter werden behaupten, dass alles auf einem gepatchten und aktualisierten Betriebssystem installiert sein sollte. Dies ist wahr, aber nicht alle Kunden haben dies, und wenn Sie einfach "Es tut mir leid, zuerst aktualisieren" sagen, wird dies nicht gekürzt. Denken Sie daran, wir sind stolz auf die allgemeine Benutzererfahrung.

Wir denken jetzt darüber nach, wieder nativen Code zu schreiben, und ich weiß, dass wir an Entwicklungsgeschwindigkeit und allen Extras von .NET verlieren. Aber wir gewinnen in diesem Bereich, sei es klein, ob Sie das große Ganze betrachten oder nicht. Da wir über native Kenntnisse in der Codeentwicklung verfügen und .NET für uns tatsächlich Neuland ist, ist es sogar sinnvoll, zurück zu gehen.

Meine Frage lautet: Wie beurteilt Ihr Unternehmen dieses Problem, wenn es überhaupt ein Problem ist, und wie wird der Geschäftsfall aussehen, den ich dem Management vorschlage, vorausgesetzt, ich möchte weiterhin alle unsere Produkte auf .NET migrieren?

Maltrap
quelle
23
+1 für eine schöne Geschichte.
Jgauffin
25
Gibt es keine Stub-Installer für .net, die Komponenten nach Bedarf herunterladen? Das Bündeln der vollständigen Installationsprogramme ist für eine DVD-Veröffentlichung richtig. Wenn sie jedoch eine Evaluierung heruntergeladen haben, können Sie realistisch davon ausgehen, dass sie für eine Online-Installation von .net online sind.
Rup
4
Ironischerweise erwähnten einige der .NET-Bücher, die ich während meiner College-Tage gelernt hatte, die XCOPY-Bereitstellung als einen ihrer Hauptvorteile :)
Madhur Ahuja
25
Sie haben vergessen, Ihre Abhängigkeit von Windows anzugeben. Das sind noch ein paar Gigabyte. Verwenden Sie die Bootstrapper.
Hans Passant
13
Eine interessante Geschichte sollte den Titel tragen: "Wie Sie NICHT ändern können, wie Ihr gesamtes Unternehmen Geschäfte macht, wenn Sie einige Marketingmaterialien gelesen haben und bevor Sie erfahren, was Sie wirklich tun müssen, um das neue Framework richtig zu nutzen"
Andrew Barber

Antworten:

50

Dies ist der Grund, warum viele Unternehmen zu Webinstallationsprogrammen gewechselt sind, die alle Voraussetzungen im laufenden Betrieb von Ihrer Homepage herunterladen. Da das Betriebssystem in den meisten Fällen über 99% der benötigten Komponenten verfügt (sofern diese mit Windows Update aktualisiert wurden).

Ich würde nicht alles für x64 und x32 im selben Installationsprogramm speichern. Erstellen Sie zwei Installationsprogramme, eines für jede Architektur.

jgauffin
quelle
2
Ich glaube nicht, dass Sie x64- und x86-Installationspakete in eine einzige MSI-Datenbank bekommen können.
David Heffernan
Wahr. Ich habe gerade geantwortetSuddenly, our installer is massive. All the prerequisites for .NET, not even talking about 64 bit support which has a whole seperate range of EXEs to install
jgauffin
6
JEDE Software erfordert separate x86- und x64-Installationsprogramme! Jammern ..
Abatishchev
4
abatishchev: Wenn die Software nur eine .NET-Binärdatei wäre, die für "Beliebige" Architekturen kompiliert wurde, wären keine separaten x86- und x64-Installationen erforderlich. Nur wenn Sie das .NET Framework selbst installieren müssen, benötigen Sie separate Installationsprogramme.
Gabe
Wenn Sie ein Webinstallationsprogramm schreiben, denken Sie bitte an Personen, die hinter Proxies leben. Selbst Microsoft erinnert sich oft nicht an Menschen, die hinter ihrer eigenen ISA leben (ich sehe Sie als Web Developer-Installer an).
Egor Pavlikhin
39

Paint.NET schließt die Installation der Voraussetzungen gut ab, ohne das .NET Framework standardmäßig damit zu bündeln. Das Endergebnis ist eine nicht verwaltete ausführbare Shim-Datei, die nach dem .NET Framework und anderen Dingen sucht und Ihre Hand hält, wenn es installiert wird. Alle werden sofort heruntergeladen, sobald sie benötigt werden. Anschließend führen sie eine WinForms-Anwendung aus, die in MSI aufgerufen wird, um die Installation weiter in Watte zu verpacken.

Ein Google wert.

Es ist auch wahrscheinlich, dass auf vielen Client-Computern bereits eine Version von .NET Framework installiert ist, da es Teil von Microsoft Update ist, sodass es in der Geschäftswelt leichter konsumiert werden kann.

Paint.NET-Blogbeiträge zur 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/ (danke Rup!)

Wenn man ein wenig mehr in die Geschichte hineinliest, musste das Management vermutlich mindestens einmal den Schmerz der Bereitstellung mit der C ++ - Anwendung durchstehen, aber jetzt ist es fertig und wird als "einfach" eingestuft. Nehmen Sie sich etwas Zeit für die Bereitstellung und präsentieren Sie dies dem Management. Zeigen Sie ihnen, wie einfach die Installation ist, indem Sie den Schmerz verbergen :)

Adam Houldsworth
quelle
Danke für den Link. Der zweite Teil ist blog.getpaint.net/2008/08/25/… (Ich konnte keinen Link vom ersten auf der Seite sehen, obwohl er tatsächlich in den Kopfzeilen vorhanden ist)
Rup
@ Rup schöner Fund! Ich warf einen kurzen Blick darauf und bemerkte es nicht. Ich werde meine Antwort ändern, um es zu zeigen.
Adam Houldsworth
Ich frage mich, ob es ein Open Source-Installationsprogramm gibt, das dem 4.0-Installationsprogramm für Paint.net ähnelt. Es wäre für jeden, der .net-Apps vertreibt, äußerst nützlich.
dbkk
1
@dbkk du sagst es mir! Paint.NET hat früher den Code für das Programm und das Installationsprogramm freigegeben, wurde jedoch seitdem aufgrund von Nachahmerprogrammen, die dem Autor keine Gutschrift geben, redigiert.
Adam Houldsworth
1
Wenn Sie Paint.NET bei geöffnetem Visual Studio installieren / aktualisieren, kann Visual Studio beschädigt werden. Also würde ich sagen, dass ihr Installer noch etwas Arbeit braucht.
Greg
37

Kehren wir zu dem Grund zurück, warum Sie ursprünglich von nativem Code zu .NET-Code wechseln wollten: Für Sie als Programmierer ist dies effizienter. Viele Dinge sind in .NET einfacher als in C ++ (oder einer anderen verwendeten Muttersprache), sodass Sie Ihre Anwendungen viel schneller entwickeln können.

Wie ist dann die Zeit, die Sie mit der Entwicklung der Anwendung verbringen, mit der Zeit, die Sie mit der Entwicklung des Installationsprogramms verbringen? Selbst wenn Sie ein paar Wochen damit verbringen müssen, das Installationsprogramm (insbesondere den Framework-Setup-Teil) festzunageln, sollte dies mehr oder weniger das einzige Mal sein, dass Sie dies durchlaufen müssen.

Für alle zukünftigen Anwendungen würden Sie ein nahezu identisches Installationsprogramm verwenden. Sie würden weiterhin alle erforderlichen Überprüfungen durchführen, aber anstatt Dateien nach C: \ Foo zu kopieren, kopieren Sie einige andere Dateien nach C: \ bar.

Meiner Meinung nach ist dies eine einfache Frage der Wirtschaft. Ja, die Entwicklung eines (guten / vollständigen) Installationsprogramms für eine .NET-Anwendung ist teurer, aber wenn dies der Schritt ist, den Sie einmal ausführen müssen, um Ihre Entwicklungszeit drastisch zu verbessern, ist dies ein Kinderspiel. Ihre Kapitalrendite würde wahrscheinlich in der Größenordnung von Wochen liegen.

Mark Rushakoff
quelle
1
+1 Eine gute Installationserfahrung in .NET ist schwer zu fassen, sollte aber, wie Sie sagen, nur einmalig sein. Der Vorteil, die meisten Dinge zu haben, die Sie jemals brauchen werden, ist ein System.Something.Class away ist fast unbezahlbar und ein oder zwei vom Installateur verursachte Kopfschmerzen wert.
Adam Houldsworth
2
Ich freue mich sehr auf die Veröffentlichung von Wix Burn , dem damals ersten Bootstrapper, der tatsächlich funktioniert (hoffe ich). DotNetInstaller zusammen mit NSIS ist das, was ich derzeit verwende. Das UAC-Handling ist jedoch noch lange nicht perfekt.
Uwe Keim
1
@Uwe Es scheint, dass Wix Burn ungefähr zur gleichen Zeit wie Duke Nukem Forever veröffentlicht wird .
dbkk
Das wäre toll. Ich habe bereits Vorschau-Screenshots von Duke Nukem Forever gesehen . Also sollte es bald da sein ;-)
Uwe Keim
17

Ich glaube, ich muss auf diese Aussage antworten:

Ja, einige der .NET-Befürworter werden behaupten, dass alles auf einem gepatchten und aktualisierten Betriebssystem installiert sein sollte. Dies ist wahr, aber nicht alle Kunden haben dies, und wenn Sie einfach "Es tut mir leid, zuerst aktualisieren" sagen, wird dies nicht gekürzt. Denken Sie daran, wir sind stolz auf die allgemeine Benutzererfahrung.

Wenn Ihr Benutzer darauf besteht, sich selbst in den Fuß zu schießen, indem er ein System betreibt, von dem der Anbieter informiert hat, dass es nicht mehr für den Zweck geeignet ist , können Sie nicht viel tun, um ihm zu helfen. Ich bin mir bewusst, dass ich dadurch wie ein widerlicher Aktivist aussehe, aber ich sehe es genauso wie ein Handwerker - es ist Sache des Kunden, sicherzustellen, dass die Umgebung, in der ich arbeiten soll, vorhanden ist solide und für das Produkt geeignet. Wenn dies nicht der Fall ist, werde ich eine weitere Vergütung akzeptieren, um diesen Job ebenfalls zu erledigen, aber es könnte ihnen dennoch zusätzliche Arbeit verursachen, da sie nicht die Voraussicht hatten, sicherzustellen, dass sie verstanden haben, was sie gekauft haben.

Ich glaube, dass Software-Kunden lange genug ignorant bleiben durften und dass sie nun verstehen müssen, was sie kaufen. Der Betrieb einer Unternehmens-IT-Umgebung, die nicht ordnungsgemäß gepatcht ist, entspricht dem Betrieb eines Fahrzeugs, für das ein Hersteller zurückgerufen wurde. Ein Windows Service Pack entspricht in vielerlei Hinsicht einem Rückruf. Sie sind gesetzlich nicht verpflichtet, sich an einen Rückruf zu wenden, aber dies liegt in Ihrem besten Interesse als Unternehmen und Sie können für Schäden verantwortlich gemacht werden, die durch das Ausweichen vor der Verantwortung verursacht werden.

Tom W.
quelle
2
Ich würde behaupten, dass der Rückruf des Herstellers in Bezug auf eine Analogie etwas übertrieben ist - ich würde sagen, es ist eher so, als würde man ein Auto fahren, das vor Airbags oder ABS liegt - neue Funktionen haben die Qualität verbessert und erhöht die Qualitätsleiste. Altes Zeug wird nicht plötzlich kaputt oder gefährlich, es wird jetzt einfach als unter der Messlatte in den heutigen Standards liegend akzeptiert. Ich bin sicher, das Windows 95-Team würde argumentieren, dass die Messlatte zu der Zeit ziemlich hoch war! :-) Trotzdem stimme ich Ihnen zu, Unwissenheit über den Fortschritt der Qualität ist keine Tugend.
Adam Houldsworth
11
Ich bin zu 100% anderer Meinung. Kunden mussten zu lange zu gut informiert sein. Warum sollte ich wissen müssen, ob ich x86 oder x64 bin? Warum sollte ich wissen müssen, welches Service Pack ich verwende? Lassen Sie mich Ihre Software kaufen und Sie finden heraus, was passieren muss, um sie zum Laufen zu bringen. Consumer-Software bewegt sich unaufhaltsam in Richtung eines iOS / Android / AppStore-Modells, und jeder Entwickler, der von Benutzern verlangt, dass sie etwas anderes als die grundlegendsten Details ihres Geräts wissen, wird zurückbleiben.
Kubi
1
@kubi Die iOS-Analogie geht natürlich davon aus, dass sich die Hardware nicht ändert, da sie vom Hersteller gesteuert wird. PCs sind vollständig konfigurierbar, sodass Kenntnisse oder Kenntnisse über Anforderungen erforderlich sind - oder zumindest das Bewusstsein, dass jemand erforderlich ist, der weiß, was er tut. Ich kenne entweder die Größe meiner Reifen oder gebe mein Auto jemandem, der weiß, ob ich meine Reifen wechseln werde.
Adam Houldsworth
3
@kubi: Ich stimme Ihnen in Bezug auf das Gelegenheitsbenutzermodell zu - der Unterschied besteht darin, dass es keinen Grund für den Benutzer gibt, nicht alle technischen Probleme wie die Plattformversion an i) den Hersteller oder ii) mich als Entwickler delegiert zu haben. Sie sind daher kein Problem. Der Benutzer, der ein Problem darstellt, ist der Unternehmensbenutzer, der nicht unbedingt ein Mitspracherecht bei der Konfiguration hat und der einen kompetenten IT-Anbieter bezahlen sollte, um diese Probleme zu lösen.
Tom W
4
Benutzer interessieren sich nicht für eines unserer Argumente, auch wenn dies vernünftig ist. Sie möchten Ihre Software verwenden ... können jedoch aufgeben, wenn die Installation zu schmerzhaft ist. Es könnte sie weniger interessieren, wer schuld ist - Microsoft, Anbieter oder ihre eigenen.
dbkk
7

Jede Visual C ++ - App hat auch Voraussetzungen / externe Abhängigkeiten: Laufzeit 6.0, 2003, 2005, 2008 oder 2010? kein SP, SP1 oder SP2? x86 oder x64? Welche Version von Windows Installer benötigt 2005 SP2? Und was 2008 SP1? Und so weiter, so weiter.

Das sind also weit hergeholte Argumente! Wie Joels Murren über .NET. Und schau was jetzt ist !

abatishchev
quelle
3
+1 für den Link zu Joels Website
Security Hound
-1 für die Verknüpfung mit der Joels-Website.
Phill
Sie können statisch eine Verknüpfung zur Laufzeit herstellen, sodass Sie diese Abhängigkeiten nicht benötigen.
Tony Edgecombe
1
@ Tony: Statische Verknüpfung in 10s des 21. Jahrhunderts? Absolute Mauvais Tonne ;)
Abatishchev
+1 für den Link zu Joels Website
Shahid M Zubair
3

Ich sehe nicht, wie es wesentlich mehr Voraussetzungen für .net über C ++ Builder gibt. Sie beschweren sich über SQL Server, ignorieren jedoch die Tatsache, dass Sie auch eine Datenbank mit C ++ Builder installieren müssen. Sie beschweren sich über x64 vs x32, aber .NET erfordert keine Änderung. Auf beiden läuft dieselbe Exe (und kompiliert sich für beide Umgebungen optimal). Das Gleiche gilt nicht für C ++ Builder. Möglicherweise benötigen Sie separate Versionen von SQL Server, dies gilt jedoch auch für den C ++ - Builder (es sei denn, Sie installieren nur x32 auf allem).

Ja, es gibt Probleme mit der neuen Installationsversion, aber diese Komponenten sind nicht sehr groß. Und Sie können die Installer wirklich dazu bringen, nur die Aprts herunterzuladen und zu installieren, die erforderlich sind.

C ++ Builder ist wahrscheinlich einfacher für Sie, da Sie bereits Zeit in die Erstellung eines guten Installationsprogramms investiert haben. Sie müssen dasselbe für .NET tun, und dann können Sie anhand realer Probleme auswählen. Und nicht dies.

Der Grund, warum Microsoft sich dafür entscheidet, Dinge so zu tun, wie sie es tun, ist, dass viele Benutzer, insbesondere Unternehmensbenutzer, es nicht schätzen, wenn Dinge automatisch für sie installiert werden (möglicherweise, weil sie eine Anwendung haben, die von einer bestimmten Version einer Bibliothek abhängt). und du kommst mit und löschst es mit einer neuen Version aus, die sie nicht einfach deinstallieren können.

Was Sie als "einfacher machen" für weniger sachkundige Menschen ansehen, macht die Dinge für diejenigen, die wissen, was sie tun, VIEL schwieriger.

Hier ist ein gutes Beispiel. Eine Sache, die ich absolut verachte, ist, wenn ich eine App installiere, die SQL Server benötigt, und eine eigene Instanz von SQL Server installiert, obwohl ich möglicherweise bereits mehrere Instanzen habe, die sie verwenden könnte. Einfach für den Anfänger, ein Schmerz für mich, wenn ich versuche, Ihre App mit meiner einzelnen Instanz zum Laufen zu bringen.

Erik Funkenbusch
quelle
1

Wenn Ihre App unter Mono ausgeführt wird, ist der Versand Ihrer App mit der Mono-Laufzeit möglicherweise weniger schmerzhaft.

FlappySocks
quelle