Czy Java dogoni C #? [Zamknięte]

17

Dzisiaj zadałem pytanie dotyczące tego, który język C # lub Java byłby dla mnie lepszy do nauki. Miałem świetne odpowiedzi. Jedną z rzeczy, które pojawiły się, było to, że być może Java jest teraz za C # z nowymi funkcjami. Zobaczyłem kilka linków i najbardziej wskazałem, co C # miał, a czego java nie.

Więc moje pytanie do was wszystkich brzmi: czy Java ponownie dogoni C #? A jeśli zgadniesz, co by to było za 5 lat. Czy miałoby to wszystko, czego może teraz brakuje? Co powiesz na Javę 7?

MandyNelson
źródło
7
-1, domniemany i hipotetyczny. Zmieniłby się na +1, gdyby tytuł zmienił się na „Czy Java jest za C #, a jeśli tak, to jak to nadrobić?”
Nicole
2
Czy Java i C # dogonią program? Daj mi znać, gdy otrzymasz anonimowe funkcje, zamknięcia i kontynuacje pierwszej klasy.
dietbuddha
5
@dietbuddha: Wolę nie zaśmiecać kodu kodem )„dziękuję”.
Josh K
1
@JoshK, wolisz go wypełnić; i}, prawda? LISP wydaje się używać wielu nawiasów, ponieważ każda funkcja z nich korzysta, a ty zagnieżdżasz w nim wiele funkcji.
YuriAlbuquerque

Odpowiedzi:

32

Funkcje językowe są bardzo małą częścią tego, co sprawia, że ​​Java i C # tyka. Ostatecznie są to części większych ekosystemów J2EE i .NET.

Oba mają swoje mocne strony i powinny wzrosnąć w ciągu najbliższych 5 lat.

Shamit Verma
źródło
19
+1 za „Funkcje językowe są bardzo małą częścią tego, co sprawia, że ​​Java i C # tyka”
Craige
1
Tak, interfejsy API i biblioteki są pod wieloma względami znacznie bardziej znaczące.
Michael K
2
Zgadzam się, ale pytania dotyczą języka, a nie ekosystemu;)
Philippe
1
Naprawdę nienawidzę głosować +1 za bardzo krótkie odpowiedzi, ale jesteś tutaj na coś. Chciałbym zobaczyć, jak rozwijasz tę odpowiedź.
Nicole
3
Pytania mówią: „który język C # lub Java byłby dla mnie lepszy do nauki” i „gdzie stałby za 5 lat”, oba te aspekty bardziej zależą od ekosystemu niż języka.
Shamit Verma
16

Powiedziałbym tak, dopóki Oracle nie pojawi się na zdjęciu. Co jest smutne, ponieważ naprawdę podobało mi się przeskakiwanie w funkcjach Java i C # przez ostatnie sześć lat.

Jesse C. Slicer
źródło
2
Jak myślisz, dlaczego Oracle sabotuje Javę?
2
Po prostu nie sądzę, że kultura korporacyjna ma taką samą zwinność, jaką Sun miał we wprowadzaniu funkcji.
Jesse C. Slicer
8
@Glenn, proces Oracle przeciwko Google pokazuje mi, że nie „zdobywają” open source i że oznacza to, że duże firmy rzadziej wybierają Javę do przyszłego rozwoju. groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena
Oracle może nie do końca „pieprzyć Javę”, ale JVM. W tej chwili mają projekt połączenia dwóch implementacji JVM, które nabyli JRockit od BEA i HotSpot dla Sun. Mimo tego, całkowicie pominęli projekt Da Vinci Machine.
vartec
2
Mieszam się na Oracle. Zestaw Androida jest jakby wyłączony, ale przyczyniają się do jądra Linuksa i są głównymi twórcami systemu plików Btrfs. Wydaje się, że Oracle „dostaje” open source lepiej niż Microsoft, ale to niewiele mówi.
jonescb
6

Jako język nie rozwijam języka Java w celu znacznego zwiększenia innowacyjności, przede wszystkim dlatego, że osoby ze społeczności open source, które są w czołówce, częściej skupiają się na nowszych językach JVM, takich jak Scala, Clojure, Groovy, JRuby i JPython.

