VŠ z trochu jiného úhlu

Jakub Galgonek

Re:VŠ z trochu jiného úhlu
« Odpověď #225 kdy: 07. 10. 2012, 19:46:05 »
Díky teorie pochopíte, proč to tak je.

Výborný příklad! tj. studenti VŠ mají potřebné základy a proto 9 z 10 bude schopných odpovědět správně, oproti tomu lidé bez VŠ základy nemají a proto 9 z 10 ti musí odpovědět špatně!

Ne vždy "vědět" nutně znamená i "pochopit" ...


Rax

Re:VŠ z trochu jiného úhlu
« Odpověď #226 kdy: 07. 10. 2012, 19:55:02 »
Problém volatile je v tom, že je nedostatečně specifikován a je těžké ho v kompilátoru korektně implementovat (v některých situacích ani není jasné, co to je korektně - například, zda a kdy má kompilátor vložit bariéru). Zde by právě pomohl teoretický přístup.

volatile je specifikován naprosto zcela jasně a také naprosto a zcela jasně funguje, s bariérami volatile nemá vůbec nic společného, i když pochopitelně bariéra chování kódu ovlivňuje také. Teoretický přístup je vám v tomto případě k ničemu, především je třeba nastudovat chování kompilátoru a případně procesoru.

Zkuste bez kompilátoru říct, co a proč udělá následující program:
a) program se přeloží a vypíše Integer
b) program se přeloží a vypíše Object
c) program se nepřeloží

V Javě naštěstí nemusím pracovat, tak si nejsem jistý. Právě podle teorie by si člověk myslel c), ale protože v Javě mě už nemůže nic překvapit, tak klidně může nastat b). Teorie je vám opět k ničemu, nejvíce v tomto případě záleží jak jste pochopil myšlenkové pochody tvůrce kompilátoru, to se takhle ráno probudí, naimplementuje že null defaultně nese typovou informaci Object a máte vymalováno.

To, že má Java specifikovaný paměťový model je skvělá věc. Na druhou stranu to opět není úplně triviální (a ještě k tomu se tam vyskytují pojmy jako lineární a částečné uspořádání, podmnožina atd.) - jednodušší by bylo zakázat sdílení proměnných více vlákny.

Specifikovaný paměťový model má všechno, každý CPU i každý OS a teorie vám opět nepomůže, mnohem důležitější je praktická znalost kompilátoru, CPU a OS.

Netvrdím že teorie je na nic, ale ve výše uvedených případech vám moc nepomůže, to si musíte zažít.

KapitánRUM

Re:VŠ z trochu jiného úhlu
« Odpověď #227 kdy: 07. 10. 2012, 20:01:47 »
Ne vždy "vědět" nutně znamená i "pochopit" ...

Ano, ale není snad VŠ o tom, že by měla lidi tyto věci naučit i chápat?

Radek Miček

Re:VŠ z trochu jiného úhlu
« Odpověď #228 kdy: 07. 10. 2012, 20:37:52 »
Citace
volatile je specifikován naprosto zcela jasně a také naprosto a zcela jasně funguje, s bariérami volatile nemá vůbec nic společného, i když pochopitelně bariéra chování kódu ovlivňuje také. Teoretický přístup je vám v tomto případě k ničemu, především je třeba nastudovat chování kompilátoru a případně procesoru.

Teoretický přístup bych použil k tomu, abych to lépe specifikoval (nebo specifikoval úplně jinak). Podívejte se třeba na Volatiles Are Miscompiled, and What to Do about It. Jinak máte pravdu, že volatile nemá nic společného s bariérami - moje chyba, měl jsem na mysli (převzato z odkazovaného článku):

Citace
First, it is not apparent to what extent—if any—the compiler
must use memory barriers, non-cacheable memory regions, or similar
mechanisms to ensure that accesses to volatile objects are committed
to RAM in the specified order. A strict reading of the standard
would seem to require the insertion of memory barriers at sequence
points before and after volatile accesses, but in practice few
compilers do this. Rather, a programmer must manually insert the
necessary hardware operations.

Citace
V Javě naštěstí nemusím pracovat, tak si nejsem jistý. Právě podle teorie by si člověk myslel c), ale protože v Javě mě už nemůže nic překvapit, tak klidně může nastat b).

V tomto případě stačí vědět, jak se zkompiluje to rozhraní a co to je podtyp (tohle už patří do teorie OOP). Rozhraní se přeloží takto:

Kód: [Vybrat]
interface A {
  void doIt(Object x);
}

