C# vs. Java - opinie

0

Witam. Wiem ze rozpoczynam dosyc obszerny topic i wlasnie o to chodzi. Chcialbym poznac jak najwiecej opinii na temat obu jezykow, porownan, wymienienia rzeczy ktore sa w jednym a nie ma ich w drugim jezyku. Wynika to z faktu ze chce wybrac jeden z nich a wiem ze sa bardzo podobne (ponoc nawet M$ przegral sprawe z Sunem o plagiat czy cos). Pozdrawiam i zapraszam do dyskusji.

0

Yaga Yaga!

Nigdy nie pisalem czegos wiekszego w zadnym z tych jezykow, ale wybrał bym z wielkim przekonaniem Jave.
Jak chcesz sie dowiedziec czegos o tych językach to poszukaj na necie, nie trzeba rozpetywac kolejnej wojny toczacej sie na podlozu wyzszosci jednego jezyka nad drugim. Jesli jestes zainteresowany tematem to powinienes sam sie zorientować i wybrac jezyk, ktory bedzie lepiej wspierał kierunek programowania w którym sie rozwijasz/masz zamiar sie rozwijac.

Pozdrawiam

0

W takiej gazecie zdaje się PC World Komputer PRO, cos o programowaniu, jest wlasnie porównanie C# i Javy. Możesz sobie przejrzeć. Rzeczowo wszystko opisane.

0

Moja czysto subiektywna ocena:

Javę męczę od 2 lat? jakoś tak (tylko projekty na uczelnię). Pisałem w niej od appletów "Hello world" przez przesyłanie obrazu i dźwięku przez sieć protokołem RTP aż do obsługi bazy danych Cloudscape przez komponenty EJB na serwerze J2EE.
Java nadal jest jedynym językiem, który znam, a którego szczerze nieznoszę. Omijam ją jak tylko się da szerokim łukiem.

W C# .NET piszę aktualnie swój pierwszy projekt (pomijam "Hello world" ;)) za to całkiem rozbudowany: przenoszenie danych z jednej bazy (InterBase) do drugiej (MS SQL Server) z użyciem XML jako danych i kilku innych technologii.
Mogę stwierdzić, że pisze się w tym prosto, łatwo i przyjemnie. Bardzo dobrze oceniam C#.
A już środowisko MS VS .NET 2003 jest prawie rewelacyjne (próbuję zapomnieć o strasznym wrażeniu po pracy w MS VS 6.0).

A już jeśli porównać VS 2003 do chyba najlepszego środowiska Javy: Eclipse - to niebo a ziemia. Fakt, że w Eclipse jest kilka ciekawych rozwiązań jak np. "organise imports" albo "quick fix" (genialne!) ale poza tym to chodzi tak wolno, że szkoda gadać. A jeśli chodzi o czas uruchomienia programu, to bije chyba rekord Guinessa.

To takie moje prywatne porównanie.
Każdy powinien sam sobie porównać.

0

Nie pisałem nic w C#, ale patrząc na kieszonkowy poradnik, to C# wygląda całkiem przyjemnie. Trochę wygląda jak Java. Podobno programy w C# działają szybciej niż pisane w Java, bo MS nie powtórzył błędu Suna i obiekty mogą być alokowane na stosie, jak w C.

Co do Javy: piszę w tym od 2 lat różne projekty, głównie komercyjne i przyznam, że sprawdza się nieźle, mimo mojej niechęci do tego języka. Niechęci spowodowanej głównie:

  1. Powolnością i pamięciożernością wszystkiego co w Javie i dla Javy. "Java szybka prawie jak C++" to niestety tylko reklama. Jeśli chcesz wygodnie pracować, to musisz mieć co najmniej 512 MB RAMu, ale 1 GB zalecane.
  2. Brakiem const.
  3. Brakiem wzorców. W 1.5 jest trochę wygodniej, ale nadal to nie daje tych możliwości co w C++ (może ktoś się wypowie na temat C#?)
  4. Porównaniami stringów: if (napis.equals("abc")) to nie to samo co if (napis == "abc"). To drugie nie będzie działać - naciąłem się parę razy, choć rozumiem, dlaczego tak musi być.
  5. Brakiem prawdziwego wielodziedziczenia - czasem powoduje to konieczność nadmiernego używania Ctrl-C + Ctrl-V - dodatkowa podatność na błędy.
  6. Definiowaniem okienek w kodzie, nawet ze wspomagaczem graficznym (Netbeans). Patrz "totally gridbag" w dziale humor.
  7. Mało funkcjonalnym API. Zwłaszcza w J2ME. Nie ma obracania obrazków i przezroczystości. Robienie gier to zabawa dla magików. Wczytanie, modyfikacja i zapis obrazka w J2SE, to też droga przez mękę.
  8. Wszechobecną, obowiązkową obiektowością. Czasem powstają programy posiadające jedną klasę z 50 funkcjami statycznymi.
  9. Stosowaniem przez wszystkich Javy wszędzie gdzie się da, a gdzie jej stosowanie jest zupełnie nieuzasadnione. Robienie serwera na Javie jest głupie - przenośność nikomu w tej sytuacji nie jest potrzebna, a wydajność owszem. Serwlety Javy ledwo są w stanie wyprzedzić wydajnością PHP, które i tak jest kilkadziesiąt razy wolniejsze niż C++.

Poza tym Java jest bardzo sympatycznym językiem. Można się przyzwyczaić. :)

