Python - zbožňovaný lidmi?

dustin

Re:Python - zbožňovaný lidmi?
« Odpověď #405 kdy: 15. 12. 2017, 14:22:31 »
Byť by mě zajímalo, jak by se mu automaticky vyřešil případ, že někde přijímá objekty dvou typů se stejným rozhraním a najednou se mu u jednoho typu to rozhraní přejmenuje.

Pokud mají třídy stejné rozhraní, implementují stejné rozhraní. Pokud mají shodou okolností podobné názvy metod, ale nemají explicitně řešeno "implements XYZ", pak se na to nemohu spolehnout a v javě neimplementují stejné rozhraní. V pythonu si zavolám hasattr a spoléhám se, že textový název opravdu vyjadřuje to samé. Jako např. tady https://github.com/dddomodossola/remi/blob/master/remi/gui.py#L298

Citace
V čem se mýlí je, že tuto činnost považuje za správnou a žádoucí. Připodobnil bych to otvírání dveří hrubou silou, vyrážením. A byt kde se vyráží dveře těžko je špatný, protože vyrážet dveře je normální a je to potřeba dělat často.

Ano, možnost jednoduchého přejmenování považuji za zcela klíčové. Mraky chyb vzniká špatným pojmenováním, řeším je každou chvíli, a aktuálně správné názvy jsou zásadní. Když na projektu dělá víc lidí (což asi není tvůj případ), špatným názvům se nedá vyhnout a pokud má projekt tu obrovskou výhodu, že si to může dovolit (narozdíl např. od libc nebo kernelího API), je potřeba je opravovat. Navíc se významy v čase posouvají, jak se mění požadavky. Je to úplně normální. Pokud dáváš názvy na první dobrou i s výhledem na 10 let dopředu, jsi bůh. Ale spíš si tipuji, že nic takového neděláš a tedy logicky nepotřebuješ.


Petr Mach

Re:Python - zbožňovaný lidmi?
« Odpověď #406 kdy: 15. 12. 2017, 14:31:59 »
Přijde mi zvláštní, že mě k tomu, abych se naučil vyvíjet, vybízí někdo, kdo má potřebu rutinně měnit tisíce výskytů veřejného rozhraní v tisícovkách souborů. Umíte si představit, že by někdo chtěl ve stdio.h přejmenovat rutinně printf na fprint? Znamená to, že C se nehodí na velké projekty? Hodí, ale není určen do ruky amatérům.

Představ si, že třeba před 15 lety někdo, kdo už na projektu 10 let nedělá, zvolil nějaký název třídy, např. logovací třída Log. A ten název už po 15 letech nevyjadřuje přesně, co ta třída dnes dělá, nebo to nedává gramaticky smysl - anglicky je to Logger.
 Log je skoro ve všech třídách tvého projektu, ale také je tam nějaká třída Log, která opravdu vyjadřuje záznam logu. A to tě po chvíli pěkně leze na nervy. Profesionál o to bude zakopávat dál. Amatér se domluví s ostatními členy týmu, aby s tím počítali a přejmenuje logovací Log na Logger. Projekt nikdo další nevyvíjí, nezávisejí na něm žádné externí knihovny, klidně si to může dovolit. Narozdíl od uvedeného extrémního příkladu libc.

A pak holt během pár desítek sekund vyleze commit s tisíci změněných souborů. Velice amatérské.
Jo, živě si představuji, jak jen tak z rozmaru měním 15 let staré (osvědčené) rozhraní. Pánové, přiznejte se, vy si vymýšlíte a nemáte žádnou praxi. Prý že se domluvíš s pár lidma. Změna software je jen jeden krok. Tomu předchází formální proces požadavku, zdůvodnění, ekonomické rozvahy a schválení. Po té musí proběhnout důkladné otestování (které zaměstná spoustu lidí) v testovacím prostředí, pak následuje domluva a nasazení nové verze u zákazníka, podle jeho procesů a předkomplexní a komplexní vyzkoušení. Krom toho se to celé musí zapracovat do projektové dokumentace a tu schválit. I malá změna představuje u velkého projektu desítky až stovky člověkohodin, kde čas samotné změny a práce vývojáře je marginální. Takto to u velkých projektů funguje v praxi.

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #407 kdy: 15. 12. 2017, 14:34:47 »
Tušíj, že vaše potřeba opět souvisí se statickými typy. Něco ve smyslu, že najednou potřebujete místo obecného send() mít sendType1(), sendType2(). Tedy opět věc, která dynamické jazyky netrápí. Ale i ve statickém jazyku si s tímto lze poradit rozuměji, než neustálým předěláváním veřejného rozhraní. A když už se tím člověk jednou spálí, dá si pozor a příště si rozhraní navrhne flexibilněji. Zvlátě když dělá na velkém projektu, kde je flexibilita nezbytná, pokud má být kód dobře udržovatelný.

