Co si myslíte o OOP?

baranomrd

Re:Co si myslíte o OOP?
« Odpověď #585 kdy: 06. 01. 2019, 17:48:31 »
Kecy. Sebedokonalejší typový systém za tebe kvalitní kód nevyrobí, prasit se dá v čemkoli. Mnohem více záleží na znalostech, zkušenosti a disciplíně(!) programátora. Sám jsem sice ve své víc než dvacetileté profesní praxi vždy pracoval převážně se staticky typovanými jazyky, ale nevidím ve statickém typování nijak velký přínos, co se týká bezpečnosti a vůbec kvality kódu. Způsob typování představuje jen jeden střípek ve škále vlastností jazyka a v praxi je to nakonec stejně hlavně o člověku, jeho schopnostech a přístupu, ne o nástroji. Nástroj je jen tak dobrý, jak dobrý je jeho uživatel. Kromě toho je zjevné, že dynamické a dynamicky typované jazyky si našly svou niku, ve které se prosadily, a je známkou arogance (nebo hlouposti či nezkušenosti) je jen tak spatra shazovat jako jazyky pro fušery. Ale když černobílé uvažování je tak pohodlné, že?

Počuli ste slovo Božie... Všetci čo tu vediete tie jalové debaty o typoch si toto vytlačte a zarámujte. V deň v ktorý tento text pochopíte, sa aj vy stanete programátormi. Dovtedy ste lopaty s plnou hubou rádoby odborných kecov.


Re:Co si myslíte o OOP?
« Odpověď #586 kdy: 06. 01. 2019, 17:49:02 »
mě snad jebne!!!
Ultimátní argument ke zkvalitnění diskuse.

Re:Co si myslíte o OOP?
« Odpověď #587 kdy: 06. 01. 2019, 18:22:52 »
Ano. Ale rozdíl mezi tím, kdy nevím, jestli je to jeden ze dvou typů nebo jeden za čtyř nebo jeden z dvaceti sedmi (kolik jich je v Pythonu?), je kvantitaivní, ne kvalitativní.

Konečný je možná počet primitivních typů. Ale už když se přidají struktury (v C), třídy (v C++ nebo Javě), nebo se jako struktura použije hash (v Perlu) nebo dictionary (v Pythonu), tak těch typů je nekonečně (spočetně). Jestli to je kvantitativní nebo kvalitativní rozdíl je námět na dlouhou neplodnou filozofickou diskusi. Z pragmatického pohledu je to rozdíl docela důležitý. Ale souhlasím, že mezi dynamickým a statickým přístupem k typům existuje plynulý přechod.

Re:Co si myslíte o OOP?
« Odpověď #588 kdy: 06. 01. 2019, 18:40:11 »
Kecy. Sebedokonalejší typový systém za tebe kvalitní kód nevyrobí, prasit se dá v čemkoli. Mnohem více záleží na znalostech, zkušenosti a disciplíně(!) programátora. Sám jsem sice ve své víc než dvacetileté profesní praxi vždy pracoval převážně se staticky typovanými jazyky, ale nevidím ve statickém typování nijak velký přínos, co se týká bezpečnosti a vůbec kvality kódu. Způsob typování představuje jen jeden střípek ve škále vlastností jazyka a v praxi je to nakonec stejně hlavně o člověku, jeho schopnostech a přístupu, ne o nástroji. Nástroj je jen tak dobrý, jak dobrý je jeho uživatel. Kromě toho je zjevné, že dynamické a dynamicky typované jazyky si našly svou niku, ve které se prosadily, a je známkou arogance (nebo hlouposti či nezkušenosti) je jen tak spatra shazovat jako jazyky pro fušery. Ale když černobílé uvažování je tak pohodlné, že?

Počuli ste slovo Božie... Všetci čo tu vediete tie jalové debaty o typoch si toto vytlačte a zarámujte. V deň v ktorý tento text pochopíte, sa aj vy stanete programátormi. Dovtedy ste lopaty s plnou hubou rádoby odborných kecov.

