Dlaczego nienawidzę javy?

Na wstępie chciałbym cię ostrzec, że artykuł prawdopodobnie będzie miał posmak mojej opinii (co nie jest jakimś zaskoczeniem sądząc po tytule), ale nie będzie do końca o tym co sugeruje tytuł. Chciałbym też zaznaczyć, że nie jestem całkowitym anty-fanem javy jestem w stanie zrozumieć dlaczego niektórzy lubią ten język co mam nadzieję będzie widać, słowo „nienawiść” jest zbyt mocne i w sumie tytuł tego wpisu powinien brzmieć „dlaczego czuję niechęć do javy”.

Skąd pomysł na artykuł? Wbrew opinii 90% studentów u mnie na studiach nie uważam javy za lepszą i przyjemniejszą od c++, a od jakiegoś czasu jestem zmuszony w niej pisać i tak powstał ten artykuł gdzie musiałem porzuć pierwotne plany na dzisiejszy dzień gdzie zamiast pisać lekcję gry RPG, to musiałem siedzieć z javą.

Bez zbędnego przedłużania: Dlaczego nienawidzę Javy?

Aktualizacja z dnia: 31.10.2017: warto zauważyć, że niniejszy post powstał już lata temu i faktyczny stan rzeczy z „dzisiaj” może być różny od tego co miało miejsce wtedy gdy on powstawał (np. moja opinia jest już nieco inna o Javie, podobnie o języku na start). Należy też pamiętać, że jesteśmy w dziale „poetycznym”, a więc „luźne gadki” i nie należy go brać na poważnie ;)

 

1. Garbage collector


Zdaniem niektórych cudowna rzecz bo nie trzeba się martwić o dość łatwe w przypadku c/c++ wycieki pamięci gdy pracuje się z operatorami new i delete. Moim zdaniem fajna rzecz, ale jako ciekawostka. Naprawdę nie miałbym nic przeciwko temu, gdyby można było w łatwy sposób wyłączyć automatyczne usuwanie danych z pamięci i pozwolić programiście zrobić to w jego zdaniem najbardziej odpowiednim momencie (bo najpewniej zrobiłby to lepiej).

 

2. Wydajność


Java miała być dzieckiem tego co najlepsze w ówczesnych językach programowania, wyszło… cóż. Idea zakładała uniwersalność pisanych programów na dowolnej platformie, a jak się okazało kod javy nie jest zawsze tak samo wydajny na różnych urządzeniach i tak np. jak działa na Windowsie każdy widzi, wystarczy spojrzeć na Minecrafta, gdzie nie ma zbyt widowiskowych efektów i ogólnie grafiki, a ci co grali wiedzą, że odpalenie na maksymalnych detalach (na sprzęcie, który radził sobie z Battlefieldem 3 na wysokich) groziło wykrzaczeniem gry z powodu braku pamięci.

Java jak się okazało, wymaga specjalnie pod nią zaprojektowanego systemu jak np. Android, gdzie pisanie w niej aplikacji jest dość wskazane.

 

3. Składnia


Gdy zapytasz kogoś co jest prostsze dla niego: c++ czy java z pewnością wybierze jave, bo tak istotnie jest, przynajmniej do pewnego stopnia. Bardzo dużo funkcji jest zaszytych wewnątrz tego języka co znacznie ułatwia wiele rzeczy. Jednakże gdy chcemy zrobić bardziej niestandardowe operacje okazuje się że musimy dość mocno nakombinować aby dostać się do rzeczy, które w c++ mamy na wyciągnięcie ręki.

 

4. Rozleniwianie


Poniekąd odnoszę się do poprzedniego punktu. Programowanie tutaj nieco rozleniwia nasz umysł, a mechanizm działania niektórych rzeczy pozostaje dla nas zamknięty przez co nie rozumiemy jak coś działa i gdy przychodzi nam napisać podobny program, ale w innym języku to nie rozumiemy jak napisać określone funkcje, nie rozumiemy sposobu działania niektórych rzeczy, a przynajmniej moim zdaniem zawsze jest lepiej wiedzieć i rozumieć jak coś działa niż nie wiedzieć.

 

Java, samo zło?


Cóż, niestety nie. Java posiada kilka elementów, które mi się podobają. M.in. podoba mi się fakt, że zmienne zajmują na każdej maszynie tyle samo miejsca, a ten fakt jest czasami dość przydatny; niektóre wbudowane funkcje jak np konwersja liczb na string i odwrotnie; łatwiejsze w obsłudze dynamiczne tablice (m.in. znające swoją długość) i pewnie coś jeszcze by się znalazło.

 

