Co w tym momencie wybrałbyś dla swojego projektu między platformą .NET a Javą? [Zamknięte]

13

Właśnie zaczynasz nowy projekt i masz do wyboru te dwie technologie, Java i .NET. Projekt, nad którym pracujesz, nie wymaga posiadania funkcji, które ułatwiłyby wybór między dwiema technologiami (np. .NET ma to, czego potrzebuję, a Java nie) i oba powinny działać dobrze dla ciebie (chociaż tylko oczywiście jeden). Brać pod uwagę:

  • Występ
  • Dostępne narzędzia (nawet narzędzia innych firm)
  • Kompatybilność między platformami
  • Biblioteki (zwłaszcza biblioteki stron trzecich)
  • Koszt (Oracle wydaje się próbować zarabiać na Javie)
  • Proces rozwoju (najłatwiejszy / najszybszy)

Pamiętaj również, że Linux nie jest twoją główną platformą, ale chciałbyś również przenieść swój projekt na Linux / MacOs. Zdecydowanie powinieneś pamiętać o kłopotach związanych z Oracle i społecznością Java, a także o ograniczeniach Mono i Java. Byłoby bardzo mile widziane, gdyby osoby z doświadczeniem obojga mogły przedstawić przegląd i swoje subiektywne poglądy na temat tego, co wybiorą i dlaczego.


źródło
Nie ma wystarczających informacji na temat wymagań, aby skutecznie odpowiedzieć na to pytanie.
czerwony brud
3
Mono to ból (np. Zatonięcie czasu). Nie ma nawet podstawowego projektanta WinForm.
Job
@ Job, MonoDevelop ma projektanta GUI dla GTK #, ponieważ WinForms nie jest jeszcze open source.
Mahmoud Hossam
Tak, ale jak działa Mono z bibliotekami innych firm? Czy „po prostu działają”? I (być może najważniejsze), czy dostawcy zapewniają wsparcie, jeśli używasz ich z Mono?
TMN

Odpowiedzi:

26

Najważniejsza decyzja (edycja: techniczna) to:

  • Czy w tym momencie zobowiązujesz się w 100% do korzystania z systemu Windows jako przyszłej platformy wdrażania?

Jeśli nie, to powinieneś wybrać Javę.


Wniosek z Mono jest często używany do powiedzenia „Tak, .NET jest wieloplatformowy”. Jak ważne jest to roszczenie? było to, że Mono jest tylko opcją IFF, którą opracujesz przeciwko niemu!

Nie można oczekiwać, że aplikacje .NET będą działać od razu po wyjęciu z pudełka.


@Basic powiedział, że to był bardziej komentarz niż odpowiedź. Mówiąc ściślej, uważam, że to pytanie, aby znaleźć się na szczycie listy, ponieważ jest to być może najważniejsza decyzja techniczna, którą musisz podjąć, mając do czynienia z platformą .NET. Jak mówi Basic, będzie testował przeciwko Mono, więc to nie wchodzi w grę i uważam, że Java i .NET są równie dobrze dostosowane. Mam bardzo małe doświadczenie z .NET, ale całkiem sporo w Javie.

  • Wydajność - Java działa całkiem dobrze, ale nadal ma sporo czasu uruchamiania. Dzieje się tak, ponieważ JVM rozpoczyna się od zera podczas inicjowania, a losowy dostęp do pliku jar biblioteki środowiska wykonawczego jest raczej powolny, gdy trzeba go odczytać z dysku. Najnowsze Java 6 mają proces działający w tle, który próbuje przechowywać pliki jar bibliotek środowiska wykonawczego w pamięci podręcznej dysku, aby w razie potrzeby dostęp był szybki.

  • Dostępne narzędzia Istnieje wiele narzędzi, a wiele jest dostępnych jako wysokiej jakości Open Source. IBM ma do dyspozycji bardzo zaawansowane narzędzia, ale biorą za to również sporo pieniędzy. Możesz rzucić okiem na MyEclipse, który zarabia na życie, łącząc najlepsze części świata Java i udostępniając je za niskie koszty, aby zobaczyć, co jest dostępne. Netbeans ma bardzo ładny edytor GUI. JDeveloper ma niezły debugger Swing. Sun 6 JDK ma VisualVM, który jest dobrym profilerem na poziomie podstawowym, który może analizować już uruchomione programy (co jest funkcją zabójczą).

  • Kompatybilność między platformami. Bardzo dobrze, z tendencją do doskonałości. JVM jest bardzo, bardzo niezawodny i przewidywalny. Problemy pojawiają się tylko wtedy, gdy przenikają różnice w systemie operacyjnym - jak separatory plików, rozróżnianie wielkości liter w nazwach plików i zachowanie menu.

  • Biblioteki. Jest ich wiele i wiele z nich jest ogólnie dostępnych i użytecznych, ale przede wszystkim napisanych w Javie, ponieważ trudno jest pobrać kod napisany w językach innych niż JVM.

  • Koszt. Java jest zasadniczo ogólnie dostępna. Oracle wskazuje, że elektronarzędzia - najprawdopodobniej pochodzące z JRocket - będą kosztować. Zwróć też uwagę, że udzielone wsparcie („Java dla firm”) również kosztuje. Platformy inne niż x86 są umierającą rasą, ale IBM ma ich mnóstwo, a IBM zapewnia im doskonałą implementację Java. Jest to wyceniane jako część systemu operacyjnego - najprawdopodobniej w celu lepszego przyjęcia.

  • Proces rozwoju. Dużo czasu w Javie poświęca się na badanie, wybór odpowiedniej technologii i naukę jej, ale kiedy to nastąpi, myślę, że istnieje wiele technologii, które można dość szybko opracować. Najnowsza wersja Java EE umożliwia pisanie bardzo potężnych stron internetowych przy użyciu Facelets, które można przeładować co najmniej tak szybko, jak strony PHP.

