Czy Java jeszcze ma sens?

6
elwis napisał(a):

@stivens: A nie są podobne? W stosunku do Javy dodaje wsparcie dla inferencji typów i rozszerza składnię o kilka fajnych konstrukcji. Jedna zasadnicza różnica jest taka, że Scala zachęca do programowania funkcyjnego i pod nie jest stworzona. Wszystkie odmienności, mimo wszystko mieszczą się w Javowej infuicji, działają w tym samym środowisku. Porównaj sobie z Perlem. Lispem lub Haskellem (moim zdaniem nawet C++ bardziej się różni) i mów, że nie są podobne. No chyba, że tak piszę dlatego, że znam wiele języków i programowanie funkcyjne jest moim domyślnym paradygmatem. Bez takiego obycia, możliwe, różnica jest nie do ogarnięcia.

Programowanie funkcyjne jest różnie rozumiane. Jedni rozumieją przez to skrócony zapis dla domknięć (tzw. lambdy), ale to zdecydowanie za mało, by takie pojęcie miało sens. Programowanie funkcyjne stawia się w opozycji do programowania imperatywnego. Dla przykładu: kolekcje z Javy są stricte imperatywne. Operacja kolekcja.add albo mutuje kolekcję albo rzuca wyjątkiem. Funkcyjny odpowiednik w Scali tworzy nową kolekcję z elementami ze starej kolekcji plus nowym elementem. To jest bardzo duża różnica. W Javie 8+ są niby streamy, ale to ma poważne wady. Oprócz tego, że jest strasznie rozwlekłe w porównaniu do odpowiedników ze Scali to jeszcze nie da się zrobić pojedynczej modyfikacji kolekcji bez przebudowania jej w całości od nowa. W Scali można też użyć monad IO (np. ZIO czy Cats Effect) i mieć kod generalnie analogiczny do kodu w Haskellu. Ogólnie Scala daje duży wybór. Można pisać mocno funkcyjnie, a można pisać też mocno imperatywnie. To jest ważne, a nie czy pewne szczegóły implementacyjne (np. kolejność inicjalizacji parametrów w klasach) się pokrywają czy nie.

Główny wariant Scali jest uruchamiany na platformie Java, ale to nie znaczy, że np. Scala jest przez to mało funkcyjna. To czy masz kod funkcyjny zależy od tego co napiszesz i na co pozwala język. W Scali kod funkcyjny pisze się wygodnie, a kod działa wydajnie. Zaletą tego, że Scala chodzi na JVMie jest dostęp do całego ekosystemu narzędzi integrujących się z JVMem: profilery, samplery, debuggery, wzbogacanie bajtkodu, agenty JVMki, itp itd Do tego sam JVM oferuje rozbudowanego JITa, wielość różnych GC, przenośność (wraz z wieloplatformowymi GUI toolkitami), itp itd W ogólnym rozrachunku oparcie języka Scala o platformę Java jest zdecydowanie dobrym posunięciem.

Co do samej platformy Java to się przecież rozwija. Język Java rozwija się stosunkowo wolno (co mnie, scalowca, średnio boli), a przez częste wydania (co pół roku) to lista nowości (dotycząca samego języka) w każdym wydaniu jest krótka (i dlatego niektórzy się bezsensownie podśmiechują). Intensywniej rozwija się platforma Java jako całość, zwłaszcza jeśli weźmiemy dodatkowo pod uwagę GraalVMa.

Java jest platformą dla biznesu. Tutaj ważne jest, by 10-letnia biznesowa krowa dalej działała wydajnie, mimo zdegradowanej z czasem jakości kodu i masy niepotrzebnych rzeczy. Sprytny JIT, dobrze skalowalne GC z niskimi pauzami, narzędzia pozwalające łatwo i szybko znaleźć problemy wydajnościowe - to się liczy. Ekscytująca składnia czy brak podobieństwa do Javy (niektórzy się tym chełpią) są zdecydowanie mniej ważne.

PS: podobno są jakieś odległe plany dodania do języka Java type classes, ale nie mogę tego zguglać teraz. Dla C# jest jakaś propozycja: https://github.com/dotnet/csharplang/issues/110 Ich dodanie nie sprawi, że te języki będą automatycznie bardziej funkcyjne. Co najwyżej zmniejszy się nacisk na OOP.

2
Wibowit napisał(a):

Co do samej platformy Java to się przecież rozwija. Język Java rozwija się stosunkowo wolno (co mnie, scalowca, średnio boli), a przez częste wydania (co pół roku) to lista nowości (dotycząca samego języka) w każdym wydaniu jest krótka (i dlatego niektórzy się bezsensownie podśmiechują).

