Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Funkcionální programování - notebook #38

Closed
hanpari opened this issue Aug 20, 2016 · 14 comments
Closed

Funkcionální programování - notebook #38

hanpari opened this issue Aug 20, 2016 · 14 comments

Comments

@hanpari
Copy link

hanpari commented Aug 20, 2016

Ahoj všichni,

jak už jsem psal Honzovi, svého času jsem začal psát notebook o FP, který je tady:

https://github.com/hanpari/veledatacz/blob/master/funkcionalne.ipynb

Nevím, zda za to stojí, ale pokud by to někdo chtěl posoudit, zda na té věci dál pracovat (ve smyslu, že by byla užitečná pro komunitu), budu jen rád.

Upozorňuji, že notebook je v syrovém a nedodělaném stavu. :)

@encukou
Copy link
Member

encukou commented Aug 21, 2016

Ahoj! Já si při čtení stále kladl zásadní otázku: Pro koho ten text píšeš?
Jaké znalosti předpokládáš – Python, matematiku, Excel, časovou náročnost algoritmů, ...? Úroveň znalostí ve skutečnost není "úroveň"; každý se k tomu, co ví, dobral jinou cestou. Připadá mi že text je pro klasického vysokoškoláka na IT oboru (kde se FP typicky bere) nebo ostříleného profíka, který si udržuje o oboru obecný rozhled (a tudíž už se pravděpodobně s FP někde setkal).

Vyřešíš-li tuhle otázku, přijde další: Jak jako čtenář poznám, že text je pro mně, t.j. že mu budu rozumět a zároveň mi něco nového dá?

@hanpari
Copy link
Author

hanpari commented Aug 22, 2016

Ahoj,
díky, že sis našel čas. To jsou dobré otázky.

V podstatě jsem chtěl demonstrovat principy FP na jednoduchých příkladech.
Pokud možná srozumítelnou a jednoduchou formou, aniž bych se zapletl do technického žargonu.
Je pravda, že jsem odbyl motivační část :) Nakonec jsem četl tolik FP propagandy, že mi přijde, že to musí znát každý :)
Ale ano, měl bych na začátek dát výhody FP, abych nemátl čtenáře.

Co se týče znalostí, matematika je spíš středoškolská, nějaké základy algoritmizace jsem u programátorů předpokládal a Python alespoň na mírně pokročilé úrovni.

Ještě jednou díky za čas. Zkusím se nad tím zamyslet. Budu jen rád za nějakou zpětnou vazbu.

@horejsek
Copy link

Ahoj. :-) Přijde mi, že je potřeba si nejprve stanovit cílovku, jak už psal @encukou, a podle toho text přizpůsobit.

Osobně, jestli jde o ukázání FP Pythonistům, držel bych se Pythonových konvencí a snažil se maximálně najít různé real-life ukázky, jak se řeší s OOP a jak je lze vyřešit elegantněji s FP technikami dostupnými v Pythonu.

Pokud jde o ukázání FP obecně, nejsem si jist, zda je Python správnou volbou. Ale na to bude mít každý jiný názor a já jsem ovlivněn tím, že mám rád Haskell. Minimálně bych byl rád, aby se nepřekládaly zavedené pojmy. Například ryzí mi docvaklo hned, ale objekty první třídy mi trvalo déle, cože to vlastně je. :-)


Mimochodem mohu doporučit jednu ukázku, která lze použít vhodně v běžném Pythonu a použil jsem před pár dny. Využít více deklarativní styl. Například řekněme, že máme list nějakých instancí a pro každý typ je třeba zavolat nějakou funkci ke zpracování. Někdo by mohl napsat takto:

def process(item):
    if item.type == 'a':
        process_a(item)
    elif item.type == 'b':
        process_b(item)
    ...

Kdežto například v Haskellu by šlo napsat hezky deklarativně:

process item@(Item 'a' _) = ...
process item@(Item 'b' _) = ...
...

Tedy bez nutnosti psát pomocnou metodu s dlouhou podmínkou. V Pythonu se lze deklarativnímu přístupu přiblížit třeba takto:

ITEM_TYPE_TO_PROCESS_FUNCTION = {
    'a': process_a,
    'b': process_b,
}

def process(item):
    ITEM_TYPE_TO_PROCESS_FUNCTION[item.type](item)

Samozřejmě to lze, v případě že známe dobře možné typy, udělat plně dynamické. Ale to je pak na posouzení, zda to za to stojí, neb v Pythonu se bude případný bug ladit blbě. Haskell naopak zařve, pokud nevyřešíme všechny možnosti.

@hanpari
Copy link
Author

hanpari commented Aug 23, 2016

Určitě děkuji za další připomínku. Moc si toho vážím.

Pokud jde o cílovou skupinu, pak v podstatě mi šlo o osvětu. :) Lidé neví, co si pod pojmem funkcionálním představit a na rootu jsem viděl dokonce komentář, ve kterém si kdosi zjevně pletl funkcionální s procedurálním a nenašel se nikdo, kdo by ho opravil :)