A więc, C++ czy Java?


C++. Poleciłbym ten język każdemu, zwłaszcza początkującym niemającym doświadczenia z programowaniem, java jest prostsza jasne, ale opanowanie c++ sprawi że opanowanie innego języka (np. javy) będzie bajecznie proste. Co ważne kursy c++ wprowadzają programowanie obiektowe w bardziej naturalny sposób i młody programista jest w stanie lepiej zrozumieć (a zatem wykorzystać) programowanie obiektowe (a pamiętajmy, że java jest w pełni językiem obiektowym).

Żeby nie było: c++ nie był językiem, którego nauczyłem się jako pierwszego stąd by wychodziła moja „miłość” do niego, pierwsza była właśnie java, lecz c++ był językiem, od którego zacząłem programowanie tak na poważniej.

 

Zakończenie


Mam nadzieję, że ten wpis chociaż jakąś swoją częścią w rzetelny sposób przedstawia wady, czy zalety Javy, częściowo mogą pojawić się jakieś błędy, ponieważ nie jestem specjalistą w tym języku, pewnie nie jestem nawet średnio-zaawansowanym.

A jakie jest Wasze zdanie na temat? C++ czy Java? Może nie zgadzacie z moją opinią? Albo macie jakieś dodatkowe uwagi na ten temat? W tym czy innych przypadkach zapraszam do systemu komentarzy.

Code ON!


  • Wollier

    Próbowałem kiedyś swoich sił w JAVIE i jakoś mi nie podeszła. Wolę C++ i C#

  • Dawid

    niektóe wbudowane funkcje jak np konwersja liczb na string i odwrotnie. Znalazłem literówkę :)

    • Dość powszechny dla mnie błąd, a takie coś mogło się zdarzyć zważając na porę o której to pisałem, nie mniej dzięki ;)

  • Brednie

    Widać że nie masz jakiegokolwiek pojęcia o programowaniu. Co ma jakość grafiki do ilość zużytego ram? Minecraft wciąga tyle ramu przez świat… Zreszta porównywać gre wielkiej firmy gdzie idą na nie miliony do gry napisanej przez 2(?) osoby w wolnym czasie.

    • Ehh, jak ja nie lubię komentarzy-anonimów nie mających odwagi do podania prawdziwego kontaktu zwrotnego, a i komentarz czy opinia takiej osoby jest dla mnie mało warta, bo nie niesie żadnej merytorycznej treści… Ale na poważnie:

      Po pierwsze: od kiedy opinia na temat jednego języka (bardziej lub mniej słuszna) decyduje o umiejętności programowania?
      Po drugie: wpis jest w serii „poetycznych”, gdzie ogólnie opowiadam o swoich opiniach, które zazwyczaj po kilku latach potrafią się zmienić (i tak jest np. w tym przypadku). Wystarczy spojrzeć na datę, anie niepotrzebnie nie płakać: „to mój ulubiony język programowania, jeżeli go krytykujesz to nic nie umiesz!” (sorry, ale nie dałeś/aś mi żadnych innych przesłanek co do tego abym mógł inaczej odebrać ten komentarz).

      Dla twojej informacji: Minecraft nie zżera tyle RAM’u przez świat, bo wczytywany fragment jest standardowej wielkości (generowanie może go okazjonalnie pożerać, ale jakoś specjalnie dużo). Pożera go JVM. Jeżeli nie wierzysz, to zalecam rzucić okiem na gry, które albo są bogatszą kopią Minecrafta (pisane w innym języku), albo mają podobny styl. Wydajność w grach jest znacznie większa w językach, które nie korzystają z dodatkowej maszyny wirtualnej. To (wirtualizacja) po prostu nie może działać szybciej niż natywny kod.

      Chciałbym też zauważyć, że Minecraft od wielu lat nie jest grą tworzoną przez dwie osoby w wolnym czasie. Ja ją jeszcze pamiętam jako grę tworzoną przez cały zespół, gdzie nie była tworzona już czysto hobbistycznie, bo dawałą spore zyski. Teraz należy już do Microsoftu, więc nie rozumiem skąd pomysł przyrównywania jej do gry tworzonej przez 2 osoby jako hobby (a Microsoft przecież nie sponsoruje zespołów nie biorących tego co robią na poważnie).

      Zachęcam do dalszej, ale tym razem już konstruktywnej krytyki,
      Szymon