W mojej ocenie nowym rytmie język rozwija się lepiej niż dawniej (a może przez wydawanie wersji "próbnych" to tylko wrażenie, he he)

2

Btw. to o czym mowisz @elwis tak na prawde nazywa sie Kotlin :) - fajny jezyk

0

A ja lubie Jave, dlatego przeszedłem na troche bardziej upośledzoną wersję Javy czyli Typescripta

7

Wiedziałem, że Wibowit nie da rady napisać choćby strony A4 o Javie/Scali bez mieszania do tego C#. Wiedziałem. :D

5
somekind napisał(a):

Wiedziałem, że Wibowit nie da rady napisać choćby strony A4 o Javie/Scali bez mieszania do tego C#. Wiedziałem. :D

Przecież C# to Java M$

1

Prawda jest taka, że aby brać się za takie języki jak Scala czy Kotlin, wypadałoby najpierw ogarnąć porządnie Javę, ponieważ kod napisany w każdym z tych języków i tak jest najczęściej odpalany na tym samym JVMie, więc siłą rzeczy jest trochę cech wspólnych tych języków. Nie sądzę, aby istnieli jacyś naprawdę dobrzy programiści Scali lub Kotlina nie ogarniający Javy na poziomie bardzo dobrym.

Natomiast C# jest spoko, jak chcesz być uwiązanym na amen do Windowsa (tylko nie piszcie mi znowu, że można pisać w C# na nie-windowsie, bo pewnie można, ale i tak nikt tego nie robi).

3

ponieważ kod napisany w każdym z tych języków i tak jest najczęściej odpalany na tym samym JVMie,

to adekwatnie, znasz bardzo dobrze assemblera?

0
wiciu napisał(a):

Prawda jest taka, że aby brać się za takie języki jak Scala czy Kotlin, wypadałoby najpierw ogarnąć porządnie Javę

Nie, nie, nie. Java jest OOP. Scala może być OOP ale większość bibliotek (Scalaz, Cats, ZIO) jest FP

1
stivens napisał(a):

ponieważ kod napisany w każdym z tych języków i tak jest najczęściej odpalany na tym samym JVMie,

to adekwatnie, znasz bardzo dobrze assemblera?

To możemy tak schodzić w dół. Czy znasz scalaki, bramki logiczne, elektronikę, fizykę, atomy, itd. : D.

No ale w przypadku Kotlina czy Scali, korzysta się chociażby z bibliotek javowych i z tych z samych build systemów na porządku dziennym i trzeba znać ekosystem Javy. Natomiast pisząc w Javie w jakichś naprawdę nielicznych przypadkach korzysta się ze wstawek z Assemblera lub C++.

2
wiciu napisał(a):

Natomiast C# jest spoko, jak chcesz być uwiązanym na amen do Windowsa (tylko nie piszcie mi znowu, że można pisać w C# na nie-windowsie, bo pewnie można, ale i tak nikt tego nie robi).

Gdzie Ty żyłeś przez ostatnie parę lat?

1

z tych z samych build systemów na porządku dziennym

wspolczuje jesli ktos korzysta z mavena w Kt czy Scali :)

korzysta się chociażby z bibliotek javowych

api biblioteki != bardzo dobra znajomosc jezyka

1

wspolczuje jesli ktos korzysta z mavena w Kt czy Scali :)

Miałem na myśli Gradle. W Kotlinie nie jest to jakiś ewenement.

Saalin napisał(a):
wiciu napisał(a):

Natomiast C# jest spoko, jak chcesz być uwiązanym na amen do Windowsa (tylko nie piszcie mi znowu, że można pisać w C# na nie-windowsie, bo pewnie można, ale i tak nikt tego nie robi).

Gdzie Ty żyłeś przez ostatnie parę lat?

Poza windowsem na maku i linuksie :).

1

I co ma Gradle (albo nawet ten nieszczesny Maven) do Javy?

Jak to sa jakies XMLe albo w przypadku Gradle DSL w Groovym lub Kotlinie (!)

2

I co ma Gradle (albo nawet ten nieszczesny Maven) do Javy?

To jest już pytanie filozoficzne. Podejrzewam, że najwięcej projektów korzystających z Gradle jest napisanych w Javie. Chodziło mi o znajomość ekosystemu Javy.

1
wiciu napisał(a):

Poza windowsem na maku i linuksie :).

Nie rozumiem. Kto nie musi nie hostuje na Windowsie. IDE i środowisko jest multiplatform, są nawet firmy, które nawet do developmentu nie używają Widnowsa. Mimo to nadal są ludzie, którzy twierdzą, że C# to tylko Windows. Witki opadają, @wiciu

Edit. IDE w sensie Rider.

2
wiciu napisał(a):