Výše uvedený text je směs subjektivních názorů autora (já naopak po třicetiletých zkušenostech s vývojem softwaru vidím ve staticky typovaných jazycích velký přínos ke kvalitě kódu), částečně tvrzení s nízkou informační hodnotou (jak kvaltifikovat "mnohem vice", používání dynamických jazyků neimplikuje, jestli jsou lepší nebo horší než statické) a částečně obecné pravdy, které my hloupé lopaty máme už desítky let pochopené a zpracované a nemusíme je pořád omílat. Místo toho se můžeme soustředit na odbornou debatu (i když tahle je trochu moc dojmologická a dost ztrácí smysl). Ale když vidím tu slušnost schovanou v těchto dvou příspěvcích, chtě nechtě se mi na jazyk dere sousloví "pseudomanažerské kecy"  :)

Re:Co si myslíte o OOP?
« Odpověď #589 kdy: 06. 01. 2019, 18:59:38 »
Ale už když se přidají struktury (v C), třídy (v C++ nebo Javě), nebo se jako struktura použije hash (v Perlu) nebo dictionary (v Pythonu), tak těch typů je nekonečně (spočetně).
C, C++ ani Java nejsou dynamické jazyky. A zcela záměrně jsem řekl Python. Python nemá parametrizovaný typ dictionary<K,V>, má jeden typ dictionary. Perl (zcela vědomě a záměrně) vůbec neznám.

Skoro bych tipoval, že většina dynamických jazyků bude mít spíš konečný počet typů, protože tam pro parametrizaci není tak silný důvod jako u statických jazyků.


Re:Co si myslíte o OOP?
« Odpověď #590 kdy: 06. 01. 2019, 19:02:40 »
Jestli to je kvantitativní nebo kvalitativní rozdíl je námět na dlouhou neplodnou filozofickou diskusi.
Souhlas.

Re:Co si myslíte o OOP?
« Odpověď #591 kdy: 06. 01. 2019, 19:36:26 »
Ale už když se přidají struktury (v C), třídy (v C++ nebo Javě), nebo se jako struktura použije hash (v Perlu) nebo dictionary (v Pythonu), tak těch typů je nekonečně (spočetně).
C, C++ ani Java nejsou dynamické jazyky. A zcela záměrně jsem řekl Python. Python nemá parametrizovaný typ dictionary<K,V>, má jeden typ dictionary. Perl (zcela vědomě a záměrně) vůbec neznám.

Skoro bych tipoval, že většina dynamických jazyků bude mít spíš konečný počet typů, protože tam pro parametrizaci není tak silný důvod jako u statických jazyků.

Myslel jsem to tak, že často používaný typ je "record", tedy množina pojmenovaných položek, kde počet, jména a typy položek jsou součástí definice typu. V C to je struct, v C++ nebo v Javě to je class. V jazycích, které mají asociativní pole (dictionary v Pythonu, hash v Perlu) se typ record implementuje pomocí asociativního pole, které má konstatní množinu klíčů (ať už lze prostředky jazyka tuto konstantnost vynutit, nebo ne). Takových typů je nekonečno. Statická typová kontrola mi umožňuje definovat, že v konkrétním místě programu se smí vyskytovat pouze konkrétní (konečná nebo nekonečná) podmnožina všech možných typů. Při dynamickém typování se musím být schopen v každém místě umět vypořádat s kterýmkoliv z celé nekonečné množiny všech možných typů.

Re:Co si myslíte o OOP?
« Odpověď #592 kdy: 06. 01. 2019, 19:46:54 »
Takových typů je nekonečno.
Ano, takových typů je nekonečně mnoho, ale dynamické jazyky takové typy nemají, protože je nepotřebují. Statické jazyky je mají, protože potřebují nějak označit, co "z pole vyleze". Proto pokud potřebuju v dynamickém jazyce nějak reagovat na "všechny typy", není jich zas tak moc.

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #593 kdy: 06. 01. 2019, 20:03:15 »
Myslel jsem to tak, že často používaný typ je "record", tedy množina pojmenovaných položek, kde počet, jména a typy položek jsou součástí definice typu. V C to je struct, v C++ nebo v Javě to je class. V jazycích, které mají asociativní pole (dictionary v Pythonu, hash v Perlu) se typ record implementuje pomocí asociativního pole, které má konstatní množinu klíčů (ať už lze prostředky jazyka tuto konstantnost vynutit, nebo ne). Takových typů je nekonečno. Statická typová kontrola mi umožňuje definovat, že v konkrétním místě programu se smí vyskytovat pouze konkrétní (konečná nebo nekonečná) podmnožina všech možných typů. Při dynamickém typování se musím být schopen v každém místě umět vypořádat s kterýmkoliv z celé nekonečné množiny všech možných typů.

