Pro ty, kterym je shury dano programovat v dynamickem prostredi to rozvadet nepotrebuji a pro ty ostatni je to zbytecne.
Co mi to jenom připomíná? Aha, https://www.joelonsoftware.com/2005/12/29/the-perils-of-javaschools-2/ Kterou část mozku nemáš, že nepojme i informaci o typu?
Ja s typy nemam sebemensi problem. Ktera cast mozku chybi tobe, ze se nesrovna s dynamickymi typy?
Staticky jazyk, to je neco jako vezeni. Tvrda omezeni, pevny rad, vse mas nalajnovano, zadna svoboda/flexibilita. Je to efektivni a prinasi to pocit bezpeci, protoze je o tebe postarano a neses minimalni zodpovednost. Kdyz jsi v tom moc dlouho, tak se pak na svobode citis ztraceny a chtel bys zpet do toho vytyceneho radu, kde se o tebe postaraji. Vysvetluj nekomu takovemu hodnotu svobody. Ja ti pochopeni neprinesu a uz vubec nevnutim, to je tvuj boj, me to nevycitej a na me to neprenasej.
Někdy je to dobře. Říká se tomu "defenzivní programování". Víš, že 123+456 = 579 a nemusíš počítat s tím, že to bude 123456, pokud to interpreter vyhodnotí jako string.
Tvuj mozek mozna pojme informaci o typech, ale uz ne to, ze se deli na staticke/dynamicke a vedle toho na slabe/silne. Python ma silne typy, takze ti nikdy cislo implicitne nevyhodnoti jako string a naopak.
Ostatně i v Basicu byly typy "číslo" (např "a") a "string" (např. "a$") právě z tohoto důvodu. Když jsem přecházel z Basicu na Pascal, tak jsem se typům taky divil, ale zjistil jsem, že to má logiku a řada dřívějších chyb záhadně vymizela.
Tady se ale prece nevede debata jestli typy ano nebo ne, ale v jake podobe. Na to jake mas silne reci o mozku ti unika i zakladni podstata diskuse. Dynamicky jazyk neznamena beztypovy jazyk.
A rozhodování o typu? Sám říkáš "no tak inkluduju knihnovnu, která to řeší". Není rozhodnutí "inkluduju knihovnu, která tohle pole vezme jako float" právě volba typu? Zatímco jinde napíšu prostě float x[500], tam musím něco inkludvat, něco vytvořit, nějak tam ty data přechroupat dovnitř, musím vědět něco o rozhraní toho něčeho,...
Se svym statickm stylem mysleni nedokazi vyuzivat jejich vyhodnych vlastnosti
Například?
Zatím jsi jenom dokázal, že se problém odsouvá z deklarace proměnné na deklaraci knihovny, která to zpracuje, ale řešíš to stejně. A navíc tam máš režie s rozhodováním o aktuálním typu za běhu a kontrolou validity kdekoliv, což u typovanýho systému můžeš udělat na vstupu a víš, že pak se ti typ dat bez tvýho vědomí nezmění. A že máš víc pohodlí při psaní, míň pohodlí při ladění.
Ne, nic takoveho jsem a) nedokazal protoze rozdil mezi statickymi a dynamickymi typy lezi jinde a b) neresim to stejne. Zakladni rozdil č v tom, ze vykonovou optimalizaci resim jen tam, kde je nutna a jinde se tim nemusim a naopak mam vyhodu flexibility dynamickych typu a to v naproste vetsine kodu, vetsinou celem. Python mi treba umoznuje zpracovavat vzajemnou realtime midi komunikaci nekolika nastroju pres na raspbery pi zero s velkou vykonovou rezervou, cpu je zatizeno asi na cca 10 %, nepozorovatelnou latenci a to bez jakychkoliv optimalizaci. Me ten vykon proste nezajima. Pohodli pri ladeni je hodne relativni. A) nemusim ladit spoustu problemu, ktere u me jednoduse vubec nevznikaji, b) mam jednodussi a prehlednejsi kod a tedy mensi mnozstvi chyb c) mam introspekci a snazsi odhalovani chyb, d) mam radu vybornych nastroju na testovani.
Nevim jak to maji ostatni, ale ja pri vytvareni programu mam minimum chyb, casto mi bezi na prvni dobrou. To je vyhoda jednoducheho prehledneho kodu, ktery primocare popisuje problem a asi i jistych zkusenosti, ktere uz mam, a samozrejme pylintu beziciho na pozadi, ktery me na chyby z nepozornosti upozornuje uz behem psani, nemusim cekat na kompilaci. A kdyz nad tim tak premyslim, tak i toho, ze ten kod spoustim mnohem casteji, nez kdyz programuji v kompilovanem jazyce.
Ja si chyby do programu zanasim vetsinou az pri vetsich zpetnych upravach programu, kdy treba nepodchytim vsechny souvislosti a na neco zapomenu. A tady ohromne pomahaji unit testy, ktere prave testuji ruzne okrajove podminky. Takze cim lepsi testy, tim snazsi ladeni. Pokud to porovnam s Javou nebo C#, neni to celkově o nic náročnější. Spíše naopak díky mému propracovanému systému zachycování výjimek, které jsou velmi informativní a produkují výpis na několik stránek, díky kterému vím přesně kdy kde co a jak probíhalo, znám stavy lokálních proměnných, historii stavů proměnných předávaných z funkcí do funkcí, zobrazuje se mi v tom i zdrojový kód z míst volání funkcí a výskytu chyby. V drtivé většině případů mi to samo o sobě stačí k odhalení příčiny chyby aniž bych musel koukat do zdrojáků nebo dokonce používal debuger. A tohle zapisuji i do logu, takže ani u zákazníka se nijak nemusím zabývat simulací a jdu na jisto i u problémů, které se objevují ojediněle a nejde je vyvolat na požádání. Takhle si zase pohodlí představuji já. Že si k tomu musím víc pohlídat i typy se v tom ztratí. Nepředstavuje to žádný problém, který by mě přiměl třeba používat type hinty, natož statický jazyk.