Co se týče překládání, tam bude se mnou těžké pořízení, protože se usilovně snažím vyhýbat se programátorské angločeštině. Považuji to za část osvěty používat svůj rodný jazyk.

Nicméně, většinu pojmů jsem nepřekládal já, ale použil jsem české výrazy z akademického prostředí, které jsem našel na netu, takže by mělo jít (alespoň doufám) o korektní překlady. Já osobně bych nikdy nepřeložil closures jako uzávěry, ale zřejmě jde o uznávaný překlad. Takže z mojí strany nejde o lidovou tvořivost. Ale i tak je to někdy na facku :)

Pokud byste znali správnější či užívanější termín technicus, klidně mne opravte.

Haskell je sice FP jazyk, ale na druhou stranu vysvětlovat Haskellistům, co je to funkcionální programování bych považoval ze své strany za drzost. :)
Mlčky doufám, že vysvětlení v obecně známějším jazyce je vhodnější a přístupnější.

Co se týče příkladů, jde mi spíš o filosofii FP než další návod, jak naprogramovat bojovníka v aréně funkcionálně :)

Budu jen rád za další připomínky. Když vás něco napadne, klidně to hoďte do issue. Na pythoní switch jsem pravděpodobně buď zapomněl anebo jsem tím nechtěl komplikovat zápis funkce.

Ale samozřejmě souhlasím, že v oblasti ADT nebo pattern matchingu (kristepane, jak je to česky!) Python zrovna neexceluje. Ale aspoň se konečně objevily enumerátory, když už nic.

Všiml jsem si totiž, že elegantní řešení nováčky nebo ty, co programují v jiném jazyce, spolehlivě matou. Proto úmyslně používám triviální příklady - a i tak si nejsem jistý, na kolik budou pro všechny srozumitelné.

Ještě jednou díky.

@horejsek
Copy link

Myslím, že použité české názvy jsou v pohodě. Spíš obecně nemám rád překládání, neb pak je těžší přejít do anglického (či českého) textu. Aspoň pro mne. :-)

K tomu Haskellu – nemyslel jsem to tak, aby se FP vysvětlovalo Haskellistům, ale tak, že z osobní zkušenosti mi nepřijde těžké jako nováček číst kód Haskellu a pochopit koncepty. Naopak to je po rychlém vysvětlení jednoduché, těžké mi přišlo začít přemýšlet funkcionálně, místo objektově, a správně to použít.

Každopádně je super, že se někdo snaží dělat osvětu. FP je skvělé a na některé typy úloh mnohem vhodnější, tudíž by nemělo chybět v dovednostech programátorů. Sám chci o FP psát, ale není čas. Snad se ti osvěta povede a nebudu tak často narážet na objekty, kde nemají co hledat. :-)

@hanpari
Copy link
Author

hanpari commented Aug 24, 2016

Ahoj,
ad Haskell - jo, já to pochopil, ale vzhledem k tomu, jaký minimální ohlas má FP v naších krajích, kde se kombinace PHP a OOP považuje za poslední technologický výkřik, bych neměl odvahu o Haskellu uvažovat, i kdybych ho uměl.
Chvíli jsem koketoval s Fsharpem, ale Dotnetáři jsou zřejmě z povahy masochisti (čili nemají o IMHO lepší Fsharp zájem), navíc mi .NET nějak nesedí.
Navíc Python umí sám o sobě pěkné věci, takže je to takové malé funkcionální dobrodružství.

Pokud bys chtěl jakkoliv přispět (nebo kdokoliv), není problém. Jak se ten notebook rozrůstá, začínám uvažovat, že bych časem použil vhodnější formu, buď v markdownu nebo rst, rozdělenou do kapitol. Takže by neměl být problém upravit nebo přidat nějaký kratší nebo delší text do repozitáře.

@honzajavorek
Copy link
Member

BTW znáte http://www.meetup.com/Lambda-Meetup-Group/ ? Ti, přijde mi, se
snaží FP u nás docela propagovat. Kdyby byl zájem, tak bychom s nimi mohli
třeba udělat nějaký jeden společný sraz...? Ale to už by bylo asi na
separátní issue. Jen mě to tak napadlo.

2016-08-24 12:48 GMT+02:00 hanpari notifications@github.com:

Ahoj,
ad Haskell - jo, já to pochopil, ale vzhledem k tomu, jaký minimální ohlas
má FP v naších krajích, kde se kombinace PHP a OOP považuje za poslední
technologický výkřik, bych neměl odvahu o Haskellu uvažovat, i kdybych ho
uměl.
Chvíli jsem koketoval s Fsharpem, ale Dotnetáři jsou zřejmě z povahy
masochisti (čili nemají o IMHO lepší Fsharp zájem), navíc mi .NET nějak
nesedí.
Navíc Python umí sám o sobě pěkné věci, takže je to takové malé
funkcionální dobrodružství.

