Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: nula 06. 10. 2021, 23:14:33

Název: Tutoriál pro Scalu pro programátora
Přispěvatel: nula 06. 10. 2021, 23:14:33
Ahoj,
 Neznate prosim nekdo nejaky pekny tutorial pro Scalu, idealne pro sice zkuseneho programatora,  ktery ale nema zkusenosti s funkcionalnima jazykama? Idealne teda neco, co nebude ukazovat jen konstrukce, ale vysvetlovalo by i principy a vubec "mindset"? Mozna na nakych sice jednoduchych, ale smyslupnych pripadech? Javim ze Scala asi neni idealni pro vstup do funkcionalniho sveta, ale presto hledam neco pro ni.

Název: Re:Tutorial pro Scalu pro programatora
Přispěvatel: Neználek 07. 10. 2021, 07:33:23
Možná by tě mohl zajímat kurz od Martina Odersky, který Scalu vytvořil:

https://www.coursera.org/learn/scala-functional-programming

Na courseře pak má 2 navazující kurzy.
Název: Re:Tutorial pro Scalu pro programatora
Přispěvatel: _Tomáš_ 07. 10. 2021, 08:09:54
scala je mrcha, tím jak to je takový mix mimo, tak je strašně snadné sklouznout jinám. Pokud chceš dostat do kůži funkcionální mind-set, nauč se ho mimo scalu (erlang/elixir, haskell) a pak jen využij konstrukce ve scale. Ve scale s juniory má docela dobré zkušenosti s Akkou, tutoriály kolem ní ti ozřejmují poměrně dost částí.
Název: Re:Tutorial pro Scalu pro programatora
Přispěvatel: registrovany_ava 07. 10. 2021, 08:31:20
Já byl v podobné situaci před několika lety. Jestli neznáš funkcionální jazyky, ten skok bude docela velký a nějaký tutorial na pár dní tě nezachrání. Doporučuju plnohodnotnou knížku, buď přímo https://www.artima.com/shop/programming_in_scala_5ed (ze staršího vydání jsem se učil já, a je super na vysvětlení co, jak a hlavně proč), nebo https://www.handsonscala.com/ - to tehdy ještě neexistovalo, ale bude to asi praktičtější, přístupnější, Li Haoyi umí velmi srozumitelně a prakticky vysvětlovat, za investované peníze to bude jednoznačně stát.

Další otázka je kterou scalu se učit - dvojku, nebo dotty? Je v nich dost rozdílů, dvojka je starší ale rozšířenější.

A možná taky důležitá otázka je jestli se vůbec scalu učit. Kdybych chtěl praktický managovaný jazyk, šel bych spíš do Kotlinu, je jednodušší a má podle mě větší budoucnost. Kdybych se chtěl funkcionálně vzdělat, šel bych do Haskellu nebo F#. A nebo bych šel prostě do Rustu :-)
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 07. 10. 2021, 10:50:49
vysvetlovalo by i principy a vubec "mindset"?
Na tohle jsou dobré texty Bartosze Milewského, ale ten má příklady jen v Haskellu a C++.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Neználek 07. 10. 2021, 11:08:32
Na tohle jsou dobré texty Bartosze Milewského, ale ten má příklady jen v Haskellu a C++.
Existuje Scala Edition jeho knihy Category Theory for Programmers. https://www.blurb.com/b/9603882-category-theory-for-programmers-scala-edition-pape

Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 07. 10. 2021, 11:38:24
Na tohle jsou dobré texty Bartosze Milewského, ale ten má příklady jen v Haskellu a C++.
Existuje Scala Edition jeho knihy Category Theory for Programmers. https://www.blurb.com/b/9603882-category-theory-for-programmers-scala-edition-pape
Hezké, o této verzi jsem nevěděl.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 07. 10. 2021, 11:38:56
Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
To by bylo na dlouhou debatu :)
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: BoneFlute 07. 10. 2021, 23:31:14
Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
To by bylo na dlouhou debatu :)
Víno mám, můžem začít.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 07. 10. 2021, 23:48:26
Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
To by bylo na dlouhou debatu :)
Víno mám, můžem začít.
Chce to něco ostřejšího ;)
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: BoneFlute 08. 10. 2021, 21:19:34
Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
To by bylo na dlouhou debatu :)
Víno mám, můžem začít.
Chce to něco ostřejšího ;)
Začal bych tím, že CT není to samé co FP. Jistě, v Haskellu se to třeba protíná, ale třeba v Clojure vůbec. Podobnej problém jako OOP verzus Typy. To, že to máme v některých jazycích dohromady neznamená, že to spolu souvisí.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 08. 10. 2021, 23:32:05
Podobnej problém jako OOP verzus Typy.
Dobrý postřeh, Organizace pro osvobození Palestiny s typama nesouvisí :) Ne, vážně, původní OOP typy vůbec nemělo. To by byla taky zajímavá diskuse, ale s FP to moc nesouvisí.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: A.P.Hacker 08. 10. 2021, 23:37:33
Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
To by bylo na dlouhou debatu :)
Víno mám, můžem začít.
Chce to něco ostřejšího ;)
Začal bych tím, že CT není to samé co FP. Jistě, v Haskellu se to třeba protíná, ale třeba v Clojure vůbec. Podobnej problém jako OOP verzus Typy. To, že to máme v některých jazycích dohromady neznamená, že to spolu souvisí.

