Co si myslíte o OOP?

Kadet

Re:co si myslite o oop?
« Odpověď #870 kdy: 11. 01. 2019, 19:00:49 »
...Kdyz to dotahnu do konce a klient je spokojenej muzu zacit konecne optimalizovat....
Tohle mě zaujalo.
Kdo ti tu optimalizaci zaplatí, pokud je klient už spokojený s právě hotovou verzí aplikace?
Realita te taková, že jakmile má projekťák od zákazníka akceptaci (za co nejméň nákladů = první verze se kterou je zákazník spokojený), předá to k fakturaci a ty dostaneš jinou práci.

Proc by mi ji mel nekdo platit? Chces snad podojit toho zakaznika o vic penez?

Kdyz je spokojenej a prebira zodpovednost za beh a ja uz s tim nemam nic spolecnyho tak se jde na dalsi projekt. Klient je spokojenej, ja jsem spokojenej protoze jsem dostal dobrou referenci protoze jsem dodal funkcionalitu 10x rychleji nez nekdo kdo se snazil to naprcat v haskellu od zacatku.

Kdyz chce abych to drzel v chodu, tak mu reknu, ze chci nektery casti prepsat, treba do statickyho jazyka, abych se v tom za rok vyznal. Takze pokud po me chce drzet to v chodu tak at kouka zaplatit za zestabilizovani programu. Jinak to muzu odmitnout.


v

Re:Co si myslíte o OOP?
« Odpověď #871 kdy: 11. 01. 2019, 19:06:12 »
Nejlepší jsou silně typované jazyky s pozdní vazbou  ;D
to by mělo v ghc jít

Re:Co si myslíte o OOP?
« Odpověď #872 kdy: 11. 01. 2019, 19:10:24 »
je dobré znát ne dva až tři jazyky, ale především dvě až tři paradigmata
V tom je prave dobry python, protoze ti umoznuje jednotliva paradigmata podle potreby prirozene kombinovat.
Tak to se podle mě velice tragicky mýlíš. Pokud chceš nějakému paradigmatu porozumět, musíš si ho vyzkoušet pokud možno v čisté podobě. Protože jenom ta tě donutí opravdu použít daný přístup a neuhýbat jinam. Tj. pokud funkcionální, tak Haskell, ne Scalu. Na Haskellu pochopíš, o co jde, a pak v praxi už můžeš vzít tu Scalu, protože to může být ze spousty důvodů praktičtější.

Ne, Python opravdu není "multiparadigmatický", to je marketingový blábol. Ono v principu vůbec nic takového jako "multiparadigmatický" neexistuje, protože ta paradigmata jsou právě o tom, co ti jazyk nedovolí udělat, ne o tom, co ti dovolí. Když něco z principu nejde -> máš jistotu, že k tomu nedošlo -> máš zaručenou informaci.

Za druhe ruzne paradigmata jsou uzitecna, ale nepotrebujes si kvuli tomu povrchne hrat s hromadou prakticky nevyuzitelnych jazyku.
Potřebuješ, protože žádný jiný způsob, jak jim porozumět, neexistuje.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #873 kdy: 11. 01. 2019, 19:41:50 »
je dobré znát ne dva až tři jazyky, ale především dvě až tři paradigmata
V tom je prave dobry python, protoze ti umoznuje jednotliva paradigmata podle potreby prirozene kombinovat.
Tak to se podle mě velice tragicky mýlíš. Pokud chceš nějakému paradigmatu porozumět, musíš si ho vyzkoušet pokud možno v čisté podobě. Protože jenom ta tě donutí opravdu použít daný přístup a neuhýbat jinam. Tj. pokud funkcionální, tak Haskell, ne Scalu. Na Haskellu pochopíš, o co jde, a pak v praxi už můžeš vzít tu Scalu, protože to může být ze spousty důvodů praktičtější.

Ne, Python opravdu není "multiparadigmatický", to je marketingový blábol. Ono v principu vůbec nic takového jako "multiparadigmatický" neexistuje, protože ta paradigmata jsou právě o tom, co ti jazyk nedovolí udělat, ne o tom, co ti dovolí. Když něco z principu nejde -> máš jistotu, že k tomu nedošlo -> máš zaručenou informaci.