Ponadto zaangażowanie Javy w kompatybilność wsteczną oznacza, że ​​dodawanie funkcji językowych jest z natury trudniejsze niż we wcześniejszych czasach tego języka.

Eric Wilson
źródło
5

Dużym znakiem zapytania jest tutaj Oracle. Firma Sun naprawdę spowolniła rozwój Java w ciągu ostatnich pół dekady. Wielu ludzi ze społeczności Java miało nadzieję, że Sun wyłączy Jawę lub sprzeda ją komuś, kto włoży dużo zasobów i wysiłku. Chociaż Oracle z pewnością może to zrobić, jest to duża firma z wieloma grupami o własnych interesach. Sądzę, że to tylko przypuszczenie, że Oracle pozwoli stagnacji Javy i wykorzysta ją głównie jako narzędzie w procesach patentowych.

Być może sprzedadzą go Google za dużą sumę pieniędzy i wszyscy będą zadowoleni. Jest w rękach zarządu i prawników, a nie inżynierów i projektantów oprogramowania.

Z drugiej strony Java, nawet bez ulepszeń, jest dobrym językiem i ma ładny ekosystem. Podczas gdy ja osobiście wolę C # i świat .net, Java jest nadal doskonałym wyborem. W przyszłości czas pokaże, ale jak na razie Java nie jest wcale taka zła. (Wyłączono biblioteki daty i godziny ... wow, czy są one zawsze brzydkie i nieporządne)

Jason
źródło
1
Istnieją teraz biblioteki stron trzecich w celu przezwyciężenia problemów z datą / godziną.
Michael K
1
Oracle używał Java wraz z PL / SQL jako języka dla programów, które żyły w bazie danych, przynajmniej od 10g. Oracle intensywnie wykorzystuje Javę. To, czy oznacza to, że zabiorą Javę w kierunku, który mi się podoba, jest wątpliwe, ale nie zamierzają jej zabić.
David Thornley,
4

Nie ma nic do nadrobienia, więc pytanie nie ma sensu.

Tylko dlatego, że Java nie replikuje C # nie oznacza, że ​​jest „gorsza” w jakiś sposób, jest po prostu inna. Równie dobrze można zapytać, kiedy C # „dogoni” Cobola.

jwenting
źródło
23
Nie zgadzam się C # i Java są podobne pod wieloma względami, znacznie bardziej niż C # i COBOL. Pamiętam, że pewnego dnia przeczytałem, że „C # jest tym, czym powinna być Java”. Podsumowując, uważam, że C # i Java bezpośrednio konkurują ze sobą, a po ich obu muszę powiedzieć, że mam wiele funkcji C # w Javie, ale nie na odwrót ...
Philippe
Czy znalazłeś sytuacje, w których możesz użyć C # lub Java? Tj. Sytuacje, w których programista może dokonać wyboru. Zwykle sklep miałby już preferencje / uprzedzenia / uprzedzenia, a wybór między językami w tym samym ekosystemie. Np. Między Javą a Scalą lub między C # i F #
Shamit Verma
2
Nie zgadzam się z wszystkimi decyzjami projektowymi podjętymi w języku C #, ale podobnie jak Java, świadomie postanowili zrobić zamiennik C ++, a na przykładzie Javy przed nimi celowo dodali pewne krytyczne funkcje pominięte w Javie. Więc jeśli uważasz, że te funkcje są dobre, to Java musi „dogonić” C # W szczególności możliwość tworzenia obiektów wbudowanych, aby wszystko zorientowane obiektowo NIE MUSI było rozdęte, i myślę, że const. Delegaci to nowa funkcja, którą wbudowali, nie dlatego, że nie można ich zbudować jako biblioteki danych. Powiedziałbym, że oboje muszą dogonić C ++!
Dow
@Filippe, nie daj się złapać na jego licznikowy przykład. Równie dobrze mógłby powiedzieć „Kiedy C # dogoni Javę?”. Jego argument nadal utrzymuje, że nie ma obiektywnego powodu, dla którego Java stoi za C #; to wszystko osobiste preferencje.
jonescb
Nikt nie mówi o replikacji, ale C # ma kilka istotnych funkcji, które Java rozważa właśnie implementację NOW (np. Lambdy, które są emulowane przy pomocy brzydkiej implementacji obiektu).
YuriAlbuquerque
4

