Porovnání C a Javy pro začátečníka

andy

Re: Porovnání C a Javy pro začátečníka
« Odpověď #30 kdy: 18. 01. 2011, 19:55:43 »
V podstate si to pocul dobre, dalsia vyhoda C su vacsinou standartne dostupne hlavickove subory a libky (rozne systemove rozhrania atd).
Java je podla mna lahsia, ma vyhodu GC ale musis zvladnut aj OOP. Nie je pravda, ze by bola Java nejako vyrazne pomalsia ako C, je to skor v jednotkach %, ale zere ovela viac pamate.
Ak si chces robit jednoduche oknoidne aplikacie pod windows, porozmyslaj aj nad C#.


Mordae

Re: Porovnání C a Javy pro začátečníka
« Odpověď #31 kdy: 18. 01. 2011, 20:28:32 »
Nedavno tady na foru byl skvelej vtip.

Tuk, tuk. Kdo tam? ... ... ... ... ... ... ... ... ... ... ... ... Java.

Je to vcelku vystizne. V benchmarcich, obvykle matematickeho charakteru, je Java rychla. V normalnim provozu ma takovou rezii, ze se to neda. Koukni na http://www.jelovic.com/articles/why_java_is_slow.htm.

V C se dobre pisi nektere veci. Takovy ten plumbing, veci, u kterych zalezi na rychlosti, UNIXove systemove nastroje a podobne. Graficke aplikace se take daji, ale kdyz to srovnas napriklad s Pythonem, je to na dlouhe lokte.

Webove veci se dobre pisi v Pythonu, nebo v Ruby. PHP je ksindl (dva roky, nikdy vice), je uplne rozbite a autori jsou diletanti.

Re: Porovnání C a Javy pro začátečníka
« Odpověď #32 kdy: 18. 01. 2011, 20:43:52 »
Dovolil bych si poznamenat, ze kopec prispevku tu obsahuje uzitecne informace na tema "jaky jazyk zvolit pro muj projekt", ale pri vyberu prvniho programovaciho jazyka pro zacatecnika jsou spise irelevantni.

aštar šeran

Re: Porovnání C a Javy pro začátečníka
« Odpověď #33 kdy: 18. 01. 2011, 21:19:13 »
Mě by zajímalo vysvětlení následujících dvou fenoménů, které se objevují u lidí, kteří tvrdí že Java je nepoužitelně pomalá.
1. Proč to vždy dokazují odkazem na články minimálně 10 let staré?
2. Proč místo Javy často doporučují Python, který je i oproti Javě několikanásobně pomalejší(rychlostí běhu i paměťovou náročností)?

andy

Re: Porovnání C a Javy pro začátečníka
« Odpověď #34 kdy: 18. 01. 2011, 21:35:28 »
Dobra poznamka. Ak ti to pomoze, ja som sa ucil ako prvy basic na 8bite, potom pascal (zaklady oop a tak). Potom je to uz jedno..

Inak benchmarky ja mam rad..http://shootout.alioth.debian.org/ naklikni si C a potom pascal a porovnaj s javou -server (pozor, rataju tam aj startup time). Java7 by mala o nieco zrychlit.

Ale rychlost je dost irelevantna ak ti ide o to naucit sa programovat...dokonca ani na jazyku nezalezi (myslim rozumne imperativne jazyky :) ).


NoName

Re: Porovnání C a Javy pro začátečníka
« Odpověď #35 kdy: 18. 01. 2011, 21:46:31 »
Těžko lze obecně říct, jaký programovací jazyk je pro začátečníka nejlepší. Jak tu již padlo, důležité je, co si od toho, že se začnete učit programovat slibujete a kam to chcete dotáhnout. Je třeba si také uvědomit, že si s nejvyšší pravděpodobností nevystačíte pouze s jedním jazykem, ale postupně se jich naučíte více. Který jazyk bude ten první, není tedy zase až tak důležíté. Ale při volbě vyššího programovacího jazyka jako "toho prvního", může být později přechod k nižším jazykům více bolestivý, než by to bylo naopak (hlavně práce s ukazeteli a ruční správa paměti).

