Praktická matematika

Aoidhghean

Re:Praktická matematika
« Odpověď #30 kdy: 22. 09. 2017, 09:42:40 »
V PHP asi ne, ale nevěřil bys, kolik lidí nechápe třeba flatMap, ani když jim to vyložíš jak žákovi zvláštní školy po obrně. Jinak nevím, co myslíš tím “bezprostředně”, takže těžko můžu nějak reagovat. Asi jde ale o to, jaký produkt děláš.
No právě třeba k tomu, abys pochopil flatMap, vůbec nepotřebuješ znát CT. Pokud by tvým cílem bylo pochopit flatMap, je studium CT asi ta nejhorší cesta, kterou by ses mohl vydat :) Možná ještě míň efektivní by bylo snažit se kladivem z olova vyrobit zlato ;)
Když si teď na papír napíšeš obecný flatMap fungující se všemi typy (které poskytují flatten a fmap, přičemž nic jiného o nich nevíš), takže už jsi hodně hluboko v abstraktní algebře (a když si to nakreslíš, abys pochopil vztahy, dostaneš kom. diagram). KT vlastně jen poskytuje terminologii - když už znáš flatMap a flatten a další šaškárny, tak ti dá úvod do KT jen matematické termíny, žádné další poznatky. Lidi v tom většinou nevidí přínos, protože se abstrahuje od všeho konkrétního. Ale i jen standardizovaná terminologie je hodně šikovná věc.


Re:Praktická matematika
« Odpověď #31 kdy: 22. 09. 2017, 09:51:00 »
Když si teď na papír napíšeš obecný flatMap fungující se všemi typy (které poskytují flatten a fmap, přičemž nic jiného o nich nevíš), takže už jsi hodně hluboko v abstraktní algebře (a když si to nakreslíš, abys pochopil vztahy, dostaneš kom. diagram). KT vlastně jen poskytuje terminologii - když už znáš flatMap a flatten a další šaškárny, tak ti dá úvod do KT jen matematické termíny, žádné další poznatky. Lidi v tom většinou nevidí přínos, protože se abstrahuje od všeho konkrétního. Ale i jen standardizovaná terminologie je hodně šikovná věc.
No jo, to máš sice pravdu, ale takhle to funguje víceméně jenom v Haskellu :) V míň "akademicky čístých" jazycích neřešíš obecný flatMap, ale flatMap, který funguje víceméně jenom nad seznamy. Čili to primární, co tě zajímá, je konkrétní instance, která je triviální (mapem dostanu seznam seznamů a ten flattenuju - pochopí úplně každej).

A mimochodem, jakmile princip pochopíš nad seznamy, je už docela snadná cesta si uvědomit, že seznam je jenom jedna instance a že se to dá popsat abstraktně. Od konkrétního k abstraktnímu je vždycky snadnější a správnější cesta než naopak.

Ovšem i tak k tomu mám ještě jednu výhradu: tenhle krok většinou ten "normální" programátor ani vůbec nepotřebuje udělat, protože prostě flatMap nad ničím jiným než nad seznamem používat nebude (protože neprogramuje v Haskellu ani ničem podobným, kde by to mohl využít). Čili nejenže CT nepotřebuje, protože k abstrakci se může dostat přes konkrétno, ale on nepotřebuje ani to samotný abstraktno, docela dobře si vystačí jenom s konkrétnem ;)

Re:Praktická matematika
« Odpověď #32 kdy: 22. 09. 2017, 09:53:43 »
K výuce matematiky u nás: onanie. Vesměs to vyučují lidi, co se to odpapouškovali od papoušků před nimi. Nemají mezi sebou konkurenci, takže je ani nenutí se zlepšovat. Učí se ve stylu "Nechť existuje ..." nějaká přiblblá definice zapsaná hyeroglyfy, ve stejném kódování pak podaný důkaz a z toho nechť se odvodí celý svět.