Pokud bys chtěl jakkoliv přispět (nebo kdokoliv), není problém. Jak se ten
notebook rozrůstá, začínám uvažovat, že bych časem použil vhodnější formu,
buď v markdownu nebo rst, rozdělenou do kapitol. Takže by neměl být problém
upravit nebo přidat nějaký kratší nebo delší text do repozitáře.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#38 (comment), or mute
the thread
https://github.com/notifications/unsubscribe-auth/AARTMVsMG6PK3XN_BR2gDRX4YAKesd8jks5qjCGDgaJpZM4JpKAa
.

@honzajavorek
Copy link
Member

Co se týče formy, tak ideálně to dotlačit do takové formy, která by šla
jednou publikovat na připravovaném http://naucse.python.cz/, a to tuším
bude Sphinx + rst, ale třeba mě @encukou opraví.

2016-08-24 13:48 GMT+02:00 Honza Javorek mail@honzajavorek.cz:

BTW znáte http://www.meetup.com/Lambda-Meetup-Group/ ? Ti, přijde mi, se
snaží FP u nás docela propagovat. Kdyby byl zájem, tak bychom s nimi mohli
třeba udělat nějaký jeden společný sraz...? Ale to už by bylo asi na
separátní issue. Jen mě to tak napadlo.

2016-08-24 12:48 GMT+02:00 hanpari notifications@github.com:

Ahoj,
ad Haskell - jo, já to pochopil, ale vzhledem k tomu, jaký minimální
ohlas má FP v naších krajích, kde se kombinace PHP a OOP považuje za
poslední technologický výkřik, bych neměl odvahu o Haskellu uvažovat, i
kdybych ho uměl.
Chvíli jsem koketoval s Fsharpem, ale Dotnetáři jsou zřejmě z povahy
masochisti (čili nemají o IMHO lepší Fsharp zájem), navíc mi .NET nějak
nesedí.
Navíc Python umí sám o sobě pěkné věci, takže je to takové malé
funkcionální dobrodružství.

Pokud bys chtěl jakkoliv přispět (nebo kdokoliv), není problém. Jak se
ten notebook rozrůstá, začínám uvažovat, že bych časem použil vhodnější
formu, buď v markdownu nebo rst, rozdělenou do kapitol. Takže by neměl být
problém upravit nebo přidat nějaký kratší nebo delší text do repozitáře.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#38 (comment), or mute
the thread
https://github.com/notifications/unsubscribe-auth/AARTMVsMG6PK3XN_BR2gDRX4YAKesd8jks5qjCGDgaJpZM4JpKAa
.

@hanpari
Copy link
Author

hanpari commented Aug 24, 2016

Jo, rst a Sphinx mi přijde jako dobrý nápad.
Jinak díky za odkaz, neznal jsem.

@encukou
Copy link
Member

encukou commented Aug 24, 2016

naucse bude nakonec v HTML. ReST nebo Jupyter Notebook tam půjdou dát taky.

@hanpari
Copy link
Author

hanpari commented Aug 24, 2016

Děkuji všem za podněty.
Budu v práci pokračovat :)

Vytvořil jsem repozitář tady:
https://github.com/hanpari/python_funkcionalne

Tohle issue uzavírám a rád bych poprosil všechny, aby případné náměty, připomínky směřovali tam.

Ještě jednou díky.

@hanpari hanpari closed this as completed Aug 24, 2016
@kvbik
Copy link
Member

kvbik commented Aug 30, 2016

jak psal @honzajavorek o skupine venujici se funkcionalnimu programovani, organizuje to @danskarda - myslim, ze by bylo dobre s nimi spojit sily.

priznavam se, ze jsem na text zatim moc nekoukal, ale rozhodne souhlasim s ujasnenim si ciloveho publika. plus prvni veta "Přiznejme si, že funkcionální programování je svinstvo" me mozna trosku zaskocila ;)).

@hanpari
Copy link
Author

hanpari commented Aug 30, 2016

:)
Nu, pokud jsem doufal, že silné prohlášení na úvod donutí čtenáře pokračovat - tak zde jsem selhal :)

Myslím, že jsem nechtěl začínat jako každá druhá funkcionální propaganda. Jak je FP skvělé a kdesi cosi... Všiml jsem si, že to stejně nezabírá. :)

Jinak samozřejmě díky za čas. Doufám, že ten šok rozdýcháš :)

Co se týče té skupiny - všiml jsem si, že k ní patří i K. Čížek. (Mimochodem, doporučuji jeho blog funkcionalne.cz). Netroufám si posoudit, do jaké míry by pro ně mohl být zajímavý projekt o pythoním FP, když jejich hlavní doménou, alespoň co jsem si všiml, jsou Scala a Clojure.

Oprava
Clojure · Erlang Programming · Haskell · OCaml Programming · Scala · Lisp & Scheme · JVM Languages · F# Programming

Hm, Python chybí.

@honzajavorek
Copy link
Member

Hm, Python chybí.

To zní jako výzva pro tebe ;)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants