Boom na Kotlin i na Swift

0

Jakiś czas temu oczywiste było, że podstawowym językiem programowania do Android był Java, a do iOS był Objective-C. Nie liczymy jakiś pośrednich i niszowych rozwiązań, jak Flutter, Xamarin, Cordova itp.

Ostatnio co jakiś czas bywają tematy, że jak ktoś chce programować na Android, to Kotlin, a jak na iOS to Swift. Ja nie umiem programować telefonów, nie interesuje mnie to, więc nie wiem, co jest "trendy" i dlaczego, jednak pewna rzecz mnie zaciekawiła.

Gdyby zadać pytanie, czy lepszy Kotlin czy Java, to moim zdaniem nie ma jednoznacznej odpowiedzi, najlepsza odpowiedź to "wypróbuj oba języki i wybierz ten, który lubisz". Podobnie, jak Objective-C vs. Swift. Patrząc po ostatnich tematach w dziale Mobile, to widzę, że w rzadko którym jest jakiś kawałek kodu, a jak już jest, to najczęściej w Java.

Kotlin kompiluje się do kodu bajtowego JVM tak samo, jak Java, więc nie ma znaczenia, czy Java czy Kotlin, w jednym i w drugim można napisać taki sam program, bo i tak ostatecznie będzie kod bajtowy JVM. Dokładnie tak samo, jak język C# i VB.NET, oba i tak kompilują się do CLI, a dekompilator generuje kod w jednym i w drugim, który jest tak naprawdę taki sam, tylko trochę składniowo się różni, bo to inny język.

Wiadomo, że jeden lubi Kotlin, drugi lubi Java, więc w takim razie skąd taki boom na Kotlin, jakby miał wyprzeć język Java, skoro pod względem możliwości jest taki sam jak Java? To samo pytanie, skąd nagle Swift, który wypiera Objective-C, skoro również, jeden stwierdził, że lubi Swift, drugi stwierdził, ze lubi Objective-C. Jeżeli hipotetycznie chciałbym pisać coś na telefony, znam i lubię Java i Objective-C, to co w tym złego, ze tymi językami będę się posługiwać?

4

Objective-C jest dziwny. Pisałem kiedyś jakieś HelloWorldy w Objective-C i dość dziwna ta składnia.

Przez kilka dni pisałem w Swifcie (jakąś prostą gierkę zrobiłem), i z kolei bardzo przyjemny język, XCode podpowiadało wszystko, więc jak nie wiedziałem, co zrobić, to błąd kompilatora mi mówił, co mam źle (a to też ważne, teraz to doceniam przy pisaniu w Rust). Ogólnie też język wydawał się nowoczesny.

Poza tym Swift został stworzony i jest promowany przez Apple, zdaje się jako właśnie następca Objective-C (jeśli chodzi o język, w którym się pisze apki na urządzenia Apple), więc jeśli samo Apple to zrobiło i promuje, to dodatkowy argument na korzyść Swifta.

4

C++ kompiluje się do kodu maszynowego tak samo, jak assembler, więc nie ma znaczenia, czy asembler czy c++, w jednym i w drugim można napisać taki sam program, bo i tak ostatecznie będzie kod maszynowy.
Wiadomo że jeden lubi C++, drugi lubi asemblera, więc w takim razie skąd taki boom na c++, jakby miał wyprzeć język assembler, skoro pod względem możliwości jest taki sam jak assembler?

0
obscurity napisał(a):

C++ kompiluje się do kodu maszynowego tak samo, jak assembler, więc nie ma znaczenia, czy asembler czy c++, w jednym i w drugim można napisać taki sam program, bo i tak ostatecznie będzie kod maszynowy.
Wiadomo że jeden lubi C++, drugi lubi asemblera, więc w takim razie skąd taki boom na c++, jakby miał wyprzeć język assembler, skoro pod względem możliwości jest taki sam jak assembler?

Różnica jest kolosalna:

  1. Asm to niski poziom, C++ to wysoki poziom.
  2. Asm jest dla bardzo konkretnej architektury, C++ jest przenośny,
  3. Programowanie w ASM jest bardzo trudne, a w C++ stosunkowo łatwe.