Pytanie o to, czy C # lub Java wyprzedzają drugie, jest przedmiotem debaty, ale zamiast skupiać się na cechach językowych jednego lub drugiego, wolałbym skupić się na tym, co wiąże się z ewolucją języka. Jest jeden fakt, który nie wydaje mi się, aby ktokolwiek mógł się kłócić: Java jest starsza niż C #.

Problemy ze zmianą sposobu działania języka:

  1. Jeśli złamiesz kompatybilność wsteczną, wkurzysz wielu programistów
  2. Jeśli wkurzysz programistów, przejdą na inny język, który lepiej ich wspiera. Dlatego nie ma powodu, aby kontynuować pracę z językiem.
  3. Java podjęła już pewne decyzje projektowe z naciskiem na wprowadzenie języka na rynek. Nadzieją było wrócić i wypełnić niektóre puste pola. Te decyzje wciąż nękają język, ponieważ opiekunowie nie chcą naruszać pierwszego punktu.
  4. Java płonęła wiele nowych terytoriów i raz na zawsze udowodniła, że ​​język zbierający śmieci można traktować poważnie - i osiąga wystarczające wyniki dla większości ludzi.
  5. C # przyszedł później i nauczył się wielu lekcji, na które natknął się Java - więc byli w stanie uniknąć niektórych technicznych ograniczeń, które Java ma z powodu punktu 3.
  6. Nowe funkcje językowe muszą rozsądnie rozwiązać prawdziwy problem. Nie każda funkcja językowa ma sens w kontekście języka, do którego próbujesz ją dodać. Dlatego pomimo podobieństw Java i C # nadal będą różnymi językami.

Czy C # ma więcej funkcji językowych niż Java? Chyba tak. Czy są przydatne? Chyba tak. Czy to oznacza, że ​​C # jest lepszy lub bardziej dojrzały niż Java? Z czym się nie zgadzam. Są różne, jasne i proste. Java nigdy nie będzie miała wszystkich funkcji języka C #, ponieważ C # nigdy nie będzie mieć wszystkich funkcji języka Java.

Jedna z funkcji Java, możliwość napisania programu w systemie Windows i wdrożenia go w systemach Unix lub Mac, nigdy nie nastąpi bezpośrednio dzięki wsparciu Microsoft. Dlaczego pytasz? Nie dlatego, że Microsoft jest zły (czy to prawda, czy nie, nie obchodzi mnie to). Dzieje się tak dlatego, że nauczyli się lekcji, której Sun nigdy nie zrobił: pisanie raz uruchomione w dowolnym miejscu utowarowuje systemy operacyjne i sprzęt. Jeśli zależy Ci na zarabianiu na sprzedaży twojego systemu operacyjnego, nie chcesz, aby wymiana była wciąż łatwa i nadal działała aplikacja. Jeśli to zrobisz, nie możesz zarobić na systemie operacyjnym, ponieważ zawsze są tańsze opcje.

Berin Loritsch
źródło
Dlaczego to ważne, że Mono nie jest uruchamiane przez MS? Mono działa naprawdę dobrze. Nie lekceważ tego.
Kugel
To nie jest kopa na Mono, ale nie wszystkie interfejsy API .NET są obsługiwane bezpośrednio. Choć robią postępy i przeszli dość długą drogę, istnieją ograniczenia - szczególnie w aplikacjach komputerowych. Nie jestem pewien, jak blisko jest Mono lub czy legalnie może dojść do wdrożenia Winforms lub WPF. Jednak w przypadku pracy po stronie serwera jestem prawie pewien, że jest kompatybilny. Ostatnio nie zaglądałem do tego.
Berin Loritsch,
Myślę, że „możliwość napisania programu w systemie Windows i wdrożenia go w systemach Unix lub Mac nigdy nie nastąpi bezpośrednio dzięki wsparciu Microsoftu” została odrzucona
JoelFan
Kiedy pisałem odpowiedź, nie było. Więc C # czy Microsoft napisał środowisko uruchomieniowe i biblioteki, które działają na komputerach Mac i Unix? Mono nie jest bezpośrednio od Microsoftu, nawet jeśli niektórzy programiści Microsoft mogą nad nim pracować. Nadal mam wątpliwości co do aplikacji komputerowej opartej na WPF działającej w systemie Linux. Tylko po stronie serwera może być OK.
Berin Loritsch
1