Pokud začnete s C a naučíte se v něm psát řádkové aplikace využívající složitějších datových struktur, správně spravovat paměť a pracovat s ukazateli, rozhodně to nebude na škodu. Naopak získáte spoustu znalostí, povědomí o ceně různých operací a konstrukcí, zkrátka jak se lidově říká: "Budete do toho vidět." Přechod k objektově orientovaným programovacím jazykům bude potom pouze přirozeným vývojem Vašich programátorských dovedností a bude mnohem méně bolestivý, než by tomu bylo naopak.

Na druhou stranu je třeba říci, že nízkoúrovňové jazyky jako C jsou poměrně zákeřné. Zvláště slabá typová kontrola, nepříjemné a těžko odhalitelné chyby vznikající při práci s ukazeteli a ruční správě pěměti.

Dle mého mínění lze říci, že začít přímo s vyššími programovacími jazyky podporujícími OOP není špatně, nicméně začít s nižšími není na škodu a je poměrně přínosné.

Re: Porovnání C a Javy pro začátečníka
« Odpověď #36 kdy: 19. 01. 2011, 09:59:08 »
Nedavno tady na foru byl skvelej vtip.

Tuk, tuk. Kdo tam? ... ... ... ... ... ... ... ... ... ... ... ... Java.

Je to vcelku vystizne. V benchmarcich, obvykle matematickeho charakteru, je Java rychla. V normalnim provozu ma takovou rezii, ze se to neda. Koukni na http://www.jelovic.com/articles/why_java_is_slow.htm.


Není nad takové analýzy, které jsou evidentně roky staré (Java generics existují už přes 6 let), a při dnešním pohledu jen dokazují, jak se autor, zřejmě považující svou analýzu za nadčasovou (protože ji ani nedatoval), krásně mýlil, jako většina proroků.

Mordae

Re: Porovnání C a Javy pro začátečníka
« Odpověď #37 kdy: 19. 01. 2011, 12:30:32 »
Není nad takové analýzy, které jsou evidentně roky staré (Java generics existují už přes 6 let), a při dnešním pohledu jen dokazují, jak se autor, zřejmě považující svou analýzu za nadčasovou (protože ji ani nedatoval), krásně mýlil, jako většina proroků.
Mě by zajímalo vysvětlení následujících dvou fenoménů, které se objevují u lidí, kteří tvrdí že Java je nepoužitelně pomalá.
1. Proč to vždy dokazují odkazem na články minimálně 10 let staré?
2. Proč místo Javy často doporučují Python, který je i oproti Javě několikanásobně pomalejší(rychlostí běhu i paměťovou náročností)?

OK, sypu si popel na hlavu, nehledal jsem moc dlouho. Na druhou stranu... ukazte mi jedinou aplikaci, napsanou v Jave, ktera ma ekvivalent v C/C++ a je "snappier".

Jinak, je mi burt, jestli budete psat aplikace v Jave, Pythonu, C, nebo C#. Do okamziku, nez je budu muset pouzivat. Potom bych proste jen rad videl, ze uzivatelske rozhrani reaguje s maximalni prodlevou 100ms a nezpusobuje mi zachvaty beznadeje a zurivosti.

Dovolil bych si poznamenat, ze kopec prispevku tu obsahuje uzitecne informace na tema "jaky jazyk zvolit pro muj projekt", ale pri vyberu prvniho programovaciho jazyka pro zacatecnika jsou spise irelevantni.

Ne tak docela. Podle meho nazoru nema smysl jit se "ucit jazyk", nebo "ucit programovat" jen tak, bez cile. Me se pri uceni obvykle osvedcilo vybrat si nejaky prakticky cil, mensi projekt a ten pote realizovat nastrojem, ktery se mi libi a ktery bych si rad osvojil. Ma to nekolik vyhod; zaziju si postupy, ktere se pouzivaji, mohu srovnat vice nastroju pro stejnou ulohu a sam sebe motivuji dilcimy uspechy.

