Kotlin nebo Scala pro backend?

Kotlin nebo Scala pro backend?
« kdy: 29. 10. 2020, 14:28:14 »
Zdravím. Momentálně se dívám po jazycích Kotlin a Scala. Oba vypadají zajímavě, povrchově jsem si je zkusil. Android vývoj mě úplně nezajímá ale Kotlin má zajímavý Ktor, takže na backendu je také použitelný. Rád bych se zeptal: Čemu bych se měl věnovat?
« Poslední změna: 29. 10. 2020, 14:47:23 od Petr Krčmář »


Re:Kotlin nebo Scala pro backend?
« Odpověď #1 kdy: 29. 10. 2020, 16:04:10 »
Já dělal několik let ve Scale, a možná bych víc doporučil Kotlin, ve kterém jsem nedělal nikdy :-) Scala je dost složitý jazyk s featurami (hlavně implicity), u kterých není bez zkušeností moc jasné, jak je správně používat. Řekl bych že mi trvalo alespoň rok než jsem v ní začal dělat jakžtakž idiomaticky. A i to je dost relativní, protože má více táborů - lidi, co jí považují za lepší Javu (a těm bych opravdu doporučil Kotlin), a lidi co jedou hardcore FP (používají knihovny jako cats nebo scalaz, nebo nedejbože shapeless), a to FP je zas mnohem líp vidět a snáz a čistěji se naučí v jazycích jako je Haskell. Navíc se těžko shání spolupracovníci.

Ale jestli máš chuť, určitě ti Scala hodně dá. A jako staticky typovaný, rel. rozšířený FP jazyk nad JVM asi nejsou moc lepší volby.

Re:Kotlin nebo Scala pro backend?
« Odpověď #2 kdy: 29. 10. 2020, 16:18:07 »
Já dělal několik let ve Scale, a možná bych víc doporučil Kotlin, ve kterém jsem nedělal nikdy :-) Scala je dost složitý jazyk s featurami (hlavně implicity), u kterých není bez zkušeností moc jasné, jak je správně používat. Řekl bych že mi trvalo alespoň rok než jsem v ní začal dělat jakžtakž idiomaticky. A i to je dost relativní, protože má více táborů - lidi, co jí považují za lepší Javu (a těm bych opravdu doporučil Kotlin), a lidi co jedou hardcore FP (používají knihovny jako cats nebo scalaz, nebo nedejbože shapeless), a to FP je zas mnohem líp vidět a snáz a čistěji se naučí v jazycích jako je Haskell. Navíc se těžko shání spolupracovníci.

Ale jestli máš chuť, určitě ti Scala hodně dá. A jako staticky typovaný, rel. rozšířený FP jazyk nad JVM asi nejsou moc lepší volby.

Tak, umím použitelně Rust, takže ty FP konstrukce mi nejsou cizí. Určitě se alespoň nějak naučím oba, jen se chci rozhodnout co víc prohlubovat. Ale i Kotlin má decentní FP konstrukce, ale nejsem nějaký "hardcore" FP fanoušek.

Re:Kotlin nebo Scala pro backend?
« Odpověď #3 kdy: 29. 10. 2020, 16:59:12 »
Ok, přeju ať se daří. Osobní doporučení - až zjistíš, že příliš často hledáš odpovědi na takovéhle otázky: https://stackoverflow.com/questions/6246719/what-is-a-higher-kinded-type-in-scala , což se ti asi po nějaké době začne dít aniž by jsi sám chtěl, přečti si Learn yourself haskell for a greater good. Je to zábavná knížka, ve který jsou tyhle věci podaný daleko srozumitelněji než jsem kdy potkal ve Scale.

Re:Kotlin nebo Scala pro backend?
« Odpověď #4 kdy: 29. 10. 2020, 17:16:37 »
Ok, přeju ať se daří. Osobní doporučení - až zjistíš, že příliš často hledáš odpovědi na takovéhle otázky: https://stackoverflow.com/questions/6246719/what-is-a-higher-kinded-type-in-scala , což se ti asi po nějaké době začne dít aniž by jsi sám chtěl, přečti si Learn yourself haskell for a greater good. Je to zábavná knížka, ve který jsou tyhle věci podaný daleko srozumitelněji než jsem kdy potkal ve Scale.
Děkuji, ale ještě jsem se nerozhodl čemu se budu do hloubky věnovat.


