whyihatejava

Dlaczego nienawidzę Javy? – Rozdział 2

Nie spodziewałem się że będę to kontynuował. Może napiszę o tym książkę…

Myślcie sobie co chcecie, ale naprawdę nie sądziłem, że Dlaczego nienawidzę Javy? doczeka się kontynuacji, bo najzwyczajniej istnieje całe tysiące tematów, które wolałbym poruszyć.

Ten wpis nie będzie starał być się obiektywny, ogólnie to odradzam jego czytanie (chyba, że mocno chcecie, wasza wola), jest to typowa „mowa nienawiści” i nie należy tego wpisu traktować zupełnie poważnie, a bardziej jako ciekawostkę.

 

Java, co mogłoby pójść nie tak jak powinno?


https://i0.wp.com/www.ssw.com.au/ssw/Standards/Rules/Images/BadDesignGun.jpg?resize=351%2C252

Nie sądziłem, że w Javie może mnie jeszcze zaskoczyć wiele (w sposób negatywny, na pozytywny raczej nie liczę), ale okazuje się że im „głębiej” w szczegóły związane ze sposobem działania tego tworu to jest tylko gorzej.

Nie chodzi mi tutaj nawet o to, że Java próbuje być jak najprostsza przez co wiele mechanizmów mówiąc najdelikatniej nie działa tak jak powinno lub zgodnie z przewidywaniami, ale o to że lubi robić z ludzi idiotów.

 

Nowe, lepsze jutro


Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning. ~Rich Cook

Java jest piękną ideą, która miała sprawić że programowanie będzie łatwiejsze: tysiące wszytych gotowych mechanizmów do użycia, bez konieczności ich implementacji, a co za tym bardzo często idzie: zrozumienia tego co się robi.

Nie bez powodu pojawił się cytat Cook’a na początku tego paragrafu. Możemy go zastosować nie tylko w kontekście do zwykłych użytkowników, ale także do przyszłych potencjalnych programistów. Dzisiaj dysponujemy fantastycznymi narzędziami, które nieraz w znaczny sposób przyspieszają i ułatwiają pisanie kodu, w przypadku środowisk Javy (Netbeans, Eclipse) może nawet za bardzo.

https://i0.wp.com/cdn.meme.am/instances/58407179.jpg?resize=400%2C400

Nie mam nic przeciwko edytorowi, który po wpisaniu 3 liter zaproponuje mi listę rzeczy, które może chcę wpisać. Nie przeszkadza mi środowisko, które w razie zmiany nazwy zmiennej w deklaracji zaproponuje możliwość zmiany wszystkich definicji. Ale denerwuje mnie edytor, który mi narzuca styl pisania kodu oraz wyrzuca „błędy”, w miejscach, w których w tym akurat w tym przypadku nie ma szansy na wystąpienie błędu czy wyrzucenie wyjątku (bo np zadbałem o to 1 linię wcześniej).

To co mi się podobało od zawsze w programowaniu to wolność, wolność w podejmowaniu wielu decyzji z minimalną ilość reguł, których muszę przestrzegać. W Javie zostało to odebrane, tak aby system był łatwy i bezpieczny, przez co stał się ciężki i toporny w przypadku pisania bardziej precyzyjnych operacji.

Java nie uczy jak programować, ale jak pisać kod wg schematów.

 

Zapomniana idea


Kiedyś programiści mieli cel: sprawić aby to co robią, aby to jak nazywają się dane elementy były dokładnie tym i zachowywały się w dokładnie taki sposób jaki się nazywają, tzn napisanie kodu w stylu tego poniżej było po prostu czymś złym.

Szybki rzut okiem na Jave: ( enum) typ wyliczeniowy, który nie jest typem wyliczeniowym. Normalnie brak słów.