Re: Porovnání C a Javy pro začátečníka
« Odpověď #38 kdy: 19. 01. 2011, 12:40:01 »
Dovolil bych si poznamenat, ze kopec prispevku tu obsahuje uzitecne informace na tema "jaky jazyk zvolit pro muj projekt", ale pri vyberu prvniho programovaciho jazyka pro zacatecnika jsou spise irelevantni.

Ne tak docela. Podle meho nazoru nema smysl jit se "ucit jazyk", nebo "ucit programovat" jen tak, bez cile. Me se pri uceni obvykle osvedcilo vybrat si nejaky prakticky cil, mensi projekt a ten pote realizovat nastrojem, ktery se mi libi a ktery bych si rad osvojil. Ma to nekolik vyhod; zaziju si postupy, ktere se pouzivaji, mohu srovnat vice nastroju pro stejnou ulohu a sam sebe motivuji dilcimy uspechy.

To je samozrejme dobra varianta. Ale je trochu zradna - clovek se (na rozdil od "vyuky pro vyuku") lehce namotivuje, ale muze snadno zacit bastlit, udelat spatna rozhodnuti, natlouci si nos... a prijit o motivaci. Navic se obloukem dostavame opet na to same misto: prvni projekt musi byt dost maly a dost lehky. Zacit projektem, ktery vede k pouziti C (assembleru, Perlu, Fortranu...) je spatny napad.

Sam se ted snazim naucit svou milou programovat. Jako dobra kombinace mi prijde kombinace skvele ucebnice s hodne cvicenimi (Head first programming), az se dostaneme o kus dal, tak si dohodneme nejaky snadny projekt, na kterem si to vyzkousi v praxi (je biolozka, takze to tipnu na nejakou simulaci evoluce, mozna neco z teorie her). Kdybych ji hodil doprostred projektu, tak ji bude chybet nadhled, pokud bych ho moc odkladal, tak ji nedojde, jak moc uzitecny nastroj dostava do rukou.

Mordae

Re: Porovnání C a Javy pro začátečníka
« Odpověď #39 kdy: 19. 01. 2011, 18:30:12 »
Navic se obloukem dostavame opet na to same misto: prvni projekt musi byt dost maly a dost lehky. Zacit projektem, ktery vede k pouziti C (assembleru, Perlu, Fortranu...) je spatny napad.

Tady asi zalezi na tom, jak pro koho. Nekdo, kdo uz se v Linuxu hrabe dele by nemel mit problem s mensim projektem v C. Jinak ale chapu a v zasade souhlasim.

Sam se ted snazim naucit svou milou programovat. Jako dobra kombinace mi prijde kombinace skvele ucebnice s hodne cvicenimi (Head first programming), az se dostaneme o kus dal, tak si dohodneme nejaky snadny projekt, na kterem si to vyzkousi v praxi (je biolozka, takze to tipnu na nejakou simulaci evoluce, mozna neco z teorie her). Kdybych ji hodil doprostred projektu, tak ji bude chybet nadhled, pokud bych ho moc odkladal, tak ji nedojde, jak moc uzitecny nastroj dostava do rukou.

