Python - dobré rady a praktiky

it expert

Re:Python - dobré rady a praktiky
« Odpověď #75 kdy: 27. 03. 2016, 10:38:20 »
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?

Úplně v pohodě. Apache také běží po skončení a čeká na další request. V tom Flasku je to stejné. Čeká na další request. V paměti si drží spojení do databáze, které kdyby se měly znovu navazovat při každém requestu? tak by docházelo k neuměrnému zpomalování.

Dále je dobré si mezi requesty držet další objekty, různé countery, nacachované šablony, otevřené soubory, spojení do jiných komponent (memcache, redis, message brokery apod.).


čumil

Re:Python - dobré rady a praktiky
« Odpověď #76 kdy: 27. 03. 2016, 11:10:22 »
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...
Hej, a taky info rozhodně nebude ovlivněný python evangelisty... Blbče, aspoň měj dostatek slušnusti přečíst si co padlo před tvím komentem než začneš nalepkovat trolli.

Ondrej

Re:Python - dobré rady a praktiky
« Odpověď #77 kdy: 27. 03. 2016, 11:29:20 »
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...
Hej, a taky info rozhodně nebude ovlivněný python evangelisty... Blbče, aspoň měj dostatek slušnusti přečíst si co padlo před tvím komentem než začneš nalepkovat trolli.
A ty si přečti aspoň nadpis vlákna a pak možná pochopíš proč ho odkazuji mimo root.

Re:Python - dobré rady a praktiky
« Odpověď #78 kdy: 27. 03. 2016, 12:13:29 »
Zkus si přečíst sekci Hnutí za dobrý kód z http://www.abclinuxu.cz/blog/bystroushaak/2014/7/python-poznamky

Jinak osobně jsem v pythonu dělal na projektu, který měl přes 40k řádek podle CLOC (tzn bez prázdných řádků, komentářů, docstringů a tak). Nebyl s tím vůbec žádný problém, dělali jsme to ve dvou a šlo to v pohodě. Možná za to mohla microservices architektura, ale prostě žádné hroucení na hlavu se nekonalo. Ani co se týče kódu, ani co se týče výkonu, naopak se to krásně škáluje. Umím si představit, že by to stejným způsobem šlo klidně o řád dál bez nějakého stresu.

Například v Seznamu mají systémy psané v pythonu o rozsahu stovek tisíc až milionů řádek a podle všeho s tím nemají problém, naopak pořád nabírají nové lidi. To samé Google. To samé Redhat.

Imho problém těhle threadů o pythonu je, že sem lezou javisti, kteří kolikrát neumí pořádně ani tu javu a pak javí v pythonu a diví se, že jim to nejde. Python je prostě úplně odlišná filosofie, jak co se týče návrhu jazyka, tak co se týče architektury a praktik považovaných za dobré a špatné. Nikde jinde jsem to neviděl takhle ostře vyděleno.

„Chyba“ pythonu je, že základy jsou tak lehké, že se je za týden naučí každý. Když pak ovládne syntaxi, ale vůbec nepochopí nic o zbytku filosofie, tak to končí špatně. Pár těhle projektů jsem viděl a to bych blil.

Radek Miček

Re:Python - dobré rady a praktiky
« Odpověď #79 kdy: 27. 03. 2016, 12:47:06 »
Zkus si přečíst sekci Hnutí za dobrý kód z http://www.abclinuxu.cz/blog/bystroushaak/2014/7/python-poznamky

Jinak osobně jsem v pythonu dělal na projektu, který měl přes 40k řádek podle CLOC (tzn bez prázdných řádků, komentářů, docstringů a tak). Nebyl s tím vůbec žádný problém, dělali jsme to ve dvou a šlo to v pohodě. Možná za to mohla microservices architektura, ale prostě žádné hroucení na hlavu se nekonalo. Ani co se týče kódu, ani co se týče výkonu, naopak se to krásně škáluje. Umím si představit, že by to stejným způsobem šlo klidně o řád dál bez nějakého stresu.