Myślę, że jeśli nie są biegli w żadnym Java lub .NET, to będzie zaoszczędzić czas i pieniądze, wybierając technologię ty i twoja organizacja są najbardziej znane.

Społeczność
źródło
14
Kto gwarantuje, że program Java napisany w systemie Windows będzie działał gdziekolwiek indziej? Wystarczy jedna rozmowa JNI, aby złamać tę gwarancję. Ten sam problem dotyczy interfejsu CLI - jeśli użyjesz interfejsu API nieposiadającego formy krzyżowej, utracisz przenośność. Zatem jedyną osobą, która może zagwarantować przenośność, jest użytkownik - programista, niezależnie od używanego frameworka.
Mark H
3
@ Thorbjørn, czy zaufałbyś Oracle w obecnym klimacie?
radekg
12
+1 ponieważ Thorbjørn powiedział, że jeśli nie jesteś 100% zaangażowana w systemie Windows, które powinny przejść z Java, że nie musi iść z Java. I zgadzam się - tak, Mono jest rezerwowe, ale jeśli twoje obecne plany nie są związane z Windows, zaoszczędź sobie bólu i skorzystaj z technologii, która miała działać na innych platformach. Mówię to jako programista .NET i entuzjasta .NET.
Carson63000,
4
Zastanawiałem się, czy istnieje któryś z „mono-istnieje-na-innych”-downvoters, który tak naprawdę próbował to zrobić ...
4
„Java jest zasadniczo ogólnie dostępna za darmo (...) elektronarzędzia będą kosztować (...) wyłączone wsparcie również ma swoją cenę” . Dokładnie to samo dla platformy .NET, prawda?
Konamiman,
19

OK, spróbujmy to rozbić:

Brać pod uwagę:

Dostępne narzędzia wydajności (nawet narzędzia innych firm)

Zarówno platformy Java, jak i .NET mają wiele dobrych narzędzi do testowania wydajności. Wiem, że w przestrzeni Java jest mnóstwo bezpłatnych narzędzi open source, które są odpowiednie dla większości scenariuszy. Nie mogę mówić po stronie .NET.

Kompatybilność między platformami

Java ma tę zaletę - projekt Mono (lub podobny) jest wymagany do uruchomienia .NET na niektórych platformach. Nie jestem pewien, czy Mono jest w 100% kuloodporne i wydajne, mam nadzieję, że ktoś inny może się przyłączyć.

Biblioteki (zwłaszcza biblioteki stron trzecich)

Oba mają tutaj silne wsparcie. Początkowo ekosystem Java prowadził (dosłownie jest darmowa biblioteka open source do wszystkiego, co tylko można sobie wymyślić), ale powiedziałbym, że .NET z pewnością nadrobił zaległości w tym, co jest ważne (NHiberante za wytrwałość, NUnit do testów jednostkowych żeby wymienić dwa podstawowe + jestem pewien, że jest jeszcze metryczny ładunek ciężarówki).

