Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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.
-
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.
-
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í.
-
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 :-)
-
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++.
-
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.
-
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.
-
Ale nemyslím si, že CT je to dobrá cesta, jak se učit funkcionálně programovat.
To by bylo na dlouhou debatu :)
-
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.
-
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 ;)
-
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í.
-
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í.
-
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.
-
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 :)
-
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?
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íš?!
-
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.
-
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 :)
-
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ě.
-
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.
-
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…
-
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).