Dlaczego Java?

0

Cześć,
aktualnie stoje przed wyborem nauka: Java vs. Python (ew vs. C#)

Przeglądając oferty pracy, zlecenia i różne branżowe serwisy co rusz napotykam na informacje o Javie, Java tu, Java tam?. Dlatego mam pytanie, co sprawiło, że ta platforma jest tak popularna?

Rozumiem plusy Javy, główne hasło, raz pisz, uruchamiaj wszędzie, potężne wsparcie środowiska, multum materiałów ale w czym konkretni Java jest lepsza od Pythona?, czy plusy które wymieniłem na wcześniej wynagradzają "mułowatość" aplikacji które są w niej napisane?

2

Z tym "raz pisz, uruchamiaj wszędzie" byłbym ostrożny. Żeby zrobić cokolwiek bardziej rozbudowanego trzeba i tak użyć natywnych bibliotek DLL, a te już są zależne od platformy.
Nie wiem o jakiej ty "mułowatości" mówisz, zapewne naczytałeś się dziwnych wypracowań fanbojów low levela. Niedawno przekonałem się, że fajna wysokopoziomowa implementacja stringów w Javie z wsparciem wydajnej VMki potrafi pewne operacje wykonać szybciej niż natywny stdlib z C++. Różne poziomy to różne ograniczenia, ale też różne dodatkowe wodotryski.

0

Zdaniem mojego kumpla, plusem Javy jest łatwość integracji wielu funkcjonalności - czyli że ma dużo napakowane w standardzie, coś do rysowania, coś do GUI, ma to swoje całe RMI itd.

Minusem jest to, że Java jest toporna, nie jest elastyczna (wymusza rozwlekłość kodu, np. stosowanie wyjątków), a do sprawnej pracy z nią koniecznie trzeba używać IDE na miarę NetBeans - w przeciwnym razie wymaga nauki bardzo wielu rzeczy na pamięć. Większość zleceń/ofert pracy jest na Javę i C#, bo o Pythonie niestety mało kto słyszał i mało programistów go używa, no i jeszcze na studiach (przynajmniej na mojej uczelni) Pythona nie uświadczysz. Zazwyczaj jak już jest jakieś zlecenie do zrobienia w Pythonie to chodzi o serwis internetowy na Django... A w Pythonie można robić całą masę innych rzeczy (ot takie moje mini projekty ;) - http://www.jason.gd/str/pokaz/Bricks_Knock_Off ; http://www.jason.gd/str/pokaz/Too_Many_Troopers_2 ). Nie wiem, czy zastosowanie Pythona w firmach zmieni się w najbliższym czasie, mam nadzieję, że tak ;) Jakbyś patrzył na aktualny stan rzeczy i chcesz tworzyć dla firm, a nie np. we własnej firmie to lepiej zajmij się Javą. W sumie jak masz zlecenie, w którym sam sobie dobierasz technologie, to też jest opcja na wykonanie tego w Pythonie ;) Ja na razie sobie piszę w tym, w czym mi wygodniej ;)

Złośliwcy zawsze wytykają, że Python jest dość wolny... Zazwyczaj wąskim gardłem jest kod napisany przez programistę, a nie środowisko w którym to uruchamiasz. Np. mamy na studiach algorytmy genetyczne, standardowe rozwiązanie to Java + biblioteka Galib. My robiliśmy niestandardowe rozwiązanie - kolega podczas przepisywania biblioteki galib z Javy do php i zauważył, że twórca tej biblioteki chociaż zna się na algorytmach genetycznych, to brak mu umiejętności programistycznych/optymalizacyjnych - nasze rozwiązanie w php wykonuje się dużo szybciej :)

0

Osobiście nienawidzę tego języka, ale jest dla niej dużo ofert pracy. Chyba głównie dlatego, że jest ona dłużej niż C#, oraz jest multiplatformowa. Jeżeli nie dostaniesz odruchów wymiotnych po pewnym czasie, to możesz się zacząc jej uczyc, ewentualnie ostatnio furorę podobno robi Scala (tez na JVM), nie wiem, nie korzystałem, Wibowit chyba powinien się wypowiedziec na ten temat.

0

Akurat ostatnio Scala ma bardzo duzo zlej prasy jako jezyk zbyt skomplikowany, zagmatwany, C++-podobny, itp. itd. Nie ze wszystkim sie zgadzam, ale troche prawdy w tym jest.
Java jako jezyk to gowno, ale JVM jest bardzo ciekawe - wiele jezykow, wiele opcji, wiele mozliwosci. I ciagle powstaja nowe.

0

