Jak začít pracovat v IT oboru

Re:Jak začít pracovat v IT oboru
« Odpověď #60 kdy: 28. 05. 2015, 08:51:18 »
... se spálil asi každý, koho kdy napadlo je použít v cyklu k posílání zpráv místo returnu ...
:o  :o
A proto se to jmenuje výjimka ...


JSH

Re:Jak začít pracovat v IT oboru
« Odpověď #61 kdy: 28. 05. 2015, 09:05:43 »
Neco jsem nasel k Pythonu - http://paltman.com/try-except-performance-in-python-a-simple-test/. Neplati sice, ze vyjimky jsou obecne levnejsi, ale napr. pro ten linkovany priklad, kdyz by k nenalezeni prvku ve slovniku dochazelo dostatecne malo, tak z toho vychazi vyjimky lepe (doufam, ze jsem se neprehledl). V Jave myslim vetsinu zpomaleni zpusoboval call stack, s nejakymi parametry to hotspot dokazal optimalizovat srovnatelne (mozna i lepe, uz je to dlouho co jsem to cetl), zkusim to dohledat.
No jo, když výjimky nelítají, tak jsou levnější i v c++. A při jednoduché interpretaci je pomalý i obyčejný if. Hádám že ten if uvnitř hashmapy, který tu výjimku vyhazuje, asi bude nějak přeložený.
Mimochodem jako c++aři mi první proletělo hlavou, že na tomhle přece nejde nic naměřit. Že tohle musí překladač vyhodit včetně té smyčky. To jsou ty různé světy :)

j

Re:Jak začít pracovat v IT oboru
« Odpověď #62 kdy: 28. 05. 2015, 09:10:10 »
Diky za potvrzeni, ze ses naprostej (a predpokladam ze diplomovanej)  debil.

Ukaž svůj kód, kterým v pythonu, zvaliduješ jestli je string integer. Pak se můžeme bavit dál. Jinak jsou to od tebe jen obecné kecy o ničem.

Naprosta nepodstatnost, nebot to, ze je neco int neni ani zdaleka postacujici. Jenze to patlal jako TY nemuze tusit. Stejne jako kdyz jekam poslu "select * from xyz" tak je to zcela jiste string. Pokud nekde beru cislo, tak nejen ze musim resit datovej typ, ale musim taky resit rozsah. Opet pro patlala jako TY zcela  nepochopitelny, ze kazda funkce ma nejaky definicni obor. A ... jaky to zazrak .... klidne muze vracet nejake (nedefinovane) vysledky i pro vstupy mimo ten definicni obor. A pochopitelne, ani definicni obor funkce nemusi byt postacujici omezeni, protoze i kdyz je funkce pro nejaky vstup definovana, nemusi byt schopna neco takovyho vyresit jeji konkretni implementace.

Copak asi tak vrati ten zpatlanej kod, kdyz tam naladuju 150ti mistny cislo? Bude na me rvat, ze mam zadat cely cislo? Ale to sem zadal. A copak asi tak vrati, kdyz tam naladuju 30ti mistny? Vysledek je 0? Vazne?

A presne s takovedlema patlalama se pak musim potykat, protoze sou neschopny si zjistit, jestli kdyz na tom vstupu cekaj cislo, tak tam opravdu cislo je a odpovida i dalsim potrebam.

Malej priklad z patlalamatlala praxe ... mejme nejaky pole, typu char, a tvurce zjisti, ze v tom poli jsou cisla (1,2,3,4). Velikost je jeden byte, tak si na to definuje 1B. Pak si nejspis v nejakym podobnym prikladu na netu najde uzasnou funcionalitu ... bitovy operace. A napadne ho, ze by se to dalo pouzit ... cislo jako cislo. I namatla svoji aplikaci. Aplikace nejak funguje, mesic, dva ... 1/2 roku ... a znicehoz nic se zacne obcas "chovat divne". A tak se testuje a hleda, ale pri kazdym testovani vse funguje perfektne. Jak by taky ne ... Jenze v realu se neustale mnozi situace, kdy se neco z neznamyho podela a vysledkem je zmrvenej doklad.

A po trech mesicich patrani se zjisti, ze se tam zaclo objevovat cislo 5 ... s cimz patlal nepocital. I patlal zmasti upravu a jede se vesele dal ... az se opet zacnou dit veci, jeste hroznejsi nez pred tim ... a s prekvapenim se zjistit, ze se v poli zacla objevovat pismena ...


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #63 kdy: 28. 05. 2015, 09:11:17 »
Na to se vykašlete, na rozebírání konkrétního případu, snad se všichni stejně shodli, že danej způsob není vždy vhodnej a jde jen o to, jakou formou by se mělo učit.