Koszt (Oracle wydaje się próbować zarabiać na Javie)

Wszystkie firmy próbują do pewnego stopnia zarabiać, ale w przypadku Javy uważam, że twoje oświadczenie jest nieco mylące. Java była open source od wersji 6 (projekt OpenJDK), a Oracle nie wykazało skłonności do zarabiania na Javie poza tym, co robiła Sun. Więc tak, sprzedają serwery aplikacji i rozszerzenia do JVM (w szczególności rozszerzenia zarządzania), ale sam rdzeń Javy? Nie i nigdy tego nie zrobią (było to wielokrotnie stwierdzane publicznie).

Myślę, że zarówno MS, jak i Oracle odnoszą ogromne korzyści dzięki pośrednim dochodom dzięki ich platformom repsepctive.

Całkowity koszt posiadania (TCO)? Nie zamierzam nawet wdawać się w tę debatę, ponieważ nie ma sposobu, aby to udowodnić (w końcu programowanie to twórcza działalność człowieka). Osobiście uważam, że systemy oparte na Javie mają zwykle niższy koszt początkowy, ponieważ w większości przypadków można wykorzystać bezpłatny stos open source od góry do dołu. Jednak duże przedsiębiorstwa wolą mieć umowy o wsparcie, które mogą unieważnić tę konkretną korzyść.

Proces rozwoju (najłatwiejszy / najszybszy)

Zależy od tego, co próbujesz zbudować! Osobiście twierdzę, że są one prawie równe, chociaż C # ma w tej chwili kilka dodatkowych funkcji w języku podstawowym w Javie. Jednak w przypadku (wielu języków obsługiwanych z Javą) w JVM (Groovy, Scala, Clojure itp.) Możesz mieć wszystkie pożądane funkcje językowe.

.NET miał wyraźną przewagę w budowaniu przez pewien czas „elementów” frontonu (Rapid Application Development, jeśli wolisz), ale myślę, że JEE6 i / lub Spring i inne frameworki / aplikacje sieciowe praktycznie zlikwidowały tę lukę.

Pamiętaj również, że Linux nie jest twoją główną platformą, ale chciałbyś również przenieść swój projekt na Linux / MacOs. Zdecydowanie powinieneś pamiętać o kłopotach związanych z Oracle i społecznością Java, a także o ograniczeniach Mono i Java. Byłoby bardzo mile widziane, gdyby osoby z doświadczeniem obojga mogły przedstawić przegląd i swoje subiektywne poglądy na temat tego, co wybiorą i dlaczego.

Jeśli chcesz przenieść się do systemu Linux, UNIX, a zwłaszcza Mac OS, jak wspomniano powyżej, Java ma tam przewagę.

Mam nadzieję, że to pomaga!

Martijn Verburg
źródło
4

Biorąc pod uwagę twoją listę punktów, byłbym podzielony i to naprawdę zależy od tego, co muszę zbudować.

.Net wygrywa w tych aspektach:

  • Występ
  • Proces rozwoju (najłatwiejszy / najszybszy)

Java wygrywa w tych aspektach:

  • Kompatybilność między platformami
  • Biblioteki (zwłaszcza biblioteki stron trzecich)

Jest to remis dla tych aspektów:

  • Koszt (Oracle wydaje się próbować zarabiać na Javie)
  • Dostępne narzędzia (nawet narzędzia innych firm)

.Net jest pod każdym względem stosem technologii pojedynczej platformy. Tak, jest Mono, ale dopóki Mono nie będzie w 100% kompatybilne z implementacją systemu Windows, nie zapewnia prawdziwego doświadczenia na wielu platformach. Jedyny podzbiór, na którym możesz liczyć na obsługę wielu platform, to to, co zmieściłoby się w Silverlight.

To powiedziawszy, .Net ma lepszą postrzeganą wydajność (rzeczywiste pomiary TBD). W oczach użytkownika liczy się postrzegana wydajność. Po ostatnich 12 latach pracy w Javie i od niedawna .Net mogę docenić moc platformy.