I co ma Gradle (albo nawet ten nieszczesny Maven) do Javy?

To jest już pytanie filozoficzne. Podejrzewam, że najwięcej projektów korzystających z Gradle jest napisanych w Javie. Chodziło mi o znajomość ekosystemu Javy.

to po co dajesz argumenty z d**y? :P

Trzeba znac Jave bo najwiecej projektow korzystajacych z Gradle jest w Javie? Co za absurd...

PS: a o SBT slyszales?

1

Nie rozumiem. Kto nie musi nie hostuje na Windowsie. IDE i środowisko jest multiplatform, są nawet firmy, które nawet do developmentu nie używają Widnowsa. Mimo to nadal są ludzie, którzy twierdzą, że C# to tylko Windows. Witki opadają, @wiciu

Może i tak jest. Nie piszę w C# i nie używam Windowsa od kilku lat, więc nie śledzę zmian w tych środowiskach. Na chłopski rozum nie bardzo rozumiem, po co developer C# miałby nagle instalować sobie Linuxa skoro pisze w C# i pewnie większość tooli pod środowiska i rozwiązania MS jest pod Windowsa.

stivens napisał(a):
wiciu napisał(a):

I co ma Gradle (albo nawet ten nieszczesny Maven) do Javy?

To jest już pytanie filozoficzne. Podejrzewam, że najwięcej projektów korzystających z Gradle jest napisanych w Javie. Chodziło mi o znajomość ekosystemu Javy.

to po co dajesz argumenty z d**y? :P
Trzeba znac Jave bo najwiecej projektow korzystajacych z Gradle jest w Javie? Co za bullshit...

To już sobie sam dopowiedziałeś. Podałem też inne powody wcześniej. No ale nikogo nie zmuszam do nauki Javy. Przecież nie ma przymusu. Chciałbym zobaczyć topowych programistów Scali, którzy nie znają w ogóle Javy ;).

2
wiciu napisał(a):

Może i tak jest. Nie piszę w C# i nie używam Windowsa od kilku lat, więc nie śledzę zmian w tych środowiskach. Na chłopski rozum nie bardzo rozumiem, po co developer C# miałby nagle instalować sobie Linuxa skoro pisze w C# i pewnie większość tooli pod środowiska i rozwiązania MS jest pod Windowsa.

Nie piszesz i nie korzystasz, a mimo to pierdzielisz jakieś farmazony w stylu Natomiast C# jest spoko, jak chcesz być uwiązanym na amen do Windowsa (tylko nie piszcie mi znowu, że można pisać w C# na nie-windowsie, bo pewnie można, ale i tak nikt tego nie robi). Może warto nie wypowiadać się na tematy, o których ma się małe pojęcie? Na chłopski rozum to i ziemia jest płaska.

1

@wiciu: Twoje wczesniejsze "argumenty":

kod napisany w każdym z tych języków i tak jest najczęściej odpalany na tym samym JVMie

litosci...

To w wypadku natywnych jezykow trzeba by bylo znac wszystkie zaczynajac od C++ przez Rusta i Pascala a na OCamlu konczac. Bo sa odpalane na tym samym procesorze xD

A jak w Pythonie korzystasz z NumPy to musisz znac C no bo w koncu w tym jezyku jest napisany.

4

Wnioskuję o przeniesienie tego wątku działu shitstorm.

Podsumowując:

  • programiści Scali i Kotlina nie muszą (a nawet nie powinni) znać javy
  • programiści C# siedzą od wielu lat na linuksie i na maku
5
wiciu napisał(a):

Podsumowując:

  • programiści Scali i Kotlina nie muszą (a nawet nie powinni) znać javy
  • programiści C# siedzą od wielu lat na linuksie i na maku

Niestety nie wszyscy, ale jest to jak najbardzie możliwe

2
wiciu napisał(a):

Na chłopski rozum nie bardzo rozumiem, po co developer C# miałby nagle instalować sobie Linuxa skoro pisze w C#

Bo jest biedny i nie stać go na laptopa z Windowsem.
Problemem z Linuksem są sterowniki, a nie narzędzia do programowania.

4

Problemem z Linuksem są sterowniki, a nie narzędzia do programowania.

Nie zanotowałem. Ale ponoć Ubuntu to nie Linux, więc może dlatego.

3

Do swojego RX 560 mam sterowniki na Ubuntu, a na Windowsie 8.1 już brakuje mimo, że Windows 8.1 jest niby dalej wspierany. Po co wydawałem kasę na Windowsa? Powinni mi oddać! Na tym Windowsie to nawet poprawki bezpieczeństwa mi się nie chcą zainstalować (straciłem co najmniej jeden dzień na naprawianiu tego i nie udało się). Strach go odpalać.

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