IDE nebo jiné nástroje pro Python vám při refaktoringu typicky pomohou mnohem méně než kompilátory moderních staticky typovaných jazyků (a nezmění to ani pokročilejší IDE jako PyCharm). IMO udržovat kód v Pythonu je tedy o dost náročnější (na druhé straně to zřejmě kompenzuje dostatek programátorů).


php

Re:Python - dobré rady a praktiky
« Odpověď #80 kdy: 27. 03. 2016, 12:59:48 »
IMO udržovat kód v Pythonu je tedy o dost náročnější (na druhé straně to zřejmě kompenzuje dostatek programátorů).

Dostatek nevím, ale jsou levní a to je výhoda. Je to takové lepší PHP a u nás cena rozhoduje. Někde si manažer přečte, že se v tom vývíjí rychleji, což se mi také moc nezdá. Kvalitní Java programátor je tak za dvojnásobek skriptovacích mágů.

Re:Python - dobré rady a praktiky
« Odpověď #81 kdy: 27. 03. 2016, 19:53:37 »
IDE nebo jiné nástroje pro Python vám při refaktoringu typicky pomohou mnohem méně než kompilátory moderních staticky typovaných jazyků (a nezmění to ani pokročilejší IDE jako PyCharm). IMO udržovat kód v Pythonu je tedy o dost náročnější (na druhé straně to zřejmě kompenzuje dostatek programátorů).

Mě s refactoringem nejvíc pomáhají unittesty. Dělal jsem nějakou dobu i v Javě a D a nemám pocit, že by to v pythonu bylo nějak signifikantně slabší. Asi nejhorší refactoring v životě jsem zažil v C, které by podle téhle logiky mělo být refactorovací bonanza (zkoušel jsem jak eclipse, tak netbeans). Ono to asi nebude ta nejideálnější metrika použitelnosti jazyka.

Jinak já moc nepobírám tyhle spekulace, navíc ještě v tomhle threadu, kde chtěl radu ohledně praktik v pythonu. Máte zkušenost s pythonem? Podělte se. Nemáte? Váš názor je irelevantní.

Tyhle diskuze, kde deset javistů v pythonu strašně postrádá Y, což jim dokazuje, že je k ničemu a jednoznačně „horší“ doslova postrádají smysl. To není nic jiného, než jen poměřování penisů, navíc stylem „ten tvůj jsem sice neviděl, ale jsem si jistý, že táta má větší“.

Programování v pythonu je docela jednoduše získatelný žážitek. Pokud vás fakt tak hrozně zajímá, jak se v něm dělá, nemá smysl si řádku za řádkou vyměňovat zkušenosti, nebo čekat, až technologie umožní přenos myšlenek, ale prostě si to zkuste. Mám z toho pocit, že by to zabralo míň času, než tyhle věčné spekulace. Možná sedne, možná ne.


Když už jsme v tom, přidám osobní zkušenost:

Já jsem měl kdysi (~2011) periodu, kdy jsem asi dva roky na python nesáhl a dělal jsem jen v D. Pak jsem měl potřebu v něm něco napsat a měl jsem hrozný problém - vždyť to nemá statické typování. Tohle se přece může rozbít, tohle tady není protected, ani private, co když mi tu metodu někdo použije? Chvíli jsem měl pocit, že je to fakt sračka. Vážně. Asi měsíc jsem měl s tímhle psychický problém.

Pak jsem v něm napsal ten script a ten byl (dostatečně) rychlý a efektivní a měl jsem ho hotový za chvíli. To mě překvapilo. Myšlenky se v pythonu dají tak nějak zapisovat příměji, bez použití tolik sraček kolem, o které mi ve skutečnosti vůbec nejde a vlastně mě nezajímají a ani je nepotřebuju. Došlo mi, že jsem omezoval sám sebe, řešil blbosti a vytvářel si virtuální problémy, které ve skutečnosti neexistovaly.