Za druhe ruzne paradigmata jsou uzitecna, ale nepotrebujes si kvuli tomu povrchne hrat s hromadou prakticky nevyuzitelnych jazyku.
Potřebuješ, protože žádný jiný způsob, jak jim porozumět, neexistuje.

Moje zkušenost:

Když jsem se dostal k Haskellu a začal jsem ho zkoumat, zažil jsem tolik aha momentů jak nikdy.
- že se dá psát úsporně
- že se dá psát smysluplně
- že typy dokáží extrémně pomáhat (a to jsem ještě nevěděl nic o závislostních typech)
- pochopil jsem typy (a že to co má Java a spol je výsměch)
- co to znamená zapouzdření
- co to znamená funkcionální

Pak jsem se vrátil k těm normálním business jazykům, které mě živí, a dost drsně to změnilo můj spůsob programování.

Čas od času zkouším něco v Pythonu. Většinou je to takové jakože dobré. Ale nikdy jsem se od něj nic užitečného neodnesl. Snad jen odsazování jsem si díky němu zamiloval. A čím více ten projekt rostl, tím víc mě Python rozčiloval - že sice má mnohé možnosti, ale vůbec, ale vůbec nepomáhá.

Pak se objeví vždycky nějaký chytrolín, který mě setře, že jsem jen nepochopil tu úžasnou filozofii. A když ho požádám o vysvětlení, tak jen, že to bych nepochopil.

Re:Co si myslíte o OOP?
« Odpověď #874 kdy: 11. 01. 2019, 19:47:49 »
Ale nikdy jsem se od něj nic užitečného neodnesl.
Myslím, že největší zkušenost, jakou může Python dát, je potvrzení lidové moudrosti, že i s malým kašpárkem se dá hrát velké divadlo ;)


BaldSlattery

Re:Co si myslíte o OOP?
« Odpověď #875 kdy: 11. 01. 2019, 20:50:28 »
Nejlepší jsou silně typované jazyky s pozdní vazbou  ;D
Třeba ObjC kombinující dvě výhody, extrémní rychlost Smalltalku a úžasnou paměťovou bezpečnost céčka :)

Kit

Re:co si myslite o oop?
« Odpověď #876 kdy: 11. 01. 2019, 21:51:52 »
2.
Kód: [Vybrat]
fn(a, b) {
  assert(isInt(a));
  assert(isString(b));
  assert(a > 0);
}

Celkem pěkný příklad, který by navozoval dojem, že je vhodnější používat variantu 2. No, je to ale dáno tím, že se předpokládá, že s údaji bude po business stránce pracovat pouze ta JEDNA funkce. Jenže tak to ve skutečnosti nebude. Business logika je často komplexní a je rozprostřena do více method/objektů/funkcí....potom při variantě 2 je nutné  nějakým způsobem harmonizovat tu validaci...V tomto případě už přináší řešení 1 nesporné výhody.

Horizontální rozprostření business logiky je obvykle cestou do pekel. Je žádoucí, aby s údaji po business stránce pracovala pouze ta jedna funkce, resp. objekt, který obsahuje množinu takových metod, včetně validace. Takový objekt jednoduše injektuješ do modelu.

Kit

Re:Co si myslíte o OOP?
« Odpověď #877 kdy: 11. 01. 2019, 21:59:44 »
Odpor vuci dynamickym jazykum zazniva od tech, kteri se v nich pokousi programovat staticky, protoze to jinak neumi.
Jenže svět, který se snažíme v IT modelovat/automatizovat má spíše charakter statických typů....Nikdo se nejmenuje 123456 nebo 10.60 a na výplatu dostanu vždy nějakou částku a ne stokorunčeských...takže oprávněný požadavek dynamických typů zpravidla zaznívá jen tehdy, když někdo něco generalizoval-sloučil. Navíc zákazník zpravidla požaduje ukládat data to staticky typovaných databází...v tomto případě nedává moc smysl zavádět do systému nějakou dynamickou složku.

