Python - dobré rady a praktiky

čumil

Re:Python - dobré rady a praktiky
« Odpověď #60 kdy: 26. 03. 2016, 14:30:52 »
Takže Python spíše nedoporučujete na větší projekt, protože se to nedá? Slyšel jsem, že ho lidi mají rádi, ale asi nikdo z nich moc velké věci nedělá, tak nevím. Hodně adminů, které znám, tak si Python pochvalují, ale tam to chápu. Na malé věci je velmi zajímavý a asi i bližší administraci.

Záleží jaký projekt. To se nedá takto napsat. Je to projev diletanství a nezkušenosti pokud ti někdo jen tak napíše, že to nejde. Nedoporučuji ti moc se řídit radami tady těch místních brouků pytlíků. Většina z nich nemá žádné znalosti ani zkušenosti a jen tu na sebe dělají ramena. Akorát si někde něco přečetli a jen to tu papouškují, ani sami nevědí proč, nebo něco nepochopili, tak na to nadávají.
Např. my máme v Pythonu udělaný docela rozsáhlý (a stále rostoucí) testovací framework a pracuje se s tím velice příjemně. Původně to vznikalo ve Visual Basicu, což byl porod. Takže to už zachováváme jen kvůli starším projektům a nové děláme na Pythonu. Čili navzdory rádoby akademickým kecům místních "géniů" to jde.
OMG, nikdo tady netvrdí že to nejde (odmyslíme těch pár trotlů školou povinných nazačátku diskuze). Pouze padlo že dynamické typování je vynikající nástroj na střelení se do nohy, když nevíš co děláš. Když víš co děláš a máš unit testy, je to super tool. Systémy v jazykách ála-python jsou snadno rozšiřitelný, pokud ti ale návrh stojí za hovno, posereš se a budeš litovat že nemáš statický typování.

Když ti někdo řekne, python není dobrej na velký projekty, můžeš to vyložit třema způsoby.
Ten člověk je debil.
Ten člověk ví, že výkon je někdy u velkej projektů i důležitej ...
Ten člověk ví že musíš bejt dobrej (programátor|architekt -> kdokoli kdo navrhne tu monstrozitu), jinak ti to ustřelí nohu, a čím větší to bude, tím ti jí to ustřelí víc. Taky ten člověk ví že klienti sou debilové, stejně jako šéf kterej chce vše hned, nejlíp včera, takže návrh bude obvykle nahovno ...

To, že v práci máte [...] udělaný v pythonu nikoho nezajímá a o ničem to nevypovídá ...


Re:Python - dobré rady a praktiky
« Odpověď #61 kdy: 26. 03. 2016, 14:35:30 »
Např. my máme v Pythonu udělaný docela rozsáhlý (a stále rostoucí) testovací framework a pracuje se s tím velice příjemně. Původně to vznikalo ve Visual Basicu, což byl porod. Takže to už zachováváme jen kvůli starším projektům a nové děláme na Pythonu. Čili navzdory rádoby akademickým kecům místních "géniů" to jde.
Nikdo myslím netvrdil, že to nejde. Znám projekt, který je postavený na Pythonu a má desetitisíce řádků. Otázka je, jestli je to racionální volba. Python má prostě svoje specifika, který člověk musí znát a zvážit, než se do toho pustí.

Jenom tak namátkou, co mi slina na jazyk přinese (při skutečném zvažování je potřeba to vzít z gruntu):

Ze začátku mě naláka rychlost vývoje, snadnost úprav, dostupnost vývojářů a "živost" projektu.

GIL! - pokud uvažuju nad serverovou aplikací, je GIL koule na noze. Vyřeší se to tím, že se spustí X oddělených VM. Musím řešit jejich komunikaci na vyšší vrstvě. PyPy není AFAIK dostatečně zralé, aby se na něj dalo spolehnout. Můžu zkusit async.io apod., ale dostávám se do oblasti poněkud dobastlené, bez first-class podpory v jazyce (docela připomíná promises v JS).

Dynamičnost/beztypovost - musím si setsakramentsky dávat pozor na štábní kulturu. Když třeba někam ukládám nějaká data, musím zevrubně zabezpečit, aby mi tam semtam nespadla hodnota, která tam být nemá (z vlastní zkušenosti: není nic otravnější než když člověk má proces, který běží hodiny, načítá nějaká data a po pár hodinách spadne, protože se někde objevil None místo []. Ok, nemělo to tam být, tak to ve zdrojáku ošetříme, spustíme znovu a ono to po pár hodinách spadne na None někde jinde).