Jasne, rozumim. Hmm, moje biolozka nechce o programovani ani slyset... :-(

blizz

Re: Porovnání C a Javy pro začátečníka
« Odpověď #40 kdy: 21. 01. 2011, 00:40:35 »
Sorry, blizzbossi, ale co jsi mi tím vyvrátil? Já jsem nikde netvrdil, že v Javě nelze udělat pole obecných objektů, jenom jsem řekl, že Python je dynamicky typovaný jazyk a tudíž v poli máš OBECNĚ to, co tam narveš (a bez garance, kterou zajišťují staticky typované jazyky). Jasně že si můžeš dát v Javě nohu za krk a programovat podobným způsobem, byť daleko méně elegantně. Pokud se pro to ale rozhodneš, s největší pravděpodobností jsi udělal něco špatně.

Prečo by malo byť "Špatne" využívanie výhod OOP a polymorfizmu? Veď to je ten najsprávnejší prístup. Aj staticky typované jazyky umožňujú programovať dynamicky napr c# obsahuje typ dynamic, object pascal typ variant atď ale v praxi sa využívajú veľmi málo pretože programovať bez typovej bezpečnosti je ako súložiť s prostitútkou bez kondómu.
« Poslední změna: 21. 01. 2011, 00:47:02 od blizzboz »

Inkvizitor

Re: Porovnání C a Javy pro začátečníka
« Odpověď #41 kdy: 21. 01. 2011, 08:39:32 »
Proč pleteš dohromady polymorfismus a degradaci typové informace tlačením objektů do obecného pole? V Pythonu a spol. prakticky neexistuje záruka, že daný objekt má nějaký typ a rozhraní až do chvíle, kdy se na to při běhu zeptáme nebo to rohraní zkusíme použít. Ve statických jazycích to až na výjimky takto být nemusí. Vždyť sis sám odpověděl: programovať bez typovej bezpečnosti je ako súložiť s prostitútkou bez kondómu.

Re: Porovnání C a Javy pro začátečníka
« Odpověď #42 kdy: 21. 01. 2011, 09:41:33 »

OK, sypu si popel na hlavu, nehledal jsem moc dlouho. Na druhou stranu... ukazte mi jedinou aplikaci, napsanou v Jave, ktera ma ekvivalent v C/C++ a je "snappier".

Jinak, je mi burt, jestli budete psat aplikace v Jave, Pythonu, C, nebo C#. Do okamziku, nez je budu muset pouzivat. Potom bych proste jen rad videl, ze uzivatelske rozhrani reaguje s maximalni prodlevou 100ms a nezpusobuje mi zachvaty beznadeje a zurivosti.

Tak s GUI nemám žádné zkušenosti, ale třeba naše firma má v Javě spoustu replikovaných serverů (aplikací), které chroustají až statisíce QPS. Nemáme asi žádné duplicitní servery v C++ (protože to tu neřídí banda idiotů), ale myslím, že vědí, proč Javu nasazují (C++ se používá taky).
Podstatné pro nás není, který jazyk chroustá rychleji smyčky - to dělají oba dost rychle, ale ve kterém se dá rychleji žonglovat s vlákny, sockety, streamy, časovači a tak dále. V tom je Java silná. Hlavní slabinou Javy není rychlost, ale paměť (ten server má běžet víceméně nepřetržitě, a Java průběžnou GC tak docela nestíhá), ale i s tím se dá poradit.

blizz

Re: Porovnání C a Javy pro začátečníka
« Odpověď #43 kdy: 21. 01. 2011, 10:25:57 »
Proč pleteš dohromady polymorfismus a degradaci typové informace tlačením objektů do obecného pole? V Pythonu a spol. prakticky neexistuje záruka, že daný objekt má nějaký typ a rozhraní až do chvíle, kdy se na to při běhu zeptáme nebo to rohraní zkusíme použít. Ve statických jazycích to až na výjimky takto být nemusí. Vždyť sis sám odpověděl: programovať bez typovej bezpečnosti je ako súložiť s prostitútkou bez kondómu.

Veď práve toto je polymorfizmus (mnohotvárnosť, objekty vzhľadom na okolnosti, menia svoj tvar). Aká degradácia typovej informácie? Tá typová informácia tam samozrejme stále je:

Kód: [Vybrat]
var list = new List<object>() { new Type1(), new Type2() };
Kód: [Vybrat]
if (list[0] is Type1) MessageBox.Show("list[0] je inštancia triedy typu: Type1");
alebo

Kód: [Vybrat]
MessageBox.Show("list[0] je inštancia triedy typu: " + list[0].ToString());
ak teda neviete čo je polymorfizmus tak si prejdite základy OOP!

Re: Porovnání C a Javy pro začátečníka
« Odpověď #44 kdy: 21. 01. 2011, 10:27:10 »
Jednou vetou: staticke a silne typovani nejsou to same.