Podle někoho je správně napřed se naučit jednoduchý příklady, který nejsou ideální a postupně to doupravit k dokonalosti. Mně se to osobně nelíbí, protože se prostě hned od začátku učit něco, co bych neměl používat, případně jen v konkrétních případech mi přijde úchylný a vede to k pozdějšímu bastlení kódu. Ono totiž že to udělám takhle a kvůli tomu mi pak blbne něco dál nemusí vést k opravě špatného základu, ale ke zbytečnému bastlení dalšího kódu a ošetřování chyb, který ani nemusely vzniknout.

Druhej přístup je ukázat rovnou kompletní příklad, kterej je jak má být, a ten postupně rozebrat a vysvětlit, případně v průběhu rozebírání říct, v konkrétním případě se to dá dělat jinak. Ale tento přístup samozřejmě zase může někoho odradit, když hned ze startu vidí 100 řádkovej zdroják na lbost, kterýmu nerozumí.

patlal

Re:Jak začít pracovat v IT oboru
« Odpověď #64 kdy: 28. 05. 2015, 09:19:07 »
A po trech mesicich patrani se zjisti, ze se tam zaclo objevovat cislo 5

Vy budete asi hustá partička, když ani nevíte, co váš kód dělá. Nebylo to v PHP?


gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #65 kdy: 28. 05. 2015, 09:29:43 »
Copak asi tak vrati ten zpatlanej kod, kdyz tam naladuju 150ti mistny cislo? Bude na me rvat, ze mam zadat cely cislo? Ale to sem zadal. A copak asi tak vrati, kdyz tam naladuju 30ti mistny? Vysledek je 0? Vazne?

Podívej, mohl sis alespoň zkusit, co to opravdu udělá, ale spustit python je asi mimo tvoje možnosti.
Kód: [Vybrat]
>>> 1/int("999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999")
1e-150
>>> 1/int("999999999999999999999999999999")
1e-30

Dostáváme co? Správný výsledek. Dodej svůj kód, kde ukážeš, jak se to má dělat správně nebo dodej vstup, kdy diskutovaný kód nefunguje. Máš jen blbé kecy a skutek utek.

j

Re:Jak začít pracovat v IT oboru
« Odpověď #66 kdy: 28. 05. 2015, 09:34:43 »
A po trech mesicich patrani se zjisti, ze se tam zaclo objevovat cislo 5

Vy budete asi hustá partička, když ani nevíte, co váš kód dělá. Nebylo to v PHP?

I kkt jako ty by moch pochopit, ze pisetalem kodu nejsem ja, ale debil dodavatel. Ja jen musim resit, proc to nefunguje. Ne, nebylo to v php, bylo to C#.

j

Re:Jak začít pracovat v IT oboru
« Odpověď #67 kdy: 28. 05. 2015, 09:37:43 »
Dostáváme co? Správný výsledek. Dodej svůj kód, kde ukážeš, jak se to má dělat správně nebo dodej vstup, kdy diskutovaný kód nefunguje. Máš jen blbé kecy a skutek utek.

Ooo zazrak, tak zrovna python ma vetsi rozsah intu ... coz nijak neresi situaci, kdyz to prelezu, ale debil jako ty to samozrejme nedokaz pochopit . Takze hovno hovno, akora zvasty.

gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #68 kdy: 28. 05. 2015, 09:45:30 »
Ooo zazrak, tak zrovna python ma vetsi rozsah intu ... coz nijak neresi situaci, kdyz to prelezu, ale debil jako ty to samozrejme nedokaz pochopit . Takze hovno hovno, akora zvasty.

Ne větší, ale (virtuálně) nekonečný: https://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex
Že to nevíš, ale píšeš tady o autorovi kódu (který to narozdíl od tebe ví), jaký je patlal, mě nepřekvapuje. Fakt je ten, že patlal jsi ty a žádný kód, jak by to mělo být "podle j správně" nedodáš. Nedodáš ani vstup, pro který uvedený kód nefunguje. Jen budeš psát o tom, jak to všichni dělají špatně a ty bys to teda udělal mnohem líp. Akorát nevíme jak, nic z tebe nevypadne.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #69 kdy: 28. 05. 2015, 09:54:57 »
Když se teda budeme hádat, tak ono to virtuální nekonečno nevirtuálně i skončí

Kód: [Vybrat]
#!/usr/bin/python
print(1/1e-323)
asi takhle
Kód: [Vybrat]
pc python # ./test1.py
inf
neeebo
Kód: [Vybrat]
#!/usr/bin/python
print(1/1e-324)
asi takhle
Kód: [Vybrat]
pc python # ./test1.py
Traceback (most recent call last):
  File "./test1.py", line 2, in <module>
    print(1/1e-324)
ZeroDivisionError: float division by zero
takže ač je to smutné, něco pravdy na tom asi bude ;)

gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #70 kdy: 28. 05. 2015, 10:01:02 »
Když se teda budeme hádat, tak ono to virtuální nekonečno nevirtuálně i skončí

Kód: [Vybrat]
#!/usr/bin/python
print(1/1e-323)

takže ač je to smutné, něco pravdy na tom asi bude ;)