Ink

  • ***
  • 241
    • Zobrazit profil
    • E-mail
Re:Kotlin nebo Scala pro backend?
« Odpověď #5 kdy: 29. 10. 2020, 17:55:37 »
Já dělal několik let ve Scale, a možná bych víc doporučil Kotlin, ve kterém jsem nedělal nikdy :-) Scala je dost složitý jazyk s featurami (hlavně implicity), u kterých není bez zkušeností moc jasné, jak je správně používat. Řekl bych že mi trvalo alespoň rok než jsem v ní začal dělat jakžtakž idiomaticky. A i to je dost relativní, protože má více táborů - lidi, co jí považují za lepší Javu (a těm bych opravdu doporučil Kotlin), a lidi co jedou hardcore FP (používají knihovny jako cats nebo scalaz, nebo nedejbože shapeless), a to FP je zas mnohem líp vidět a snáz a čistěji se naučí v jazycích jako je Haskell. Navíc se těžko shání spolupracovníci.

Ale jestli máš chuť, určitě ti Scala hodně dá. A jako staticky typovaný, rel. rozšířený FP jazyk nad JVM asi nejsou moc lepší volby.

A jakou zkušenost jsi měl s rychlostí kompilace a ekosystémem/toolingem? Když jsem se o Scalu zajímal já, přišlo mi, že to jsou hlavní potenciálně problematické věci. Samozřejmě, ta vysoká heterogenita může být nepříjemná, ale to je designové rozhodnutí a podle mě se tam dá zvolit nějaká podmnožina idiomů, které člověk používá, ale když to celé funguje divně nebo pomalu, je to zásadní problém.

Re:Kotlin nebo Scala pro backend?
« Odpověď #6 kdy: 29. 10. 2020, 18:02:14 »
Já dělal několik let ve Scale, a možná bych víc doporučil Kotlin, ve kterém jsem nedělal nikdy :-) Scala je dost složitý jazyk s featurami (hlavně implicity), u kterých není bez zkušeností moc jasné, jak je správně používat. Řekl bych že mi trvalo alespoň rok než jsem v ní začal dělat jakžtakž idiomaticky. A i to je dost relativní, protože má více táborů - lidi, co jí považují za lepší Javu (a těm bych opravdu doporučil Kotlin), a lidi co jedou hardcore FP (používají knihovny jako cats nebo scalaz, nebo nedejbože shapeless), a to FP je zas mnohem líp vidět a snáz a čistěji se naučí v jazycích jako je Haskell. Navíc se těžko shání spolupracovníci.

Ale jestli máš chuť, určitě ti Scala hodně dá. A jako staticky typovaný, rel. rozšířený FP jazyk nad JVM asi nejsou moc lepší volby.

A jakou zkušenost jsi měl s rychlostí kompilace a ekosystémem/toolingem? Když jsem se o Scalu zajímal já, přišlo mi, že to jsou hlavní potenciálně problematické věci. Samozřejmě, ta vysoká heterogenita může být nepříjemná, ale to je designové rozhodnutí a podle mě se tam dá zvolit nějaká podmnožina idiomů, které člověk používá, ale když to celé funguje divně nebo pomalu, je to zásadní problém.
Tak já mám intellij idea-U, takže tooling není zase až takový problém.

Re:Kotlin nebo Scala pro backend?
« Odpověď #7 kdy: 29. 10. 2020, 19:23:54 »
A jakou zkušenost jsi měl s rychlostí kompilace a ekosystémem/toolingem? Když jsem se o Scalu zajímal já, přišlo mi, že to jsou hlavní potenciálně problematické věci. Samozřejmě, ta vysoká heterogenita může být nepříjemná, ale to je designové rozhodnutí a podle mě se tam dá zvolit nějaká podmnožina idiomů, které člověk používá, ale když to celé funguje divně nebo pomalu, je to zásadní problém.

Rychlost překladu ujde, řekl bych že o něco rychlejší než Rust v debug režimu - desítky tisíc řádků trvají vteřiny až desítky vteřin studené kompilace, ale docela funguje inkrementální, která to v praxi hodně zrychluje.

Jako IDE používám Intellij community version, a Scala plugin je na dost vysoké úrovni.

Dokumentace ke standardní knihovně ujde, ale teď jsem rozmazlený Rust-em, tam je to přeci jen vyšší úroveň.