Obecný send() může zůstat stejný v dynamických i statických jazyků. Nevidím důvod pro přilepování názvu typu do názvu metody.

Předělávání rozhraní je zlo. Obvykle se připouští pouze jeho rozšiřování.

gll

Re:Python - zbožňovaný lidmi?
« Odpověď #408 kdy: 15. 12. 2017, 14:51:48 »
Byť by mě zajímalo, jak by se mu automaticky vyřešil případ, že někde přijímá objekty dvou typů se stejným rozhraním a najednou se mu u jednoho typu to rozhraní přejmenuje.

Pokud mají třídy stejné rozhraní, implementují stejné rozhraní. Pokud mají shodou okolností podobné názvy metod, ale nemají explicitně řešeno "implements XYZ", pak se na to nemohu spolehnout a v javě neimplementují stejné rozhraní. V pythonu si zavolám hasattr a spoléhám se, že textový název opravdu vyjadřuje to samé. Jako např. tady https://github.com/dddomodossola/remi/blob/master/remi/gui.py#L298

v tom vašem příkladu s Message žádné společné rozhraní neexistovalo. Potomci měli rozdílné atributy.

Petr Mach

Re:Python - zbožňovaný lidmi?
« Odpověď #409 kdy: 15. 12. 2017, 15:00:41 »
Byť by mě zajímalo, jak by se mu automaticky vyřešil případ, že někde přijímá objekty dvou typů se stejným rozhraním a najednou se mu u jednoho typu to rozhraní přejmenuje.
Pokud mají shodou okolností podobné názvy metod, ale nemají explicitně řešeno "implements XYZ", pak se na to nemohu spolehnout a v javě neimplementují stejné rozhraní.
Stačilo říct, že to to IDE neumí a selže na tom. Takže si tak upravíš tisíce souborů a potenciálně způsobíš tisíce chyb. Tedy u reálné produkce, kde o něco jde, tě teď čeká důkladné testování, než si to všechno ověříš a nebo jsi amatér a pustíš to jen tak. Což je asi tvůj případ.

Citace
V čem se mýlí je, že tuto činnost považuje za správnou a žádoucí. Připodobnil bych to otvírání dveří hrubou silou, vyrážením. A byt kde se vyráží dveře těžko je špatný, protože vyrážet dveře je normální a je to potřeba dělat často.

Ano, možnost jednoduchého přejmenování považuji za zcela klíčové. Mraky chyb vzniká špatným pojmenováním, řeším je každou chvíli, a aktuálně správné názvy jsou zásadní. Když na projektu dělá víc lidí (což asi není tvůj případ), špatným názvům se nedá vyhnout a pokud má projekt tu obrovskou výhodu, že si to může dovolit (narozdíl např. od libc nebo kernelího API), je potřeba je opravovat. Navíc se významy v čase posouvají, jak se mění požadavky. Je to úplně normální. Pokud dáváš názvy na první dobrou i s výhledem na 10 let dopředu, jsi bůh. Ale spíš si tipuji, že nic takového neděláš a tedy logicky nepotřebuješ.
[/quote]

