2010-10-20 13 views
27

Wiem, że to pytanie może być podobne do innych, ale tak naprawdę szukam powodów, dla których twórcy VB6 powinni przejść na C#.Przekonujące starsze aplikacje Programiści VB6, aby przejść do C#

Moja firma niedawno zatwierdziła projekt napisany w języku C#, więc mamy wielu programistów VB.Net, jednak mamy również starszych programistów aplikacji, które są w VB6. Mamy czas na ponowne napisanie tych aplikacji do aplikacji internetowych .Net. Więc bez względu na to, co będą musieli uczyć się nowych rzeczy.

Jeden z deweloperów zapytał dzisiaj "dlaczego powinniśmy przełączyć na C#?"

Odpowiedziałem, że społeczność w dużej mierze zdecydowała, że ​​C# jest sposobem na około 80% przykładów w języku C#. Jestem programistą VB.Net i jestem podekscytowany, aby w końcu wyciąć zęby na C#, jednak jestem tak nowy, że nie jestem pewien, czy mogę odpowiedzieć na pytanie "dlaczego?" pytanie. Moje powody są bardziej, ponieważ chcę się tego nauczyć.

Więc bez zejścia do wersetów VB C# Naprawdę jestem ciekawy, czy są jakieś zasoby, które mogę wysłać tym programistom, by uspokoić ich nerwy.

Czekamy na Twój wkład!

Odpowiedz

24

miarę migracji nad do .NET idzie, lepiej późno niż wcale ! O ile moja rada idzie, twój przebieg może się różnić, to jest warte każdego grosza, za które płacisz!

Osobiście uważam, że dokonujesz właściwego wyboru. Pierwszym instynktem dla programistów VB jest przejście na VB.NET. Brzmi to całkiem rozsądnie, ale moim zdaniem jest to zły wybór. Naprawdę musisz przełamać powody przejścia na dwie kategorie: Dlaczego warto przejść na .NET i dlaczego przełączyć się na C#?

Dlaczego przełącznik do .NET na VB6:

  • Wielowątkowość w VB6 jest technicznie możliwe z punktu widzenia programowania, ale tylko o niemożliwe, jeśli chcesz korzystać z IDE.

  • Nie wierzę, że można utworzyć 64-bitową natywną aplikację w VB6. To bardzo wyklucza.

  • Brak nowych ulepszeń do VB6.

  • OK, jest tak wiele powodów, o których mogę myśleć, prawdopodobnie po prostu tam się zatrzymam.

Dlaczego przełącznik do C# zamiast VB.NET

  • Deweloperzy mogą się zwieść fałszywym poczuciem znajomości VB.NET - traktowanie zasobów jak to miało miejsce w VB6 bez zrozumienia pełne pojęcia. Przykład: często konwertuje się obiekty ustawień VB.NET do Nothing, wierząc, że jest to magiczny sposób na uwolnienie zasobów. Nie jest.

  • To prawda, że ​​większość przykładów znajduje się teraz w języku C#. Co ważniejsze, Jeff Richter's book jest teraz tylko w języku C#. Jeśli chcesz zrozumieć, w jaki sposób .NET naprawdę działa, IMO jego książka jest prawie obowiązkowa.

  • W .NET zobaczysz, że będziesz używać wyrażeń lambda przez cały czas, szczególnie podczas pracy z Linq.IMO VB's verbosity naprawdę staje się barierą do zrozumienia i czytelności tutaj, w sposób, w którym po prostu nie było wcześniej: foo.Select(x => x > 50) jest przez niemal każdym poziomie, znacznie bardziej płynny i czytelny niż foo.Select(Function(x) x > 50). Pogarsza się, gdy wyrażenia stają się bardziej złożone.

  • Niektóre z najgorszych praktyk z VB6 są niemożliwe lub co najmniej znacznie mniej dostępne w języku C# (np. ReDim Preserve i On Error Resume Next).

  • VB jest obarczony pewną składnią, która sprawia, że ​​korzystanie z bibliotek CLR ogólnego zastosowania jest dość kłopotliwe i mylące. Na przykład w języku C# używasz indeksatorów z nawiasami []. W VB używasz parens. To sprawia, że ​​dla użytkownika podprogramu trudno jest określić, czy jest to indeks lub funkcja. Jeśli ktoś próbował użyć twojej biblioteki poza VB, różnica byłaby ważna, ale programista VB może być skłonny do tworzenia podprogramów, które powinny być indeksujące jako funkcje, ponieważ wyglądają podobnie.

  • Nie mam żadnych danych na ten temat, ale jeśli próbujesz wynająć dobry zestaw programistów, najlepsze z nich będą ogólnie mniej skłonne do pracy w sklepie, który pisze VB.NET przez C#. Oni zwykle obawiają się, że ich koledzy kod będzie generować będzie prawdopodobnie gorsze kodu .NET, a bądźmy szczerzy tutaj - istnieje piętno na programistów VB.NET i jakość ich kodu w społeczności. Tam. Powiedziałem to. Niech płomienie zaczynają się ...