Kontrast s videy, co pošlu dole. Nastíní intuici problému, zbytečné definice často rovnou přeskočí, dá několik příkladů (ne s maticí 5x5 jako blbci u nás, se kterou ztratí 20 minut) a vysvětlí to naprosto v lidské řeči. Nemáš z toho pak pocit méněcennosti, jakou se ti snaží vštípit na českých školách, kde se měří úspěšnost počtem vyhozených lidí, nabiflovaných definic a počtem škol v ČR, které jsou pod jejich úroveň.

---
Courseru, Udemy apod. moc nemusím. Nemam rád tu jejich formu videa. Doporučuju nejsledovanější kurzy z top univerzit, byť už mají nějaký věk.

Třeba snad nejlepší online kurz, co kdy vyšel, je lineární algebra od Stranga z MIT. To snad nejde ani nepochopit. Navíc ty přednášky trvají jenom 45 minut, navíc vzhledem k tomu, jak pomalu mluví. U nás jim na to nestačily 2.5 hodiny.
web: https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/
youtube: https://youtu.be/ZK3O402wf1c

Pro programátory vynalezli diskrétní matematiku (vysvětluje to hned v prvním videu) jako mix různých oborů jako takové programátorské minimum. Osobně jsem se vyprd na přednášky ve škole a naučil se to z aduni - opět jeden z nejlepších učitelů, co to umí vysvětlit lidsky.
web: http://www.aduni.org/courses/discrete/index.php?view=cw
youtube: https://youtu.be/ILQT1koTrpA

Pak je ještě novější verze přímo na MIT, ale tu jsem neprojel.
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/video-lectures/


Aoidhghean

Re:Praktická matematika
« Odpověď #33 kdy: 22. 09. 2017, 09:56:37 »
Když si teď na papír napíšeš obecný flatMap fungující se všemi typy (které poskytují flatten a fmap, přičemž nic jiného o nich nevíš), takže už jsi hodně hluboko v abstraktní algebře (a když si to nakreslíš, abys pochopil vztahy, dostaneš kom. diagram). KT vlastně jen poskytuje terminologii - když už znáš flatMap a flatten a další šaškárny, tak ti dá úvod do KT jen matematické termíny, žádné další poznatky. Lidi v tom většinou nevidí přínos, protože se abstrahuje od všeho konkrétního. Ale i jen standardizovaná terminologie je hodně šikovná věc.
No jo, to máš sice pravdu, ale takhle to funguje víceméně jenom v Haskellu :) V míň "akademicky čístých" jazycích neřešíš obecný flatMap, ale flatMap, který funguje víceméně jenom nad seznamy. Čili to primární, co tě zajímá, je konkrétní instance, která je triviální (mapem dostanu seznam seznamů a ten flattenuju - pochopí úplně každej).

Ovšem i tak k tomu mám ještě jednu výhradu: tenhle krok většinou ten "normální" programátor ani vůbec nepotřebuje udělat, protože prostě flatMap nad ničím jiným než nad seznamem používat nebude
Já myslel flatMap ve Swiftu, kde jde o obecný koncept používaný ve standardní knihovně pro mnoho tříd, nejen seznamy. V Haskellu se to ostatně jmenuje bind. A v KT zas úplně jinak  :D

Re:Praktická matematika
« Odpověď #34 kdy: 22. 09. 2017, 09:57:39 »
hyeroglyfy
Sorry za grammar nazi poznámku, ale "hieroglyfy" je od řeckého "svaté písmo", proto měkké i v ἱερός. Stejně tak "hierarchie". S tvrdým y to trhá oči...


Re:Praktická matematika
« Odpověď #35 kdy: 22. 09. 2017, 10:02:33 »
Já myslel flatMap ve Swiftu, kde jde o obecný koncept používaný ve standardní knihovně pro mnoho tříd, nejen seznamy.
Swift neznám, takže to neumím fundovaně komentovat. Ale jak tak zběžně koukám, stejně "normální programátor" jde tou cestou, o které jsem psal - od listu se odpíchne dál. A to odpíchnutí je v "programátorských pojmech":