Je-li to známka božství, jsem bůh. Protože nepotřebuji měnit rozhraní ani u starších projektů. Ale hlavně, dynamický jazyk je flexibilní, u něj můžeš definovat rozhrání obecně, můžeš použít návrh shora. A když to máš navrženo, začneš to implementívat. Postup je opačný, implementace se přizpůsobuje názvu, tedy předem definované architektuře systému. Že se ti mění v průpběhu času funkce tříd a metod zase ukazuje ná amatérský přístup. Je to zase stejné, jakoby se funkce printf() v průběhu času měnila. Může se  měnit její implementace, ale nikdy její funkce. Tak se správně programuje. Vy to tak neděláte?

Samozřejmě návrh architektury rozsánlého systému nemůže dělat jen tak někdo, každý druhý nezkušený řadový programátor. To je oblast pro ty nejzkušenější a nejlépe placené. Když to dělá amatér, tak se pak nestačí divit, kolik toho nedomyslel a jak se mu to rozpadá pod rukama a jak to potřebuje pořád předělávat.


Petr Mach

Re:Python - zbožňovaný lidmi?
« Odpověď #410 kdy: 15. 12. 2017, 15:10:50 »
Obecný send() může zůstat stejný v dynamických i statických jazyků. Nevidím důvod pro přilepování názvu typu do názvu metody.

Předělávání rozhraní je zlo. Obvykle se připouští pouze jeho rozšiřování.
To je pravda, ale ve statickém jazyku se na to musí myslet předem, což bývá kámen úrazu, když ta potřeba vznikne časem.

nechapu

Re:Python - zbožňovaný lidmi?
« Odpověď #411 kdy: 15. 12. 2017, 15:41:23 »
OMG, cte to i nejaky vyvojar? Ja to sleduju uz nejakou dobu a vubec nechapu, jestli je to vtip a nebo jste jen retardi. Jediny Dustin az moc jemne dava priklady z praxe a nikdo mu je neresi. Ze je to cele vtip a chcete nas dostat? :D

Ivan Nový

Re:Python - zbožňovaný lidmi?
« Odpověď #412 kdy: 15. 12. 2017, 17:09:31 »

zmáčknu M-r, zobrazí se mi výskyty. Upravím. Hotovo.

Ručně upravíš stovky výskytů? Kolik ti platí na hodinu?
Citace
pokud můj kód není sbírka antipaternů jako ten dustinův, tak to funguje.

Plácáš nesmysly.

Pokud nějakou metodu použijete 100x, tak to znamená, že máte špatný návrh.

Honza

Re:Python - zbožňovaný lidmi?
« Odpověď #413 kdy: 15. 12. 2017, 20:25:31 »
OMG, cte to i nejaky vyvojar? Ja to sleduju uz nejakou dobu a vubec nechapu, jestli je to vtip a nebo jste jen retardi. Jediny Dustin az moc jemne dava priklady z praxe a nikdo mu je neresi. Ze je to cele vtip a chcete nas dostat? :D
Já to nesleduju od začátku, ale taky kroutím hlavou...

balki

Re:Python - zbožňovaný lidmi?
« Odpověď #414 kdy: 15. 12. 2017, 21:04:07 »
Přijde mi zvláštní, že mě k tomu, abych se naučil vyvíjet, vybízí někdo, kdo má potřebu rutinně měnit tisíce výskytů veřejného rozhraní v tisícovkách souborů. Umíte si představit, že by někdo chtěl ve stdio.h přejmenovat rutinně printf na fprint? Znamená to, že C se nehodí na velké projekty? Hodí, ale není určen do ruky amatérům.

Představ si, že třeba před 15 lety někdo, kdo už na projektu 10 let nedělá, zvolil nějaký název třídy, např. logovací třída Log. A ten název už po 15 letech nevyjadřuje přesně, co ta třída dnes dělá, nebo to nedává gramaticky smysl - anglicky je to Logger.
 Log je skoro ve všech třídách tvého projektu, ale také je tam nějaká třída Log, která opravdu vyjadřuje záznam logu. A to tě po chvíli pěkně leze na nervy. Profesionál o to bude zakopávat dál. Amatér se domluví s ostatními členy týmu, aby s tím počítali a přejmenuje logovací Log na Logger. Projekt nikdo další nevyvíjí, nezávisejí na něm žádné externí knihovny, klidně si to může dovolit. Narozdíl od uvedeného extrémního příkladu libc.