Z drugiej strony Java ma znacznie bogatszy zestaw IDE do wyboru, a koszt tych lepszych IDE jest znacznie niższy niż koszt odmiany .Net. Z drugiej strony koszt profesjonalnych silników J2EE z łatwością przewyższa koszty środowiska programistycznego. W .Net mam wrażenie, że jestem nikczemny i skazany na śmierć. W Javie istnieją obejścia ogromnych kosztów - które można łatwo zrekompensować, konfigurując je przez czas programisty. Poza IDE, w przypadku narzędzi, które mają znaczenie (profiler, pokrycie itp.) Koszty są równe.

W końcu to naprawdę zależy od potrzeby . Jeśli i tak zamierzam wdrożyć system Windows, to .Net nie stanowi problemu. Mam klientów, którzy są tylko sklepami z systemem Windows. Jeśli zamierzam wdrożyć system Unix lub muszę obsługiwać heterogeniczne systemy, Java nie stanowi problemu. Mogę nawet być radykalny i sugerować mieszany stos technologii. W końcu to, że klient wymaga, aby serwer był uniksowy, nie oznacza, że ​​uruchamiają go na swoich komputerach. Nie każda aplikacja najlepiej nadaje się na aplikację internetową.

Berin Loritsch
źródło
4

Wydajność - nawet

Obie platformy działają wyjątkowo dobrze dla praktycznie wszystkich aplikacji.

Nie bardzo ich rozróżniam, chociaż moje subiektywne doświadczenie jest takie, że Java ma niewielką przewagę w przypadku długo działających aplikacji, podczas gdy .Net jest szybszy w czasie uruchamiania aplikacji.

Dostępne narzędzia (nawet narzędzia innych firm) - dyskusyjne

Zależy od tego, jakich narzędzi potrzebujesz i co znasz.

.Net z pewnością ma świetne narzędzia dostarczone przez Microsoft. Z drugiej strony w świecie Java są równie dobre narzędzia, np. W środowiskach Eclipse, Netbeans i IntelliJ.

Kompatybilność między platformami - wygrana Java

.Net jest zasadniczo związany z platformami Microsoft (Windows, Xbox itp.). Kompletne wdrożenia nie są dostępne dla platform innych niż Microsoft .