no i jeszcze na studiach (przynajmniej na mojej uczelni) Pythona nie uświadczysz

Ty tak poważnie? To ja współczuje uczelni ;] Rozumiem że u was tylko asm 8051 i C ?

Czemu pracodawcy wolą Javę od Pythona? Bo ma gigantyczne wsparcie w warstwie biznesowej. Bo większość komputerów ma JRE i nie trzeba sie martwić ze użytkownik nie będzie umiał uruchomić programu. Bo wymusza pewien sposób kodowania - to, tak samo jak wymuszone deklarowanie wyjątków jest zaletą a nie wadą! Bo jak piszesz coś co ma więcej niz 10 linijek i nie jest hello worldem to takie rzeczy są niezbędne. Chyba ze lubisz jak pierwszy wyjątek jaki możesz złapać to NullPointerException 20 ramek wyżej ;]
Python pozwala na pisanie niemalże rodem z Perla, czyli write-only. W przypadku kodu systemów które muszą być przez lata utrzymywane i modyfikowane takie podejście absolutnie nie może mieć miejsca.

0

@ucilala: no tak, jest np. Jython... tylko, że jak odpalam np. swój prosty test iloczynu kartezjańskiego rozdzielonego na wiele wątków, to strasznie wolno to działa:

~$python Przyklad2.py
1 thr: 432771
000.293231

2 thr: 432771
000.355827

~$jython Przyklad2.py
1 thr: 432771
002.677000

2 thr: 432771
002.116000

No i jeszcze to w Jythonie zanim się uruchomi to trzeba czekać kilka sekund, a w Pythonie wynik mam praktycznie od razu po uruchomieniu skryptu. Liczba po prawej od thr oznacza ilość elementów większej listy, pod thr jest całkowity czas wykonywania.

0

Scala ma bardzo duzo zlej prasy jako jezyk zbyt skomplikowany, zagmatwany, C++-podobny

Ja się pytam w którym miejscu jest podobny? Równie dobrze można napisać, że Whitespace jest Pythonopodobny, bo przejmuje się wcięciami. Java/ C# mają składnię wzorowaną na C++, ale Scala na pewno nie. Scali dużo bliżej do składni języków typowo skryptowych.
Scala jest trochę zagmatwana, ale nie wydaje mi się, żeby była dużo bardziej zagmatwana np od C#. Można porównać np ilość słów kluczowych w najnowszym C# i najnowszej Scali. Owszem, obecna Java czy C są mało skomplikowane, ale równocześnie są toporne. Scala jest "sprytna", ale nauka jej jest dość długa i pod górkę. Co wolisz, szybką naukę języka, mnóstwo leszcze programujących w tym języku, a potem użeranie się z beznadziejnie napisanymi programami, czy trudny, ale elastyczny, zwięzły i dobrze otypowany język, brak leszczy i na pewno przyjemniejsze rozwijanie programów w tym języku? Przesadna łatwość języka powoduje duże zagęszczenie leszczy wśród użytkowników tego języka, można przeczytać np artykuł: http://developers.slashdot.org/story/11/12/09/1533252/java-apps-have-the-most-flaws-cobol-the-least - koszt na linię naprawy błędu w Javie jest najwyższy.
Oczywiście język Java to nie jedyny język na platformę Java, być może ta niefortunna zbieżność nazw (w przypadku rozwiązania MS język to np C#, a platforma to .NET, a więc różne nazwy) powoduje zamieszanie. Wg mnie oczywiście najbardziej wartościowy "dodatkowy" język na JVM to Scala, oprócz niego jest mnóstwo innych popularnych, jak np Groovy, JRuby czy Clojure. Te języki bardzo dobrze się integrują; integracja jest dużo łatwiejsza niż np tandemu C++ + Haskell. W przypadku tandemu Java + Scala można korzystać z klas w obie strony, tzn Scala może korzystać z dowolnej Javowej klasy, natomiast Java z niektórych Scalowych (nie może korzystać z traitów z implementacją/ stanem na przykład).
Poza tym np własne JVMy ma wiele firm, sytuacja jest może nawet trochę podobna do Linuksów, skrojonych na miarę pod każdą firmę. Są np drogie ale wydajne i praktycznie bezpauzowe JVMy jak: http://www.azulsystems.com/ Jeśli chodzi o VMy do C# to oprócz produktu MS jest Mono, ale jest ono niedopracowane i ma kiepską (tzn kilkadziesiąt procent niższą) wydajność w stosunku do produktu MS.

0
Spine napisał(a)

@ucilala: no tak, jest np. Jython... tylko, że jak odpalam np. swój prosty test iloczynu kartezjańskiego rozdzielonego na wiele wątków, to strasznie wolno to działa:

~$python Przyklad2.py
1 thr: 432771
000.293231

2 thr: 432771
000.355827

~$jython Przyklad2.py
1 thr: 432771
002.677000

2 thr: 432771
002.116000

No i jeszcze to w Jythonie zanim się uruchomi to trzeba czekać kilka sekund, a w Pythonie wynik mam praktycznie od razu po uruchomieniu skryptu. Liczba po prawej od thr oznacza ilość elementów większej listy, pod thr jest całkowity czas wykonywania.

Przemilcze Jythona, to jest dosc wolna zabawka, tak naprawde niezdatna do uzytku (moim skromnym zdaniem).

0

@Wibowit: podobny do C++ w sensie ze pozwala na wszystko, jest nadzbiorem tysiaca innych jezykow. Prawde mowiac bardzo czesto kod scali jest okreslany 'executable ascii art', ktore to okreslenie czyni go podobnym do ... perla, ktory rowniez ma taka renome.
Reszty nie czytalem i nie przeczytam, bo jestes znanym na forum fanboyem scali, a nic nowego madrego czego o scali nie wiem i tak nie napiszesz. Nie wiem jak przeszedles do Ms i Mono (widzialem gdzies w ostatniej linijce o tym) - znaczy post jest chaotyczny, czyli pisany pod wplywem emocji, == nie warto czytac. Sory.

0
  1. Co to znaczy "pozwala na wszystko"? Jest jakiś język ogólnego przeznaczenia niekompletny w sensie Turinga? Bo jak jakiś jest, to można zrobić w nim wszystko to co w dowolnym innym. Czy jest coś w Scali czego nie da się zrobić np w Haskellu czy nawet w Javie? Przecież Scala jest oparta o JVM i tak samo jak Java jest statycznie typowana. Scala jest językiem obiektowym i funkcyjnym zarazem. Można w niej pisać imperatywnie zamiast funcyjnie, ale to przecież można i w Haskellu na upartego za pomocą monad. W Javie też można pisać funkcyjnie, np interfejs Runnable to nic innego jak przekazywanie funkcji do funkcji, jedyna różnica do Scali to zwięzłość zapisu, a to wiadomo w Javie kuleje. To "executable ascii art" czego ma dokładnie dotyczyć? Wieloparadygmatowości? Zwięzłości zapisu? Nazw funkcji w bibliotece standardowej? Jakiś argument napisz, a nie powielaj powiedzonek z kapelusza.
  2. O .NETu (moja odmiana słowa) wspomniałem, bo to jest główny konkurent Javy, a porównywałem dostępność VMek od różnych producentów. Implementacji CLR jest bardzo mało, oprócz MS jest Mono, no i w zasadzie tyle, nawet dotGNU jest chyba nieużywalne.
  3. C++ jest krytykowany, bo ma zagmatwaną składnię. Jako tako pod względem funkcjonalności C++ stoi nawet na dość dobrym poziomie, kwestia jest tylko ogólnego rozplanowania. C++ bardzo długo ewoluował, kolejne wersje są kompatybilne ze sobą, a nawet C++ jest kompatybilny z bardzo starym C (chociaż w delikatnie ograniczonym stopniu). Można by zrobić język dużo lepiej rozplanowany niż C++ o takiej samej albo i większej funkcjonalności, ale kto by tego używał? Kompilatory C++ są dopracowane "do granic możliwości". Jest niby język D, bardziej ludzki niż C++, tak samo kompilowany do natywnych statycznych binarek, ale te binarki są sporo wolniejsze niż te wyplute przez kompilatory C++. I język D raczej nie jest okrojonym z funkcjonalności C++em.
  4. Nie uważam nigdzie, że język Scala, albo platforma Java to ideały i nic już się w nich nie da poprawić. Mam jednak awersję do języków dynamicznie typowanych oraz lubię ideę maszyn wirtualnych: "write once, run everywhere" - to rzeczywiście sprawia, że jestem trochę nieobiektywny, ale na pewno nie sprawia tego konkretny język czy platforma.

Kiedyś twierdziłem, że procki od AMD były lepsze. Teraz twierdzę, że procki od Intela są lepsze. To znaczy, że obecnie jestem fanbojem Intela?

Wymień mi wszystkie wydajne i przenośne platformy dla języków zarządzanych statycznie typowanych. Ile takich znasz? Wypisz je to je porównam.

Zarzucasz mi fanbojstwo, a ja mam po prostu konkretne wymagania.

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