Zrovna částku 10.60 je nejlepší předat do databáze jako string. Jakákoli konverze na nějaký int či float mimo databázi je zcela zbytečná a ve svém důsledku může aplikaci dost ublížit. Není žádný důvod pro hlídání takových typů v aplikaci.

Kit

Re:co si myslite o oop?
« Odpověď #878 kdy: 11. 01. 2019, 22:24:11 »
Btw, nemusí to být jenom staticky linkovaný knihovny, může to být kombinace několika jazyků, jedna z těch věcí může běžet na jiným fyzickým stroji,... A o to je to zákařnější - není nad to, když server má 64b hodnoty, klient 32b hodnoty a vývojář se diví. A pokud nezná typy (a s tím i tyhle pasti), tak si pěkně namlátí hubu.

Můj příklad je jenom malinká ukázka, jak to dopadá, když prasata ignorujou typy:
Kód: [Vybrat]
Krok | Typ | Dekadicky          | Hexadecimálně         | Podrobnosti
   0 | uint64 | 231479973001           | 0x0000000035E5481489  | hodnota má 40b
   1 | uint32 | 3846706313             | 0xE5481489            | přišli jsme o horních 8b hodnoty
   2 | int64 | -448260983             | 0xFFFFFFFFE5481489    | bit 31 = 1 -> záporné číslo
   3 | uint64 | 18446744072813029651   | 0xFFFFFFFFE5481489    | Interpretováno jako UINT64

S tím mají problémy jen staticky typované jazyky. V dynamicky typovaných to vypadá asi takhle:
Kód: [Vybrat]
Krok | Typ    | Dekadicky    | Hexadecimálně        | Podrobnosti
   0 | string | 231479973001 | 0x0000000035E5481489 | hodnota má 12 B
   1 | string | 231479973001 | 0x0000000035E5481489 | hodnota má 12 B
   2 | string | 231479973001 | 0x0000000035E5481489 | hodnota má 12 B
   3 | string | 231479973001 | 0x0000000035E5481489 | hodnota má 12 B
Jinými slovy se nedělají konverze tam, kde to nikdo nepotřebuje.

Kit

Re:co si myslite o oop?
« Odpověď #879 kdy: 11. 01. 2019, 22:42:13 »
Další past je třeba float - currency. Jak to má sakra kompilátor/interpreter poznat jenom podle toho, že jsou v parsovaným stringu číslice a mezi nima čárka? To jako podle toho, že je před tím "price="? A každej typ se přitom chová jinak...

Zkrátka, volnost typu = volnost kompilátoru = volnost chování výsledné aplikace. Typ je totiž nedílná součást popisu dat. Když kompilátor neví, co použít a jenom tak tam něco práskne, tak je něco blbě v principu.

Jaká past? String si rozparsuje databáze přesně tak jak potřebuje, třeba na ten finanční decimal. Jak mám tušit, jestli databáze ukládá částky na 2 desetinná místa (CZK) nebo třeba na 6 desetinných míst (BTC)? Proč by do toho měla aplikace zasahovat? Kompilátor/interpreter dynamicky typovaného jazyka prostě typ odvodí ze vstupních dat - stejně jako to dělá třeba i staticky typovaný Haskell.

Pokud si myslíš, že parser dynamicky typovaného jazyka odvozuje typ podle vstupních hodnot, tak jsi na omylu. Standardně to vůbec nedělá, prostě vše je string. Odvozující parser, například v Lispu, to však pozná už z prvního nebílého znaku.

Kit

Re:co si myslite o oop?
« Odpověď #880 kdy: 11. 01. 2019, 22:57:52 »
Dale, Typ v beznych prog. jazycich je dost omezena pomucka. Pomuze ti oddelit string od cisla, ale nepomuze ti oddelit zaporny cislo od kladnyho cisla. Taky se ti jednoho krasnyho dne muze stat ze ti nekdo zacne posilat negativni hmotnosti tvych zakazniku a typovej system bude drzet hubu.