Do tego to by prędzej pasował komentarz na temat C++ i Object Pascal, lub ewentualnie C i Pascal. Oba języki reprezentują podobny poziom abstrakcji i podobną łatwość, takie dwa, to już można porównywać i dywagować, który jest lepszy, choć C i C++ stał się o wiele bardziej popularny.

Natomiast, z tego, co czytałem, wydaje się, ze Java i Kotlin to podobny poziom abstrakcji, stąd tytułowe pytanie, tym bardziej, że jest niby nacisk na Kotlin, a wiele tematów o Androidzie zawiera jakiś kod w Java.

3

To co chciałem napisać to że właściwie we wszystkich językach można uzyskać to samo. To właśnie różnice składniowe, użyte paradygmaty definiują język. Czasem nowe możliwości można uzyskać paradoksalnie przez wprowadzenie ograniczeń.
Z grubsza pytasz po co powstają nowe języki programowania skoro stare da się używać; jakbyś miał konto zarejestrowane 2 dni temu to bym bardziej rozumiał.

Przede wszystkim do projektu w kotlinie możesz dodawać i używać kod w javie, nic więc nie tracisz mając projekt kotlinowy. Nie znam obu języków na tyle żeby je porównywać ale kotlin wygląda znacznie lepiej niż java i ma mniej boilerplate'u. Im mniej kodu tym mniej błędów i pisanie jest łatwiejsze i szybsze. W zasadzie nie ma nic co przemawia za używaniem javy.

Podobnie jest ze swiftem - jest "wstecznie" kompatybilny i można z łatwością używać obu języków w jednym projekcie. Tu akurat mnóstwo devów narzekało na ten język i trochę trąci myszką więc zmiana zdecydowanie na lepsze.

2

Efekt końcowy może jesteś w stanie uzyskać taki sam w każdym z tych języków, ale droga do tego jest znacznie przyjemniejsza w tych nowszych. Ja jestem akurat z świata jvm i powrót do javy za każdym razem boli coraz bardziej.

5
  1. https://developer.android.com/kotlin/first
  2. https://developer.apple.com/tutorials/swiftui

Jak sam producent rekomenduje to jasne że jest "boom".

2

na androidzie w kotlinie piszę się w większości już od przynajmniej 3-4 lat, serwer coraz częściej, na androidzie jest Java 11 co nie ma wielu funkcji które kotlin oferuje, jak ktoś pisze w kotlinie tak jak w Javie to oczywiste jest to że nie widzi różnicy. Spróbuj sobie porównać kod javy i kotlina, w tym drugim pisze się znacznie mniej, jest mniej boilerplate. Inną sprawą jest to że jetpack compose nie wspiera javy, nie wyobrażam sobie żeby ktoś zaczynajac projekt komercyjny zaczyna od javy

3
andrzejlisek napisał(a):

Wiadomo, że jeden lubi Kotlin, drugi lubi Java, więc w takim razie skąd taki boom na Kotlin, jakby miał wyprzeć język Java, skoro pod względem możliwości jest taki sam jak Java?

O ile w przypadku Objective-C vs Swift chodzi tylko o to że składnia Objective-C jest podobna do niczego znanago i była ciekawym eksperymentem, ale teraz jest problematyczna, to w przypadku Java vs Kotlin dochodzi jeszcze spór prawny. Dziwne że o nim nie słyszałeś, toczył się z ok. 10 lat między Google a Oracle o prawa do Javy i czy można wziąć wszystkie interfejsy w Javie i dokonać ich reimplementacji. Myślę że po tym sporze dyrektorzy Google zdecydowali się zmienić język domyślny dla androida z Javy na Kotlina

Poza tym jak pisali przedmówcy w Kotlinie można osiągnąć te same efekty mniejszą ilością kodu

3

To nie jest żaden boom, tylko naturalna ewolucja i o tym decydują Google i Apple. Boom to jest np na Fluttera, bo jest na wszystkie platformy i dużo łatwiej się w tym pisze.

0

Słyszę o boomie na Kotlina od 4-5 lat, a tymczasem zmieniajac co kilka miesiace projekty w JVM nie spotkałem ani jednego pliku kt w projekcie, wszędzie Java. WIęc jeśli gdzieś ten boom jest to musi się nieźle maskować przy całkiem sporych nakładach marketingowych JetBrains

0