Jako przypis, z mojej perspektywy, VB.NET był prawdziwą straconą szansą dla stwardnienia rozsianego. To, co powinno być, to sposób na płynną konwersję starego kodu VB6 do świata .NET - z dynamicznym wywoływaniem i wysokiej jakości interfejsem COM od samego początku. Okazało się, że był bliski zestawu funkcji C# z bardziej złożoną składnią i niewielką kompatybilnością wsteczną. Smutno, naprawdę. Przez długi czas blokowało wiele organizacji z .NET. Potem znowu, może to wymusił „na zimno Turcja” zerwania z przeszłością ...

+1

'ReDim Preserve' ==' Array.Resize'. Więc to możliwe. Nie rozumiem również, dlaczego powinna to być "najgorsza praktyka" (w szczególności biorąc pod uwagę, że VB brakowało dobrego wsparcia dla struktur danych o dynamicznym rozmiarze). Poza tym, ja (jako wielki fan VB.NET) zgadzam się z twoim kontem. –

+0

To prawda, że ​​jest * analogiczna *, ale nie do końca taka sama. Zobacz odpowiedź i komentarze Jona Skeeta: http://stackoverflow.com/questions/327916/redim-preserve-in-c. Oczywiście, ponieważ CLR działa zasadniczo inaczej niż VB, implementacja .NET może nie być tak zła, jak w VB6 z punktu widzenia wydajności. Tak czy siak, zmienię frazowanie. –

+1

Jedną z najważniejszych kwestii dotyczących szkolenia osób pochodzących z wersji vb6 do vb.net jest odlewanie z zmiennym typem a konwertowanie, boksowanie, rozpakowywanie, kultury i formatowanie. Kiedyś korzystali z niejawnych konwersji za dużo, gdy używali VB6. Gorsze wynalazki VB.NET są opcjonalne jawne, a opcja ścisła, ponieważ można je wyłączyć. Starałem się jak najlepiej przeszkolić ludzi, aby nie polegać na niejawnych operacjach i zabijać ich na zawsze, ustawiając opcje Option Explicit i Option Strict na ON. – Larry

6

To nie może odpowiedzieć na pytanie, w rzeczywistości może to nawet sprzeczne swoją odpowiedź i udowodnić znajomego rację, ale tutaj jest dobra lista podobieństw (i różnic) między VB.NET i C#:

C#/VB.NET comparison

Gdy przejdziesz do tej listy, zauważysz, jak bardzo podobne są te dwa języki iz każdą nową wersją, może istnieć coraz mniejszy powód do zmiany. Ale w końcu, jeśli robią przełącznik, artykuł Wikipedia dość dużo podsumowuje zalety, że C# posiada ponad VB.NET całkiem dobrze:

Wikipedia article listing advantages of C# over VB and vice versa

+0

VB .NET to nie VB 6. – Joren

+1

Nigdy nie twierdziłem, że to było. Próbuję zwrócić uwagę, że twórcy VB6 mogą przejść na VB.NET ... –

+0

Wystarczająco uczciwe, źle mnie zrozumiałem. – Joren

22

mam zrobić wiele w VB6 przeszłość i dużo C/C++, a kiedy nastąpiła nasza wielka migracja .NET, nie miałem wątpliwości, że C# jest właściwą drogą. Powiedziawszy to, uczniowie VB6 powinni się naprawdę nauczyć .NET i CLR (właściwe środowisko wykonawcze zorientowane obiektowo, a nie głupi front COM), a nie składnia. Skoncentruj się na tym i obejdź wojnę religijną.

