Jeśli masz wieloletnie doświadczenie w pracy z Javą i wieloletnie doświadczenie w pracy z C # i .NET, byłbym wdzięczny za twoją opinię na temat różnic w wydajności tworzenia oprogramowania między tymi dwoma środowiskami. Jeden z naszych klientów rozważa wymianę istniejącego oprogramowania. Ponieważ wymiana będzie wymagać ok. 10-15 lat pracy, wybór dla Java lub .NET, oparty na różnicach wydajności między nimi, może znacząco wpłynąć na wymaganą inwestycję i czas wprowadzenia produktu na rynek.
Czy byłbyś w stanie dostarczyć nam informację o różnicach w wydajności oprogramowania między Javą a C # / .NET? Wolałbym otrzymać odpowiedź w następujący sposób:
Moje doświadczenie opiera się na X-letnim doświadczeniu w pracy z Javą i X-letnim doświadczeniu w pracy z C # / .NET. Java jest X% wydajniejsza niż C # .NET lub C # /. NET jest X% bardziej wydajna niż Java, jeśli weźmiesz pod uwagę następujące kwestie.
źródło
Odpowiedzi:
Moje doświadczenie opiera się na 10-letnim doświadczeniu w pracy z Javą i 3-letnim doświadczeniu w pracy z C # / .NET. Java jest o 0% wydajniejsza niż C # .NET. Polega to na pisaniu aplikacji opartych na usługach zaplecza.
C # /. NET jest może o 5% bardziej produktywny niż Java do pisania aplikacji użytkownika. Ale potem nie robiłem tego od prawie 5 lat w Javie, a nowy edytor interfejsu Netbeans mógł zamknąć tę lukę.
Chcesz zwiększyć wydajność? CI (najlepiej dostawa ciągła) i testy automatyczne. Wydajność uzyskana dzięki wyborowi języka / platformy / IDE na dowolnym głównym języku / platformie / IDE jest dość mała.
źródło
Od 5 lat pracuję nad projektami zarówno na studiach, jak i w Real World ™, używając Java i C #.
Bez wątpienia lubię używać C # więcej ze względu na jego zwięzłość i użycie cukru składniowego. Rzadko znajdziesz
Factory.GetFactory(OfFactory.GetFactory(Factory));
kod w C #. Łatwiej jest go czytać i śledzić, ponieważ składnia jest mniejsza i bardziej zwięzła.Z którym będziesz bardziej produktywny? To zależy od rodzaju projektu.
Czy projektujesz aplikację komputerową dla systemu Windows? Zatem C # jest najlepszym wyborem ze względu na potężne IDE Visual Studio, a .NET Framework sprawia, że tworzenie GUI jest bardzo proste.
Szczerze mówiąc, cieszę się, że nie używam już Javy (minął już ponad rok), ponieważ pamiętam, jak okropnie gadatliwy musiał być kod. Szybki przykład to obsługa wyjątków. Jeśli Twój kod może zgłosić wyjątek, musisz uwzględnić każdy możliwy wyjątek. To szybko zmienia trywialny kod w 20-liniowy + potworność.
C # nie jest tak trzymanie ręki, jeśli zdecydujesz się pozostawić swój kod otwarty, który jako programista decydujesz.
W ciągu roku C # wprowadził wiele dodatków, które sprawiają, że korzystanie z niego jest przyjemnością. Lambdas, delegaci, anonimowa funkcja (a la Ruby), wiele dobrych drobiazgów, które znajdziesz w miarę postępów.
źródło
If your code can throw an exception you must account for every single exception possible.
Nie widzę wady tego, przynajmniej to podnosi świadomość problemów ... choć może to tylko ja.Pracowałem intensywnie zarówno z Javą (od 1996 r.), Jak i .Net (od 2002 r.), Aw 2010 r. Podjąłem decyzję o zastosowaniu Java w mojej firmie na podstawie tego, że będzie to najbardziej produktywne środowisko .
Należy pamiętać, że produktywność oprogramowania definiuję w kategoriach wartości biznesowej wytworzonej na jednostkę kosztu / zasobu, na zasadzie kompleksowej (tj. Należy przyjrzeć się wydajności całego cyklu życia oprogramowania, w tym wdrożeniu i konserwacji, a nie tylko wstępne kodowanie !!).
Oto kluczowe elementy mojego rozumowania:
object.getSomeProperty()
vs.object.SomeProperty
czy używają anonimowej klasy wewnętrznej vs. lambda, po prostu nie zrobi istotnej różnicy w przewadze konkurencyjnej Twojej firmy ...Tak więc, chociaż było wiele skomplikowanych rozważań, ogólnie jestem bardzo zadowolony z wyboru Java, i dokonałbym tego samego wyboru dzisiaj (na początku 2012 r.).
Prawdopodobnie jedynym przypadkiem, w którym teraz bym poszedł z .Net, byłbym, gdybym rozwijał aplikację komputerową przeznaczoną tylko dla systemu Windows (gdzie przewaga .Net jest wyraźnie ogromna).
źródło
Mam: Java 10 lat, C # 8 lat
Głosuję na Javę
źródło
Java: 5 lat (nieciągłe)
C #: 7 lat
Nie sądzę, że można w ten sposób oszacować wydajność. To w dużej mierze zależy od indywidualnego dewelopera i projektu. Wykorzystaj to, co wiedzą Twoi programiści.
Edycja:
Zdefiniujmy „typową aplikację korporacyjną” jako:
Zarówno Java, jak i C # mogą to zrobić. To nie tyle kwestia języka, co frameworka / środowiska uruchomieniowego. Ponownie użyj tego, co wiedzą twoi programiści. Mogą nauczyć się nowego języka i nowego frameworka, ale zajmie to trochę czasu. Byłoby to prawdą w przypadku aplikacji komputerowej. Oba języki mogą być używane z wieloma zestawami narzędzi / bibliotekami GUI, ale wszystkie mają różne podejścia i filozofie.
źródło
Mam ponad 10 lat doświadczenia w Javie (od wersji 1.1, naprawdę!) I 7 lat doświadczenia w .NET (głównie C #).
Podejmujesz bardzo przemyślaną decyzję, ale przede wszystkim powinieneś spróbować rozbić się na kilka scenariuszy:
Aplikacja pulpitu
Jeśli tworzysz aplikację komputerową, musisz korzystać z głównej platformy, z którą będziesz pracować. Jeśli jest to platforma Microsoft .NET, nie ma lepszego rozwiązania niż platforma opracowana przez sam statek macierzysty. Jeśli jest to scenariusz dotyczący systemu Linux lub wieloplatformowego, rozważ Java lub przejście na rozwiązanie internetowe.
Aplikacja internetowa
Jest to bardzo trudna decyzja, ponieważ każda z nich ma swoją siłę i słabość. Oto kilka:
DO#
Siła: Obecnie ma większy rozmach, budując nowe funkcje w języku i platformie / frameworku. Wszystko pochodzi od jednego dostawcy i na pewno jest to zaleta. Możesz także użyć niektórych bardzo potężnych komponentów, takich jak na przykład DevExpress (Java nawet się nie zbliża, aby mieć coś takiego, jak zespół DX-a przez lata, co stanowi ogromny wzrost wydajności).
Słabość: w przypadku aplikacji korporacyjnych .NET nie jest tak dojrzały jak Java. Nie masz tylu dostawców budujących oprogramowanie dla przedsiębiorstw w .NET, jak dla Javy.
Jawa
Siła: Bardziej dojrzała (już wyjaśniona) i ma dużą społeczność z kilkoma świetnymi projektami open source, które mogą pomóc. Kilka tzw. Projektów open source .NET to tak naprawdę kopia projektów Java.
Słabość: Oracle jest właścicielem Java (wiem, nie JCP) i jest to z pewnością ryzyko, które należy wziąć pod uwagę. Ich intencje nie są bardzo jasne i osobiście nie podoba mi się, gdzie teraz zmierza język (wiem, że wielu programistów Java ma podobne obawy).
Aplikacja po stronie serwera
Zasadniczo są to te same argumenty co aplikacje internetowe, ale ponieważ nie musisz się zbytnio przejmować interfejsem użytkownika, Java w tym przypadku staje się silniejsza. Ale znowu, jeśli platformą jest głównie Windows .NET może być lepszym wyborem.
Ogólne uwagi
Ogólnie rzecz biorąc, moim zdaniem .NET ma tę przewagę głównie ze względu na ścisłą integrację Visual Studio 2010 (bez najlepszych IDE), MS SQL, Entity Framework, IIS i tak dalej. Wszystko to stanowi ogromny wzrost wydajności i mam na to mnóstwo doświadczenia. Pracuję również z programistami Java, którzy przeszli na platformę .NET i dzielą się w zasadzie tą samą opinią.
Myślę, że to dobrze, że Microsoft jest silniejszy niż kiedykolwiek, co oznacza, że .NET będzie tam przez jakiś czas. Więc patrząc 10-15 lat do przodu, czuję się bezpieczniej z .NET niż Java.
źródło
Jestem niedawno absolwentem uniwersytetu, ale mam doświadczenie handlowe w obu językach, co daje w sumie około 3 lata java i 4 lata C # .Net (uwaga .net oznacza, że możesz używać C #, VB.net, C ++ CLI, oraz J # i F #).
Powiem teraz, że ogólnie preferuję język C # w stosunku do Java, podczas gdy oba mają podobną składnię. Podoba mi się moc frameworku .Net w porównaniu z kompatybilnością Java między różnymi systemami operacyjnymi. Musisz mocno rozważyć, co musisz zbudować? Czy to tylko aplikacja komputerowa? Czy potrzebujesz łączności z innymi klientami, a więc z innymi komputerami stacjonarnymi, telefonami komórkowymi, stronami internetowymi?
** Dyskusja na temat IDE została utracona, ponieważ pytanie w Stackoverflow zostało zamknięte. Ostatecznie, Java ma wiele darmowych IDE, ale moim zdaniem nie porównują one mocy i dodatków studia wizualnego. Pamiętaj jednak, że koszt Visual Studio kosztuje ponad licencję.
Musisz sprawdzić, jakie umiejętności ma już Twój zespół programistów, ponieważ będzie to miało początkowy wpływ. To, co jest szybsze, nie jest tutaj ani tam, gdzie doświadczony użytkownik w dowolnym języku / frameworku. Wydaje mi się, że nie można brać pod uwagę języka, ponieważ jest to tylko składnia, ale narzędzia i struktura, z której korzysta język.
źródło
Dzięki podobieństwu w składni i narzędziach, zyski na produktywności z C # lub Java nie są rzędu wielkości, które mogłyby znacząco wpłynąć na twój projekt pracy trwający 10-15 lat. Przyjrzałbym się bliżej takim kwestiom, jak:
Sugerowałbym, że moim zdaniem przesłanka stojąca za pytaniem, że „różnice produktywności między (C # i Java) mogą znacząco wpłynąć na wymaganą inwestycję i czas wprowadzenia produktu na rynek” nie jest prawdą. Nie wątpię, że będzie jakaś różnica, ale nie będzie ona znacząca.
źródło
Przerzucałem się między Javą a .NET, poczynając od Java 1.2 do 1.6 i .NET 1 do 4.0, przez około 10 lat doświadczenia zawodowego (wcześniej programista C / C ++).
Kiedyś, podobnie jak .NET 2.0, powiedziałbym, że Java i C # byłyby mniej więcej takie same, szczególnie w przypadku back-endu. Konstrukcje językowe były nadal bardzo podobne. .NET prawdopodobnie zyskałby przewagę w programowaniu interfejsu użytkownika na pulpicie, ze względu na projektanta WinForms w Visual Studio, a Java miałaby przewagę w aplikacjach Web / Server, głównie dlatego, że nie utknąłeś z IIS.
Teraz, gdy przechodzę do .NET 3.5 i 4, daję przewagę produktywności .NET. Moim zdaniem jest to przede wszystkim spowodowane tym, że .NET jest językiem znacznie szybciej ewoluującym, ponieważ stwardnienie rozsiane może podejmować decyzje językowe stosunkowo szybko, w przeciwieństwie do wprowadzania zmian w polityce JCP. Wielkie ulepszenia są
var
kluczowe, całość LINQ Extension Methods, operatora Null-koalescencyjny??
,dynamic
i prawdopodobnie dużo bardziej wielkie rzeczy, które naprawdę zwiększa produktywność.To powiedziawszy, „najbardziej produktywny” język dla projektu jest prawie zawsze tym, z którego najbardziej programiści są najbardziej komfortowi i doświadczeni. Krzywa uczenia się jest zawsze największym zabójcą produktywności.
źródło
Jedną z rzeczy, które zauważyłem, jest wiele sklepów w języku C # /. NET ma postawę „nie wymyślono tutaj” i blokuje wszystkie biblioteki stron trzecich / bibliotek open source, podczas gdy wiele sklepów Java chętniej korzysta z bibliotek open source. Wydaje się również, że dostępnych jest więcej bibliotek dla Java. Nawet jeśli spojrzysz na fajne biblioteki stron trzecich w .NET, np. NHibernate, NPOI, Spring.NET itp., Są to porty bibliotek Java i dlatego są za nimi. Z pewnością wydaje się, że wiele z tych innowacji pojawiło się najpierw w Javie, a po pewnym czasie powstał port .NET. Z perspektywy biblioteki wydaje się, że Java wygrywa pod względem nowych innowacyjnych odkryć.
Mimo to Microsoft tworzy oficjalne biblioteki, np. ASP MVC, LINQ itp. Ale często tak jak w przypadku bibliotek stron trzecich ASP MVC, takich jak Struts, Spring MVC itp., Były już dostępne dla Javy, a Microsoft spóźniał się na paradygmat sieci kontrolera widoku modelu.
Oczywiście wiele z tych bibliotek oszczędza mnóstwo czasu i zwiększa produktywność. Język podstawowy na język podstawowy C # i Java nie różnią się tak bardzo i dla mnie jest zbyt blisko, aby zadzwonić. Rzuć w armię bibliotek stron trzecich, a skala z pewnością przechyla się w kierunku Javy. Wciąż przy otwartym sklepie wiele z tego przechyla się. To tylko wiele sklepów .NET nie ma tutaj wymyślonego podejścia, podczas gdy wiele sklepów Java jest wystarczających do wykonania pracy ... Jest to nawet prawdą w firmie, w której pracuję, zespół .NET nie dostaje dużo (ze względu na zarządzanie), podczas gdy zespół Java ma wiele zatwierdzonych bibliotek / narzędzi stron trzecich. Również w .NET wiele dobrych rzeczy nie jest za darmo (np. Przed NPOI, jeśli chcesz pracować z dokumentami biurowymi Microsoft, większość rozwiązań [nie licząc automatyzacji biura] nie była darmowa.
źródło
Często zadawałem sobie to pytanie: co jest lepsze? C # czy Java?
Dam ci radę, a ta rada jest wnioskiem z moich badań: żaden z nich nie jest lepszy, tylko język, który znasz dobrze i możesz wykonywać wiele fascynujących aplikacji jest najlepszy.
Naucz się programować, a następnie dużo trenować w jednym języku, a kiedy osiągniesz perfekcję w pisaniu kodu, pomyśl o innych językach i uwierz mi, nauczysz się innych języków jak bułka z masłem.
źródło