Tak jsem začal psát víc a víc, až jsem začal dělat jen v pythonu, protože jsem v několikrát produktivnější, než v D. Produktivita je vážně ta jediná reálná metrika, která mě zajímá a většinou zajímá i ostatní, jinak by jsme všichni psali v assembleru.

Jsem v tom produktivnější? To zcela jasně znamená, že je to pro mě lepší. Jedno jestli Python, Lisp, nebo Smalltalk. Život je moc krátký, abych ho mohl trávit výrobou abstraktních továren továren, které stejně používám jen proto, abych mohl nějak ojebat typový systém.

Jazyk, kde chrlím funkcionalitu pětkrát rychleji je pro mě lepší, i kdybych v něm náhodou měl dvojnásobek bugů. Jasně, asi to není nic pro kardiostimulátory, řidící systémy elektráren, nebo různé jiné kritické aplikace, ale tam nepatří ani zbytek toho, co se běžně používá. Tam by měly být formálně verifikované jazyky.

Rád bych zdůraznil, že python nevede na dvojnásobek bugů, i když většina javistů má tenhle pocit. Občas tam nějaké bugy v typech jsou, ale většinou je to výsledkem špatného návrhu, než nějaká bolest typového systému (oblíbené je například znásilňovat dicty na nepopsaný transportní formát, což jde udělat jinde taky, třeba přes JSON a skoro vždycky je to blbě). Typový systém navíc v divočejším použití OOP poměrně rychle ztrácí výhody, protože ani kompilátor nemůže vědět, co kde kam přijde v době runtime.


Ještě k té produktivitě:

Kdysi jsem si takhle koupil mechanickou klávesnici za tři tisíce. Měl jsem z toho radost, vypadala cool a všechno. Fakt super. Užíval jsem si psaní na Cherry MX blue a říkal si, jak krásně rychle na tom píšu.

Pak jsem si sehnal použitou Apple klávesnici za pár stovek, jen abych si vyzkoušel, jestli je použitelná ta na macbooku, který jsem si tenkrát chtěl koupit (má stejný layout). Velmi mě udivilo, že se mi na té klávesnici píše o poznání rychleji a skoro vůbec to neunavuje ruce. Pak mě konečně napadlo si to změřit a zjistil jsem, že jen změnou klávesnice, bez jakékoliv další snahy jsem získal navíc 20 slov za minutu.

Tu mechaniku jsem měl docela rád. Do jisté míry jsem si na ní zakládal, měl jsem z ní pocit dobré investice a tak. Ale prostě se těžko můžu hádat s produktivitou.

Mechaniky jsem se zbavil, i když měla být lepší, vypadala víc cool, dělala klikavé zvuky a prostě vůbec, byla to klávesnicovatější klávesnice. Různí lidé, kteří u mě mechaniku viděli to nemohli moc pochopit. Co mě vedlo k přechodu na membránovku s plochými tlačítky? Vždyť to přece musí být horší.

Stejný pocit mi přijde, že mají lidé z Javy a C# z Pythonu.

javaman

Re:Python - dobré rady a praktiky
« Odpověď #82 kdy: 27. 03. 2016, 20:08:36 »
Python je ta mechanika? Jako že vypadá cool, ale jinak to není ono. To souhlasím, tak nějak mi to vždy připadlo.

x

Re:Python - dobré rady a praktiky
« Odpověď #83 kdy: 27. 03. 2016, 21:29:13 »
(oblíbené je například znásilňovat dicty na nepopsaný transportní formát, což jde udělat jinde taky, třeba přes JSON a skoro vždycky je to blbě).

Muzes to prosim trochu rozvest? Dekuji

Radek Miček

Re:Python - dobré rady a praktiky
« Odpověď #84 kdy: 27. 03. 2016, 22:01:18 »
IDE nebo jiné nástroje pro Python vám při refaktoringu typicky pomohou mnohem méně než kompilátory moderních staticky typovaných jazyků (a nezmění to ani pokročilejší IDE jako PyCharm). IMO udržovat kód v Pythonu je tedy o dost náročnější (na druhé straně to zřejmě kompenzuje dostatek programátorů).

