Meine Firma ist eine kleine 20-köpfige Ingenieurbüro. Die gesamte Anwendungsprogrammierung hier wird in VB6 von zwei Personen durchgeführt, die sich während ihrer Arbeit in den letzten mehr als 25 Jahren VB6 vor dem Hintergrund der Montage beigebracht haben, und von mir.
Infolgedessen ist der VB6-Code mit schrecklichen Codegerüchen übersät , wie Tonnen von streng typisierten Variablen, furchtbar langen Funktionen, Hunderten von öffentlichen globalen Variablen (von denen einige der Weitergabe von Argumenten und der Rückgabe von Werten vorgezogen werden) und keinem einzelnen Objekt Klasse. Refactoring ist nahezu unmöglich, und Änderungen erfordern zu viel Durchsuchen des Codes und scheinen, sobald sie vorgenommen wurden, immer mehr Löcher einzuführen.
Mein Chef erkennt, dass VB6 eine tote Technologie ist, und ist bereit, auf meine Bitten zu hören, für eine neue Entwicklung zu .NET zu wechseln. Wir gehen weiter zu .NET, aber er sieht darin eine Möglichkeit, die Kompatibilität mit den neueren Windows-Betriebssystemen aufrechtzuerhalten, und nicht darin, besseren Code zu schreiben.
Wie kann ich die Vorteile der .NET-Sprache gegenüber VB6 über die reine Aktualität hinaus am besten erklären? Was kann ich sagen, um am besten zu betonen, dass die Umstellung auf .NET ein guter Schritt ist, aber auch bedeutet, dass sich auch unser aktuelles Programmierparadigma ändern sollte? Sobald mein Chef hört, dass Visual Basic .NET genauso aussieht wie VB6, weiß ich, dass sein erster Instinkt darin besteht, unser altes Code-Chaos einfach in .NET zu konvertieren.
Ich verstehe, dass es unmöglich sein wird, die Einstellung eines Menschen an einem einzigen Nachmittag zu ändern, aber wie kann ich zumindest meinen Chef davon überzeugen, dass Dinge wie stark typisierte Variablen, benutzerdefinierte Klassen und private Felder keine reine Zeitverschwendung sind? und Energie?
quelle
Antworten:
Kurze Antwort: Sie können nichts tun, um ihre Meinung anhand der Kriterien zu ändern, die Sie in der Frage aufgeführt haben und die alle technisch sind . Dies ist das Äquivalent einer religiösen Debatte. Der schnellste Weg zum Scheitern besteht darin, ein Argument vorzulegen, das nicht aus Sicht des Publikums, in diesem Fall der Geschäftsinhaber , stammt.
Längere Antwort: Veränderungen im Geschäft werden von einer Sache und nur einer Sache angetrieben. Profitieren Sie vom Endergebnis.
Sie können nicht nur Zeit- und Energieverschwendung sein, sondern vor allem Geld kosten ! Sie müssen quantitativ nachweisen können, dass Ihre Vorschläge im Laufe der Zeit zu einem erheblichen Gewinn führen. Nur zu behaupten, sauberer Code sei "besser" , reicht nicht aus, da die Produktion von sauberem Code viel mehr kostet.
Wenn Sie artikulieren können, wie die Kosten für den Einsatz moderner Technologie führen werden
($COST + X) * TIME = $PROFIT
, woX
eine nicht triviale positive Zahl liegt undTIME
relativ kurz ist, können Sie ein überzeugendes Szenario erstellen.Eine andere Möglichkeit zur Berechnung des ROI (Return on Investment)
Wenn dieser ROI / ROR eine triviale Zahl ist, insbesondere über einen langen Zeitraum, haben Sie auch keinen großen Geschäftsfall.
Wie verdient Ihr Unternehmen tatsächlich sein Geld?
Für einen guten Geschäftsmann ist es schwer, das auf dem Tisch liegende Geld zu ignorieren.
Natürlich müssen Sie in der Lage sein, Ihre Aussagen mit harten Fakten zu untermauern. Dies bedeutet, dass Sie in der Lage sein müssen, reelle Zahlen anzugeben, die zeigen, dass Sie das eigentliche Geschäft wirklich verstehen und nicht nur akademische technische Details.
Nicht nur die Profis
$COST
Wenn Sie auch eine detaillierte Risikoanalyse durchführen und wissen, was diese Risiken bedeuten würden, wenn sie eintreten würden, können Sie sie davon überzeugen, dass Sie einen realistischen Fall haben und nicht nur jammern, dass Sie VB6 nicht mehr ausführen möchten.Alten Hunden neue Tricks beibringen
Das Ändern oder Nicht-Ändern des Programmierparadigmas, um die neue Technologie so idiomatisch wie möglich zu gestalten, ist Teil der Risikoanalyse. Dies ist jedoch erst dann ein separates Argument, wenn Sie bewiesen haben, dass durch eine Änderung in erster Linie erhebliches Geld verdient werden kann.
Geschäftsleute neigen dazu, Geschäftsfälle anzuhören, genau wie Techniker dazu neigen, technische Fälle anzuhören. Alle Ihre Fälle in Ihrer Frage setzen sich für technische Verdienste ein, die in Ihrer Situation bestenfalls akademisch sind.
Prognose
Ich mache hier ein paar Annahmen. VB6-App, kleiner Shop, wenige Entwickler, 2 ältere Entwickler / Geschäftsinhaber verweisen auf eine Nischenmarkt-App, die wahrscheinlich ausgereift ist (Fehler und Workarounds sind bekannt), ziemlich vollständig und relativ stabil, unabhängig davon des "Chaos" ist die Codebasis. Dies lässt mich glauben, dass die kleine Benutzerbasis auch nicht von Jahr zu Jahr dramatisch wächst, was mich zu der folgenden Schlussfolgerung führt.
Dass es wirklich keinen zwingenden geschäftlichen Grund gibt, die technische Richtung mit dieser Anwendung zu ändern. Die Portierung auf VB.Net ist ebenfalls Zeitverschwendung, da Sie nur das Durcheinander haben, aber jetzt mehr davon haben und 2/3 des Entwicklungsteams sich nicht dem Erlernen neuer Funktionen widmen. Viel Glück.
quelle
Ich habe einen Kunden, dessen Flaggschiff-Produkt in VB6 geschrieben und von 3 Personen gewartet wird. Ich bin gekommen, um ihnen zu helfen, weil sie einen Partner hatten, der wollte, dass sie einen Webdienst anrufen. Das ist sehr schwer mit VB6 zu tun, aber einfach mit VB.NET oder C #, und ich habe ihnen eine .NET-Assembly geschrieben, die für VB6 wie eine COM-Komponente aussah, damit sie sie aufrufen konnten. Dann mussten sie jemandem einen Webdienst anbieten. Dann wollten sie ein kleines eigenständiges Dienstprogramm schreiben, das einige Informationen verschlüsseln und entschlüsseln sowie XML analysieren musste. Ich habe ihnen beigebracht, das in .NET zu schreiben. In den letzten 5 Jahren befindet sich immer mehr Code in .NET, obwohl das Flaggschiff-Produkt überhaupt nicht geschrumpft ist. Es gibt Teile davon, die sie hassen - jede App hat sie - und wo sie können, ziehen sie diese Teile heraus (jetzt beginnt das Schrumpfen) und stellen sie in Dienste oder separate Dienstprogramme. Der Rest wird Holus-Bolus in .NET konvertiert. Ja, schlechte Variablennamen und alles - meiner Meinung nach bietet die Umstellung auf .NET viele Vorteile, auch wenn sie ihr aktuelles Programmierparadigma nicht ändern. Diese beinhalten:
Es gibt noch mehr, aber das reicht doch?
Die Frage der Programmierparadigmen, der starken Typisierung, des Compilers ist Ihr Freund, die Kapselung ist Ihr Freund und so weiter ist für mich (und ich werde dafür bezahlt, dass ich diese Meinungen habe) völlig getrennt. Wenn du auf diesem Hügel sterben willst, mach weiter, aber du wirst mit einer offenen Kopie von VB6 sterben.
quelle
Ich habe vor einigen Jahren mit einem VB6-Projekt begonnen (benutzerdefiniertes ERP-System des Unternehmens) und es langsam auf .NET migriert. Es ist irgendwo halb fertig.
Zuallererst ist die Konvertierung von VB6 zu VB.Net fast immer eine schlechte Idee (und ich habe viel darüber recherchiert). Es ist einfach zu viel anders. Wenn Ihr Chef der Meinung ist, dass VB.Net "genau wie VB6" ist, irrt er sich völlig und Sie müssen seine Einstellung schnell ändern.
Meine Strategie bestand darin, die beiden Codebasen getrennt zu halten und getrennt zu verwalten und dann langsam ganze Module von VB6 nach .NET zu verschieben, jedoch nur dann, wenn eine wesentliche Änderung an diesem Modul bevorstand, sodass wir einen Teil der Kosten amortisieren konnten. Trotzdem ist das Umschreiben eine große, teure und riskante Aufgabe.
Es gibt zwei Möglichkeiten, vorhandenes VB6 in neuen .NET-Code zu integrieren (und das werden Sie wahrscheinlich noch sehr lange tun, also sollten Sie sich besser an die Idee gewöhnen). Der erste Weg, dies zu tun, bestand darin, kleine Module in .NET zu schreiben und dann die Hauptanwendung von VB6 die ausführbare .NET-Datei starten zu lassen, indem einige Befehlszeilenparameter übergeben wurden. Dies hat funktioniert, aber seien Sie gewarnt, dass .NET eine Startzeit von 4 bis 10 Sekunden hat, sodass Sie nur begrenzt in der Lage sind, dies zu tun.
Sobald es wirklich schmerzhaft wurde, drehte ich die Strategie um und verwendete die Methode aus diesem CodeProject-Artikel , um die vorhandenen VB6-Formulare in meiner .NET-Hauptanwendung anzuzeigen. Nachdem ich diesen Weg eingeschlagen hatte, konnte ich nur einen Treffer für die .NET-Startzeit verzeichnen und ClickOnce für die Bereitstellung verwenden. Dies war ein Glücksfall im Vergleich zur vorherigen Bereitstellung der VB6-App.
Das heißt, hier sind die Vorteile, die ich in .NET gegenüber VB6 finde:
Action
undFunc
TypenDecimal
Typ (VB6 hatte nie einen erstklassigen Dezimaltyp, obwohl es CDec hat)Guid
Nachteile von VB6:
Um fair zu sein, hier sind einige Nachteile der Wartung einer kombinierten VB6 / .NET-Lösung:
Nun, wie Sie angedeutet haben, sollten Sie Ihre Architektur wirklich von Grund auf neu erstellen, wenn Sie anfangen, Code in .NET zu schreiben. Es hört sich jedoch so an, als ob keiner der Mitarbeiter in Ihrem Unternehmen mit der .NET- und / oder Java-Programmierwelt vertraut ist. Daher stammen viele der Muster und Praktiken, die für Frameworks großer Unternehmen üblich sind.
Wenn Sie jemanden nehmen, der es gewohnt ist, eine Schaltfläche in ein Formular zu ziehen, darauf zu doppelklicken und einige SQL-Zeichenfolgen direkt in den Click-Event-Handler zu schreiben, und das hat für ihn funktioniert, ist es wirklich schwierig , ihm einen Vorteil gegenüber dem Folgen von SOLID zu verschaffen Design-Prinzipien. Wenn Sie dagegen in die Kugel beißen und entscheiden, dass der gesamte neue Code zu 90% oder mehr durch automatisierte Komponententests abgedeckt wird, werden Sie schnell feststellen, dass dies nur dann wirklich schwierig ist, wenn Sie die SOLID-Entwurfsprinzipien anwenden.
Sie müssen sich also die Realität der Situation genau ansehen. In meinem Fall war ich der einzige Programmierer, und ich war entschlossen, den gesamten neuen Code einem Unit-Test zu unterziehen, obwohl ich keine Erfahrung damit hatte. Ich kann gar nicht genug betonen, wie sehr sich dies negativ auf das auswirkte, was ich in der ersten Woche, sogar in den ersten Monaten, erreichen konnte. Trotzdem war ich entschlossen, dies zu tun, und ich hatte ein Buy-In vom Management. Die meisten Menschen haben diesen Luxus nicht. Jetzt habe ich viel Code und habe gerade ein umfangreiches Refactoring fast ohne Probleme abgeschlossen.
Realistisch gesehen werden Sie keine Komponententests durchführen, was bedeutet, dass es schwieriger ist, Prinzipien wie die Abhängigkeitsinjektion für Ihre Teamkollegen zu rechtfertigen. Sie müssen .NET nicht nur in architektonischer Hinsicht verkaufen . Sie müssen sich auf eine bessere Bibliotheksunterstützung und bessere Tools konzentrieren. Das ist das einzige, was mitschwingen wird. Ich würde in Ihrer Demo Folgendes vorschlagen:
DataGridView
im Hauptfenster abAction
als Parameter verwendet. Tun Sie dies zuerst, indem Sie eine andere Methode als Parameter übergeben, und lassen Sie sich dann überraschen, indem Sie einen anonymen Delegaten mit Lambda-Syntax übergebenList<T>
undDictionary<T1,T2>
Collection und zeigen Sie, wie stark typisierter Code erstellt wird (VB6 enthält ähnliche Funktionen, ist jedoch dynamisch typisiert).foreach
peinlich parallele Schleife,System.Diagnostics.Stopwatch
messen Sie die Ausführungszeit und verwenden Sie dann die Task-Parallelbibliothek, um die Schleife in eineParallel.Foreach
Schleife umzuwandeln und die Beschleunigung zu demonstrieren, vorausgesetzt, Sie befinden sich auf einem Multi-Core-Computer.Das würde ich tun.
quelle
Es scheint mir, dass dies eine Situation ist, in der Sie Ihren Politikerhut aufsetzen müssen, anstatt einen zu programmieren. Sie müssen sehr darauf achten, wie Sie argumentieren und dass Sie Ihr Publikum nicht verärgern. Stellen Sie sicher, dass Sie die Vorteile von .Net zeigen, anstatt die Nachteile von VB zu zeigen. Wenn Sie die Nachteile von VB argumentieren, werden Ihre Mitarbeiter in die Lage versetzt, ihre Entscheidungen zu verteidigen und sie zu zwingen, zuzugeben, dass eine Sprache, in die sie viel investieren, eine schlechte Sprache ist. Zeigen Sie ihnen stattdessen, wie die Umstellung auf .NET die ihnen zur Verfügung stehenden Tools erweitert und ihnen das Leben erleichtert.
Mein idealer Weg, um dieses Argument vorzubringen, wäre, eine Aufgabe oder einen Code zu finden, über den sich jeder ständig beschwert, und ihn mit .NET zu beheben. Ich bin mit VB nicht besonders vertraut, aber hier ist eine kurze Liste lästiger Aufgaben, die wahrscheinlich durch die Verwendung von .NET anstelle von VB erleichtert würden.
Wählen Sie eine der oben genannten Aufgaben oder eine andere Aufgabe aus, die für die Projekte spezifisch ist, an denen Sie normalerweise arbeiten, und setzen Sie sich mit ihnen zusammen und schreiben Sie von Grund auf Code, der das Problem schnell und einfach löst. Das tatsächliche Anzeigen des Prozesses zum Schreiben des Codes zeigt die Tools, die neuere Versionen von VS auf den Tisch bringen, und liefert den Beweis, dass die Umstellung auf .NET das Leben von niemandem erschwert.
Wenn Sie darauf eingehen, müssen Sie unbedingt Ihre Hausaufgaben machen. Wenn Sie sich nicht sicher sind, wie Tools funktionieren, oder wenn der Code nicht richtig funktioniert, können Sie sie niemals für sich gewinnen.
quelle
Als erstes sagen Sie, dass VB6 von Microsoft nicht mehr unterstützt wird. Während Sie es am Laufen halten können, müssen Sie verstehen, dass seine Optionen auf lange Sicht gleich Null sind. Ich weiß nicht einmal, ob VB6-Apps unter Windows8 ausgeführt werden oder ob die IDE selbst unter Win8 ausgeführt wird.
Sie müssen also irgendwann effektiv umschreiben, und wenn dies der Fall ist, können Sie genauso gut jetzt und nicht später beginnen, um genügend Zeit zu haben, um herauszufinden, welche neue Technologie Sie verwenden möchten (während VB.NET ideal klingt). Dies ist Ihre Gelegenheit, etwas Neues auszuprobieren, z. B. die App auf iPads zum Laufen zu bringen.
Kurzfristig können Sie das Problem ein wenig abmildern, indem Sie neue Abschnitte als COM-Komponenten für die vorhandene App einführen. Hoffentlich bleiben diese Komponenten erhalten, wenn das unvermeidliche Umschreiben erfolgt.
Ich würde mich nicht mit technischen Argumenten darüber beschäftigen, warum .NET besser als VB6 ist. Sie werden dort auf ein verlorenes Argument stoßen, Technologie an sich löst niemals Probleme. Es liegt an Ihnen, wie Sie diese Technologie anwenden, und wenn die VB6-App Probleme für Sie löst, gibt es kein Argument, das Sie beantworten können. Sie können über die einfache Wartung oder die Verfügbarkeit erfahrener Mitarbeiter sprechen. Wenn Sie dies jedoch tun, geben Sie zu, dass Ihre vorhandenen Mitarbeiter keine Fachkenntnisse in der neuen Technologie haben und geschult werden müssen, und nehmen sich dann einige Zeit, um sich vollständig auf den neuesten Stand zu bringen damit. Sie müssen auch die Fragen beantworten, wie viele Umschreibungen schlechter ausfallen als das ursprüngliche Projekt (manchmal aufgrund mangelnden Fachwissens, manchmal aufgrund zu großartiger Designs).
quelle
Geben Sie ihm die Analogie "altes Auto neu gegen Auto":
quelle
Zunächst einmal denke ich, dass Sie die Frage ändern sollten (nicht bei Stackexchange, sondern in Ihrem Unternehmen). Es ist nicht so sehr der Grund, warum .Net besser ist als VB6, sondern eher, da VB6 nicht mehr unterstützt wird , ist es an der Zeit, weiterzumachen, aber wohin. Fragen Sie die Stakeholder, was diese "neue" Technologie sein soll. Vielleicht ist es nicht .Net.
Es hört sich jedoch so an, als müssten Sie auf eine neue Technologie umsteigen UND einige gute Programmiermuster und -praktiken anwenden. Die Antwort auf den zweiten Teil ist viel schwieriger. Sie müssen dies wahrscheinlich in einem kleinen Teil der Anwendung tun und beweisen, dass es sich lohnt, das heißt, es ist stabiler, einfacher zu warten usw.
quelle
Sagen Sie Ihren Vorgesetzten, sie sollen zwei Suchanzeigen schreiben. Eine für C # -Entwickler. Eine für VB6-Experten. Bring sie da raus. Ergebnisse vergleichen.
quelle