A pak holt během pár desítek sekund vyleze commit s tisíci změněných souborů. Velice amatérské.
Jo, živě si představuji, jak jen tak z rozmaru měním 15 let staré (osvědčené) rozhraní. Pánové, přiznejte se, vy si vymýšlíte a nemáte žádnou praxi. Prý že se domluvíš s pár lidma. Změna software je jen jeden krok. Tomu předchází formální proces požadavku, zdůvodnění, ekonomické rozvahy a schválení. Po té musí proběhnout důkladné otestování (které zaměstná spoustu lidí) v testovacím prostředí, pak následuje domluva a nasazení nové verze u zákazníka, podle jeho procesů a předkomplexní a komplexní vyzkoušení. Krom toho se to celé musí zapracovat do projektové dokumentace a tu schválit. I malá změna představuje u velkého projektu desítky až stovky člověkohodin, kde čas samotné změny a práce vývojáře je marginální. Takto to u velkých projektů funguje v praxi.

Upratovanie v projekte je normalna zalezitost. Ak sa projekt neupratuje, casom zvykne degradovat. Povodna architektura uz nemusi vyhovovat aktualnym potrebam a robi kazdu zmenu funkcionality bolestivou. Ci sa nieco rozbilo, sa da zistit automatickymi testami a na predprodukcnom prostredi. Ak je v projekte nejaky kod, ktory nevies, co robi, preco to robi tak by si to mal zistit. Pristup "nechytat sa, ked to funguje" je nespravny, lebo potom clovek nieco robi a ani nevie co, no skratka lopatactvo deluxe. Tak ani nevies vylepsit vlastnosti, zefektivnit, dat pracu druhym koderom, skratka bieda...

Ak niekto nema na to nastroje a patle vo vim, potom je to problem ...

kdr

Re:Python - zbožňovaný lidmi?
« Odpověď #415 kdy: 15. 12. 2017, 21:18:21 »
Možná by bylo dobrý si přečíst název tématu a nehonit si tu IT pinďoury.

Kit

Re:Python - zbožňovaný lidmi?
« Odpověď #416 kdy: 15. 12. 2017, 22:20:01 »
Obecný send() může zůstat stejný v dynamických i statických jazyků. Nevidím důvod pro přilepování názvu typu do názvu metody.

Předělávání rozhraní je zlo. Obvykle se připouští pouze jeho rozšiřování.
To je pravda, ale ve statickém jazyku se na to musí myslet předem, což bývá kámen úrazu, když ta potřeba vznikne časem.

Nemusí. Prostě do rozhraní přidám další metodu s novými typy parametrů. Tím se rozbijí vazby v závislých modulech, které ji dosud neimplementují. Dopíše se do nich implementace, otestuje a je to. Stejně to dělám i při dynamickém typování.

Zásadou však je neměnit metody, které již v rozhraní jsou a je na nich závislá práce dalších vývojářů. OCP.

Petr Mach

Re:Python - zbožňovaný lidmi?
« Odpověď #417 kdy: 15. 12. 2017, 23:06:16 »
Přijde mi zvláštní, že mě k tomu, abych se naučil vyvíjet, vybízí někdo, kdo má potřebu rutinně měnit tisíce výskytů veřejného rozhraní v tisícovkách souborů. Umíte si představit, že by někdo chtěl ve stdio.h přejmenovat rutinně printf na fprint? Znamená to, že C se nehodí na velké projekty? Hodí, ale není určen do ruky amatérům.

Představ si, že třeba před 15 lety někdo, kdo už na projektu 10 let nedělá, zvolil nějaký název třídy, např. logovací třída Log. A ten název už po 15 letech nevyjadřuje přesně, co ta třída dnes dělá, nebo to nedává gramaticky smysl - anglicky je to Logger.
 Log je skoro ve všech třídách tvého projektu, ale také je tam nějaká třída Log, která opravdu vyjadřuje záznam logu. A to tě po chvíli pěkně leze na nervy. Profesionál o to bude zakopávat dál. Amatér se domluví s ostatními členy týmu, aby s tím počítali a přejmenuje logovací Log na Logger. Projekt nikdo další nevyvíjí, nezávisejí na něm žádné externí knihovny, klidně si to může dovolit. Narozdíl od uvedeného extrémního příkladu libc.