Ať jsou unittesty jaké chtějí zevrubné, chyby v produkci budou. Musím nasazovat nějaký logovací systém, který mi podá dostatečně dobré informace, k jaké chybě a kde došlo (Sentry apod.)

Nakonec mě to donutí skončit u nějakých úplně oddělených komponent (buzzword: microservices), cena komunikace a náročnost na schopnosti analytika/designéra roste.

Na větším pojektu se snadnost úprav přehoupne do nesnadnosti úprav. Co bylo na začátku výhodou, se stane nevýhodou.

atd. atd. atd. tohle je fakt jenom tak v rychlosti, co mě momentálně napadlo. Jenom pro ilustraci, že rozhodnout se pro nebo proti pythonu není snadná volba a hraje tam roli spousta věcí. U jazyků, které jsou designované s myšlenkou na větší serverové aplikace od začátku, je zvažování úplně jiné. U pythonu bych to shrnul asi na "Určitě to jde. Ale zvládneme to my? A stojí nám to za to?"

Re:Python - dobré rady a praktiky
« Odpověď #62 kdy: 26. 03. 2016, 14:42:12 »
Koukám, že čumil napsal paralelně se mnou prakticky to samý :)

...což mi připomnělo Jistě pane ministře:

- Celá státní správa je tu proto, aby vám radila!
- Všichni radíte stejně!
- To svědčí o správnosti udílených rad.

:)))

JSH

Re:Python - dobré rady a praktiky
« Odpověď #63 kdy: 26. 03. 2016, 14:59:05 »
Úplně stejně, jako v ostatních jazycích, když metoda požaduje jako vstupní parametr třeba číslo měsíce (1..12) a někdo do ní chce narvat třeba 42. Má na to třeba Java datový typ? Nemá. Použiješ int a ošetříš si to vlastním kódem.

V Pythonu se to dá ošetřit pomocí dekorátoru.
Přesně tak. A ani nemusíme jít tak daleko, stačí nám obyčejný null ;) Jestli se někdo ptá, jak to hergot pythonisti dělají, aby jim to nepadalo na to, že někam místo stringu dají int, tak odpověď je "dělají to v principu podobně jako javisti zabezpečují, aby jim to nepadalo na NullPointerException" :)
Taky to považují za největší omyl? :)

Re:Python - dobré rady a praktiky
« Odpověď #64 kdy: 26. 03. 2016, 15:19:56 »
největší omyl? :)
Tyjo, super článek, dík! ...a jako obvykle, největší zmatek a prasárna je v C++, ten bod 6 je fakt výživnej :))


JSH

Re:Python - dobré rady a praktiky
« Odpověď #65 kdy: 26. 03. 2016, 16:02:01 »
největší omyl? :)
Tyjo, super článek, dík! ...a jako obvykle, největší zmatek a prasárna je v C++, ten bod 6 je fakt výživnej :))
Co je největší prasárna je asi docela subjektivní. V c++ je aspoň k dispozici boost::optional a snad se ujme i not_null z gsl. Maybe z Haskellu to není, ale na to, co si c++ historicky táhne, je to překvapivě snesitelné.


gl

Re:Python - dobré rady a praktiky
« Odpověď #67 kdy: 26. 03. 2016, 19:27:50 »
Dynamičnost/beztypovost - musím si setsakramentsky dávat pozor na štábní kulturu. Když třeba někam ukládám nějaká data, musím zevrubně zabezpečit, aby mi tam semtam nespadla hodnota, která tam být nemá (z vlastní zkušenosti: není nic otravnější než když člověk má proces, který běží hodiny, načítá nějaká data a po pár hodinách spadne, protože se někde objevil None místo []. Ok, nemělo to tam být, tak to ve zdrojáku ošetříme, spustíme znovu a ono to po pár hodinách spadne na None někde jinde).

Ať jsou unittesty jaké chtějí zevrubné, chyby v produkci budou. Musím nasazovat nějaký logovací systém, který mi podá dostatečně dobré informace, k jaké chybě a kde došlo (Sentry apod.)

Je elixir, který zde často propagujete, v tomto jiný?

čumil

Re:Python - dobré rady a praktiky
« Odpověď #68 kdy: 27. 03. 2016, 01:56:41 »
Úplně stejně, jako v ostatních jazycích, když metoda požaduje jako vstupní parametr třeba číslo měsíce (1..12) a někdo do ní chce narvat třeba 42. Má na to třeba Java datový typ? Nemá. Použiješ int a ošetříš si to vlastním kódem.

