Egzotyczna Java

W pracy byłem zmuszony rozkminić co dolega pewnemu przyogromniastemu programowi. Javowemu. Nie, żebym ja znał javę, no ale to na szczęście język mainstreamowy, więc poza jakimiś dziwadłami składnia wygląda jak najbardziej znajomo (a znaczenia różnych keywordów można się domyślić).

Ale co tam składnia. Po raz pierwszy widziałem na oczy kod spełniający chyba wszystkie normy SANEPIDu, BHP, ppoż i czego tam jeszcze. Każda klasa, każda funkcja, wszystko idealnie okomentowane!

I rzeczywiście, pisanie za każdym razem System.out.println, zamiast po prostu print, czy też JakaśKlasa.jakaśBardzoŚmiesznaFunkcja było upierdliwe, ale czytelność tego kodu z nawiązką to rekompensowała. Gdybym od tego momentu mógł dostawać tylko i wyłącznie taki kod do najeżania moimi obrzydliwymi hackami, to może nawet zostałbym programistą Javowym.

  1. 1. walczyk

    szkoda tylko spadku szybkości aplikacji... chociaż język jest naprawdę przyjemny

  2. 2. TomekB

    Jakiego spadku? Jakich aplikacji?

  3. 3. gshegosh

    Spadek wydajności to mit:

    1. Współczesne maszyny wirtualne Javy stosują kompilację Just-In-Time, przy której można nawet pokusić się o optymalizację bazującą na danych znanych dopiero _runtime_ - wynik jest taki, że programik liczący coś w Javie może być wręcz szybszy niż taki w C++.

    2. Współczesny sprzęt jest szybki i (stosunkowo) tani. U mnie (na Athlonie 2600+ z 1,5GB RAMu) taki Eclipse chodzi wyśmienicie. Większość poważnych aplikacji webowych także stoi na jakimś Weblogicu czy innym OASie na mocnych maszynach.

    3. Nawet jeśli przyjmiemy, że aplikacje pisane w Javie są 20% wolniejsze, to w fazie ich tworzenia i testowania oszczędza się znacznie więcej czasu dzięki temu, że Java nie pozwala programiście strzelić sobie w nogę. Nawet jeśli jest ekspertem.

  4. 4. Jajcuś

    Spadek wydajności to nie jest mit. Mitem jest to, że ten spadek jest tak istotny. W większości przypadków nie jest tak istotny, jak oszczędności, które się dostaje.
    Ale _trzeba_ o spadku wydajności pamiętać. Żeby wiedzieć _kiedy_ sobie Javę (i podobne technologie) darować, a jeszcze bardziej po to, żeby wiedzieć jak z tej Javy korzystać. Często rozwiązanie, które przejdzie ulgowo w C++, w Javie lub Pythonie da nieakceptowalną wydajność, ale to nie znaczy, że danego problemu nie da się właściwie w Javie/Pythonie rozwiązać.

  5. 5. Cachotterie

    Istotność tego spadku dość mocno zależy od tego, czy mówimy o aplikacji okienkowej czy serwerowej - Java często najbardziej zauważalna (na niekorzyść, bo pamięciożerna) jest na desktopie, bo kto się interesuje czy jak wklepie jakiś adres, to pod spodem jest java czy IIS z .NETem czy PHP na apachu czy jeszcze coś innego. O ile faktycznie Swing zwykle jest bity na głowę przez aplikacje pisane w środowisku natywnym, o tyle np. taki tomcat (który nb ma opcjonalnie pewne wstawki natywne żeby zwiększyć wydajność) zważywszy na tempo i wygode pisania zdecydowanie IMVHO wypada na korzyść. Oczywiście nikt nie będzie pisał w javie sterowników do sprzętu (raczej :> ).
    I generalnie wszystko sprowadza się do tego, co powtarzał nam już na pierwszym roku profesor - dobry informatyk to nie ten który będzie megaspecem od jednej technologii i będzie ją pakował wszędzie jak leci, tylko ten który potrafi dobrać narzędzie do zadania. Czasem będzie to nawet AWK ;)

  6. 6. Hoppke

    Byłem długo uprzedzony do Javy, bo pierwsze programy javowe zobaczyłem pod Win95, jako applety na jakichś stronach www. Koszmarnie długo się ładowały (modem 33,6), potem dysk rył ładując JVM... no, koszmar.

    Potem widziałem "Javę" w takich rzeczach jak Azureus (jeeezu, ile to ramu żre?!).

    I myślę, że nie tylko mi Java się kojarzy z powolnym GUI, wielkim zużyciem ramu i appletem chatu w którym nie ma pliterek ;)

    Ale oprócz tego Java to może być np. jakaś aplikacja rozbita na kilka fizycznych maszyn, bardzo wydajnie komunikująca się z bazą danych, do której użytkownicy mają dostęp przez www, i gdzie nie ma problemów ze wskaźnikami, przepełnieniem bufora, obsługą błędów etc.

    Java to może też być nakładka/rozszerzenie/interfejs do jakiegoś byczego systemu "legacy".

    Java to może też być jakiś portal www. I nikt z zewnątrz nie odróżniłby go pewnie od czegoś pisanego w PHP.

    Java jest świetna do rzeczy których napisanie w, powiedzmy, C++ jest oczywiście możliwe, ale wymaga potem piętnastoletniego cyklu usuwania błędów, a jakikolwiek refactoring, rozszerzanie funkcjonalności czy re-use komponentów brzmi w uszach koderów jak "front wschodni" ;)

    A taki Azureus to dość chwiejny temat. Z jednej strony - okropny wybór by zrobić w Javie GUI. Ale z drugiej - jest, działa, nie ma bardziej zaawansowanego konkurenta, jest od razu na parę systemów operacyjnych...

  7. 7. mmazur

    Analogiczny do Azureusa przy bittorencie jest Limewire przy gnutelli. Też java i też najpopularniejszy klient.

  8. 8. reuptake

    a nie przyszło ci do głowy, że czytelność programu dla osoby, która jak rozumiem, po raz pierwszy pochyliła się na dłużej nad javą, może powodować spadek czytelności dla bardziej zaawansowanych osób?

    w mojej opinii java jest przegadana. czytelność to są dwie rzeczy: klarowność i zwięzłość. java jest klarowna, ale nie jest zwięzła. programy w javie są za długie, linie są za długie, jest masa powtarzania się. jak ktoś kiedyś napisał, java to świetny język dla przeciętnych programistów :)

    poza tym nie do końca rozumiem, co ma do javy fakt, że kod jest "okomentowany". toż komentować i asembler można.

  9. 9. Cachotterie

    Linie są za długie jak masz kiepskich programistów i w życiu nie słyszeli o czymś takim jak Prawo Demeter (ani wzorcach projektowych generalnie).
    Problemem (chociaż może jednak zaletą?) javy jest raczej to, że jest świetnym językiem RÓWNIEŻ dla przeciętnych programistów.

  10. 10. mmazur

    A nie przyszło ci do głowy, że to o czym mówisz nie ma absolutnie nic wspólnego ze znajomością języka jako takiego, a co najwyżej ze znajomością konkretnego kodu?

    A skoro już wiemy kto ma większego...

    Wiem do czego pijesz, ponieważ sam się wywodzę raczej z tych języków zwięźlejszych, a i tak jestem w stanie docenić wygodę jaką daje mi taka java. Zwłaszcza w kontekście współpracy z większą ilością programistów przy rzeczywiście niemałym projekcie.

    Już nie wspominając o tym, że programistów *przeciętnych* zgodnie z definicją przeciętności jest najwięcej, więc ty najprawdopodobniej też jesteś przeciętny. I jeśli miałbym na ślepo brać po tobie jakiś projekt do obróbki, to znacznie bezpieczniej byłoby dla mnie, gdybym jednak preferował projekt napisany właśnie w stylu tego javowego o którym napisałem.

    Zaś co do komentarzy, to nie chodzi mi stricte o same komentarze ile ogólnie o "kulturę" pisania danego projektu w konkretnym języku. I tutaj fakt, że było to napisane właśnie jak typowy wysokiej klasy projekt javowy (wszystkie nazwy sensowne, wszystko idealnie okomentowane) zaoszczędziło mi pewnie bardzo duże ilości czasu.

  11. 11. reuptake

    ja nie mówię, że java nie ma zalet. została właśnie opracowana dla zespołów przeciętnych programistów pracujących w przeciętnych korporacjach i tam się sprawdza. ponadprzeciętnie. ogólnie masz rację, że pewnie projekt w javie jest najłatwiej kontynuować po kimś. tylko trochę mam wątpliwości, czy "kontynuowalność" jest najważniejszą zaletą języka. generalnie: solidne nudziarstwo. to tak jakby ktoś zaczął pisać sprawozdanie z zebrania i umarł z nudów: łatwo to po nim dokończyć. poemat trzynastozgłoskowcem trudniej :)

  12. 12. Cachotterie

    Heh, no jeśli piszesz program, który po pół roku może bez trudu zostać zastąpiony nowym, to kontynuowalność ma marginalne znaczenie. Jeśli piszesz system, który ma żyć 10 lat i w trakcie ma być rozwijalny, to kontynuowalność jest dużą zaletą. Czy takie systemy piszą "przeciętni programiści w przeciętnych korporacjach" to już bym się spierała (dla mnie w ogóle pojęcie "przeciętna korporacja" jest swego rodzaju oksymoronem).

    "Największe zalety języka" zależą od zastosowania. Na pewno jeśli chcesz szybko napisać jakiś programik, którego wiesz że nie będziesz rozwijać, tylko dostarczysz as-is, ew. będziesz poprawiał błędy, to największą zaletą będzie właśnie szybkość i wygoda pisania. Jeśli zaś masz zacząć pisać system na 10 lat, który na dodatek ma zmieniające się w czasie wymagania, to śmiem twierdzić, że tylko język który mocno wspomaga fluktuację kadry jest stosowalny, bo raczej ciężko liczyć, że przez te 10 lat w tym projekcie będzie identyczny skład zespołu. Na dodatek dobrze by było jakby taki język wymuszał czytelne kodowanie i żeby nawet przeciętny programista nie mógł zbyt łatwo w nim napisać spaghetti code.

  13. 13. Patrys

    Cachotterie:

    Nigdy nie ma się pewności, że czegoś nie będzie się rozwijać w przyszłości ;)

    A jeśli nie osobiście, to ktoś inny na pewno będzie. W myśl zasady, że daje się to, co chciałoby się dostać samemu, zawsze powinno się oddawać kod czytelny :)

    Co do samej Javy - na desktop się nie nadaje, narzut startu maszyny wirtualnej jest spory, a narzut pamięci dla większych projektów jest czasem nie do zaakceptowania na przeciętnej maszynie desktopowej. Odpalenie tego samego na serwerze daje sporą przewagę nad takim PHP - JVM + portal, aplikacja, czy cokolwiek innego jest ładowane ze startem Tomcata, więc overhead obsługi zapytania jest mniejszy niż w przypadku PHP. Do tego dochodzi możliwość prealoadowania krytycznych danych z dysku/bazy i zbudowanie sobie np. B-drzewka do szybkiego przeszukiwania tego.

    A sterowniki sprzętu są jak najbardziej realne w Javie, tyle że nie po stronie desktopu, do którego ten sprzęt się podłącza. Java była projektowana z myślą o zagnieżdżaniu jej właśnie w sprzęcie. Oryginalny projekt dotyczył programowania dedykowanego chipsetu (operującego natywnie na bajtkodzie) w sprzęcie AGD - zdaje się chodziło o firmware do lodówek i kuchenek mikrofalowych, ale nie chce mi się sprawdzać.

    A zakończyć pozostaje mi stwierdzeniem, że i tak Python jest najlepszy ;)

  14. 14. reuptake

    przeciętna korporacja oksymoronem?

    toż przecież wszystkie korporacje dążą do przeciętności (unifkacja wszystkiego, od softu do dress codu).

    co do reszty, to dyskusja zaczyna zmierzać w kierunku kompletnego rozmycia (porównywanie maszyn wirtualnych etc). co do czytelności, to każdy ma swój gust. dla mnie java jest tak czytelna jak "noce i dnie". każdy zdanie jest doskonale czytelne, ale przebić się przez całość...

  15. 15. GiM

    skoro komentarze się robią OT, to też sobie pozwolę:
    @reuptake:
    korporacjie dążą do przeciętności? jeśli masz na myśli standaryzowanie, to ciężko mi to w jakikolwiek sposób odnieść do dążenia do przeciętności.
    korporacja przynajmniej tak jak zawsze rozumiałem ten termin w odniesieniu do firm, oznacza rozbudowaną firmę/spółkę, a samo to chyba powinno odróżniać ją od firm jako takich, także zgadzam się w tym momencie z Cachotterie, dla mnie to także jak oksymoron...

    Ja osobiście piszę w C (ew ostatnio zaczynam w pythonie), ale, powiedz mi, dostajesz kod do dokończenia, masz na to miesiąc czasu, co wolisz czytelność i "nudziarstwo", czy "trzynastozgłoskowca", którego będziesz próbował przegryźć, z powodu nieczytelnych konstrukcji?

Adde commentarium: (textile lite)