Chybí mi nějaký centrální repozitář scala knihoven ala crates.io pro Rust, ale je to asi trochu dané tím, že Scala má dobrou interop s Javou (hlavně ve směru Scala používá Javu, opačně už se vývojář musí trochu snažit), takže Scala vývojář má vlastně k dispozici taky všechny Javovské balíky z Mavenu atp.

Hodně jsem nadával, a nejen já, na build/package manager sbt - https://www.scala-sbt.org/ . Na jednoduché věci je to jednoduché, ale když si člověk chce něco customizovat, napsat vlastní plugin, nebo prostě jen dobře porozumnět tomu, jak to funguje, je to naprosté šílenství. Kdybych začínal nový větší projekt, dost bych uvažoval o tom vyzkoušet https://github.com/lihaoyi/mill , ale osobní zkušenost nemám.

Učil jsem se z "Programming in Scala" od Oderskyho a spol, to je super knížka, prostě jsem to projel od začátku do konce a zkoušel si kód, zábavný měsíc. Dneska bych asi začal s https://www.handsonscala.com/ . Celkově se mi líbí Scala věci od Li Haoyie (autora té knížky i Millu), jsou na používání jednoduché, ale promyšlené - a to znamená, že vymyslet je asi vůbec jednoduché nebylo. Ale je to jen moje osobní preference, někdo jiný bude mít rád shapeless.

Nevím jak hodně se ví, že Scala má nový překladač s novými featurami - https://dotty.epfl.ch/ . U nového projektu bych do toho asi klidně šel.

Abych to nějak shrnul, považuju Scalu a ekosystém za vyzrálý a naprosto production-ready, v tom jazyce se pracuje příjemně, i když nějaké nedostatky má, a nějaké nadávání určitě taky přijde (hlavně asi sbt). Určitě bych ve Scale dělal 100x radši než v Javě.

Re:Kotlin nebo Scala pro backend?
« Odpověď #8 kdy: 30. 10. 2020, 01:10:07 »
A jakou zkušenost jsi měl s rychlostí kompilace a ekosystémem/toolingem? Když jsem se o Scalu zajímal já, přišlo mi, že to jsou hlavní potenciálně problematické věci. Samozřejmě, ta vysoká heterogenita může být nepříjemná, ale to je designové rozhodnutí a podle mě se tam dá zvolit nějaká podmnožina idiomů, které člověk používá, ale když to celé funguje divně nebo pomalu, je to zásadní problém.

Rychlost překladu ujde, řekl bych že o něco rychlejší než Rust v debug režimu - desítky tisíc řádků trvají vteřiny až desítky vteřin studené kompilace, ale docela funguje inkrementální, která to v praxi hodně zrychluje.

Jako IDE používám Intellij community version, a Scala plugin je na dost vysoké úrovni.

Dokumentace ke standardní knihovně ujde, ale teď jsem rozmazlený Rust-em, tam je to přeci jen vyšší úroveň.

Chybí mi nějaký centrální repozitář scala knihoven ala crates.io pro Rust, ale je to asi trochu dané tím, že Scala má dobrou interop s Javou (hlavně ve směru Scala používá Javu, opačně už se vývojář musí trochu snažit), takže Scala vývojář má vlastně k dispozici taky všechny Javovské balíky z Mavenu atp.

Hodně jsem nadával, a nejen já, na build/package manager sbt - https://www.scala-sbt.org/ . Na jednoduché věci je to jednoduché, ale když si člověk chce něco customizovat, napsat vlastní plugin, nebo prostě jen dobře porozumnět tomu, jak to funguje, je to naprosté šílenství. Kdybych začínal nový větší projekt, dost bych uvažoval o tom vyzkoušet https://github.com/lihaoyi/mill , ale osobní zkušenost nemám.

Učil jsem se z "Programming in Scala" od Oderskyho a spol, to je super knížka, prostě jsem to projel od začátku do konce a zkoušel si kód, zábavný měsíc. Dneska bych asi začal s https://www.handsonscala.com/ . Celkově se mi líbí Scala věci od Li Haoyie (autora té knížky i Millu), jsou na používání jednoduché, ale promyšlené - a to znamená, že vymyslet je asi vůbec jednoduché nebylo. Ale je to jen moje osobní preference, někdo jiný bude mít rád shapeless.

Nevím jak hodně se ví, že Scala má nový překladač s novými featurami - https://dotty.epfl.ch/ . U nového projektu bych do toho asi klidně šel.