Citace
In other words, flatMap is specifically overloaded to deal with Optionals. It will take an array of optionals and return an array of unwrapped optionals without any nils.
https://www.natashatherobot.com/swift-2-flatmap/

Všímáš si toho jazyka? "Overloaded" (zvýraznění moje), žádná abstraktní algebra! :)

No nic, musím se vrátit k práci. Myslím, že si rozumíme a víc asi není proč tu slámu mlátit, ne? ;) Měj se, dík za diskusi.

balki

Re:Praktická matematika
« Odpověď #36 kdy: 22. 09. 2017, 10:14:41 »
Matematika je svět sám pro sebe. Nabízí spoustu odpovědí, ale často nevíme na jaké otázky.  Jě běžné že se zjistí že konkrétní problém je možné řešit naprosto jednoduše pomocí matematického aparátu objeveného před více jak sto lety. 
Technický pokrok lidstva sestává ze dvou částí: matematiků, kteří vymýšlejí nový matematický aparát a z těch co tento aparát používají.  Při výuce nám matematici otevírají dveře do svého světa, zbytek je na nás.

!!!  ;)

Aoidhghean

Re:Praktická matematika
« Odpověď #37 kdy: 22. 09. 2017, 10:15:10 »
Já myslel flatMap ve Swiftu, kde jde o obecný koncept používaný ve standardní knihovně pro mnoho tříd, nejen seznamy.
Swift neznám, takže to neumím fundovaně komentovat. Ale jak tak zběžně koukám, stejně "normální programátor" jde tou cestou, o které jsem psal - od listu se odpíchne dál. A to odpíchnutí je v "programátorských pojmech":

Citace
In other words, flatMap is specifically overloaded to deal with Optionals. It will take an array of optionals and return an array of unwrapped optionals without any nils.
https://www.natashatherobot.com/swift-2-flatmap/

Všímáš si toho jazyka? "Overloaded" (zvýraznění moje), žádná abstraktní algebra! :)

No nic, musím se vrátit k práci. Myslím, že si rozumíme a víc asi není proč tu slámu mlátit, ne? ;) Měj se, dík za diskusi.
Asi by bylo lepší citovat aspoň oficiální dokumentaci, internet je plný pochybných textů od ignorantů. Nicméně pravda je, že ve Swiftu se flatMap implementuje zvlášť, protože nemá higher-kinded types, pročež to v něm vůbec nejde genericky (zatím). No nic, Haskellu zdar a zpět do práce :)

Re:Praktická matematika
« Odpověď #38 kdy: 22. 09. 2017, 10:20:06 »
Asi by bylo lepší citovat aspoň oficiální dokumentaci, internet je plný pochybných textů od ignorantů.
Ale vzdyt to cituju prave jako ilustraci toho, jak si k tomu "normalni programator" dojde. Studiem CT to neni, sorry. A ani to neni nutny.

Nicméně pravda je, že ve Swiftu se flatMap implementuje zvlášť, protože nemá higher-kinded types, pročež to v něm vůbec nejde genericky (zatím).
No dyt. To je moje pointa. "Normalni programator" to ve zcela abstraktni rovine nepotrebuje chapat, protoze jeho jazyk mu to stejne ve zcela abstraktni rovine neumoznuje pouzit. On ma proste k dispozici implementaci pro konkretni instance, typicky jenom pro jednu (seznam)  a kdyz se zadari, tak to ma *overloaded* i pro neco jinyho :)

Jasne ze duvod je v tom, ze jazyk nema typeclasses. Ale to je uplne jedno. O tom si muzeme povidat a snit o tom, jak jednou budou typeclasses v Jave. Zatim ale nejsou a timpadem je nasemu "normalnimu programatorovi" CT celkem k prdu ;)