Java naprawdę nie potrzebuje nowych „funkcji” bardziej niż C lub C ++. Jest to dobrze zaprojektowany język do programowania obiektowego. Dodatki, które można wprowadzić, to tworzenie bibliotek do wykonywania szerokiego zakresu zadań. To samo dotyczy C # - większość funkcji jest dodawana, aby język robił więcej rzeczy. Osobiście uważam, że większość z tych funkcji nie jest potrzebna - wskaźniki w OO naprawdę są tak puszyste, chyba że pracujesz na poziomie sprzętowym (w tym momencie prawdopodobnie lepiej jest użyć czegoś takiego jak C). Poza tym uruchomienie na maszynie wirtualnej powinno utrudnić, a nawet uniemożliwić bezpośredni dostęp do sprzętu.

Unix rozpoczął trend tworzenia modułów, które robią jedną rzecz bardzo dobrze. Myślę, że zarówno Java, jak i C # wymykają się spod kontroli pełzania funkcji. Lepiej jest stworzyć łatwo rozszerzalny rdzeń niż gigantyczny, „uniwersalny” język, który bardziej przypomina strukturę. Dla mnie Java lepiej spełnia ten wymóg niż C #.

Michael K.
źródło
7
Język bez właściwej lambda nie jest językiem użytecznym. Jeśli ta jedna funkcja zostanie dodana do Javy, zgodziłbym się z resztą twoich argumentów. Bez tego Java nie jest w ogóle rozszerzalna, jest ledwo użyteczna.
SK-logic
2
@Craige Osobiście (opinia) Nie lubię mieć funkcji systemowych. Chcę, żeby język był na mojej drodze - bardzo minimalny.
Michael K
1
@Michael - Nie udało mi się ustalić związku między językiem mającym funkcje składniowe a językiem, który przeszkadza. To, że język ma takie funkcje, nie oznacza, że ​​musisz z nich korzystać. Weźmy na przykład metody pobierające i ustawiające języka C #. 90% czasu pozwoli ci zaoszczędzić na pisaniu setek linii redundantnego kodu. Jednak nadal możesz pisać własne.
Craige
1
@Craige, jeśli język ma funkcje, Twoje narzędzia muszą o nich wiedzieć przynajmniej. A moc ekosystemu Java tkwi przede wszystkim w jego narzędziach, które są możliwe całkowicie dzięki minimalistycznej prostocie języka.
SK-logic
1
@SK, nie rozumiem, jak można powiedzieć, że język z lambda jest bezużyteczny. C nie ma lambda, a C ++ dostaje je w C ++ 0x i ludzie używają tych języków od dziesięcioleci. Tylko dlatego, że wolisz programowanie funkcjonalne, które nie unieważnia programowania imperatywnego.
jonescb
1

Nie ma nic złego w wielu funkcjach dodawanych przez C #, ale biorąc pod uwagę tempo, w jakim zmieniają język, świadomie utrudniają, jeśli nie niemożliwe, utrzymanie Mono. Jeśli tak, to mówię, że czekamy na C #, aby dogonić Javę pod względem zakresu systemów, w których może ona zostać wdrożona. Nie wystarczy po prostu uruchomić w systemie Windows.

Dow
źródło
0

Nie zamierzam zakładać forum dyskusyjnego, ale myślę, że Java była tutaj na długo przed C # i pod tym względem C # wydaje się bardziej replikacją niż java.

Jeśli chodzi o odpowiedź na pytanie: Java i C # są różnymi językami, dlatego nie można ich porównywać tylko według ich funkcji. Co możesz zrobić w Javie, nie możesz w C # i na odwrót.

Wreszcie jest to jak rozpoczęcie tematu Windows vs Linux.

Adam Arold
źródło