V Pythonu se to dá ošetřit pomocí dekorátoru.
Přesně tak. A ani nemusíme jít tak daleko, stačí nám obyčejný null ;) Jestli se někdo ptá, jak to hergot pythonisti dělají, aby jim to nepadalo na to, že někam místo stringu dají int, tak odpověď je "dělají to v principu podobně jako javisti zabezpečují, aby jim to nepadalo na NullPointerException" :)
Taky to považují za největší omyl? :)
?? Proč má Objective C 4 typy null ??

Re:Python - dobré rady a praktiky
« Odpověď #69 kdy: 27. 03. 2016, 04:23:10 »
Je elixir, který zde často propagujete, v tomto jiný?
Ano. Všechno, co jsem psal o Erlangu, platí (až na drobnosti) i o Elixiru:
V Erlangu taky typy de facto nejsou, ale dá se použít buť velice silné "manuální typování" (místo čísla dám dvojici {number_of_seconds_since_mireks_birth, 2453461}) nebo typové anotace + docela kvalitní statická analýza (dialyzer). Plus má teda Erlang oproti Pythonu výhodu v tom, že má excelentní podporu pro práci s chybovými stavy. To Python jenom těžko může dohnat, ale tu statickou analýzu by mohl mít snad poměrně dobrou...
Největší rozdíl je v tom, že Erlang/Elixir počítá s tím, že dochází k chybám, a umí se s nimi skvěle vypořádat. Mottem se stalo heslo "Let it crash!" :) Viz např. http://c2.com/cgi/wiki?LetItCrash

p

Re:Python - dobré rady a praktiky
« Odpověď #70 kdy: 27. 03. 2016, 04:23:16 »
Jaky je vas nazor na to, ze aplikace udelana ve flasku bezi i po skonceni dotazu? Neni to trochu uchylny, kdyz HTTP je bezstavovy protokol?

Ondrej

Re:Python - dobré rady a praktiky
« Odpověď #71 kdy: 27. 03. 2016, 09:10:12 »
Jestli se chceš něco dozvědět, doporučuji psát na příslušná místa, ke se vyskytují lidé co v Pythonu programují, ne tady na rootu kde je akorát banda trolů...
Koukni třeba na http://python.cz např Pyonýři sou fajn facebook skupina, kde sou lidi co programují a mnohdy velké projekty...

pyN00b

Re:Python - dobré rady a praktiky
« Odpověď #72 kdy: 27. 03. 2016, 09:39:44 »
Jestli se chceš něco dozvědět, doporučuji psát na příslušná místa, ke se vyskytují lidé co v Pythonu programují, ne tady na rootu kde je akorát banda trolů...
Koukni třeba na http://python.cz např Pyonýři sou fajn facebook skupina, kde sou lidi co programují a mnohdy velké projekty...

diky, to zkusim. ale padlo tu par docela zajimavych myslenek na ktery bych rad odpovedel.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Python - dobré rady a praktiky
« Odpověď #73 kdy: 27. 03. 2016, 09:41:22 »
Úplně stejně, jako v ostatních jazycích, když metoda požaduje jako vstupní parametr třeba číslo měsíce (1..12) a někdo do ní chce narvat třeba 42. Má na to třeba Java datový typ? Nemá. Použiješ int a ošetříš si to vlastním kódem.

V Pythonu se to dá ošetřit pomocí dekorátoru.
Přesně tak. A ani nemusíme jít tak daleko, stačí nám obyčejný null ;) Jestli se někdo ptá, jak to hergot pythonisti dělají, aby jim to nepadalo na to, že někam místo stringu dají int, tak odpověď je "dělají to v principu podobně jako javisti zabezpečují, aby jim to nepadalo na NullPointerException" :)
Taky to považují za největší omyl? :)
?? Proč má Objective C 4 typy null ??
Pro instance, třídy, z C a jako objekt do kolekcí.

perceptron

Re:Python - dobré rady a praktiky
« Odpověď #74 kdy: 27. 03. 2016, 10:37:08 »
Jaky je vas nazor na to, ze aplikace udelana ve flasku bezi i po skonceni dotazu? Neni to trochu uchylny, kdyz HTTP je bezstavovy protokol?
neni. takto funguju http aplikace v .net aj jave. aplikace bezi furt, obsluhuje requesty. session handling je trivialny