Moja firma to mała dwudziestoosobowa firma inżynierska. Całe programowanie aplikacji jest tutaj wykonywane w VB6 przez dwie osoby, które nauczyły się VB6 od czasu montażu, pracując tutaj przez ostatnie 25 lat i ja.
W rezultacie kod VB6 jest pełen przerażających zapachów kodu, takich jak mnóstwo zmiennych o ciągach tekstowych , strasznie długie funkcje, setki publicznych zmiennych globalnych (niektóre z nich są lepsze niż przekazywanie argumentów i zwracanie wartości), a nie pojedynczy obiekt klasa. Refaktoryzacja jest prawie niemożliwa, a wszelkie zmiany wymagają zbyt dużego przekopania się w kodzie, a raz wprowadzone zawsze wydają się wprowadzać więcej dziur.
Mój szef zdaje sobie sprawę, że VB6 to martwa technologia i chętnie wysłucha moich próśb o przejście na platformę .NET w celu opracowania nowych rozwiązań. Przechodzimy do .NET, ale uważa, że jest to sposób na zachowanie zgodności z nowszymi systemami operacyjnymi Windows, a nie sposób na pisanie lepszego kodu.
Jak najlepiej wyjaśnić zalety języka .NET w porównaniu z VB6, poza zwykłą aktualnością? Co mogę powiedzieć, aby najlepiej podkreślić, że przejście na platformę .NET to dobry krok, ale także , że oznacza to, że nasz obecny paradygmat programowania również powinien zacząć się zmieniać? Gdy tylko mój szef usłyszy, że Visual Basic .NET wygląda jak VB6, wiem, że jego pierwszym instynktem będzie po prostu konwersja naszego starego bałaganu w kodzie do .NET.
Rozumiem, że nie da się zmienić sposobu myślenia nikogo w ciągu jednego popołudnia, ale jak mogę przynajmniej przekonać mojego szefa montażu, że takie rzeczy jak zmienne o silnym typie, niestandardowe klasy i pola prywatne nie są całkowitą stratą czasu i energia?
źródło
Odpowiedzi:
Krótka odpowiedź: Nic nie możesz zrobić, aby zmienić zdanie w oparciu o kryteria wymienione w pytaniu, które są wszystkie techniczne . Jest to odpowiednik debaty religijnej . Najszybsza droga do porażki jest przedstawienie argumentów, które nie jest z punktu widzenia publiczności, w tym przypadku biznesowych właścicieli.
Dłuższa odpowiedź: zmiana w biznesie wynika z jednej i tylko jednej rzeczy. Zysk do dolnej linii.
Mogą być nie tylko stratą czasu i energii, ale co ważniejsze, kosztują Cię pieniądze ! Musisz być w stanie wykazać ilościowo, że Twoje sugestie z czasem przyniosą znaczny zysk. Samo twierdzenie, że czysty kod jest „lepszy”, nie wystarczy, ponieważ czysty kod kosztuje znacznie więcej.
Jeśli potrafisz wyartykułować, w jaki sposób doprowadzą do tego koszty korzystania z nowoczesnej technologii
($COST + X) * TIME = $PROFIT
, gdzie liczbaX
nietrywialna jest dodatnia iTIME
stosunkowo krótka, możesz stworzyć przekonujący scenariusz.Kolejny sposób obliczenia ROI (zwrot z inwestycji)
Jeśli ten ROI / ROR jest trywialną liczbą, szczególnie przez długi okres czasu, nie masz zbyt wiele uzasadnienia biznesowego.
Jak Twoja firma faktycznie zarabia pieniądze?
Dobry biznesmen nie może zignorować pieniędzy leżących na stole.
Oczywiście musisz być w stanie poprzeć swoje oświadczenia twardymi faktami. Oznacza to, że musisz być w stanie podać rzeczywiste liczby, które pokazują, że naprawdę rozumiesz rzeczywistą działalność, a nie tylko akademickie szczegóły techniczne.
Nie tylko profesjonaliści
Dostarczenie szczegółowej analizy ryzyka i tego, jakie byłyby te ryzyka,
$COST
gdyby do nich doszło, poskutkowałyby przekonaniem ich, że masz realistyczny przypadek i nie tylko marudzisz, że nie chcesz już robić VB6.Nauczanie starych psów nowych sztuczek
Zmiana lub brak Zmiana paradygmatu programowania na możliwie idiomatyczny w stosunku do nowej technologii jest częścią analizy ryzyka. Ale to osobny argument dopiero po tym, jak udowodnisz, że można dokonać znacznych pieniędzy, dokonując zmiany w pierwszej kolejności.
Ludzie biznesu zwykle słuchają spraw biznesowych, tak jak ludzie techniczni zwykle słuchają spraw technicznych. Wszystkie twoje pytania w twoim pytaniu dotyczą zalet technicznych, które są w najlepszym wypadku akademickie w twojej sytuacji.
Prognoza
Przyjmuję tutaj kilka założeń, że aplikacja VB6, mały sklep, kilku programistów, 2 starszych deweloperów / właścicieli firm wskazuje na niszową aplikację rynkową, która prawdopodobnie jest dojrzała (znane są błędy i obejścia), dość kompletna i stosunkowo stabilna, niezależnie od tego o „bałaganie” baza kodu jest. To prowadzi mnie do przekonania, że liczba małych użytkowników również nie rośnie dramatycznie z roku na rok, co prowadzi mnie do następującego wniosku.
Że tak naprawdę nie będzie żadnego istotnego interesującego powodu biznesowego do zmiany kierunku technicznego dzięki tej aplikacji. A nawet przenoszenie do VB.Net to strata czasu, a także dlatego po prostu trzeba się bałagan , ale teraz bardziej od niego, a 2/3 z deweloperami nie dedykowany do nauki czegoś nowego. Powodzenia.
źródło
Mam klienta, którego sztandarowy produkt jest napisany w VB6 i obsługiwany przez 3 osoby. Przyszedłem im pomóc, ponieważ mieli partnera, który chciał, aby zadzwonili do serwisu internetowego. Jest to bardzo trudne z VB6, ale łatwe z VB.NET lub C #, i napisałem im zestaw .NET, który wyglądał na VB6 jak komponent COM, aby mogli go nazwać. Następnie musieli zaoferować komuś usługę internetową. Potem chcieli napisać trochę samodzielnego narzędzia i będzie musiał zaszyfrować i odszyfrować niektóre informacje oraz parsować trochę XML. Nauczyłem ich pisać w .NET. W ciągu ostatnich 5 lat coraz więcej ich kodu znajduje się w .NET, chociaż flagowy produkt wcale się nie skurczył. Są to części, których nienawidzą - każda aplikacja je ma - i gdzie mogą, wyciągają te części (teraz zaczyna się kurczenie) i oddają je do usług lub oddzielnych narzędzi. Reszta zostanie przekonwertowana na holus-bolus na .NET. Tak, złe nazwy zmiennych i tak dalej - moim zdaniem przejście na platformę .NET przynosi wiele korzyści, nawet jeśli nie zmieniają obecnego paradygmatu programowania. Obejmują one:
Jest więcej, ale na pewno to wystarczy?
Kwestia programowania paradygmatów, silnego pisania na klawiaturze, kompilator jest twoim przyjacielem, enkapsulacja jest twoim przyjacielem i tak dalej jest moim zdaniem (i dostaję zapłatę za te opinie) całkowicie osobno. Jeśli chcesz zginąć na tym wzgórzu, śmiało, ale umrzesz z otwartą kopią VB6.
źródło
Zacząłem od projektu VB6 kilka lat temu (niestandardowy system ERP firmy) i powoli migrowałem go do .NET. Jest gdzieś w połowie gotowy.
Po pierwsze, konwersja z VB6 do VB.Net jest prawie zawsze złym pomysłem (i przeprowadziłem wiele badań na ten temat). Jest po prostu zbyt wiele różnych. Ponadto, jeśli twój szef uważa, że VB.Net jest „taki jak VB6”, to jest całkowicie w błędzie i musisz szybko zmienić jego spojrzenie.
Moją strategią było oddzielenie dwóch baz kodu i utrzymanie ich osobno, a następnie powolne przenoszenie całych modułów z VB6 na .NET, ale tylko wtedy, gdy nastąpiła znacząca zmiana w tym module, abyśmy mogli amortyzować część kosztów. Mimo to przepisywanie jest dużym kosztownym i ryzykownym zadaniem.
Istnieją dwa sposoby integracji istniejącego VB6 z nowym kodem .NET (prawdopodobnie będziesz to robił przez bardzo długi czas, więc lepiej przyzwyczaj się do tego pomysłu). Pierwszym sposobem, w jaki to zrobiłem, było rozpoczęcie pisania małych modułów w .NET, a następnie uruchomienie przez główną aplikację VB6 pliku wykonywalnego .NET z przekazaniem niektórych parametrów wiersza poleceń. To zadziałało, ale należy pamiętać, że .NET ma czas uruchamiania od 4 do 10 sekund, więc masz ograniczone możliwości tego, co możesz zrobić.
Kiedy zaczęło być naprawdę bolesne, przerzuciłem strategię i użyłem metody z tego artykułu CodeProject, aby wyświetlić istniejące formularze VB6 w mojej głównej aplikacji .NET. Gdy zszedłem tą drogą, byłem w stanie ponieść tylko jeden czas uruchamiania .NET i użyć ClickOnce do wdrożenia, co było darem niebios w porównaniu do tego, jak wcześniej aplikacja VB6 była wdrażana.
To powiedziawszy, oto zalety, które znajduję w .NET w porównaniu z VB6:
Action
iFunc
typyDecimal
type (VB6 nigdy nie miał pierwszej klasy dziesiętnej, mimo że ma CDec)Guid
Wady VB6:
Aby być uczciwym, oto kilka wad utrzymywania połączonego rozwiązania VB6 / .NET:
Teraz, jak już wspomniałeś, naprawdę powinieneś odbudować architekturę od podstaw, jeśli zaczniesz pisać kod w .NET. Wydaje się jednak, że żadna z osób w Twojej firmie nie zna ani świata programowania .NET i / lub Java, skąd bierze się wiele wzorców i praktyk wspólnych dla platform dużych przedsiębiorstw.
Jeśli weźmiesz kogoś, kto przywykł do przeciągania przycisku w formularzu, dwukrotnego klikania na niego i pisania ciągów SQL bezpośrednio w module obsługi zdarzeń kliknięcia, i to działało dla nich, naprawdę trudno jest przekonać ich, aby korzystali z SOLID zasady projektowania. Z drugiej strony, jeśli ugryziesz pocisk i zdecydujesz, że cały nowy kod zostanie objęty 90% lub więcej zautomatyzowanymi testami jednostkowymi, szybko zdasz sobie sprawę, że to naprawdę trudne, chyba że zastosujesz zasady SOLID.
Musisz więc bardzo uważnie przyjrzeć się rzeczywistości. W moim przypadku byłem jedynym programistą i postanowiłem przetestować cały nowy kod jednostkowo, mimo że nie miałem z nim doświadczenia. Nie mogę wystarczająco podkreślić, jak bardzo to wpłynęło na to, co mogłem zrobić w pierwszym tygodniu, nawet w pierwszych miesiącach. Mimo to byłem zdeterminowany, aby to zrobić i miałem wykupienie od kierownictwa. Większość ludzi nie ma tego luksusu. Teraz mam dużo kodu i właśnie zakończyłem poważną refaktoryzację prawie bez problemów.
Realistycznie nie zamierzasz przeprowadzać testów jednostkowych, co oznacza, że trudniej jest uzasadnić takie zasady, jak zastrzyk zależności dla członków zespołu. Będziesz musiał sprzedawać platformę .NET w oparciu o zalety inne niż korzyści architektoniczne. Musisz skupić się na lepszej obsłudze bibliotek i lepszych narzędziach. To jedyna rzecz, która rezonuje. Proponuję następujące w twoim demo:
DataGridView
w oknie głównymAction
jako parametr. Zrób to najpierw, przekazując inną metodę jako parametr, a następnie oszalej, przekazując anonimowego delegata za pomocą składni lambdaList<T>
iDictionary<T1,T2>
kolekcji i pokaż, w jaki sposób tworzy silnie napisany kod (VB6 ma podobne rzeczy, ale jest dynamicznie typowany)foreach
zawstydzająco równoległą pętlę, użyjSystem.Diagnostics.Stopwatch
do pomiaru czasu potrzebnego do wykonania, a następnie użyj biblioteki zadań równoległych, aby zmienić pętlę wParallel.Foreach
pętlę i zademonstrować przyspieszenie, zakładając, że korzystasz z komputera wielordzeniowego.Tak bym zrobił.
źródło
Wydaje mi się, że jest to sytuacja, w której będziesz musiał założyć kapelusz polityczny zamiast programującego. Musisz bardzo uważać na swoje argumenty i nie antagonizować odbiorców. Upewnij się, że pokazujesz zalety .Net, zamiast pokazywać wady VB. Argumentowanie wad VB sprawi, że Twoi współpracownicy będą musieli bronić swoich decyzji i zmuszą ich do przyznania, że język, w który zainwestowali, jest złym językiem. Zamiast tego pokaż im, jak przejście na platformę .NET zwiększy dostępne im narzędzia i ułatwi ich życie.
Moim idealnym sposobem na zrobienie tego argumentu byłoby znalezienie zadania lub fragmentu kodu, na który wszyscy narzekają, i naprawienie go za pomocą .NET. Nie znam się szczególnie na VB, ale oto krótka lista irytujących zadań, które prawdopodobnie mogłyby być łatwiejsze przy użyciu .NET zamiast VB.
Wybierz dowolne z powyższych zadań lub inne zadanie specyficzne dla projektów, nad którymi zwykle pracujesz, i usiądź przy nich i faktycznie napisz kod od zera, który szybko i łatwo poradzi sobie z tym problemem. Właściwie pokazanie procesu pisania kodu pokaże narzędzia, które nowsze wersje VS wnoszą do tabeli i dostarczy dowodów, że przejście na .NET nie utrudni nikomu życia.
Wchodząc w to, absolutnie, pozytywnie musisz odrobić pracę domową. Jeśli pokażesz się niepewnie, jak działają narzędzia lub masz kod, który nie działa poprawnie, nigdy nie będziesz w stanie ich przekonać.
źródło
Pierwszą rzeczą, którą mówisz, jest to, że VB6 nie jest już obsługiwany przez Microsoft. Chociaż możesz utrzymać go w działaniu, musisz zrozumieć, że jego opcje w perspektywie długoterminowej są zerowe. Nie wiem nawet, czy aplikacje VB6 będą działały na Windows8, czy też samo IDE będzie działało na Win8.
Tak więc ostatecznie musisz ostatecznie przepisać, a jeśli tak jest, możesz zacząć od teraz, a nie później, dając mnóstwo czasu na zastanowienie się, jakiej nowej technologii chcesz użyć (podczas gdy VB.NET brzmi idealnie, jest to okazja, aby wypróbować coś bardziej nowatorskiego, na przykład uruchomić aplikację na iPadzie).
W krótkim okresie możesz nieco złagodzić ten problem, wprowadzając nowe sekcje jako komponenty COM dla istniejącej aplikacji do użycia, mam nadzieję, że te komponenty pozostaną, gdy nastąpi nieuniknione przepisywanie.
Nie zawracałbym sobie głowy technicznymi argumentami, dlaczego .NET jest lepszy od VB6. Będziesz tam przegrać, technologia sama w sobie nigdy nie rozwiąże problemów. To, jak zastosujesz tę technologię, zależy od Ciebie, a jeśli aplikacja VB6 rozwiązuje problemy za Ciebie, nie ma argumentów do odpowiedzi. Możesz mówić o łatwości konserwacji lub dostępności doświadczonego personelu, ale kiedy to zrobisz, przyznasz, że twój obecny personel nie ma specjalistycznej wiedzy na temat nowej technologii i będzie musiał zostać przeszkolony, a następnie poświęć trochę czasu, aby w pełni przyspieszyć z tym. Będziesz także musiał odpowiedzieć na pytania o to, jak wiele przeróbek kończy się gorzej niż oryginalny projekt (czasami z powodu braku wiedzy, czasem z powodu zbyt dużych projektów).
źródło
Daj mu analogię „stary samochód nowy vs samochód”:
źródło
Po pierwsze, myślę, że powinieneś zmienić pytanie (nie dotyczy wymiany stosów, ale w twojej firmie). Nie jest tak bardzo, dlaczego .Net jest lepszy od VB6, ale bardziej, ponieważ VB6 nie jest już obsługiwany, nadszedł czas, aby przejść dalej, ale do czego. Zapytaj interesariuszy, czym powinna być ta „nowa” technologia? Może to nie jest .Net.
Ale brzmi to tak, jakbyś musiał przejść na nową technologię ORAZ wdrożyć dobre wzorce i praktyki programowania. Odpowiedź na drugą część jest znacznie trudniejsza. Prawdopodobnie musisz to zrobić w niewielkiej części aplikacji i udowodnić, że warto, to jest bardziej stabilna, łatwiejsza w utrzymaniu itp.
źródło
Powiedz swoim szefom, żeby napisali dwie reklamy. Jeden dla programistów C #. Jeden dla ekspertów VB6. Połóż je tam. Porównaj wyniki.
źródło