Dlaczego C# zamiast Javy i odwrotnie

0

Widziałem na forum pojawiła się ostatnio kilka wątków odnośnie wyboru pomiędzy Javą i C#.
Tutaj było też kilka ciekawych wypowiedzi:
http://stackoverflow.com/questions/610199/the-art-of-programming-java-vs-c-sharp

Sam jakiś czas coś robię zarówno w C# i w Javie, żeby móc samemu porównać. Na razie raczkuję, więc różnic wielkich jako takich nie ma, poza fajniejszym IDE dla C#.

Tak się zastanawiam się co Wami kierowało/kieruje, że rozwijacie się w tej a nie konkurencyjnej technologii? Wiadomo, wybory często są przypadkowe (bo Java jest na uczelni, bo kumpel też uczył się C# itp.).
Pytanie do osób, które miały do czynienia z obiema technologiami. Jakie są plusy i minusy jednej względem drugiej?

Niby języki podobne (składniowo bardzo), mające mniej więcej takie same zastosowania, możliwości, o podobnej wydajności.
Jak ocenianie trendy w programistycznym światku? Ludzie częściej migrują z C# do Javy czy odwrotnie?
W ogóle jak ocenianie politykę Microsoftu i Oracle wobec developerów?
W co byście się ładowali, gdybyście teraz stali znowu przed wyborem?

W trendach popularności Java zdecydowanie wyprzeda C#, choć to akurat jest oczywiste i średnio istotne:
http://langpop.com/

Tutaj już inny wykres, choć ilość ofert pracy to też nie jest jakiś wyznacznik miarodajny:
http://www.indeed.com/jobtrends?q=.net%2C+java%2C+c%23%2C+jee&l=

Wiadomo, jest też sporo innych, fajnych, ale na razie niszowych rzeczy jak Scala czy Groovy na JVM, MS też coś tam próbuję z F# - choć o tym mniej się słyszy niż o np. Scali. Myślicie, że to jest przyszłość, choćby Scala?

No i jak to wygląda okiem developerów z kilkuletnim doświadczeniem?

Jak z zastosowaniami Javy/.Net? Niby są podobne, choć czytałem, że banki i duże instytucje finansowe raczej nie pchają się w .NET (mówię tutaj o nowych projektach, bo wiadomo, że nie będą przepisywać istniejących systemów z Javy do C#).

Taka flame'owa dyskusja o mainstreamowych trendach, o polityce MS i Oracle, JVM i .NET, bo ostatnio mnie temat jakoś zaciekawił...

0
jozekF napisał(a):

Jak z zastosowaniami Javy/.Net? Niby są podobne, choć czytałem, że banki i duże instytucje finansowe raczej nie pchają się w .NET (mówię tutaj o nowych projektach, bo wiadomo, że nie będą przepisywać istniejących systemów z Javy do C#).

BRE Bank, PKO BP, Millenium, Santander, Getin Bank, Credit Suisse to wcale nie są duże banki, zwłaszcza ten ostatni. :P

0

Na razie raczkuję, więc różnic wielkich jako takich nie ma, poza fajniejszym IDE dla C#.

IntelliJ IDEA poznałeś?

0

my w aktualnym projekcie generujemy sporą część kodu w C# bezpośrednio z Javy, za pomocą kodu napisanego w Javie :D

0

@somekind Dzięki, nie wiedziałęm. Tak to jest zaufać w rzetelność informacji opublikowanych gdzieś w internecie :)

IntelliJ IDEA nie próbowałem, tylko Eclipse'a i NetBeans'a. Tyle pochwał tego IDE słyszałem, że chyba spróbuję.

A jak to jest z Java 8, bodajże 18 marca się ukazała. Jest rewolucja? Bo trochę internecie przeglądałem i raczej zachwytów jakichś strasznych nie ma.

0

Sa lambdy.

0

Artykuły o Javie 8 pojawiają się od wielu miesięcy. 18 marca została wydana tylko oficjalna pierwsza wersja Javy 8 od Oracle. Wcześniej były dostępne wersje np Developer Preview - http://openjdk.java.net/projects/jdk8/ już we wrześniu zeszłego roku. Kto chciał sprawdzić nowe ficzery to już miał mnóstwo miesięcy na zrobienie tego. Z tego względu zachwyty czy hejty pojawiają się już od dłuższego czasu, a nie wybuchają 18 marca.

4

Bo Java jest przeideologizowana:
Nie będzie operatorów! nie będzie! nie będzie! nie będzie goto! nie będzie unsigned! nie będzie! my wiemy lepiej czego wam potrzeba!

a to jak działają generyki woła o pomstę do nieba. i jest skutkiem tego samego nastawienia.

1

Przeładowanie operatorów z C++ jest półśrodkiem. Jest tylko kilkanaście operatorów do wyboru i kończy się to radosną twórczością, gdzie kilka operatorów jest używane do 100 różnych typów operacji. W Scali można definiować nazwy funkcji złożone w całości ze "śmiesznych" znaczków i takie coś się sprawdza.

Obsługa unsigned została dodana w Javie 8 :P
http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true - jest kilka metod z członem 'unsigned' w nazwie.

Generyki działają tak jak działają, by zachować wsteczną kompatybilność ze starym kodem, a w momencie wprowadzania Javy 5 tego starego kodu było dość sporo. Lambdy też są tak skonstruowane, by były w dużej mierze wstecznie kompatybilne, tzn nie powinno być dużej trudności w napisaniu kodu który zarówno działa z Javą < 8 jak i pozwala wykorzystać efektywnie lambdy pod Javą 8.

Lambdy i referencje do metod powinny rozwiązać część problemów związanych z generykami.

class C {
}

interface I<T> {
    T m() throws Exception;
}

public class Main {

    public static void main(String[] args) throws Exception {
        I<int[]> s1 = int[].class::newInstance;
        I<C> s2 = C::new;
        I<C[]> s3 = C[].class::newInstance;
    }
}

A jak ktoś chce mocno ekspresywny język to jest Scala :]

Poza tym rozwój Javy jest trochę zbiurokratyzowany, w przeciwieństwie (tak mi się wydaje) C#-a, który jest rozwijany tak jak się MS podoba.
http://en.wikipedia.org/wiki/JDK_Enhancement_Proposal
http://en.wikipedia.org/wiki/Java_Community_Process
I to jest raczej powodem względnie niskiego tempa dodawania nowych ficzerów, bo są duże rozbieżności w opiniach wśród społeczności Javy.

1
Wibowit napisał(a):

Przeładowanie operatorów z C++ jest półśrodkiem. Jest tylko kilkanaście operatorów do wyboru i kończy się to radosną twórczością, gdzie kilka operatorów jest używane do 100 różnych typów operacji.

No, ale to już wina programisty. Inna rzecz, że przeładowywanie operatorów ma sens jak piszesz swoje klasy Vector i Matrix i chyba tylko w takim przypadku, więc w ogólności to średnio przydatna rzecz.

Generyki działają tak jak działają, by zachować wsteczną kompatybilność ze starym kodem, a w momencie wprowadzania Javy 5 tego starego kodu było dość sporo.

I co z tego? Można trzymać starą wersję JVM dla starego kodu, i nową dla nowego kodu z porządnymi generykami, świat by się chyba nie zawalił.
No, ale zamiast tego lepiej dodać upośledzone generyki. :P

I to jest raczej powodem względnie niskiego tempa dodawania nowych ficzerów, bo są duże rozbieżności w opiniach wśród społeczności Javy.

No tak, demokracja. :)

0

@Azarien:
Implementacja genericsów w Javie pozwala na stopniowe przerabianie wielkiej krowy napisanej w Javie < 5 na Javę 5+.

1 użytkowników online, w tym zalogowanych: 0, gości: 1