Doporučoval bych nastudovat rozdíl mezi floating point čislem a integerem. Dělíš floating point číslem, ne integerem. To je něco úplně jiného.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #71 kdy: 28. 05. 2015, 10:08:51 »
Jop a jsem si toho vědom, ale co když výsledek diskutovaného programu potřebuji použít pro další výpočty? A vo vo vo vo tom to je. Ten samotnej kód z příkladu je ti asi naprd a není potřeba na něm něco řešit, dokonce ani exceptions, protože to prostě vypíše chybu a je to. Ale co když z výsledku počítám něco dalšího? Ukládám to někam do DB pro další zpracování? Opravdu chceš shodit nebo poškodit celej systém jen proto, že jsi špatně ošetřil vstup a nějakej jouda ti při zadávání dat usnul na klávesnici? :) Jasně, můžeš argumentovat další kontrolou při dalším zpracování, ale to by ve výsledku taky nemusela aplikace dělat nic jinýho, než kontroly svých kontrol. Proto je určitě správnější ošetřit nespolehlivý uživatelský vstup pořádně a nezasírat si kód dalšíma zbytečnostma.

gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #72 kdy: 28. 05. 2015, 10:17:20 »
Jop a jsem si toho vědom, ale co když výsledek diskutovaného programu potřebuji použít pro další výpočty? A vo vo vo vo tom to je. Ten samotnej kód z příkladu je ti asi naprd a není potřeba na něm něco řešit, dokonce ani exceptions, protože to prostě vypíše chybu a je to. Ale co když z výsledku počítám něco dalšího? Ukládám to někam do DB pro další zpracování? Opravdu chceš shodit nebo poškodit celej systém jen proto, že jsi špatně ošetřil vstup a nějakej jouda ti při zadávání dat usnul na klávesnici? :) Jasně, můžeš argumentovat další kontrolou při dalším zpracování, ale to by ve výsledku taky nemusela aplikace dělat nic jinýho, než kontroly svých kontrol. Proto je určitě správnější ošetřit nespolehlivý uživatelský vstup pořádně a nezasírat si kód dalšíma zbytečnostma.

Uživatelský vstup je ošetřen chytáním výjimky z funkce int. Takže znovu, když napadáte tento kód:
Kód: [Vybrat]
#!/usr/bin/env python3
print("1/x=y")
try:
    x = int(input("Zadajte x: "))
    y = 1/x
    print("y=1/{}={}".format(x, y))
except ValueError:
    print("Prosím, zadávajte celé číslo.")
except ZeroDivisionError:
    print("Delenie nulou nieje možné. Teoretický výsledok je nekonečno.")
finally:
    print("Dovidenia!")
Napiště svůj kód, kde to uděláte líp, nebo napiště vstup, proto který ten kód nefunguje podle očekávání. Jinak jsou to jen úvahy typu: Co kdybych ten výsledek chtěl poslat někam, kde akceptují jen čísla v rozsahu (-20, 100) každé liché úterý a čísla v rozsahu (-100, -90) každou sudou středu. Autor to neošetřil, to je ale diletant!

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #73 kdy: 28. 05. 2015, 10:30:58 »
A já znovu zopakuju, že autor není diletant, že kód na to, co má dělat, funguje líp než by měl (asi to bude tím, že nemá počítat 1/x, ale má ukázat použití exceptions), jenom mi u toho jakožto u tutorialu, ze kterýho se má někdo něco naučit chybí OBROVSKEJ VYKŘIČNÍK, že exceptions rozhodně nezachrání celej svět a že je potřeba to ošetřit i jinak. Původní debaba (respektive poddebata) nebyla vůbec o funkčnosti, nebo nefunkčnosti toho konkrétního zcela jistě funkčního kódu, ale o KVALITĚ VYUČOVÁNÍ! Jinak nebudu vám sem dopisovat nějaký úpravy kódu, to si stačí domyslet. Prostě i když budu chtít použít exceptions, právě kvůli pythoní délce integeru je VELMI DOBRÝ nápad ošetřit i meze a to je to, na co BY MĚLO BÝT minimálně poukázáno HNED, když tento příklad uvedu, jinak vychovávám další neschopný bastlíře, kteří budou schopní ladit půl roku chybu v 20ti řádkovým kódu, ukroutí si u toho hlavu a stejně problém nevyřeší, protože v něčem takhle elementárním přece nemůže být chyba... nebo může? Jinak jestli je výsledkem učení se pythonu tvorba takovýchto miniprkotin na výpočty 1/x, je to zcela v pořádku a nevidím v tom problém. Jenom někdo musí upozornit na to, že lidi, kteří se to takhle naučí, mají přísný zákaz tvořit cokoliv přes 100 řádků kódu.

gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #74 kdy: 28. 05. 2015, 10:44:57 »
Ten příklad na exceptions je naprosto v pořádku a já s ním nemám problém. Když autora kritizuješ, napiš lepší příklad, jak by to podle tebe mělo vypadat.