Gdyby zadać pytanie, czy lepszy Kotlin czy Java, to moim zdaniem nie ma jednoznacznej odpowiedzi

Oczywiście że jest - kotlin jest lepszy. Java powoli nadrabia, ale póki nie ma wbudowanego null safety, named parametrów, default values dla parametrów i pewnie paru innych rzeczy to jest po prostu upośledzonym językiem.

A kotlin na androidzie popularny przez to, że Oracle prawnie rzucało Googlowi kłody pod nogi i zwyczajnie musieli się przerzucić na inny język. Padło na kotlin.

3

Czemu Kotlin a nie Java:

  • spór prawny pomiędzy Google a Oracle
  • nowszy, przyjemniejszy język
  • więcej ficzerów dających więcej możliwości jak np. DSLe
  • rozdzielenie wersji języka/kompilatora od wersji bajtkodu

Czemu Swift a nie Objective-C:

  • znajoma składnia vs śleba odnoga ewolucji języków. Nowy deweloper, który zna Pythona, Jave czy JS raczej będzie wolał swiftowe obj.method(argument) niż [[obj method:argument]]
  • brak wielu ficzerów, ten język jest po prostu stary
  • performance, dynamic dispatch w Objective-C jest bardzo wolny i jest cięzki do optymalizacji. Objective-C używa dynamic binding w Smalltakowym stylu
5

screenshot-20230428130235.png
Dla tych co nie znają historii...

1

jeszcze można się zastanowić nad liczbami
wg ankietki ze StackOverflow z 2022:
Swift używało 4.91% osób
Obj-C tylko 2.39%
https://survey.stackoverflow.co/2022/#most-popular-technologies-language

relacje loved-dreaded
Swift ma pozytywną opinię:
62.88% loved, 37.12% dreaded
a Obj-C już nie bardzo:
23.44% loved, 76.56% dreaded
https://survey.stackoverflow.co/2022/#most-loved-dreaded-and-wanted-language-love-dread

chociaż oczywiście najlepszy w tej ankietce jest Rust (86.73% na loved i tylko 13.27% na dreaded!)

0
KamilAdam napisał(a):

O ile w przypadku Objective-C vs Swift chodzi tylko o to że składnia Objective-C jest podobna do niczego znanago i była ciekawym eksperymentem,

LukeJL napisał(a):

Objective-C jest dziwny. Pisałem kiedyś jakieś HelloWorldy w Objective-C i dość dziwna ta składnia.

Smalltalk może i był eksperymentem ale niektórzy dalej go miło wspominają ja język straconej szansy ;) BTW: Obj-C wyewoluował z makr na C. W sumie podobnie do uwielbianego przez niektórych wydania C++ w wersji Qt.

obscurity napisał(a):

C++ kompiluje się do kodu maszynowego tak samo, jak assembler, więc nie ma znaczenia, czy asembler czy c++, w jednym i w drugim można napisać taki sam

Teraz to i tak chyba wszystko kompiluje się do IR-a. Pomijam oczywiście enterprajsowe eksperymenty ale na to to nawet Transmeta nie dała rady udzielić odpowiedzi.

andrzejlisek napisał(a):

Jeżeli hipotetycznie chciałbym pisać coś na telefony, znam i lubię Java i Objective-C, to co w tym złego, ze tymi językami będę się posługiwać?

Nic jeśli nie masz nic do stracenia. W innym wypadku...

2
andrzejlisek napisał(a):

Ja nie umiem programować telefonów, nie interesuje mnie to, więc nie wiem, co jest "trendy" i dlaczego, jednak pewna rzecz mnie zaciekawiła.

Gdyby zadać pytanie, czy lepszy Kotlin czy Java, to moim zdaniem nie ma jednoznacznej odpowiedzi

Czyli, jak rozumiem, nie widziałeś na oczy tych języków i dlatego uważasz, że twoja opinia na ich temat jest bliższa prawdy, niż opinie ludzi, którzy w nich pisali? Odważnie.