+1

Nie jestem pewien, w jaki sposób komentarze typu "front-end głupi COM" nie są strzały w wojnie religijnej, ale .Net nie jest jedyną odpowiedzią. Macie natywne C++ lub Delphi, Javę i wiele innych alternatyw poza tymi oferowanymi dla ekosystemu .Net. Nawet tam masz wiele możliwych wyborów językowych, chociaż jest całkiem jasne, że C# jest po pierwsze wśród języków "pierwszej klasy obywateli". – Bob77

+0

Zgadzam się z Twoim komentarzem. Większy skok dla programistów VB6 będzie uczeniem się szkieletu zamiast uczenia się nowej składni. – webdad3

3

Największa przewaga C# nad prawidłowym VB6 musi być dziedziczona.

(OK, aby być uczciwym to mój osobisty faworyt, więc jestem całkowicie tendencyjne.)

Inne zalety:

  • formalne Akcesory
  • rodzaje wyjątków (nie sądzę VB6 ma typy wyjątków, ale proszę mnie poprawić, jeśli się mylę)
  • Generics
  • Lambda wyrażeń

A poniższe są bardziej związane z.NET niż samych językach:

  • Bardzo bogata biblioteka
  • wizualna refaktoring Studio i inne gadżety

Wreszcie popularność argumentem jest zawsze icky (popularny <> dobre), ale to nie otrzymując wyobrażenie o wielkości społeczności każdego z nich, a zatem jaka pomoc jest dostępna tam i co ogólnie dzieje się w branży.

pytania na SO:

+0

Pytanie brzmi "VB.Net lub C#", a nie "VB6 lub VB.Net" –

+1

Myślę, że są już sprzedawane na przełączniku z VB6 do .NET, pytanie, czy przejść C# lub VB.NET. [Myślę, że downwote jest nieco trudny, ponieważ twoje punkty są naprawdę dobre, jeśli chodzi o powody, dla których warto rzucić VB6] – lesscode

+0

Aby odzwierciedlić @Michael Goldshteyn, nigdy nie twierdziłem, że to było. – MPelletier

3

myślę, że inne odpowiedzi zrobili dobrą robotę obejmujące punkty techniczne. Chciałbym również zwrócić uwagę na swoich programistów VB6, że istnieją nie tylko więcej książek zmierzające do C# i inne pytania na temat tak dalej C#, ale co ważniejsze, im więcej ofert pracy, jak również.

Szybkie wyszukiwanie w SO pracy:

  • 92 ofert pracy dla C#
  • 11 ofert pracy dla VB.NET
  • 1 praca Wiadomość dla VB6
+5

0 ofert pracy dla Cobol. Co według Ciebie najbardziej się opłaca? – GvS

+2

@GvS: Ah tak, ale co najprawdopodobniej spowoduje strzelanie w miejscu pracy? To jest niebezpieczeństwo! –

+0

@GvS: 1G/rok razy 0 zleceń = 0 – MPelletier

4

VB.net Składnia zdarzeń wydaje się dużo przyjemniejsza niż C#; choć brak jakichkolwiek środków dla klasy albo wypisać wszystkie WithEvents koparki, do którego przyłącza się lub zabić wszystkie subskrypcje inne przedmioty do swoich wydarzeń sprawia, że ​​trochę trudne do uniknięcia wycieków zdarzeń, to nie gorzej niż C# w tym względzie .

Również w VB.NET, że to możliwe, aby mieć Wreszcie obsługi wiedzieć co wyjątek (jeśli w ogóle) w bloku try bez konieczności faktycznie go złapać. Jeśli w bloku W końcu wystąpią wyjątki, oryginalny wyjątek może zostać włączony do wyjątku CleanupFailedException (wraz z innymi wyjątkami, które wystąpiły w bloku W końcu). To wydaje się miłą zaletą.

3

powodów VB6 programiści powinni przestawić się na C#