Citace
Teorie je vám opět k ničemu, nejvíce v tomto případě záleží jak jste pochopil myšlenkové pochody tvůrce kompilátoru, to se takhle ráno probudí, naimplementuje že null defaultně nese typovou informaci Object a máte vymalováno.

Je to docela dobře promyšleno, a když znáte základy teorie (OOP / programovacích jazyků / typových systémů) a cíl návrhářů jazyka, tak můžete uhádnout, jak se kompilátor bude chovat.

Citace
Specifikovaný paměťový model má všechno, každý CPU i každý OS a teorie vám opět nepomůže, mnohem důležitější je praktická znalost kompilátoru, CPU a OS.

Každý programovací jazyk nemá specifikovaný paměťový model. Teorie vám pomůže k tomu, že si ho můžete přečíst a pochopit.

KapitánRUM

Re:VŠ z trochu jiného úhlu
« Odpověď #229 kdy: 07. 10. 2012, 20:51:16 »
Teorie vám pomůže k tomu, že si ho můžete přečíst a pochopit.

Vy jste se / ty ses snad zasekl/praštil do hlavy! (nehodící škrtněte)
Tady přeci nikdo nezpochybňuje význam teorie, ale to, že na většině škol se ta potřebná teorie prostě neučí.
Případně jako několik holých vět bez nutnost bližšího pochopení.
A podobně hovadský přístup je, když profesní teorie je nahrazena matematikou.

To by bylo stejné, jako kdyby se doktor učil 5 let molekulární chemii s tím, že všechno je přece založeno na molekulách, tak ten zbytek se už přeci lehce naučí!


KapitánRUM

Re:VŠ z trochu jiného úhlu
« Odpověď #230 kdy: 07. 10. 2012, 21:14:35 »
Řeknu příklad, na VŠ jsme se bavili o velikosti jednotlivých proměnných, jako že integer má různé rozsahy.
Datovým typům jsme věnovali cca 1 hodinu, konec, nazdar párky, vyřešeno.
Když jsem pak vedl kroužek, řešil jsem datové typy hodin 6!
Jednak jsem všem názorně ukazoval rozdíl datových typů se znaménkem a bez znaménka, jejich rozsahy a chování v případě přetečení.
TO POVAŽUJI ZA TEORII!
Člověk by měl vědět, co se stane, když proměnná přeteče, jak si to hlídat, že se přetečení dá zachytit i testovat.
Ukazoval jsem boxing a unboxing, jak se mění typ z triviálního na zabalený a to, jak se mění rychlost zpracování dat.
Hodinu jsme probírali objekty, já oproti tomu pět hodin ukazoval různá kouzla s objekty.