Java vs Kotlin - to, że oba języki da się skompilować do postaci bytecode JVM, nawet pomijając , że akurat w przypadku Androida nie ma to miejsca, nie oznacza, że są one na tym samym poziomie rozwoju. Owszem, w Kotlinie masz te same możliwości co w Java, ale nawet na poziomie "zmieniłem tylko składnię", musisz pisać kilkadziesiąt procent mniej kodu, a co ważniejsze, ktoś inny będzie miał tego kodu mniej do czytania. Trochę więcej znajomości obu technologii i sprawy zaczynają wyglądać kompletnie inaczej, bo są to fundamentalnie różniące się języki, pozwalające pisać w zupełnie innym stylu. O null safety, type safety pewnie ktoś już tu wspomniał. To pierwsze elementy rzucające się w oczy, ale ostatecznym rozrachunku wcale nie najważniejsze.

Co do narzędzi sadowniczych, czyli Objective C i Swift... no też trochę w tym pisałem i jakkolwiek Objective C ma swoje zalety, albo chociaż jedną, ładnie się łączy z kodem w C++, to z twarzy jest podobny do nikogo, może trochę do koziej d**y. Serio, o ile w przypadku Kotlina można jeszcze mieć wiątpliwości, czy różnice w stosunku do Java są na tyle istotne, żeby się na niego przesiąść, to ObjC jest kompletnie nie strawne dla kogoś, kto poznał dowolny wpółczesny język programowania. Mwimy o języku, w którym metody obiektu są przechowywane w mapie i dla kogoś nie myślącego inaczej problemem jest nawet wywołanie metody https://stackoverflow.com/questions/591969/how-can-i-call-a-method-in-objective-c

0

Wykład sprzed prawie 6 lat, ale moim zdaniem fajnie przedstawia Kotlina i wybrane jego możliwości. Co prawda dopiero raczkuję w świecie JVM, więc mogę być nieobiektywny i nieprofesjonalny, ale uważam, że Kotlin to taki następca Javy - poprawił co nieco i nie widzę powodów, aby z niego nie korzystać.

Podobnie masz w innych technologiach, patrz np. JavaScript i TypeScript, albo w przyszłości Carbon jako zamiennik C++.

0
piotrpo napisał(a):
andrzejlisek napisał(a):

Ja nie umiem programować telefonów, nie interesuje mnie to, więc nie wiem, co jest "trendy" i dlaczego, jednak pewna rzecz mnie zaciekawiła.

Gdyby zadać pytanie, czy lepszy Kotlin czy Java, to moim zdaniem nie ma jednoznacznej odpowiedzi

Czyli, jak rozumiem, nie widziałeś na oczy tych języków i dlatego uważasz, że twoja opinia na ich temat jest bliższa prawdy, niż opinie ludzi, którzy w nich pisali? Odważnie.

Na tym forum regularnie pojawiają się tematy w stylu "jakiego języka lub jakiej technologii warto się uczyć" lub "czy lepiej uczyć się A, czy B" (w miejsce A i B podstawić nazwy dowolnych języków). Pytania sa ogólnikowe, nie ma w nich wzmianki nawet o rodzaju tworzonego oprogramowania. Każdy taki temat nie prowadzi do niczego konkretnego, pojawiające się odpowiedzi są albo bez sensu, albo dopytaniem o jakie konkretne oprogramowanie chodzi, albo w stylu "bierz to, co bardziej ci się podoba", co sprawia, że i tak nie ma odpowiedzi na tytułowe pytanie w tych tematach.

Java vs Kotlin - to, że oba języki da się skompilować do postaci bytecode JVM, nawet pomijając , że akurat w przypadku Androida nie ma to miejsca, nie oznacza, że są one na tym samym poziomie rozwoju. Owszem, w Kotlinie masz te same możliwości co w Java, ale nawet na poziomie "zmieniłem tylko składnię", musisz pisać kilkadziesiąt procent mniej kodu, a co ważniejsze, ktoś inny będzie miał tego kodu mniej do czytania. Trochę więcej znajomości obu technologii i sprawy zaczynają wyglądać kompletnie inaczej, bo są to fundamentalnie różniące się języki, pozwalające pisać w zupełnie innym stylu. O null safety, type safety pewnie ktoś już tu wspomniał. To pierwsze elementy rzucające się w oczy, ale ostatecznym rozrachunku wcale nie najważniejsze.

Skoro Kotlin kompiluje się do JVM, to znczy, że równie dobrze w Kotlinie można tworzyć aplikacje na komputer lub stronę serwerową w aplikacjach webowych. Jednak do tych celów jakoś częściej korzysta się z Java.