Abych to nějak shrnul, považuju Scalu a ekosystém za vyzrálý a naprosto production-ready, v tom jazyce se pracuje příjemně, i když nějaké nedostatky má, a nějaké nadávání určitě taky přijde (hlavně asi sbt). Určitě bych ve Scale dělal 100x radši než v Javě.
Jen jsem nepřišel jak je to s breakpointy (nebo to dělat postaru s println(...))

Re:Kotlin nebo Scala pro backend?
« Odpověď #9 kdy: 30. 10. 2020, 06:53:47 »
Jen jsem nepřišel jak je to s breakpointy (nebo to dělat postaru s println(...))

Hmm, mě snad breakpointy nějak fungovaly, co si vybavuju.. Ale jo, debugování je určitě slabší místo. Tady jsem zas v nevýhodě, že jsem kdysi dělal ve Smalltalku, takže když se teď potkám s "moderním" debuggerem, mám chuť zlomit klávesnici, hodit jí do kamen a skočit za ní, a spíš se debugování vyhýbám. Aspoň mě to nutí víc psát unit testy.

Ještě jsem si uvědomil, že poměrně velký rozdíl mezi Kotlinem a Scalou je právě v tom, že Kotlin nemá skoro žádnou vlastní standardní knihovnu - jen tenký obal nad Javou, zatímco Scala jí má docela tlustou - obzvlášť kolekce. Scalovské kolekce hodně tlačí immutable přístup, to u Kotlinu neočekávám, tím se zásadně mění přístup k programování. Myslím, že člověk, co už umí Javu, se naučí produktivně Kotlin za pár dní, zatímco Scalu za týdny, měsíce, roky..

Re:Kotlin nebo Scala pro backend?
« Odpověď #10 kdy: 30. 10. 2020, 08:09:20 »
Dosti zalezi pro jake ucely to ma byt. Ciste ze studijni hlediska (pokud dobre znas javu) bych sel do Scaly. Rozsiri to obzory uplne jinym smerem. Pokud to ma byt seriozni vec s dlouhou podporou tak Kotlin (ikdyz ja bych zustal asi radeji u obycejne javy).

Re:Kotlin nebo Scala pro backend?
« Odpověď #11 kdy: 30. 10. 2020, 08:34:33 »
tomas88 mi odpoved vzal primo z ust, naprosto s nim souhlasim  :)
Jinak ja jsem v Kotlinu napsal i netrivialni veci (okolo 40000 LOC) a mohu potvrdit ze i v teto velikosti je to stale pouzitelne a dobre se mi v tom dela... u Scaly bych si nebyl tak jisty...

Re:Kotlin nebo Scala pro backend?
« Odpověď #12 kdy: 30. 10. 2020, 08:42:08 »
tomas88 mi odpoved vzal primo z ust, naprosto s nim souhlasim  :)
Jinak ja jsem v Kotlinu napsal i netrivialni veci (okolo 40000 LOC) a mohu potvrdit ze i v teto velikosti je to stale pouzitelne a dobre se mi v tom dela... u Scaly bych si nebyl tak jisty...

Projekt co jsem dělal ve Scale má shodou okolností taky okolo 40000 LOC, a spolupracoval jsem i na větším. Pracuje se v tom taky dobře i na takovýchto projektech, ostatně Scala má jako jeden z hlavních cílů být a Scalable language. Potíž je spíš ta učicí křivka.

Re:Kotlin nebo Scala pro backend?
« Odpověď #13 kdy: 30. 10. 2020, 10:04:01 »
Scalovské kolekce hodně tlačí immutable přístup, to u Kotlinu neočekávám, tím se zásadně mění přístup k programování.

Kotlin prisel minimalne s dataclasses

Re:Kotlin nebo Scala pro backend?
« Odpověď #14 kdy: 30. 10. 2020, 10:05:39 »
Hmm, mě snad breakpointy nějak fungovaly, co si vybavuju.. Ale jo, debugování je určitě slabší místo. Tady jsem zas v nevýhodě, že jsem kdysi dělal ve Smalltalku, takže když se teď potkám s "moderním" debuggerem, mám chuť zlomit klávesnici, hodit jí do kamen a skočit za ní, a spíš se debugování vyhýbám. Aspoň mě to nutí víc psát unit testy.

co modernim debuggerum chybi?