Výsledek?
Zkouška na VŠ měla asi stejnou hodnotu, jako umět si přečíst jednu "libovolnou" knížku o "libovolném" programovacím jazyku.
Protože těmto věcem je tam dán asi stejný prostor.
A stejné to bylo s většinou předmětů! Vlastně ne, programování vyžadovalo alespoň 20 mozkových buněk, řada předmětů byla prostě absolutní výsměch všemu a musel by je dát i retardovaný kůň!
Jenže pak přišla masakrální matematika, kde se oddělovalo zrno od plev.
Rozuměj, kde se oddělovali ti, kteří sice uměli výborně programovat a všemu ostatnímu rozuměli, ale Derivace Vektory Matice Integrální počet.... na ně byl prostě příliš silný kafe! Kamarád, machr přes databáze, který dokázal myslet hodně inovativním způsobem a dneska je milionář, ten se tam rozbrečel a ze školy odešel. Sám se mohu se pochlubit indexem 1,1,1,1,1,1,2,1,2,1,1 a pak nesložil zkoušku z matematiky. Měl jsem šanci si zkoušku koupit, prostě jí uplatit, ale řekl jsem si, že ta škola může jít do sraček, když to nedám poctivě, tak se na to můžu vysrat. Mít červený diplom, jako že bych to asi dal a nebo i obyčejný a přitom vědět, že jsem si koupil zkoušku, to by mě trápilo. Ale po třech letech vyletět, když jinak jste dost dobrej (spíš škola byla hodně ubohá), to nasere tak jako tak. Hlavně mě štvalo to, že jsem se tam vlastně nic nenaučil. To důležité šlo mimo. Úplně. A kamarád na VŠ v USA zatím modeloval databáze, zkoušel v ASM všechny možné varianty přetečení, prohlížel si objekty přímo v operační paměti (samozřejmě že ne virtuálního stroje C#/Java) - celý jejich cyklus od alokace, volání konstruktoru až po uvolnění. On se něco naučil. To mělo smysl! Takovou VŠ by mi snad ani nebylo líto nedodělat, protože bych věděl, že znalosti tam získané mají OPRAVDOVOU HODNOTU, ale tady mi bylo líto jen toho ztraceného času.
Jo a taky tam razili teorii že co semestr to si student musí udělat jeden certifikát Cisco/M$/Oracle a ještě nějaké další.
Z něj je borec, má papíry na to, že je borec a ten papír mu MŮŽETE VĚŘIT!
Já většině absolventů z ČR nevěřím ani to, že dokážou v pecku najít procesor.

Radek Miček

Re:VŠ z trochu jiného úhlu
« Odpověď #231 kdy: 07. 10. 2012, 21:24:55 »
Citace
Ano, ale není snad VŠ o tom, že by měla lidi tyto věci naučit i chápat?

Přesně tak, proto se tam učí i důkazy, aby studenti chápali i proč to tak je.

Citace
na většině škol se ta potřebná teorie prostě neučí.

Neumím posoudit.

Citace
A podobně hovadský přístup je, když profesní teorie je nahrazena matematikou.

Ale ona matematika je základem mnoha věcí v informatice. Umělá inteligence je založena na matematické logice, teorii grafů, pravděpodobnosti, statistice a m. analýze - podívejte se třeba na knihu Elements of Statistical Learning. Grafika využívá metody (lineární) algebry a analýzy. Analýza programů využívá metody matematické logiky, topologie a teorie grafů. Různé návrhové vzory pochází z teorie kategorií a algebry. Funkcionální programování je založené na intuicionistické logice (tj. Heytingových algebrách). Teorie automatů a gramatik vychází z algebry. Vyčíslitelnost zase vychází z matematické logiky. Pravděpodobnostní analýza algoritmů využívá teorii pravděpodobnosti, statistiku a m. analýzu. Teorie programovacích jazyků používá metody algebry a topologie.

backup

Re:VŠ z trochu jiného úhlu
« Odpověď #232 kdy: 07. 10. 2012, 21:26:33 »
Když jsem pak vedl kroužek, řešil jsem datové typy hodin 6!

rad bych vyuzil prilezitosti a zeptal se, kdy by se mel pouzit unsigned char.
Jiste to uz rada programatoru zazila, jakou paseku tohle dela. Dokonce i v systemovych
knihovnach aby clovek porad pouzival cast.
Ja se dnes vpodstate neobejdu bez prepinace -Wno-pointer-sign

Rax

Re:VŠ z trochu jiného úhlu
« Odpověď #233 kdy: 07. 10. 2012, 21:30:19 »
Teoretický přístup bych použil k tomu, abych to lépe specifikoval (nebo specifikoval úplně jinak).

Prostě se napíše do manuálu ke kompilátoru jak se chová moje implementace volatile a tím to hasne.
Nesnažte se mi navrhnout, že hodláte volatile tak zprasit, že na pochopení si v budoucnu budu muset nastudovat nějakou Vaši tisícistránkovou teoretickou bichli.

Je to docela dobře promyšleno, a když znáte základy teorie (OOP / programovacích jazyků / typových systémů) a cíl návrhářů jazyka, tak můžete uhádnout, jak se kompilátor bude chovat.

Pochopitelně je to tak, že rozhraní se kompiluje přesně tak jak si to tvůrce kompilátoru usmyslel a teorie se může a nemusí držet. Polovina kompilátorů implementujících OOP je nějak zprasená a má nějaké odchylky od teorie OOP, například nikdo nikdy v žádné teorii k OOP neviděl, že by všechny metody měly být virtuální a přece jsou.

Teorie vám pomůže k tomu, že si ho můžete přečíst a pochopit.

Pochopil jsem to už dávno a to přečtením vybraných kapitol z MSDN a Intel® 64 and IA-32 Architectures Software Developer Manuals. Knihou s teorií bych si v tomto případě leda tak podložil monitor.

KapitánRUM

Re:VŠ z trochu jiného úhlu
« Odpověď #234 kdy: 07. 10. 2012, 21:45:54 »
rad bych vyuzil prilezitosti a zeptal se, kdy by se mel pouzit unsigned char.

To by snad mělo být jasné už z rozsahu unsigned char je jako byte a char sbyte ne?
Nicméně dělám v C#/Java a díky bohu za dvoubajtové/UTF8 řetězce.

kamenem

Re:VŠ z trochu jiného úhlu
« Odpověď #235 kdy: 07. 10. 2012, 21:47:13 »

Rozuměj, kde se oddělovali ti, kteří sice uměli výborně programovat a všemu ostatnímu rozuměli, ale Derivace Vektory Matice Integrální počet.... na ně byl prostě příliš silný kafe!

Výborně programovali a nešli jim základy matematiky? Tohle se dneska na školách naučí na zkoušku skoro každý. S pochopením je to horší, ale i tobě se to stačilo naučit a nemusel jsi chápat nic. I když je to u programátora zvláštní. Nebo jsi to špatně popsal. Stále si ale myslím, že matematiku by potřeboval každý. I ten doktor, i ten sociolog, ale co se dá dělat.

Re:VŠ z trochu jiného úhlu
« Odpověď #236 kdy: 07. 10. 2012, 21:48:13 »
Díky teorie pochopíte, proč to tak je.
Aha, tak to je asi nedorozumění ohledně slova "teorie". Já jsem chtěl říct, že nevidím žádný důvod, aby běžný programátor věděl, jak dokázat např. větu "Pro každý nedeterministický Turingův stroj existuje ekvivalentní deterministický Turingův stroj". V podstatě si myslím, že ani nemusí vědět, že ta věta je pravdivá. Když to bude vědět, je to možná plus, ale nejspíš o nic moc větší než že umí hrát na housle (viz citát Dejva Thomase http://forum.root.cz/index.php?topic=5076.msg44724#msg44724 ).

- a znovu opakuju, podle mě by pro něj bylo PODSTATNĚ (tj. řádově, tj. nebetyčně) přínosnější, kdyby mu někdo vysvětlil tohle: http://hysteria.sk/prielom/25/#vid - s čímž se ovšem nikdo nenamáhá, proč NENÍ PRAVDA, že univerzitám jde o to, aby studenti své práci rozuměli do hloubky.

Citace
Je to docela dobře promyšleno, a když znáte základy teorie (OOP / programovacích jazyků / typových systémů) a cíl návrhářů jazyka, tak můžete uhádnout, jak se kompilátor bude chovat.
Dtto. Teorii OOP, programovacích jazyků a typových systémů ať se učí až se z nich kouří. To je ale úplně jiná káva než dokazovat nějaká lemmátka ohledně složitosti!

Ale ona matematika je základem mnoha věcí v informatice. Umělá inteligence je založena na matematické logice, teorii grafů, pravděpodobnosti, statistice a m. analýze - podívejte se třeba na knihu Elements of Statistical Learning. Grafika využívá metody (lineární) algebry a analýzy. Analýza programů využívá metody matematické logiky, topologie a teorie grafů. Různé návrhové vzory pochází z teorie kategorií a algebry. Funkcionální programování je založené na intuicionistické logice (tj. Heytingových algebrách). Teorie automatů a gramatik vychází z algebry. Vyčíslitelnost zase vychází z matematické logiky. Pravděpodobnostní analýza algoritmů využívá teorii pravděpodobnosti, statistiku a m. analýzu. Teorie programovacích jazyků používá metody algebry a topologie.
A znovu to samé - jistě, je to na tom založeno. Ale normální absolvent s tím stejně neumí pracovat a tak jako tak tyhle hóch věci musí přenechat specialistům.

A opět znovu a do zblbnutí: "je to založeno" i na tomhle: http://hysteria.sk/prielom/25/#vid - a nikomu žíly netrhá, že tohle studenti neznají!

Re:VŠ z trochu jiného úhlu
« Odpověď #237 kdy: 07. 10. 2012, 21:51:06 »
Oprava:
s čímž se ovšem nikdo nenamáhá, proč NENÍ PRAVDA, že univerzitám jde o to, aby studenti své práci rozuměli do hloubky.
- mělo být "pročež".

Rax

Re:VŠ z trochu jiného úhlu
« Odpověď #238 kdy: 07. 10. 2012, 21:52:15 »
rad bych vyuzil prilezitosti a zeptal se, kdy by se mel pouzit unsigned char.

Vždy pokud algoritmus nevyžaduje použít signed char. Například hrátky s pamětí a soubory se odjakživa realizují zásadně přes unsigned char.

Radek Miček

Re:VŠ z trochu jiného úhlu
« Odpověď #239 kdy: 07. 10. 2012, 21:53:54 »
Citace
například nikdo nikdy v žádné teorii k OOP neviděl, že by všechny metody měly být virtuální a přece jsou

Snad naopak, ne? Teď si ani nevybavuji článek / knihu o teorii OOP, kde by uvažovali nevirtuální metody - hlavním důvodem je jednoduchost.