Co do narzędzi sadowniczych, czyli Objective C i Swift... no też trochę w tym pisałem i jakkolwiek Objective C ma swoje zalety, albo chociaż jedną, ładnie się łączy z kodem w C++, to z twarzy jest podobny do nikogo, może trochę do koziej d**y. Serio, o ile w przypadku Kotlina można jeszcze mieć wiątpliwości, czy różnice w stosunku do Java są na tyle istotne, żeby się na niego przesiąść, to ObjC jest kompletnie nie strawne dla kogoś, kto poznał dowolny wpółczesny język programowania. Mwimy o języku, w którym metody obiektu są przechowywane w mapie i dla kogoś nie myślącego inaczej problemem jest nawet wywołanie metody https://stackoverflow.com/questions/591969/how-can-i-call-a-method-in-objective-c

Nic nie tworzyłem w ObjC, ale nieraz widziałem kawałki kodu w tym i też musze stwierdzić, ze na pierwszy rzut oka to jakiś dziwny język. Ciekawe, dlaczego nikt nie pokusił się o to, żeby na IPhone wtedy programować w C lub C++, tylko wszyscy męczyli się z tym ObjC. Z drugiej strony to taki urok Apple, że wszystko musi mieć po swojemu zamiast przyjąć to, co jest na świecie.

1
andrzejlisek napisał(a):

Na ty forum regularnie pojawiają się tematy w stylu "jakiego języka lub jakiej technologii warto się uczyć" lub "czy lepiej uczyć się A, czy B" (w miejsce A i B podstawić nazwy dowolnych języków). Pytania sa ogólnikowe, nie ma w nich wzmianki nawet o rodzaju tworzonego oprogramowania. Każdy taki temat nie prowadzi do niczego konkretnego, pojawiające się odpowiedzi są albo bez sensu, albo dopytaniem o jakie konkretne oprogramowanie chodzi, albo w stylu "bierz to, co bardziej ci się podoba", co sprawia, że i tak nie ma odpowiedzi na tytułowe pytanie w tych tematach.

Pojawiają się też wpisy o reptalianach, foliowych czapeczkach i szczepionkach. To, że ktoś ma jakąś opinię, znaczy tylko tyle, że ma jakąś opinię.

Skoro Kotlin kompiluje się do JVM, to znczy, że równie dobrze w Kotlinie można tworzyć aplikacje na komputer lub stronę serwerową w aplikacjach webowych. Jednak do tych celów jakoś częściej korzysta się z Java.

Wszystkie te zadania da się zrealizować w dowolnym języku turing-complete. Z jakiegoś powodu, nikt nie używa do tego nie używa się do tych celów np. Branfuck. W gruncie rzeczy, nie używa się do tworzenia backendów prawie niczego poza Java/C#. Cała reszta (PHP, Python, NodeJS, Scala, Kotlin..) to łącznie może z 10% licząc po budżetach. Te dominujące technologie, wcale nie są jakieś super fajne, natomiast są sprawdzone, mają duże wsparcie ze strony narzędzi i da się względnie łatwo znaleźć ludzi z doświadczeniem. W nowych projektach też nie idzie się w nowości, bo mając 20 programistów znających np. Java, nie będziesz im kazać uczyć się np. Pythona, ani ich nie zwolnisz, po to, żeby zacząć budować nowy zespół od jakiejś "fajnej" technologii. Średniej wielkości projekt, to budżet kilku/kilkunastu milionów złotych, prosty szacunek 20 osób, 20k miesięcznie, 2 lata = ~10 baniek. Potencjalny zysk, że jakaś technologia zaoszczędzi 10% tej kwoty nie ma specjalnego znaczenia w konfrontacji z ryzykiem, że przewalisz te 10 baniek i utkniesz.

Nic nie tworzyłem w ObjC, ale nieraz widziałem kawałki kodu w tym i też musze stwierdzić, ze na pierwszy rzut oka to jakiś dziwny język. Ciekawe, dlaczego nikt nie pokusił się o to, żeby na IPhone wtedy programować w C lub C++, tylko wszyscy męczyli się z tym ObjC. Z drugiej strony to taki urok Apple, że wszystko musi mieć po swojemu zamiast przyjąć to, co jest na świecie.

