Jak začít pracovat v IT oboru

Kolemjdoucí

Re:Jak začít pracovat v IT oboru
« Odpověď #30 kdy: 27. 05. 2015, 09:06:44 »
A naučí!

Neobživuj mrtvoly, řeší se to tady roky.


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #31 kdy: 27. 05. 2015, 09:13:58 »
Příklad z mládí ze SŠ. Dva učitelé, ten samý předmět a tvorba HTML. Jeden učil FrontPage, stránka musela být barevná, ideálně tenkrát oblíbený MARQUEE texty a animovaný gify, kolikrát se to nedalo přečíst a komplet stránka měla 10MB (v době, kdy mělo doma internet jen pár lidí a to přes dial-up!!!) a bylo to za jedna. Druhej nás učil strukturu dokumentu, jednotlivý tagy, prioritou pro něj byla přehlednost, čitelnost a malá velikost. Za 2MB obrázek na pozadí už člověk nedostal líp jak za 4, i kdyby ty stránky byly zlatý.

lepič

Re:Jak začít pracovat v IT oboru
« Odpověď #32 kdy: 27. 05. 2015, 09:14:08 »
Podle mě škola není k zahození - naučí vás tam správným způsobem myslet...

Co je to za nesmysl? Jak tě můžou naučit něco, co máš daný? A jak by to jako fungovalo?

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #33 kdy: 27. 05. 2015, 09:46:30 »
Podle mě škola není k zahození - naučí vás tam správným způsobem myslet...

Co je to za nesmysl? Jak tě můžou naučit něco, co máš daný? A jak by to jako fungovalo?

Nenaučí tě myslet, ale můžou (a nemusí) ti vysvětlit správné principy a dostatečně tě odrazovat od drbání se pravou rukou za levým uchem.

gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #34 kdy: 27. 05. 2015, 09:55:46 »
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!")

Vykradeno z clanku http://www.linuxexpres.cz/software/python-3-4-vynimky-a-podmienky. Comment pod nim ma pravdu. Jen je prilis milosrdny.

Tvle kolikrat ja jen musel resit, ze tvurce (s titulem) zavola funkci, a je mu jedno co je na vstupu ... a kdyz mu to nevrati vyjimku, tak to bere tak, ze vsechno je OK

Vysvětli prosím, kdy ten kód selže a co je na něm špatně. Podle mě je to v pythonu 3 naprosto korektní.


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #35 kdy: 27. 05. 2015, 10:07:01 »
Vysvětli prosím, kdy ten kód selže a co je na něm špatně. Podle mě je to v pythonu 3 naprosto korektní.

Kód: [Vybrat]
#!/bin/bash
echo "1+1=3"

je taky zcela korektní bashový skript :D Je to vysvětleno pod článkem v komentech, někomu se nelíbí, že chybný vstup není ošetřen předem, ale vrámci except, proto může dojít k různým potížím. Samozřejmě, jde o způsob použití. Pokud to budu používat jako funkci ve větším projektu, je to špatně. Pokud je to jednoúčelová rychlá záležitost, proč ne. Možná spíš trošku vadí, že to v původním článku nebylo dostatečně vysvětleno a nebylo upozorněno na problémy vyplývající z této implementace.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #36 kdy: 27. 05. 2015, 10:13:36 »
A asi je to i příklad toho, jak někoho naučit špatným návykům :) Je spousta věcí, které jsou syntakticky korektní a dokonce i dělají, to co mají. Ale to pořád ještě není důvod, proč je používat, případně proč je používat striktně v každé situaci, protože může existovat víc způsobů k dosažení stejného cíle a i když ani jeden není "špatný", některý je prostě "správnější". A to je to, co se tu řeší. Tímhle směrem by tě správně asi měla nakopnout škola, což se mnohdy neděje.

gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #37 kdy: 27. 05. 2015, 10:17:37 »
Kód: [Vybrat]
#!/bin/bash
echo "1+1=3"
je taky zcela korektní bashový skript :D

bash mě nezajímá, ten kód je v pythonu 3 a tam se to chová správně:
Kód: [Vybrat]
>>> int("1+1=3")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1+1=3'

gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #38 kdy: 27. 05. 2015, 10:19:28 »
A asi je to i příklad toho, jak někoho naučit špatným návykům :)

Jaké špatné návyky, používání výjimek je špatný návyk? Plive se tady na autora python kódu, jaký je ignorant a neschopný programátor se špatnými návyky, ale spíš to vypadá, že je to opačně.

Kolemjdoucí

Re:Jak začít pracovat v IT oboru
« Odpověď #39 kdy: 27. 05. 2015, 10:20:52 »

Není odděleno UI od výkonného kódu.
Není jasné co se stane po stisku Ctrl+C, tipuji že nic nebo to zbuchne celé na nějakou extra výjimku
Validace údajů od uživatele se nedělá přes výjimky.
Validace proti nule na vstupu se dělá explicitně, ne jako ZeroDivisionError.
Nejsou ošetřeny výjimky FloatingPointError, OverflowError a další, doufám že to mylně nevypíše neznámou výjimku a za tím "Dovidenia".

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #40 kdy: 27. 05. 2015, 10:28:09 »
A asi je to i příklad toho, jak někoho naučit špatným návykům :)