Python má historicky dva různé způsoby vytváření "recordu" - dictionary (pohodlnější) a class (těžkopádnější, ale systémovější). V poslední době přišly dvě novinky - named tuple a dataclass, protože prostě ani dictionary (nejdynamičtější řešení z dynamických) ani "normální" třída nejsou zase tak moc super. To je, spolu s dalšími změnami včetně anotací typů odpověď vývojářů jazyka na otázku, zda by se příklon ke statickým programovacím jazykům přece jenom občas nehodil.

Re:Co si myslíte o OOP?
« Odpověď #594 kdy: 06. 01. 2019, 20:08:47 »
Takových typů je nekonečno.
Ano, takových typů je nekonečně mnoho, ale dynamické jazyky takové typy nemají, protože je nepotřebují. Statické jazyky je mají, protože potřebují nějak označit, co "z pole vyleze". Proto pokud potřebuju v dynamickém jazyce nějak reagovat na "všechny typy", není jich zas tak moc.

Statické jazyky mají typy "record", protože v mnoha situacích je to přirozený způsob reprezentace dat (osoba = {jméno, příjmení, datum_narození}). Taková reprezentace dat je v dynamických jazycích potřeba úplně stejně. A i v dynamickém jazyce potřebuju zareagovat na to, když místo hodnoty typu osoba dostanu hodnotu typu osoba = {jméno, příjmení, přezdívka, adresa}). Např. v Perlu pro tohle existuje částečná podpora, protože můžu fixovat množinu přípustných klíčů pro konkrétní hodnotu typu hash, což se ale pořád kontroluje za běhu programu.

Re:Co si myslíte o OOP?
« Odpověď #595 kdy: 06. 01. 2019, 20:16:34 »
Taková reprezentace dat je v dynamických jazycích potřeba úplně stejně.
Není.

Re:Co si myslíte o OOP?
« Odpověď #596 kdy: 06. 01. 2019, 20:23:49 »
Python má historicky dva různé způsoby vytváření "recordu" - dictionary (pohodlnější) a class (těžkopádnější, ale systémovější). V poslední době přišly dvě novinky - named tuple a dataclass, protože prostě ani dictionary (nejdynamičtější řešení z dynamických) ani "normální" třída nejsou zase tak moc super.
To všechno je ale pod kapotou netypovaný dict. viz x.__dict__

To je, spolu s dalšími změnami včetně anotací typů odpověď vývojářů jazyka na otázku, zda by se příklon ke statickým programovacím jazykům přece jenom občas nehodil.
Příklon ke statičnosti se hodí vždycky, to může popírat jenom někdo s hodně velkýma klapkama na očích.

Re:Co si myslíte o OOP?
« Odpověď #597 kdy: 06. 01. 2019, 20:24:47 »
To všechno je ale pod kapotou netypovaný dict. viz x.__dict__
On možná lepší příklad než Python by byl JS nebo Lua...

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #598 kdy: 06. 01. 2019, 20:30:23 »
Proto pokud potřebuju v dynamickém jazyce nějak reagovat na "všechny typy", není jich zas tak moc.
To je sice možné, ale když si mám vybrat mezi: kontrolovat, zda přišel správný typ, a pokud ne, tak chcípnout; a mezi tím, že vždy přijde správný typ...

Re:Co si myslíte o OOP?
« Odpověď #599 kdy: 06. 01. 2019, 20:31:51 »
To je sice možné, ale když si mám vybrat mezi: kontrolovat, zda přišel správný typ, a pokud ne, tak chcípnout; a mezi tím, že vždy přijde správný typ...
Souhlasím, ale to jsi skočil do jiného tématu. My jsme pořád ještě u toho, že dynamické typování je vlastně jenom takový "trochu širší" součtový typ :)