Urok Apple, to trzymanie użytkowników i programistów w piaskownicy, z której ciężko wyjść. W C++ spokojnie napiszesz jakąś bibliotekę, ale już będzie problem ze zrobieniem w nim UI, czy wykorzystaniem innych elementów iOS API.

2
andrzejlisek napisał(a):

Skoro Kotlin kompiluje się do JVM, to znczy, że równie dobrze w Kotlinie można tworzyć aplikacje na komputer lub stronę serwerową w aplikacjach webowych. Jednak do tych celów jakoś częściej korzysta się z Java.

Java jest popularniejsza niż Kotlin i przez kilkadziesiąt lat powstało z jej udziałem więcej oprogramowania niż w Kotlinie, który w porównaniu do Javy jest młodszym językiem. Ponadto do tego, co napisał @piotrpo dodam jeszcze, że część programistów woli zostać przy tym, co zna niż poznawać nowę języki, biblioteki nawet jeśli usprawniłyby ich pracę. Ja np. komercyjnie pracuję z projektami w PHP z Symfony, ale od czasu do czasu sprawdzam alternatywne rozwiązania, które nie oszukujmy się, ale pod pewnymi względami są lepsze (aktualnie badam Kotlina). Z kolei większość kolegów z zespołu niekoniecznie ma ochotę, aby poznać coś nowego, bo woli porobić coś innego, w związku z czym używane jest, to co jest znane.

Odnośnie wyboru Javy/Kotlina najlepiej jakby się wypowiedziały osoby ze świata JVM, jak to rzeczywiście z ich perspektywy wygląda w komercyjnych projektach i co sprawia, że do pisania backendu/microservices rzekomo częściej wybierana jest Java a nie Kotlin. Pytanie, czy mamy gdzieś badania na ten temat, bo równie dobrze może być to gdybanie.

1
witcher1 napisał(a):

Odnośnie wyboru Javy/Kotlina najlepiej jakby się wypowiedziały osoby ze świata JVM, jak to rzeczywiście z ich perspektywy wygląda w komercyjnych projektach

A ja myślę, że w kontekście mobile (a w takim to jest dziale), zdanie osób ze świata JVM nie ma żadnego znaczenia. Natomiast z perspektywy programisty Androida, Java nie ma dziś żadnego sensu, czemu to już wyjaśniono powyżej.

0
gajusz800 napisał(a):
witcher1 napisał(a):

Odnośnie wyboru Javy/Kotlina najlepiej jakby się wypowiedziały osoby ze świata JVM, jak to rzeczywiście z ich perspektywy wygląda w komercyjnych projektach

A ja myślę, że w kontekście mobile (a w takim to jest dziale), zdanie osób ze świata JVM nie ma żadnego znaczenia. Natomiast z perspektywy programisty Androida, Java nie ma dziś żadnego sensu, czemu to już wyjaśniono powyżej.

Tak, chodziło mi o kontekst mobile. Skoro za Kotlinem stoją konkretne i sensowne argumenty związane ze składnią i wygodą pisania kodu, to można powiedzieć, że Kotlin jest obiektywnie lepszy od Javy. Jeżeli się utrzymuje jakiś stary projekt, to oczywiście, że robi się to w Java, chyba, że dany kompilator umożliwia mieszanie w sensie, że jedna klasa będzie w Javie, druga w Kotlinie, skoro i tak po kompilacji oba pliki źródłowe zostaną przekształcone do pliku *.class zawierające bajtkod JVM. Nie ma sensu na siłę przerabiać całego projektu z jednego języka na drugi, bo to bardzo dużo pracy i ryzyko że nowy projekt będzie zawierać błędy, których nie było.

Co do wyboru samego języka i stawiania argumentów za Javą lub za Kotlinem, to co to za różnica, czy programuje się telefon, czy komputer, klaster czy system wbudowany?

W takim razie nie omieszkam zadać pytania: Czy robiąc nowy projekt od zera na komputer lepiej Java czy Kotlin? Dlaczego Kotlin, już mamy wyjaśnione, natomiast, jak ktoś twierdzi, dlaczego Java, to czy stoją za tym konkretne argumenty, inne niż to, że ktoś bardziej lubi Javę, lub, że Javę dobrze zna, a Kotlina to musiałby się uczyć?