AFAIK konstrukty, ktere lze popsat pomoci CT terminologie jsou i v Clojure, ale treba i Promisy v JS.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 09. 10. 2021, 10:44:10
Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
To by bylo na dlouhou debatu :)
Víno mám, můžem začít.
Chce to něco ostřejšího ;)
Začal bych tím, že CT není to samé co FP. Jistě, v Haskellu se to třeba protíná, ale třeba v Clojure vůbec. Podobnej problém jako OOP verzus Typy. To, že to máme v některých jazycích dohromady neznamená, že to spolu souvisí.
AFAIK konstrukty, ktere lze popsat pomoci CT terminologie jsou i v Clojure, ale treba i Promisy v JS.
Každý jazyk má něco z CT. I C má typové operátory, Go má závislostní typ apod. Jde o míru kategoricity. BoneFlute ví, o čem mluvím :)
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: BoneFlute 09. 10. 2021, 19:03:58
Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
To by bylo na dlouhou debatu :)
Víno mám, můžem začít.
Chce to něco ostřejšího ;)
Začal bych tím, že CT není to samé co FP. Jistě, v Haskellu se to třeba protíná, ale třeba v Clojure vůbec. Podobnej problém jako OOP verzus Typy. To, že to máme v některých jazycích dohromady neznamená, že to spolu souvisí.

AFAIK konstrukty, ktere lze popsat pomoci CT terminologie jsou i v Clojure, ale treba i Promisy v JS.
To je zajímavý úhel pohledu - monády. Proč se používají v Clojure a proč v Haskellu?

Ale v souvislosti s původním námětem: Udělal by si třeba v Clojure variantu na toto?

Kód: [Vybrat]
interface Identification {}
(tedy rozhraní bez metod)
?
Já klidně a s úspěchem.

Možná že prostě CT tě "poznamená", že očekáváš, že ty typy přináší záruky. Těmi typy modeluješ. Funkce je typ. Vztahy jsou typ :)

Zatímco ve FP je to jen o tom, že referenční transparentnost brání špagetovosti. Máš-li tam typy, tak ti slouží jen pro pattern matching. Ale záruky? O čem to mluvíš?!
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: A.P.Hacker 09. 10. 2021, 20:18:47
To je zajímavý úhel pohledu - monády. Proč se používají v Clojure a proč v Haskellu?

protoze v Haskellu je na nich postavene IO (coz je podle me spis nevyhoda). V Clojure a jinde se pouzivaji nektere konstrukce, treba vyse zminene Promisy, ktere lze napasovat na definici Monady, ale uzivatel to nemusi vedet.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 09. 10. 2021, 20:19:26
očekáváš, že ty typy přináší záruky. Těmi typy modeluješ. Funkce je typ. Vztahy jsou typ :)
Na to to chce ale hodně silný typový systém :)
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: BoneFlute 09. 10. 2021, 21:30:40
To je zajímavý úhel pohledu - monády. Proč se používají v Clojure a proč v Haskellu?