Od niepamiętnych czasów enum nie był niczym innym jak jedynie sprytnym spreparowanie typem liczb całkowitych, pozwalał na np. łatwiejsze do rozróżnienie dla programisty flag stanu, albo słownego zapisu wartości liczbowych, np jeżeli mieliśmy grę a w niej postać która może się poruszać w różnych stanach z różną prędkością nie trzeba było tworzyć 3 oddzielnych zmiennych, a wystarczyło stworzyć enum‚a który sam z siebie dbał o to aby prędkości gracza nie przyporządkować innej wartości.

W Javie takie przypisanie wartości liczbowej do elementu typu wyliczeniowego jest niemożliwe. W Javie enum to nic innego jak spreparowana klasa, a wygodne rzutowanie int <=> enum zostało zniesione.

 

Optymalizacja, a komu to potrzebne?


Java jest językiem wysokopoziomowym, czyli takim gdzie kod powinno się pisać stosunkowo szybko, prosto i przyjemnie, więc ona nie ma działać wydajnie. Załóżmy, że nie przeszkadzają nam wymienione przeze mnie wcześniej niedogodności, może to ja jestem nadwrażliwy. Ale co jeżeli zechcemy odejść nieco od schematu pisania kodu w Javie, tak aby go napisać nieco wydajniej?

https://i0.wp.com/www.quickmeme.com/img/41/41a51bd4d6568f848f382e74e29512ed8a0d86ac8a76683af788c7a213412f4a.jpg?resize=407%2C298

Da się, nie mówię że nie (oczywiście ma to swoje granice: nigdy nie dojdziemy do poziomu „średnio” optymalizowanego kodu w c/c++, ale możemy sprawić że program będzie nieco lepszy), ale przebrnięcie przez sprytnie pochowane mechanizmy jest dość męczące, gdy my mówimy „wiem jak to zrobić lepiej, zrób to i to”, Java odpowiada „nie”. Trzeba włożyć wiele pracy, aby ulepszyć nasz program, już nawet nie będę wspominał o fabrykach obiektów, które tworzą kolejne fabryki obiektów.

 

Długie nazwy ścieżek do bibliotek/klas


Nie ukrywam, że konwencja nazw „paczek” w Javie ma nawet jakiś sens, bo pozwala na wysoką organizację kodu ale w większości przypadków jest moim zdaniem niewygodna i mało intuicyjna, gdy miałem kod składający się z wielu paczek, to szukanie jednej, konkretnej było mało wygodne.

 

Code ON!


  • Michał Karaś

    Bardzo ciekawy wpis. Zawsze się zastanawiałem czemu np. Minecraft na starym komputerze mi laguje jednym z powodów jest zapewne charakter Javy:D Pozdrawiam

    • Minecraft jest genialnym przykładem pokazującym dlaczego gier nie pisze się w Javie.

      • Crax

        Gdzieś czytałem o zbiorowym projekcie przepisania Minecrafta na c++, prace podobno trwają 🙂

        • Ja już słyszałem o kilku klonach Minecrafta zrobionych w C-podobnych językach

  • filipekczek7

    Bardzo fajny sposób na napisanie książki o tytule ,,Dlaczego nienawidzę Javy? – Szymon Siarkiewicz” 🙂 Doczekałaby się wielu fanów, przede wszystkim C++ 😉

    No, a jednak to był całkiem fajny wpis. Dowiedziałem się kolejnych wad Javy 😉 Coraz bardziej pałam do niej nienawiścią 😀

    PS: obrazek z Yodą był super 🙂

    • Już przy tym wpisie zaczynało brakować mi weny, obawiam się że jednak nie dam rady napisać książki o Javie.

  • Pan Kulomb

    Skąd bierzesz cytaty?

    • Tu akurat pojawił się 1 cytat, ale ogólnie to z … internetu. Nie jestem ci wskazać 1 źródła, bo go nie ma. Po prostu czytam wiele rzeczy i zdarza mi się natknąć na rzeczy tego typu, które czasami zapamiętuję, czasami zapisuję i gdy przychodzi pora to je staram się jakoś udostępnić światu.