balki

Re:Praktická matematika
« Odpověď #39 kdy: 22. 09. 2017, 10:28:35 »
Jasne ze duvod je v tom, ze jazyk nema typeclasses. Ale to je uplne jedno. O tom si muzeme povidat a snit o tom, jak jednou budou typeclasses v Jave. Zatim ale nejsou a timpadem je nasemu "normalnimu programatorovi" CT celkem k prdu ;)

Tieto haskelizmy v jave nie su potrebne.

Ivan Nový

Re:Praktická matematika
« Odpověď #40 kdy: 22. 09. 2017, 10:30:26 »
Pohled programátora na matematiku by měl být stejný, jako pohled fyzika na matematiku, tedy měl by ji znát tak, aby ji mohl používat. Do přílišných detailů zabíhat nemusí. Programy většinou neřeší tolik abstraktní záležitosti, aby jejich mentální vizualizace byla na překážku, a proto je dobré, aby programátor měl vytvořenu vizuální představu matematického aparátu, aby ho mohl používat.

Re:Praktická matematika
« Odpověď #41 kdy: 22. 09. 2017, 10:43:13 »
Tieto haskelizmy v jave nie su potrebne.
Java stejny problem resi pomoci interfaces. Jestli je to horsi nebo lepsi reseni, o tom by se dalo hadat roky ;)

Aoidhghean

Re:Praktická matematika
« Odpověď #42 kdy: 22. 09. 2017, 10:50:48 »
Asi by bylo lepší citovat aspoň oficiální dokumentaci, internet je plný pochybných textů od ignorantů.
Ale vzdyt to cituju prave jako ilustraci toho, jak si k tomu "normalni programator" dojde. Studiem CT to neni, sorry. A ani to neni nutny.

Nicméně pravda je, že ve Swiftu se flatMap implementuje zvlášť, protože nemá higher-kinded types, pročež to v něm vůbec nejde genericky (zatím).
No dyt. To je moje pointa. "Normalni programator" to ve zcela abstraktni rovine nepotrebuje chapat, protoze jeho jazyk mu to stejne ve zcela abstraktni rovine neumoznuje pouzit. On ma proste k dispozici implementaci pro konkretni instance, typicky jenom pro jednu (seznam)  a kdyz se zadari, tak to ma *overloaded* i pro neco jinyho :)

Jasne ze duvod je v tom, ze jazyk nema typeclasses. Ale to je uplne jedno. O tom si muzeme povidat a snit o tom, jak jednou budou typeclasses v Jave. Zatim ale nejsou a timpadem je nasemu "normalnimu programatorovi" CT celkem k prdu ;)
S type classes to nijak přímo nesouvisí, ale jinak jo, běžný Pepa takyprogramátor si vystačí s flatMap pro každý typ zvlášť  ;) Dokud teda nezačne dělat něco jako parser combinator, což je IMHO taky dost praktická věc.

Aoidhghean

Re:Praktická matematika
« Odpověď #43 kdy: 22. 09. 2017, 10:52:35 »
Pohled programátora na matematiku by měl být stejný, jako pohled fyzika na matematiku, tedy měl by ji znát tak, aby ji mohl používat. Do přílišných detailů zabíhat nemusí. Programy většinou neřeší tolik abstraktní záležitosti, aby jejich mentální vizualizace byla na překážku, a proto je dobré, aby programátor měl vytvořenu vizuální představu matematického aparátu, aby ho mohl používat.
V tomto ohledu to má fyzik horší, matika pro teorii relativity nebo kvantovou fyziku je dost hardcore.

Ivan Nový

Re:Praktická matematika
« Odpověď #44 kdy: 22. 09. 2017, 10:53:57 »
FlatMap to je tedy věda :-)

fl = reduce(lambda x,y: x + y, map(funct, list))