Asi nejhorší refactoring v životě jsem zažil v C, které by podle téhle logiky mělo být refactorovací bonanza (zkoušel jsem jak eclipse, tak netbeans). Ono to asi nebude ta nejideálnější metrika použitelnosti jazyka.

Proto jsem psal moderní staticky typovaný jazyk. Tím nemyslím Javu nebo C, ale myslím tím například OCaml, F#, Haskell a do jisté míry i Scalu.

Citace
Jinak já moc nepobírám tyhle spekulace, navíc ještě v tomhle threadu, kde chtěl radu ohledně praktik v pythonu. Máte zkušenost s pythonem? Podělte se. Nemáte? Váš názor je irelevantní.

To není spekulace, ale moje zkušenost s Pythonem a PyCharm.

Re:Python - dobré rady a praktiky
« Odpověď #85 kdy: 28. 03. 2016, 03:34:05 »
Programování v pythonu je docela jednoduše získatelný žážitek. Pokud vás fakt tak hrozně zajímá, jak se v něm dělá, nemá smysl si řádku za řádkou vyměňovat zkušenosti, nebo čekat, až technologie umožní přenos myšlenek, ale prostě si to zkuste. Mám z toho pocit, že by to zabralo míň času, než tyhle věčné spekulace. Možná sedne, možná ne.
Python ze začátku (možná po chvilce) sedne každému, protože je to prostě fajn jazyk na rychlé věci. Debata je o tom, za jakých podmínek je to i vhodný jazyk na velké a serverové věci. A myslím, že tady zaznělo několik názor ze zkušenosti, která se těžko získává. Jistě, zkusit si můžeš všechno, ale nepřál bych nikomu strávit rok vývojem něčeho, aby pak zjistil, že šel slepou uličkou. Ne že by to tak nutně muselo skončit, ale nějaká netriviální pravděpodobnost tam je. Koneckonců asi nikdo (možná kromě Franty Fuky) nebude doporučovat psát velké a serverové věci v Lua...

Život je moc krátký, abych ho mohl trávit výrobou abstraktních továren továren, které stejně používám jen proto, abych mohl nějak ojebat typový systém.
Pokud potřebuješ (víc než jednou za uherský rok) ojebávat typový systém, tak něco děláš špatně. Typový systém je od toho, aby zamezil věcem, které bys z dobrého důvodu dělat neměl.

Občas tam nějaké bugy v typech jsou, ale většinou je to výsledkem špatného návrhu
Nebo prostě překlepu, který neodhalily unittesty. To je právě ta největší bolest.

Re:Python - dobré rady a praktiky
« Odpověď #86 kdy: 28. 03. 2016, 05:42:09 »
Python je ta mechanika? Jako že vypadá cool, ale jinak to není ono. To souhlasím, tak nějak mi to vždy připadlo.

Ta mechanika je ta mechanika. Pointa je, že pokud budu v něčem efektivnější, nemá smysl se držet něčeho, kde (tolik) efektivní nejsem. Pokud si někdy zkusím (třeba) OCaml a zjistím, že v něm jsem efektivnější, na python si ani nevzpomenu a pojedu v OCamlu.

Chce to ale zkoušet, ne sedět a kritizovat optikou jazyka, ve kterém právě dělám. Neustálé zkoušení mi přijde jako součást práce programátora. Imho to zajišťuje, že nezatuhneš a nezůstaneš sedět ve své divné díře, ze které se ti zdá všechno ostatní horší nikoliv proto, že by to tak bylo, ale protože s tím nemáš (dostatečnou) osobní zkušenost.

Přijde mi, že speciálně Javisti tímhle přístupem vynikají. Možná za to může celá kultura kolem, včetně vysokých škol, kde se jednou naučí pár patternů, pak v tom 10 let dělají a získají pocit, že takhle je to správně a všechno ostatní je špatně, moderní mumbo-jumbo, ve kterém dělají hipsteři a které je jinak úplně nahovno, protože není Java. Já bych se skoro vsadil, že dřív někde na usenetu úplně stejně reagovali programátoři ve Fortranu, když jim začala Java ukrajovat koláč.