3
andrzejlisek napisał(a):

W takim razie nie omieszkam zadać pytania: Czy robiąc nowy projekt od zera na komputer lepiej Java czy Kotlin? Dlaczego Kotlin, już mamy wyjaśnione, natomiast, jak ktoś twierdzi, dlaczego Java, to czy stoją za tym konkretne argumenty, inne niż to, że ktoś bardziej lubi Javę, lub, że Javę dobrze zna, a Kotlina to musiałby się uczyć?

Proste: bo programiści boją się, czy dany język się przyjmie i będzie tak popularny jak Java. W historii mieliśmy wiele "lepszych" wersji javy jak Scala (dalej używana, ale trochę spadła do niszy a na pewno w przypadku, gdy chcemy trochę lepszej javy) czy Gosu (który umarł). W przypadku Androida nie jest to problemem, bo cały ekosystem jest zarządzany autorytarnie przez googla.

W przypadku języków programowania występuje błędne koło popularności tj. język nie jest używany, bo nie jest popularny a nie jest popularny, bo nie jest używany. Żeby się przebić potrzebna jest jakaś minimalna popularność, która napędza dalszy wzrost popularności a w konsekwencji dalszy rozwój języka (ekosystem, toole, libki, ide). W przypadku Androida już lepiej się nie da, w przypadku Javy jest jeszcze dużo drogi przed Kotlinem

1

Dlaczego Java:

  • Bo masz parę lat do emerytury i unikasz każdego ryzyka. Najlepiej, gdyby projekt startował tak długo, że zdążysz przejść na tę emeryturę, zanim cię potencjalnie wywalą z roboty, ale już na 100% nie chcesz w nim czegokolwiek co niesie ze sobą chociaż podejrzenie ryzykownej decyzji, którą można przypisać tobie.

  • Bo projekty to legacy. W mobile to wyglądało zupełnie inaczej, ale backend, to w zdecydowanej większości zastane projekty.

  • Bo ludzie nie lubią się uczyć. Znam osobę, która nie chciała kupić zmywarki do naczyń, bo trzeba się nauczyć jej obsługi, więc lepiej już pozmywać ręcznie.

  • Bo więcej specjalistów na rynku.

  • Bo korporacyjna architektura wzorcowa, dopiero zauważyła, że jest Java 11, a wszystko co jest stworzone w aktualnym tysiącleciu uważa za dzieło szatana i nie dotknie tego nawet uziemionym kijem.

  • Bo korporacyjne narzędzia, których musisz używać nie obsługują Kotlina.

    W mobilkach Kotlin się przebił, bo:

    • miał bardzo duże wsparcie Google. W którymś momencie stał się podstawowym językiem dla Androida.
    • Projekty mobilne są o rząd wielkości mniejsze i mają ułamek budżetu projektów backendowych. Skala potencjalnej katastrofy jest mniejsza.
    • Bo do aplikacji mobilnych trafiali albo nowi programiści, albo tacy seniorzy, którym chciało się szukać czegoś nowego.
1

Czy się przyjmie: obudźcie się. To Google decyduje o domyślnym języku na Androida. To nie jest żadna nowinka, która ma się przyjąć albo nie. Już od dawna to Kotlin jest językiem programowania na Androida, a niektóre rzeczy można pisać w ogóle tylko w Kotlinie
To nie jest tak samo, jak w pisaniu pod JVM ogólnie, gdzie nikt nie narzuca języka, a Java ma się dobrze.

Technicznie rzecz biorąc:

  • można mieszać Javę i Kotlina w jednym projekcie (tylko po co)
  • biblioteki napisane w Kotlinie mogą być używane w projekcie używającym Javy (i na odwrót)
  • można automatycznie konwertować kod w Javie na Kotlina, choć rezultaty są średnie
0

Apple promuje Swifta, ale Obj-C nigdzie się nie wybiera. Jeśli ktoś stwierdzi, że lubi objc to droga wolna, nic nie stoi na przeszkodzie, żeby pisał sobie w tym apki. Co złego jest w tym ze będziesz się posługiwać objc? Nic, ale będziesz irytować innych devów, bo ludzie nie lubią objc.

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