protoze v Haskellu je na nich postavene IO (coz je podle me spis nevyhoda). V Clojure a jinde se pouzivaji nektere konstrukce, treba vyse zminene Promisy, ktere lze napasovat na definici Monady, ale uzivatel to nemusi vedet.
Promise je monáda. Každopádně, souhlas - ale co tím chceš říct?

Ještě doplním, v Haskellu nejsou monády kvůli IO. Ony tam prostě jsou. Třeba jsem narazil na pár jiných staticky typovaných jazyků, a byly tam demonstrovány monády i když IO bylo řešeno úplně jinak.

očekáváš, že ty typy přináší záruky. Těmi typy modeluješ. Funkce je typ. Vztahy jsou typ :)
Na to to chce ale hodně silný typový systém :)
Tak jasně. Ale někteří jsou schopni tvrdit, že třeba takové C# je staticky typovaný jazyk (přitom je to paskvil). To bychom se nikam nedostali. Bavím se o Haskellu, pokukuji po Idris/Agdě.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 10. 10. 2021, 15:59:32
Třeba jsem narazil na pár jiných staticky typovaných jazyků, a byly tam demonstrovány monády i když IO bylo řešeno úplně jinak.
V jazyce bez HKT se ovšem demonstrují dost těžko, je to jen náhražka.
Název: Re:Tutoriál pro Scalu pro programátora
Přispěvatel: Idris 10. 10. 2021, 16:01:51
Tak jasně. Ale někteří jsou schopni tvrdit, že třeba takové C# je staticky typovaný jazyk (přitom je to paskvil). To bychom se nikam nedostali. Bavím se o Haskellu, pokukuji po Idris/Agdě.
Podmnožina C# je staticky typovaná ;) Agda je fajn, ale ruku na srdce, kolik vývojářů je v ní schopno psát efektivně? Pokud tedy vůbec…
Název: Re:Tutorial pro Scalu pro programatora
Přispěvatel: nula 27. 10. 2021, 07:46:56
Já byl v podobné situaci před několika lety. Jestli neznáš funkcionální jazyky, ten skok bude docela velký a nějaký tutorial na pár dní tě nezachrání. Doporučuju plnohodnotnou knížku, buď přímo https://www.artima.com/shop/programming_in_scala_5ed (ze staršího vydání jsem se učil já, a je super na vysvětlení co, jak a hlavně proč), nebo https://www.handsonscala.com/ - to tehdy ještě neexistovalo, ale bude to asi praktičtější, přístupnější, Li Haoyi umí velmi srozumitelně a prakticky vysvětlovat, za investované peníze to bude jednoznačně stát.

Další otázka je kterou scalu se učit - dvojku, nebo dotty? Je v nich dost rozdílů, dvojka je starší ale rozšířenější.

A možná taky důležitá otázka je jestli se vůbec scalu učit. Kdybych chtěl praktický managovaný jazyk, šel bych spíš do Kotlinu, je jednodušší a má podle mě větší budoucnost. Kdybych se chtěl funkcionálně vzdělat, šel bych do Haskellu nebo F#. A nebo bych šel prostě do Rustu :-)

Diky moc, nakonec jsem teda vybral Hands on Scala. Chtel jsem poreferovat az jak se mi ta knizka zda dobra, ale jelikoz uz na ni cekam 2 tydny a zatim stale v nedohlednu, tak aspon jsem chtel podekovat. :)

Scalu jsem chtel hlavne proto, ze u nas ve firme se celkem pouziva a ac jsem hlavne C++kar (a celkem obstojne myslim umim Python a Javu), tak bych rad obcas kouknul lidem pod ruku (a pripadne si byl sam schopen pomoct a necekat na scalisty).