Muzes to prosim trochu rozvest? Dekuji

V pythonu občas lidi (hlavně začátečníci) vrací z funkcí dicty a píšou funkce, které berou dicty, protože je to jednoduché a rychlé. Pokud k tomu nedodají extenzivní dokumentaci, bývá to časem totálně neudržitelné. Tohle není problém Pythonu, ale špatného návrhu.

Všude kde člověk pracuje s daty, které nemají (vynucované) schéma, jako třeba XML / XSD / DTD, tak bude narážet na problémy stejného druhu. Pokud si uděláš třeba JSON API, nebo connector na microservices v Javě, budeš to muset taky řešit a reagovat na všechno možné, co ti tam kdo posílá chybovými hláškami.

Řešením imho není tohle prohlásit za nemožné a zapovězené, ale naučit se, že vyvolání výjimky, když program data neumí zpracovat je prostě součást protokolu komunikace.

To není spekulace, ale moje zkušenost s Pythonem a PyCharm.

Nemyslel jsem tebe (proto ta věta začíná slovem „Jinak“, jakože to už nepatří k tomu na co jsem reagoval po citaci), myslel jsem obecně tohle vlákno, které je komentářů v tomhle duchu plné.

Pokud potřebuješ (víc než jednou za uherský rok) ojebávat typový systém, tak něco děláš špatně. Typový systém je od toho, aby zamezil věcem, které bys z dobrého důvodu dělat neměl.

<trollface>Vida. Já myslel, že na ojebávání typového systému vznikla celá disciplína, která si s velkou slávou říká „design patterns“.</trollface>

Nebo prostě překlepu, který neodhalily unittesty. To je právě ta největší bolest.

Vážně? Pro mě je největší bolest Unicode, překlepy se mi od doby co v editoru používám linter (pep8, pyflakes a pylint) prakticky nestávají.

Nedávno jsem zase strávil několik hodin řešením problému aplikace, která se musí porvat s libovolnou webstránkou. To je pak zadek ladit kódování, když python na půlce věcí vyhazuje UnicodeDecodeError a druhou půlku zmutuje do nečitelného textu. Do toho stránky, co deklarují kódování blbě, stránky co ho nedeklarují vůbec a stránky, které mají kódování dobře, ale na serveru se do nich vkládá místy obsah, který ho má blbě.

Kdybych dostal pětikorunu pokaždé, když prokleju práci s kódováním textů, tak bych asi mohl odejít do důchodu.

Viky

Re:Python - dobré rady a praktiky
« Odpověď #87 kdy: 28. 03. 2016, 10:35:35 »
Debata je o tom, za jakých podmínek je to i vhodný jazyk na velké a serverové věci.

O žádných serverových věcech tazatel nenapsal ani písmeno. To si tam dofantazírovali ostatní zdejší kecálisté a na základě těchto a podobně vykonstruovaných fantasmagorií dospěli k závěru, že Python není vhodný jazyk na větší projekty.

Jak už jsem zmínil, my máme v Pythonu framework čítající desítky tisíc řádků kódu, dělá totéž co dřívější o řád větší visualbasicovský, akorát je to narozdíl od toho přehlednější a mnohem lépe a snadněji se to dá rozvíjet a udržovat. Jde o framework určený k validačním a unit testům softwaru, který vyvíjíme, tedy o nástroj čistě k interním účelům, s nímž pracují jen vývojáři a sami pro sebe si jej také podle potřeby dotvářejí.

Jde o větší projekt? Ano. Je pro něj Python vhodný? Ano. Je tedy pravdivé tvrzení, že se Python k takovým věcem nehodí? Ne.
Q.E.D.

Ivan Nový