Mono jest fajne, ale w rzeczywistości nie daje pełnej możliwości działania na różnych platformach, ponieważ nie obsługuje wszystkich bibliotek .Net (na przykład nie można oczekiwać, że wszystkie elementy GUI systemu Windows będą działały poprawnie, więc dopóki nie przełączy się na wieloplatformowy zestaw narzędzi, taki jak GTK #, nie będzie można uruchomić aplikacji na różnych platformach)

Java jest naprawdę przenośna. Nie tylko język, ale co ważniejsze, wszystkie biblioteki Java są przenośne. Pod warunkiem, że trzymasz się czystych bibliotek Java (np. Swing for GUI), Twój kod będzie działał wszędzie tam, gdzie masz środowisko wykonawcze Java.

Biblioteki (zwłaszcza biblioteki stron trzecich) - wygrana Java

Prawdopodobnie najlepszą siłą platformy Java jest rozległy ekosystem bibliotek, zwłaszcza bibliotek open source. Kilka przykładów:

  • Wszystkie biblioteki i narzędzia Apache
  • Wszystkie biblioteki w rozległym ekosystemie Eclipse
  • Wszystkie biblioteki wnoszone / obsługiwane przez Google
  • JBoss i wszystkie powiązane narzędzia korporacyjne obsługiwane przez Red Hat

Koszt (Oracle wydaje się próbować zarabiać na Javie) - Java wygrywa, jeśli przejdziesz na open source, w przeciwnym razie nawet.

Możesz mieć w 100% stos Java open source, który jest bezpłatny i nie wiąże Cię z żadną konkretną zastrzeżoną platformą. To jest w 100% darmowe.

Alternatywnie możesz kupić IntelliJ IDEA, uruchomić Javę w systemie Windows i użyć zastrzeżonej bazy danych, w którym to przypadku jest to prawie tak samo opłacalne jak typowy stos Microsoft .NET.

Proces programowania (najłatwiejszy / najszybszy) - dyskusyjny

Prawdopodobnie zależy to bardziej od doświadczenia deweloperów z każdą platformą niż od konkretnego przypisania platformy.

.Net z pewnością ma kilka świetnych narzędzi, które mogą sprawić, że będziesz bardzo produktywny dla prostych aplikacji GUI w Windows. Nic dziwnego, ponieważ jest to „najsłodszy punkt” dla rozwoju .Net.

Z drugiej strony wolę stos Java do programowania po stronie serwera. Za pomocą narzędzi takich jak Maven i wszystkich możliwości ciągłego wdrażania / integracji możesz ustanowić bardzo efektywny proces programowania dla solidnych aplikacji po stronie serwera.

Pod względem językowym język C # ma pewne zalety w zakresie wydajności w porównaniu z Javą. Ale z drugiej strony, jeśli obecnie rozwijasz się na platformie Java, trendem nie jest używanie samej Javy, ale użycie jednego z nowych języków JVM, takich jak Scala, Groovy lub Clojure - jeśli to zrobisz, będziesz o wiele bardziej produktywny niż C # lub Java.

mikera
źródło
3

.Netto

Trudno jest odpowiedzieć na to pytanie, nie będąc subiektywnym ani wabiącym się na płomienie (mam wrażenie, że zostanę doceniony), ale .Net jest językiem wzrostu, a Java wydaje się być zaniepokojona kwestiami prawnymi, a także staje się mniej popularna.

Ponadto .net jest obecnie znacznie bardziej spójnym i nowoczesnym językiem z doskonałym wsparciem dla oprogramowania wielordzeniowego (Parallel.net) i programowania asynchrounowego (rozszerzenia reaktywne), nie wspominając już o LINQ, bez którego nie mógłbym żyć. .Net ma również wiele bezpłatnych narzędzi, ale Visual Studio Express, Sql Server Express, Web Matrix itp.

To prawda, że ​​Java oferuje pewne korzyści dla wielu platform. Masz kilka opcji dla .Net z mono itp., Które mogą zrobić dla tradycyjnych aplikacji lub komponentów backendu, ale niektóre stają się niepewne, jeśli robisz coś bardzo wyspecjalizowanego (i nie rozmawiajmy o WPF).

Inną opcją, jeśli crosssplatform jest naprawdę bardzo ważna, jest wersja Silverlight. Osobiście nie przepadam za „aplikacjami” Silverlight, ale przynajmniej działa.

Crossplatform jest punktem bólu, zadaj sobie pytanie, czy to naprawdę naprawdę konieczne, przynajmniej w tym momencie.

Homde
źródło
Preferowanie .Net nie jest złą rzeczą. Właściwie to całkiem mi się podoba. Nie ma wątpliwości, że Java stoi obecnie w obliczu kryzysu tożsamości, co jest wstydem - lubię też tę platformę. Cieszę się, że potwierdziłeś poprawę osiągnięć Java na platformach wieloplatformowych (+1). Niektórzy klienci wymagają wdrożenia systemu Unix, inni wymagają systemu Windows. Ludzie Java mogą obsługiwać obie platformy, podczas gdy .Net jest naprawdę ograniczony do systemu Windows. To powiedziawszy, istnieje wiele klientów tylko dla Windows.
Berin Loritsch,
1

W naszej organizacji wybieralibyśmy teraz Javę. Powód tego jest prosty: nasz zespół Java jest większy, bardziej doświadczony i lepiej przygotowany niż nasz zespół .NET (który jest również wystarczająco zaangażowany w utrzymanie istniejących systemów, że brakuje im zasobów, aby podjąć się nowych dużych projektów) .
To powiedziawszy, jeśli istnieją pilne powody do korzystania z .NET (np. Wymagania klienta, niektórzy klienci mogą mieć dużą zainstalowaną bazę oprogramowania .NET i chcą, aby ich nowy system pasował do tej bazy, sami przejął konserwację itp.) rób to i zatrudniaj kontrahentów, którzy wykonają pracę, w której nie możemy uwolnić naszych ludzi.
Nie wymuszałbym żadnej technologii na kliencie wbrew ich najlepszym interesom, a niektórzy klienci po prostu korzystają (ze względu na ich wewnętrzną organizację) więcej od jednego z innych ze względu na inwestycje potrzebne do wdrożenia systemu (ponownie, powiedzmy, że mamy klienta, który już ma wiele uruchomionych aplikacji .NET i personel do ich obsługi, nie będziemy próbować zmuszać ich do zatrudniania ludzi i kupowania licencji na sprzęt i oprogramowanie do uruchamiania aplikacji Java z boku, i oczywiście odwrotnie również być prawdą. W rzeczywistości radzilibyśmy im, aby tego nie robili, gdyby przyszli do nas z prośbą).

jwenting
źródło