podsłuchu dały powody techniczne dla C# ponad VB.NET, ale myślę, że masz do czynienia z ludzi problem, więc będę oferują to, co myślę, że jest to najbardziej istotny powód dlaczego deweloperzy powinien go wolą:

  • C# deweloperów zarabiać więcej niż VB .NET deweloperzy, aby robić dokładnie taką samą myślenia, po prostu wpisując inny kod źródłowy po zrobieniu, że myślenie

Również

  • ReSharper dla C# jest lepsza niż ReSharper dla VB.NET
+0

Nie potrzebujesz programu ReSharper tak bardzo w VB.NET, ponieważ IDE już to robi. Mimo to używanie programu ReSharper poprawia jakość kodu VB.NET, który piszę. – CoderDennis

2

Inne niż przewagi technicznej/społeczna jest bardziej zorientowane na biznes, Mainstream wsparcie dla VB6 już zakończony i rozszerzone wsparcie, które jest na pewno droższe wkrótce się skończy. Przejście na nową platformę w tym przypadku ma większy sens biznesowy. Również IDE nie jest już wspierany przez microsoft, więc w przypadku problemu będziesz SOL, a instalacja go na nowym, lśniącym laptopie może zapewnić niezapomniane wrażenia.

Należy pamiętać, że nie muszą one przesyłać każdej aplikacji, a jedynie zastępować część wymagającą wymiany za pomocą odsłoniętych złożeń .Net.

Z drugiej strony posiadanie doświadczenia w przenoszeniu oprogramowania z przestarzałej platformy na nową sprawi, że ci goście będą bogaci, pod warunkiem, że będą chcieli uczyć się nowej platformy.

1

VB6 nie jest w pełni zorientowany obiektowo i nie ma przyzwoitego zestawu kolekcji/struktur. VB.Net i C# są w pełni zorientowane obiektowo i zawierają przyzwoity zestaw klas kolekcji jako część .NET. .NET 2 dodał również generyczne dla jeszcze większej elastyczności.

Zgodziłbym się z tymi, którzy sądzą, że VB.Net jest nieco zbędny - naprawił problemy z VB6 i zakończył jako "ja też" obok C#. Powiedziawszy to, robię dużo interop COM i znajduję staromodną konstrukcję ON BŁĘDU VB.Net, wygodną metodę obsługi timeoutów i ponownych prób działania. Możesz to zrobić za pomocą try ... catch, po prostu jest bardziej skomplikowany.

4

"Deweloperzy mogą zostać uśpieni fałszywym poczuciem znajomości VB.NET - traktując zasoby tak, jak robili to w VB6 bez zrozumienia pełnych pojęć." (@Markle)

Nie użyłem tego do dyskusji, ale jest to bardzo dobry punkt. Kiedy wziąłem aplikację VB.NET napisaną przez grupę programistów VB.nm, była ona zaśmiecona starszymi połączeniami kompatybilności ze starym obszarem nazw VisualBasic. CStr(), VbNewLine, Mid(), etc ... Praca w języku, który nie jest przeznaczony do wspierania konwersji starszego kodu, uniemożliwia korzystanie z tych relikwii. (Podobnie jak usunięcie odniesienia do przestarzałego obszaru nazw, FYI.)

Przełączam się między VB.NET i C# dość regularnie. Ilekroć przechodzę z VB do C#, myślę "To jest inne, zajmie mi to kilka minut, aby dostosować." Ilekroć przechodzę z C# do VB, myślę "To jest nieefektywny język programowania, jest zbyt dużo pisania na klawiaturze, jak denerwujące".

0

pytania na SO:

[C#]: 116,337 
[VB.NET]: 11,740 
[VB6]: 1,897 

To niczego nie dowodzi. VB6 istniała na długo przed SO. Wszyscy dobrzy programiści VB dowiedzieli się, co powinni wiedzieć, a MSFT zlikwidował VB6.Większość nowych początkujących MSFT tłumaczyła C# z powodu ich irracjonalnej nienawiści do czegokolwiek BASICa (który wciąż wychodzi - wystarczy spojrzeć na Xojo) i oczywiście marketingu MSFT. Ale jak się czują teraz, gdy C# uzyskuje krótką zmianę w porównaniu do C++ na platformie Windows 8? (np. XNA zniknął). Rynek prawie żąda C# ponad VB.net.

Powiązane problemy