Re:Python - dobré rady a praktiky
« Odpověď #88 kdy: 28. 03. 2016, 11:07:27 »
Zkus si přečíst sekci Hnutí za dobrý kód z http://www.abclinuxu.cz/blog/bystroushaak/2014/7/python-poznamky

Jinak osobně jsem v pythonu dělal na projektu, který měl přes 40k řádek podle CLOC (tzn bez prázdných řádků, komentářů, docstringů a tak). Nebyl s tím vůbec žádný problém, dělali jsme to ve dvou a šlo to v pohodě. Možná za to mohla microservices architektura, ale prostě žádné hroucení na hlavu se nekonalo. Ani co se týče kódu, ani co se týče výkonu, naopak se to krásně škáluje. Umím si představit, že by to stejným způsobem šlo klidně o řád dál bez nějakého stresu.

IDE nebo jiné nástroje pro Python vám při refaktoringu typicky pomohou mnohem méně než kompilátory moderních staticky typovaných jazyků (a nezmění to ani pokročilejší IDE jako PyCharm). IMO udržovat kód v Pythonu je tedy o dost náročnější (na druhé straně to zřejmě kompenzuje dostatek programátorů).
Toto je chybný přístup, IDE jako PyCharm to nedělá, protože neexistuje praktická potřeba to dělat, jinak IDE jako PyCharm obsahuje gramatiku jazyka a ve spojení například s debuggerem má všechny předpoklady k tomu, aby si typy zjistilo samo a uložilo například do slovníku, nebo formou anotací do zdrojového textu. Není proto těžké udělat plugin, který by to obstaral včetně vazby na refaktoring.

Vyhozená výjimka je totéž co chyba během překladu. Kompilace není časově méně náročná něž samotný běh programu (jak tomu bývalo dříve), psychologicky není rozdíl v tom, zda chybu vám odhalí kompilátor, nebo výjimka za běhu během ladění. V obou případech na to čekáte stejně dlouho. Je-li aplikace psána rozumně, s vhodnou granularitou.

Výhody silně typových jazyků se projeví nejvíce u špageti kódu, což byla motivace k jejich vytvoření.

Nepochopení vzniká aplikací statického přístupu na dynamický jazyk. Dynamický jazyk je světe div se dynamický, a ta dynamičnost byla jednou z motivací, co stála u jeho zrodu a je to jeho výhoda, která odpovídá zvolenému přístupu. Opačně to platí o statických jazycích.

K čemu je vám řešit spor dynamický versus statický jazyk, velký a malý projekt, když de facto logika aplikace (80% kódu v netestovatelné podobě) bývá často uložena v xml definicích, které dynamicky interpretuje jádro aplikace (20%). Dynamické jazyky berličku xml často ani nepotřebují, deklaraci chovaní aplikace, můžete elegantně zapsat standardními prostředky jazyka, nemusíte mít pak vlastní kompilátor (= jádro aplikace), které ty deklarace přeloží do výkonného kódu.

norm

Re:Python - dobré rady a praktiky
« Odpověď #89 kdy: 28. 03. 2016, 11:20:26 »
Chce to ale zkoušet, ne sedět a kritizovat optikou jazyka, ve kterém právě dělám. Neustálé zkoušení mi přijde jako součást práce programátora. Imho to zajišťuje, že nezatuhneš a nezůstaneš sedět ve své divné díře, ze které se ti zdá všechno ostatní horší nikoliv proto, že by to tak bylo, ale protože s tím nemáš (dostatečnou) osobní zkušenost.

Jenže kolik se toho dá stihnout? Pochopím to u lidí, kteří mají programování jak koníčka a v ničem pořádně neumí. Tam se to mění bez problémů. Pokud by sis vzal jen Javu a Python, tak to máš tak na pět let práce a to zapomeň na nějaké párty, rodiny a podobné věci. Normální lidi nemají šanci vůbec se naučit ani JEDEN jazyk pořádně. Běžný Java vývojář také o jazyku nic moc neví, což se často bere jako výtka. U ostatních jazyků je to podobné.