Tutoriál pro Scalu pro programátora

nula

Tutoriál pro Scalu pro programátora
« kdy: 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.

« Poslední změna: 07. 10. 2021, 08:56:10 od Petr Krčmář »


Re:Tutorial pro Scalu pro programatora
« Odpověď #1 kdy: 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.

Re:Tutorial pro Scalu pro programatora
« Odpověď #2 kdy: 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í.

Re:Tutorial pro Scalu pro programatora
« Odpověď #3 kdy: 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 :-)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Tutoriál pro Scalu pro programátora
« Odpověď #4 kdy: 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++.


Re:Tutoriál pro Scalu pro programátora
« Odpověď #5 kdy: 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.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Tutoriál pro Scalu pro programátora
« Odpověď #6 kdy: 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.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Tutoriál pro Scalu pro programátora
« Odpověď #7 kdy: 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 :)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Tutoriál pro Scalu pro programátora
« Odpověď #8 kdy: 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.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Tutoriál pro Scalu pro programátora
« Odpověď #9 kdy: 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 ;)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Tutoriál pro Scalu pro programátora
« Odpověď #10 kdy: 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í.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Tutoriál pro Scalu pro programátora
« Odpověď #11 kdy: 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í.

Re:Tutoriál pro Scalu pro programátora
« Odpověď #12 kdy: 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.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Tutoriál pro Scalu pro programátora
« Odpověď #13 kdy: 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 :)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Tutoriál pro Scalu pro programátora
« Odpověď #14 kdy: 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íš?!