0
Krolik napisał(a)
  1. Powolnością i pamięciożernością wszystkiego co w Javie i dla Javy. "Java szybka prawie jak C++" to niestety tylko reklama. Jeśli chcesz wygodnie pracować, to musisz mieć co najmniej 512 MB RAMu, ale 1 GB zalecane.
    Ha! miałem 256MB ramu (win2k) i odpalenie eclipsa i projektu w javie to koszmar - swap ledwo się wyrabiał. Wkurzyłem się, poszedłem do sklepu i dokupiłem 1GB ramu :] Dopiero zaczęło to chodzić normalnie.
Krolik napisał(a)
  1. Porównaniami stringów: if (napis.equals("abc")) to nie to samo co if (napis == "abc"). To drugie nie będzie działać - naciąłem się parę razy, choć rozumiem, dlaczego tak musi być.
    W C# identyczna składnia. Ja bardzo szybko się przyzwyczaiłem.
Krolik napisał(a)
  1. Definiowaniem okienek w kodzie, nawet ze wspomagaczem graficznym (Netbeans). Patrz "totally gridbag" w dziale humor.
    W C# tak samo - ale edytorek formatki wygląda jak w poprzednich wersjach VS - można nawet nie wiedzieć, że formatka jest zapisywana teraz w kodzie a nie w zasobach. Więc tu na plus. "totally gridbag" to trafna uwaga - tak to właśnie zawsze wyglądało - ..naście paneli aby coś dobrze rozmieścić albo uciążliwy pusty layout i ręczne pisanie współrzędnych. (nie miałem okazji korzystać ze wspomagacza graficznego dla Javy)
0

Co do wzorców to całkiem dobrze jest to opisane na
http://jdn.pl/do/news?sec=eckel

Z tego tekstu wynika ,ze na chwile obecna w C# jest z tym lepiej.

Jest dosyc logiczne ,ze twórcy C# w pewien sposob korzystajac z doświadczenia javy nie popełnili tych samych błędów.Obecnie trwaja prace nad 6 wersja bibliotek JDK można miec jedynie że tym razem przyniesie wiele pozytywnych zmian.Generalnie największą pzreszkodą w dokonaniu więskzych zmian jest tzw. zgodność wstecz wymuszona naciskami firm z zewnątrz które mowią "zmieniajcie sobie co chcecie byle byśmy my nie musieli nic zmieniać"(tak przynajmniej wyczytałem na jednym z serwisów)

W tym tygodniu była u mnie na wydziale prezentacjia Motoroli.I co się okazało? Nie "króluje" tam C# ani java ale stary poczciwy c++. Widocznie c++ nie jest aż tak zły ,zeby wydawać sporą kaske na szkolenia personelu.

pzdr

0

W tym tygodniu była u mnie na wydziale prezentacjia Motoroli.I co się okazało? Nie "króluje" tam C# ani java ale stary poczciwy c++. Widocznie c++ nie jest aż tak zły ,zeby wydawać sporą kaske na szkolenia personelu.

