Základy programování

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #90 kdy: 01. 06. 2020, 13:25:13 »
Navíc mi přijde, že se nějak pomíjí, že základy programování (v Haskellu) nutně nemusí ta slova na mon- obsahovat.
Ano, to jsem přesně psal.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #91 kdy: 01. 06. 2020, 13:28:35 »
právě proto, že to bez nich v Haskellu nejde
Ono to bez nich jde.
Nemám s Haskellem praktickou zkušenost, takže se nebudu vyloženě hádat, ale mám za to, že bez Monoid a Monad nenapíšeš v Haskellu nic
Nenapadá mě nic, co by bez nich nešlo. Některé jiné FP jazyky je přece vůbec nemají a taky se používají.

Re:Základy programování
« Odpověď #92 kdy: 01. 06. 2020, 13:28:47 »
Navíc mi přijde, že se nějak pomíjí, že základy programování (v Haskellu) nutně nemusí ta slova na mon- obsahovat.
Ano, to jsem přesně psal.
A pak je lepší ten Elm :)

Re:Základy programování
« Odpověď #93 kdy: 01. 06. 2020, 13:33:28 »

Nemám s Haskellem praktickou zkušenost, takže se nebudu vyloženě hádat, ale mám za to, že bez Monoid a Monad nenapíšeš v Haskellu nic (ledaže bys to obešel vlastní - míň abstraktní implementací, ale to by pak postrádalo smysl používat Haskell). Bez Applicative se asi obejít dá.
Prakticky: bez Monoidu se dá obejít úplně v pohodě. V tutorialech je Monoid asi z toho důvodu, že když se vykládají TypeClassy, tak zrovna Monoid je hezký reprezentativní příklad. Není to zas tak často používaná abstrakce.

Bez Monadu se dá taky psát docela v pohodě. Pro začátečníka bohatě stačí IO monad s "do" notací a nějaké vysvětlení, kdy se ten efekt spustí a kdy použít let a kdy <-. Sice jsem s tím na začátku taky chvíli bojoval, ale nepřipadá mi to nějak složitý.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #94 kdy: 01. 06. 2020, 13:38:58 »
mně Haskell na škole nedal vůbec nic
Mně taky ne, když jsem ho měl povinně ve druháku. Ale doktorandům nebo postdokům zaplatí jeden článek třeba “dovolenou” na Havaji nebo Bali, když tam je zrovna konference. Normální dovolená je vlastně horší, páč si sám platíš let, hotel a nedostaneš diety €50/den. Možná to je pro mnoho lidí, co na to má hlavu, ta hlavní motivace.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #95 kdy: 01. 06. 2020, 13:42:42 »
Navíc mi přijde, že se nějak pomíjí, že základy programování (v Haskellu) nutně nemusí ta slova na mon- obsahovat.
Ano, to jsem přesně psal.
A pak je lepší ten Elm :)
Ty si nedáš pokoj :P Však ti ho nikdo nebere, na výuku proč ne, Pascal je taky na začátku lepší než asembler (teď už se asi moc nepoužívá, ale za mých mladých let Python nebyl). Vlastně bych docela rád viděl nějaký opravdu kvalitní úvod do programování používající Elm (na úrovni prvního ročníku VŠ).

Re:Základy programování
« Odpověď #96 kdy: 01. 06. 2020, 15:51:33 »
Prakticky: bez Monoidu se dá obejít úplně v pohodě. V tutorialech je Monoid asi z toho důvodu, že když se vykládají TypeClassy, tak zrovna Monoid je hezký reprezentativní příklad. Není to zas tak často používaná abstrakce.
Ok, díky za korekci.

Bez Monadu se dá taky psát docela v pohodě. Pro začátečníka bohatě stačí IO monad s "do" notací a nějaké vysvětlení, kdy se ten efekt spustí a kdy použít let a kdy <-. Sice jsem s tím na začátku taky chvíli bojoval, ale nepřipadá mi to nějak složitý.
Chceme učit nováčky Haskell, protože se naučí čistě a jasně myslet a pochopí, co jsou to typy, a pak jim ani nebudeme umět pořádne vysvětlit, co je přesně "<-" a řekneme jim "to je taková speciální věc, toho si nevšímejte, protože byste to nepochopili"? Nebo si budeme dokonce vymýšlet pohádky o tom, že do blok je takový "jakoby vlastně sekvenční imperatviní blok v neimperativním jazyce"? No nevím...

Ale doktorandům nebo postdokům zaplatí jeden článek třeba...
Já to dobře znám, dělal jsem na částečný úvazek ve výzkumu nějakých devět let nebo kolik :)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #97 kdy: 01. 06. 2020, 15:54:13 »
Nebo si budeme dokonce vymýšlet pohádky o tom, že do blok je takový "jakoby vlastně sekvenční imperatviní blok v neimperativním jazyce"? No nevím...
To není pohádka, to tak je  ;)

Re:Základy programování
« Odpověď #98 kdy: 01. 06. 2020, 16:04:23 »
To není pohádka, to tak je  ;)
Jenže bez vysvětlení podstaty je to zavádějící. Student by se automaticky zeptal "Aha, takže tenhle blok překládá překladač jinak než zbytek programu?", "A proč teda není takový celý program? Bylo by to pak jak v Pascalu a tímpádem mnohem jednodušší", popřípadě ještě hůř: "aha, takže vy nám tady celou dobu vykládáte, jak jsou lazy pure funkce super a teď s nima nejde ani blbej printf?!"