Jaké špatné návyky, používání výjimek je špatný návyk? Plive se tady na autora python kódu, jaký je ignorant a neschopný programátor se špatnými návyky, ale spíš to vypadá, že je to opačně.

Ne, neplivu na něho, neřekl jsem, že je ignorant ani nic podobnýho a nepochybuju o tom, že python ovládá. Jenom když si ten článek přečteš celej a budeš se snažit podle něj něco naučit, tak tomu něco chybí. Přesně to, co tu řešíme v souvislosti s naším školským systémem. Dělěj tohle, dělá se to tak a tak a hotovo. Já chápu, že ten článek není rozhodně vysoká programátorská a osobně proti němu nic nemám, dal to sem někdo jenom jako příklad (možná ne úplně dobrý).

gamer

Re:Jak začít pracovat v IT oboru
« Odpověď #41 kdy: 27. 05. 2015, 10:31:42 »
Není odděleno UI od výkonného kódu.
Jestli to nebude tím, že je to jen příklad a ne kus normální aplikace.

Není jasné co se stane po stisku Ctrl+C, tipuji že nic nebo to zbuchne celé na nějakou extra výjimku
Vyhodí to KeyboardInterrupt. Který to vyhodí i kdekoliv jinde, nejenom ve funkci input, ten musí být ušetřený zvlášť.

Validace údajů od uživatele se nedělá přes výjimky.
To je tvrzení typu "já nedělám validaci dat přes výjimky, takže každý kdo to tak udělá je ignorant". Pak se na to můžeš dívat opačně. python nabízí validaci vstupu tak, že funkce převádející string na int vyhodí výjimku. Jen ignorant by nepoužil standardní validaci, kterou python nabízí. Můžeš si to reimplementovat samozřejmě sám, ale je to blbost.

Validace proti nule na vstupu se dělá explicitně, ne jako ZeroDivisionError.
Znovu se ptám, co je na tom kódu špatně a kdy nebude fungovat?

Nejsou ošetřeny výjimky FloatingPointError, OverflowError a další, doufám že to mylně nevypíše neznámou výjimku a za tím "Dovidenia".
Nejsou, protože v pythonu se nic takového ošetřovat nemusí:
Kód: [Vybrat]
>>> 1/int("999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999")
1e-156

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #42 kdy: 27. 05. 2015, 10:33:20 »
bash mě nezajímá, ten kód je v pythonu 3 a tam se to chová správně:
Kód: [Vybrat]
>>> int("1+1=3")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1+1=3'
jinak jsem měl na mysli spíš tohle, když teda trváš na pythonu
Kód: [Vybrat]
#!/usr/bin/python
print("1+1=3")
což je taky ze syntaktického hlediska regulérní funkční pythoní kód, což ale nezaručuje, že poskytuje správný výsledek.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jak začít pracovat v IT oboru
« Odpověď #43 kdy: 27. 05. 2015, 10:35:16 »
bash mě nezajímá, ten kód je v pythonu 3 a tam se to chová správně:
Kód: [Vybrat]
>>> int("1+1=3")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '1+1=3'

Pardon ...
jinak jsem měl na mysli spíš tohle, když teda trváš na pythonu
Kód: [Vybrat]
#!/usr/bin/python
print("1+1=3")
což je taky ze syntaktického hlediska regulérní funkční pythoní kód, což ale nezaručuje, že poskytuje správný výsledek.

Re:Jak začít pracovat v IT oboru
« Odpověď #44 kdy: 27. 05. 2015, 10:35:38 »

Není odděleno UI od výkonného kódu.
Není jasné co se stane po stisku Ctrl+C, tipuji že nic nebo to zbuchne celé na nějakou extra výjimku
Validace údajů od uživatele se nedělá přes výjimky.
Validace proti nule na vstupu se dělá explicitně, ne jako ZeroDivisionError.
Nejsou ošetřeny výjimky FloatingPointError, OverflowError a další, doufám že to mylně nevypíše neznámou výjimku a za tím "Dovidenia".

OMG.
Jde o (ano, asi bambiliondesátý) učební text, který se snaží vysvětlit základní principy.

Cite:
Záver
Ani takéto riešenie však samozrejme nieje najideálnejšie, ale je funkčné. V ďalších častiach si budeme náš jednoduchý program postupne vylepšovať ...


Možná je jednou z mnoha věcí, kterou se snaží (nebo by měli) naučit na vš schopnost neřešit ultrakůldetaily hned na začátku, schopnost rozporcovat si úkol na postupné kroky, neoptimalizovat první verzi, ...

Ale chápu, že to jednomu pozdvedne ego, když si pěkně zahnidopiší na ukázkovém(!) příkladu(!!) a ukáže, jaký je on mástr.