A pak holt během pár desítek sekund vyleze commit s tisíci změněných souborů. Velice amatérské.
Jo, živě si představuji, jak jen tak z rozmaru měním 15 let staré (osvědčené) rozhraní. Pánové, přiznejte se, vy si vymýšlíte a nemáte žádnou praxi. Prý že se domluvíš s pár lidma. Změna software je jen jeden krok. Tomu předchází formální proces požadavku, zdůvodnění, ekonomické rozvahy a schválení. Po té musí proběhnout důkladné otestování (které zaměstná spoustu lidí) v testovacím prostředí, pak následuje domluva a nasazení nové verze u zákazníka, podle jeho procesů a předkomplexní a komplexní vyzkoušení. Krom toho se to celé musí zapracovat do projektové dokumentace a tu schválit. I malá změna představuje u velkého projektu desítky až stovky člověkohodin, kde čas samotné změny a práce vývojáře je marginální. Takto to u velkých projektů funguje v praxi.

Upratovanie v projekte je normalna zalezitost. Ak sa projekt neupratuje, casom zvykne degradovat. Povodna architektura uz nemusi vyhovovat aktualnym potrebam a robi kazdu zmenu funkcionality bolestivou. Ci sa nieco rozbilo, sa da zistit automatickymi testami a na predprodukcnom prostredi. Ak je v projekte nejaky kod, ktory nevies, co robi, preco to robi tak by si to mal zistit. Pristup "nechytat sa, ked to funguje" je nespravny, lebo potom clovek nieco robi a ani nevie co, no skratka lopatactvo deluxe. Tak ani nevies vylepsit vlastnosti, zefektivnit, dat pracu druhym koderom, skratka bieda...

Ak niekto nema na to nastroje a patle vo vim, potom je to problem ...
Škoda, že se nedovedeš zdržet urážek. Také bych tu mohl vykřikovat něco o lopatách, které bez ide, jenž programuje za ně, nedají ani ránu. Násťrojů jsem vyskoušel řadu a vždy se vrátil k vimu, když to bylo možné, dělá se mi s ním nejlíp. Jinak souhlasím, čistit a udržovat kód je nutné, má to přínos. Jen se směju té představě, že si u velkého projektu pár programátorů něco řekne, udělaji za deset sekund změnu v tisíci souborech a tím je hotovo. Kdo tohle tvrdí, ten na reálném velkém projektu, který už z podstaty velikosti musí být řízen formálně, nikdy nic nedělal a vůbec netuší, co to obnáší.

.

Re:Python - zbožňovaný lidmi?
« Odpověď #418 kdy: 15. 12. 2017, 23:13:38 »
Zatím dobrý, ale chce to více postav. Kolem Velikonoc si přijdu pro pokračování. Vyjde to i knižně?

Petr Mach

Re:Python - zbožňovaný lidmi?
« Odpověď #419 kdy: 15. 12. 2017, 23:13:50 »
Obecný send() může zůstat stejný v dynamických i statických jazyků. Nevidím důvod pro přilepování názvu typu do názvu metody.

Předělávání rozhraní je zlo. Obvykle se připouští pouze jeho rozšiřování.
To je pravda, ale ve statickém jazyku se na to musí myslet předem, což bývá kámen úrazu, když ta potřeba vznikne časem.

Nemusí. Prostě do rozhraní přidám další metodu s novými typy parametrů. Tím se rozbijí vazby v závislých modulech, které ji dosud neimplementují. Dopíše se do nich implementace, otestuje a je to. Stejně to dělám i při dynamickém typování.

Zásadou však je neměnit metody, které již v rozhraní jsou a je na nich závislá práce dalších vývojářů. OCP.

Řeč byla o tom, že ani ve statickém jazyku není nutné přidávat novou metodu, kvůli novému datovému typu.