Ale jo, s dávkou didaktického talentu by se to asi vysvětlit dalo - popsalo by se prostě IO + ty operace z Monad + to, že do je jenom syntaktický cukr, akorát by se zamlčelo, že ty operace tvoří tu Monad a že se dají použít i jinde.

...akorát mi to přijde takový... no typicky akademický - prvně se vymyslí skvělý ohýbák ("Pojďme učit Haskell!") a pak se musí složitě vymýšlet narovnávák, aby to vůbec v praktické výuce dávalo smysl ;)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #99 kdy: 01. 06. 2020, 16:14:43 »
To není pohádka, to tak je  ;)
Jenže bez vysvětlení podstaty je to zavádějící. Student by se automaticky zeptal "Aha, takže tenhle blok překládá překladač jinak než zbytek programu?", "A proč teda není takový celý program? Bylo by to pak jak v Pascalu a tímpádem mnohem jednodušší", popřípadě ještě hůř: "aha, takže vy nám tady celou dobu vykládáte, jak jsou lazy pure funkce super a teď s nima nejde ani blbej printf?!"

Ale jo, s dávkou didaktického talentu by se to asi vysvětlit dalo - popsalo by se prostě IO + ty operace z Monad + to, že do je jenom syntaktický cukr, akorát by se zamlčelo, že ty operace tvoří tu Monad a že se dají použít i jinde.

...akorát mi to přijde takový... no typicky akademický - prvně se vymyslí skvělý ohýbák ("Pojďme učit Haskell!") a pak se musí složitě vymýšlet narovnávák, aby to vůbec v praktické výuce dávalo smysl ;)
Takové otázky jsou ale skvělé, zvídaví studenti jsou radost.
Stačí postupovat metodicky. Na astrofyzice taky na nikoho na začátku nevybalí limitní cykly v akrečních discích dvojhvězd, nejdříve musí student vstřebat nějaké ty derivace, vícerozměrné integrály, špetku teorie chaosu, relativitu atd.

Jak jsi sám psal, učit z fleku FP by byl zajímavý experiment, jen nevím, poskytuje nějaká pojišťovna produkt na odstraňování duševních poruch způsobených bifunktory?

Re:Základy programování
« Odpověď #100 kdy: 01. 06. 2020, 16:48:21 »
A také bych rozlišoval ta slova na mon-. Takový monoid jde vysvětlit i lidem bez znalostí algebry během chviličky. S monádou už by to bylo poněkud komplikovanější...
To jako tohle: https://cs.m.wikipedia.org/wiki/Monoid#Teorie_kategori%C3%AD ? To se mi nějak nezdá, že by to šlo během chviličky.

Taky na to člověk nemusí jít přes TK, ale třeba přes grupy. Možná to není tak elegantní, ale ty nároky jsou imho o dost menší.

Bez Monadu se dá taky psát docela v pohodě. Pro začátečníka bohatě stačí IO monad s "do" notací a nějaké vysvětlení, kdy se ten efekt spustí a kdy použít let a kdy <-. Sice jsem s tím na začátku taky chvíli bojoval, ale nepřipadá mi to nějak složitý.
Chceme učit nováčky Haskell, protože se naučí čistě a jasně myslet a pochopí, co jsou to typy, a pak jim ani nebudeme umět pořádne vysvětlit, co je přesně "<-" a řekneme jim "to je taková speciální věc, toho si nevšímejte, protože byste to nepochopili"? Nebo si budeme dokonce vymýšlet pohádky o tom, že do blok je takový "jakoby vlastně sekvenční imperatviní blok v neimperativním jazyce"? No nevím...

Ne, ukáže se bind a then, a ukáže se, že do-blok je cukr. A pak ti, které to zaujme, mohou pokračovat dál třeba tím, že IO a Maybe mají něco společného...  Zase mi přijde, že narážíme na neexistující problém. IO není něco, co patří na druhou přednášku...

Obecně by bylo fajn, kdyby někteří nestavěli teorii proti praxi.

Re:Základy programování
« Odpověď #101 kdy: 01. 06. 2020, 16:53:23 »
Ne, ukáže se bind a then, a ukáže se, že do-blok je cukr. A pak ti, které to zaujme, mohou pokračovat dál třeba tím, že IO a Maybe mají něco společného...  Zase mi přijde, že narážíme na neexistující problém. IO není něco, co patří na druhou přednášku...
Ok, fair enough.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #102 kdy: 01. 06. 2020, 16:54:45 »
A také bych rozlišoval ta slova na mon-. Takový monoid jde vysvětlit i lidem bez znalostí algebry během chviličky. S monádou už by to bylo poněkud komplikovanější...
To jako tohle: https://cs.m.wikipedia.org/wiki/Monoid#Teorie_kategori%C3%AD ? To se mi nějak nezdá, že by to šlo během chviličky.

Taky na to člověk nemusí jít přes TK, ale třeba přes grupy. Možná to není tak elegantní, ale ty nároky jsou imho o dost menší.
Jsou menší, ale je to něco jiného.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #103 kdy: 01. 06. 2020, 16:57:11 »
Obecně by bylo fajn, kdyby někteří nestavěli teorii proti praxi.
Howgh

Re:Základy programování
« Odpověď #104 kdy: 01. 06. 2020, 17:08:00 »
Každopádně jsem rád, že moje děcka se ty příkazy, ify, smyčky a funkce naučily pěkně po staru v LightBotovi a Scratchi, takže ten experiment s FP jako prvním paradigmatem už na nich nikdo neudělá ani kdyby chtěl ;)