Tohle je docela důležitá poznámka. Pokud typy umožní zadat -100 kg, -200 cm nebo -300 °C, tak je takový typ zcela k ničemu. To už je lepší takové hodnoty (neotypované) předat do objektu, který s nimi pracuje a který zajistí nejen otypování, ale i validaci hodnot. Objekt může být za taková data zcela odpovědný a vadným vstupům se ubrání výjimkami. Je zcela v jeho kompetenci, zda nevalidní vstupy odmítne nebo sanuje. Běžný parser tohle nezvládne.

Datové vstupy se běžně zpracovávají kontextovou gramatikou, kterou obecné parsery nezvládají.

v

Re:co si myslite o oop?
« Odpověď #881 kdy: 11. 01. 2019, 23:03:17 »
Dale, Typ v beznych prog. jazycich je dost omezena pomucka. Pomuze ti oddelit string od cisla, ale nepomuze ti oddelit zaporny cislo od kladnyho cisla. Taky se ti jednoho krasnyho dne muze stat ze ti nekdo zacne posilat negativni hmotnosti tvych zakazniku a typovej system bude drzet hubu.

Tohle je docela důležitá poznámka. Pokud typy umožní zadat -100 kg, -200 cm nebo -300 °C, tak je takový typ zcela k ničemu. To už je lepší takové hodnoty (neotypované) předat do objektu, který s nimi pracuje a který zajistí nejen otypování, ale i validaci hodnot. Objekt může být za taková data zcela odpovědný a vadným vstupům se ubrání výjimkami. Je zcela v jeho kompetenci, zda nevalidní vstupy odmítne nebo sanuje. Běžný parser tohle nezvládne.

Datové vstupy se běžně zpracovávají kontextovou gramatikou, kterou obecné parsery nezvládají.
jednotky má moc hezky udělaný F# https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure
a parsování jednotek problém není

Kit

Re:co si myslite o oop?
« Odpověď #882 kdy: 11. 01. 2019, 23:14:24 »
jednotky má moc hezky udělaný F# https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/units-of-measure
a parsování jednotek problém není

To je sice hezké, ale nijak mi to nezabrání uživatelsky zadat záporné kilogramy nebo teplotu roztaveného železa 5000 °C. Pokud by objekt nedělal následnou validaci, zpracoval by i nesmysly. V tomhle mi bezkontextový parser skutečně nepomůže.

BaldSlattery

Re:co si myslite o oop?
« Odpověď #883 kdy: 11. 01. 2019, 23:45:52 »
Dale, Typ v beznych prog. jazycich je dost omezena pomucka. Pomuze ti oddelit string od cisla, ale nepomuze ti oddelit zaporny cislo od kladnyho cisla. Taky se ti jednoho krasnyho dne muze stat ze ti nekdo zacne posilat negativni hmotnosti tvych zakazniku a typovej system bude drzet hubu.
Datové vstupy se běžně zpracovávají kontextovou gramatikou, kterou obecné parsery nezvládají.
Context-sensitive grammar? To asi dost těžko, v čem by se takový parser psal?

Kit

Re:co si myslite o oop?
« Odpověď #884 kdy: 12. 01. 2019, 00:19:05 »
Dale, Typ v beznych prog. jazycich je dost omezena pomucka. Pomuze ti oddelit string od cisla, ale nepomuze ti oddelit zaporny cislo od kladnyho cisla. Taky se ti jednoho krasnyho dne muze stat ze ti nekdo zacne posilat negativni hmotnosti tvych zakazniku a typovej system bude drzet hubu.
Datové vstupy se běžně zpracovávají kontextovou gramatikou, kterou obecné parsery nezvládají.
Context-sensitive grammar? To asi dost těžko, v čem by se takový parser psal?

To je prosté. Podle prvního slova vybereš konstruktor a druhé slovo použiješ jako parametr. Vytvořená instance si ho už zpracuje podle svých potřeb. Pokud vyžaduje text, ale dostane číslo, zpracuje ho jako text. Pokud vyžaduje int, ale dostane text, vyhodí výjimku. Například REST funguje na tomto principu, ale variant je spousta.