Java i .NET są mocno przereklamowane. Większość pozytywnych cech tych środowisk można uzyskać w C++ płacąc przy okazji znacznie mniej:

  • Przenośność. C++ jest bardzo dobrze przenośne - chociażby zobaczcie na ilu platformach działa GCC. Może spokojnie konkurować z Javą, a .NET na razie mocno wyprzedza. Jedyna wada - konieczność rekompilacji, ale czy to jest tak naprawdę takie straszne ograniczenie? Eclipse startuje się właśnie tak wolno, bo się ZA KAŻDYM RAZEM kompiluje do pamięci (JIT/HOTSPOT). A jak mu się zabroni, to i tak chodzi 20 razy za wolno. :D
  • Rozbudowane API - nie ma powodów dla których nie można mieć przenośnych bibliotek do wszystkiego w C++. Trzeba je tylko zaimplementować (a dokładniej pewną warstwę pośredniczącą, bo spora część może być wspólna dla wszystkich platform). W Javie wcale nie jest łatwiej - implementacje JVM na różne platformy są przecież różne.
  • Garbage collector - jak ktoś chce, mogę dobrze przetestowaną implementację podrzucić. Zrobiłem w tym już 2 serwery (www i dns) i pisanie w tym to po prostu miodzio - jak Java. Przy czym chodzi szybciej i się nie zacina i NADAL pozwala ręcznie zarządzać pamięcią.
  • Bezpieczeństwo, sandboxing - dotąd był to istotny problem. Jednak nowe procesory IA64 i AMD64 mają blokadę wykonania stron danych, czyli można zrealizować sandboxing w C/C++ za pomocą weryfikacji kodu przed uruchomieniem. I będzie to działać szybciej niż sandboxing w czasie wykonania w JVM. Można połączyć też obie metody. No i OS może realizować sandboxing, ale to jest nieprzenośne.
  • Dynamiczne ładowanie modułów - jest realizowane przez OS. Nie potrzebujemy do tego VM.

Jedyne czego sobie nie wyobrażam, to współistnienia kodu pisanego w różnych językach tak swobodnego jak w .NET. Ale czy w .NET też to nie jest trochę oszukane? W końcu jak piszę w Basicu .NET, to muszę używać CLR, czyli to już nie jest ten sam Basic. Pewnie połowa rzeczy znanych ze starego VB nie działa, bo została zastąpiona przez "wspólny mianownik", choć może się mylę...

A wsadzanie Javy do telefonów kom. to jest jakieś nieporozumienie. Przenośności to i tak nie ma ŻADNEJ. Każdą grę i tak musimy dostosować na każdą serię telefonów osobno - nawet zaczęliśmy stosować preprocessing z C (serio: przepuszczamy kod Javy przez "gcc -E").

0
  • Garbage collector - jak ktoś chce, mogę dobrze przetestowaną implementację podrzucić. Zrobiłem w tym już 2 serwery (www i dns) i pisanie w tym to po prostu miodzio - jak Java. Przy czym chodzi szybciej i się nie zacina i NADAL pozwala ręcznie zarządzać pamięcią.

Ja bylbym zainteresowany. Moj mail to [email protected]

0
Marooned napisał(a)

W C# .NET piszę aktualnie swój pierwszy projekt (pomijam "Hello world" ;)) za to całkiem rozbudowany: przenoszenie danych z jednej bazy (InterBase) do drugiej (MS SQL Server) z użyciem XML jako danych i kilku innych technologii.
Mogę stwierdzić, że pisze się w tym prosto, łatwo i przyjemnie. Bardzo dobrze oceniam C#.
A już środowisko MS VS .NET 2003 jest prawie rewelacyjne (próbuję zapomnieć o strasznym wrażeniu po pracy w MS VS 6.0).

Mam pytanko, zawsze pracowalem na mysqlu, po zainstalowaniu MS VS .NET mam dostepne jakies bazy danych ? czy musze instalowac np. MSSql czy cos podobego, jakas microsoftowa bazke? Sory za pytanie moze troszke "laiczne" ale dopiero zaczynam jazde. :)

0
Glina napisał(a)

Mam pytanko, zawsze pracowalem na mysqlu, po zainstalowaniu MS VS .NET mam dostepne jakies bazy danych ? czy musze instalowac np. MSSql czy cos podobego, jakas microsoftowa bazke? Sory za pytanie moze troszke "laiczne" ale dopiero zaczynam jazde. :)
MS VS .NET to środowisko programistyczne wraz z kompilatorem etc. Nie ma nic wspólnego z bazą danych.
VS obsługuje oczywiście bazę MS SQL Server. Dodatkowo są komponenty ADO, które chyba (nie używałem nigdy) pozwalają na obsługę innych baz.
Do obsługi InterBase używam osobnego providera .NET - do MySQL zapewne rownież taki jest (poszukaj projektu Mono).

0

Ja tam dopiero zaczynam pisac w C# ale jezyk jak i cal platforam mi sie podoba( jave tez poznaje ale jakos nie przypadla mi do gustu )

A jesli chodiz o wzorce( szablony) to o ile mi wiadomo w framework'u 1.1 i jezyku C3 dla tej wersji nie ma takiej mozliwosci ale ma sie pojawic w wersji 2.0 czyli gdizes w tym roku. w ogóle wersja 2.0 i Visual 2005 ma miec duzo ciekawych funkcji ( jak chocby nazedzie do UML'a zintegrowane z Visualem, tylko trzeba poczekac i zobaczyc co z tego wyjdzie)

pozdrawiam
Assassin

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