Učit se Javu nebo C++?

podlesh

Re:Učit se Javu nebo C++?
« Odpověď #30 kdy: 27. 06. 2013, 10:02:27 »
Nauč se nejprve C++, protože z C++ se dá na Javu zlenivět vždy bez problémů. Zato s přechodem z Javy na C++ mají lidi neskutečné problémy, protože pořádně nechápou pointery, nezajímá je práce s pamětí a bastlí neuvěřitelné zhůvěřilosti - např. už namísto atoi, scanf, printf raději na haldě vytvoří stringstream. Plus si z Javy do C++ přinesou množství návyků, které jsou v C++ vyloženě špatné.
Do značné míry to platí i opačně, pouze v Javě jsou dopady směšné ve srovnání s C++ (typicky: špatně udržovatelný kód vs. segmentation fault).
Osobně bych spíš doporučoval C, tam se skutečně člověk naučí co je to pointer. K tomu nějaký vyšší jazyk (třeba Python/perl/ruby) a tam se naučit že to jde i bez pointerů. A pak lze míchat kombinace :-)


Honza

Re:Učit se Javu nebo C++?
« Odpověď #31 kdy: 27. 06. 2013, 10:50:11 »
Nauč se obojí, ono se to hodí. Já to během své pracovní kariery střídám, 2x jsem dělal s JNI, tam je oboje najednou. Jinak Java/C++ záleží na programátorském stylu a na tom, co chceš psát. Hodně lidí tvrdí, že jeden nebo druhý jazyk je na XXX, ale to jsou většinou vymaštěnci nebo zaslepenci.

Re:Učit se Javu nebo C++?
« Odpověď #32 kdy: 27. 06. 2013, 15:08:49 »
Ahoj, za mě osobně C++. Ne, že bych měl něco proti Jave (vlastně mám, C# - kéžby takhle Java vypadala od začátku, bohužel se z ní stáva stále větší nenažranec systémových prostředků), ale C++ je natolik komplexní jazyk, že z něj přejdeš do jakéhokoliv jiného (kromě v jednom z příspěvků zmiňovaném Brainfucku :D ). Jinak, pokud půjdeš na další výšku, tak v prváku bych počítal se základy algoritmizace (na některých výškách se jde dodnes setkat s Pascalem), ty budou v C a C++, ve druháku už by se to mělo profilovat (bohužel z mé zkušenosti vím, že výška moc  vprogramování nedá - začneš Hello World a skončíš u práce s textem a soubory, možná dojde i na grafiku a myš, ale hlavně se musíš tomu věnovat sám, to se teď týká toho Céčka a C++).

K jednomu zdejšímu příspěvku: On sice možná ten MS ukradl koncept Javy a udělal z něj C#, ale dle mého názoru, je tady aspoň vidět, že i tak neoptimalizovaná věc, jakou Java je, se optimalizovat dá. Bohužel se někde vytratila multiplatformost (na Javu stačí snad jen prohlížeč).

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Učit se Javu nebo C++?
« Odpověď #33 kdy: 27. 06. 2013, 15:31:48 »
Nauč se nejprve C++, protože z C++ se dá na Javu zlenivět vždy bez problémů. Zato s přechodem z Javy na C++ mají lidi neskutečné problémy, protože pořádně nechápou pointery, nezajímá je práce s pamětí a bastlí neuvěřitelné zhůvěřilosti - např. už namísto atoi, scanf, printf raději na haldě vytvoří stringstream. Plus si z Javy do C++ přinesou množství návyků, které jsou v C++ vyloženě špatné.

Nemůžu si nerejpnout, že scanf a printf jsou v C++ neuvěřitelné zhůvěřilosti. Jsou to Cčkové funkce, ne C++. Chápu, ty dva jazyky k míchání svádí, ale mělo by se to dělat pouze v dobře odůvodněných případech (např. C wrapper kolem C++ kódu apod)

x86

Re:Učit se Javu nebo C++?
« Odpověď #34 kdy: 27. 06. 2013, 15:48:37 »
OK :) A souhlas i s Podleshem :)

Když jsem to psal, tak jsem si vzpomněl na člověka, který měl načíst dvě celá čísla z textu, např. "1 2\n". Tak to udělal ala Java tím, že nejprve alokoval paměť, kam zkopíroval řetězec, který už měl jednou v paměti. Pak na haldě vytvořil objekt vlastní třídy, String.split, jehože metoda mu vrátila dva nové řetězce "1" a "2". Ke každému z nich opět na haldě vytvořil stringstream, se kterým konečně udělal ss >> d;

Celé číslo pak konvertoval na řetězec vyvvořením stringstream na haldě, přes << zařídil konverzi, přes stringstream.str získal std::string a teprve potom přes .c_str() printf vypsal stdout. Tak jsem mu tenkrát ukázal právě zmíněné, rýpnutelné scanf a printf :)

Z části je to jeho neznalost dostupných knihoven a funkcí, z části je na tom vidět, jak kopíruje způsob práce Javy. Ale nejvíc zarážející na tom je, že ačkoliv byl považovaný za dobrého Java programátora, nic ho netrklo, že to dělá dost zbytečným a komplikovaným způsobem. V C/C++ by programátora snad otrávila už jenom četnost alokace paměti a hledal by, jestli se to nedá udělat jednodušeji.


Re:Učit se Javu nebo C++?
« Odpověď #35 kdy: 27. 06. 2013, 16:06:35 »
Nemůžu si nerejpnout, že scanf a printf jsou v C++ neuvěřitelné zhůvěřilosti. Jsou to Cčkové funkce, ne C++. Chápu, ty dva jazyky k míchání svádí, ale mělo by se to dělat pouze v dobře odůvodněných případech (např. C wrapper kolem C++ kódu apod)
A co teprve c/s/f-scanf a printf :D Úpřimně, na jednoduchý vstup a výstup cin a cout postačí, ale na formátovaný už ne (a taky si rýpnu - oba dva jak cin a cout sou oproti printf scanf pomalé).

to x86: Proč dělat něco jednoduše, když to jde v Javě :D Nedivím se, že je tak nenažraná.

DK

Re:Učit se Javu nebo C++?
« Odpověď #36 kdy: 27. 06. 2013, 16:17:49 »
x86: pokus o trolling? oznacovat tyhle prasarny za praktiky javy? :)
Withy14: je videt, ze javu neumite... pokud programator neni prase, tak jsou ty aplikace rychlejsi nez v c#, hlavne je to dano VM... bez optimalizace se neobejdete nikde :)

Re:Učit se Javu nebo C++?
« Odpověď #37 kdy: 27. 06. 2013, 16:26:33 »
x86: pokus o trolling? oznacovat tyhle prasarny za praktiky javy? :)
Withy14: je videt, ze javu neumite... pokud programator neni prase, tak jsou ty aplikace rychlejsi nez v c#, hlavne je to dano VM... bez optimalizace se neobejdete nikde :)
Javu možná neumím, ale rychlejší než C#? Nesetkal sem se s žadnou aplikaci Javy, která by mě o tom přesvědčila. Schválně mi najděte dvě stejné aplikace - jednu  v Javě a druhou v C#, které mě přesvědčí o opaku. A teď nemyslím jednoduché aplikace typu 1+1, tam těžko budu vidět rozdíly.

x86

Re:Učit se Javu nebo C++?
« Odpověď #38 kdy: 27. 06. 2013, 16:41:42 »
x86: pokus o trolling? oznacovat tyhle prasarny za praktiky javy? :)
Ne, prostě jsem jenom popsal, co jsem (nejednou) viděl - Java programátora snažícího se programovat v C++ způsobem, na který byl zvyklý z Javy. Prostě jenom příklad z praxe k prvnímu komentáři, který jsem v tomhle vlákně napsal.

cleb

Re:Učit se Javu nebo C++?
« Odpověď #39 kdy: 27. 06. 2013, 17:06:43 »
Jazyk je jen nástroj, vyberte si na učení ten, který vám vyhovuje a ve kterém vás bude bavit stále něco programovat.
Stejně nic použitelného ještě pár let nevytvoříte, tudíž zabývat se tím jak je který použitelný v praxi je zatím zbytečné - důležité je osvojit si principy programování.

Jinak dobře že čtete Pavla Herouta, také jsem ho kdysi četl a jeho učebnice mi ze začátku hodně daly.

Re:Učit se Javu nebo C++?
« Odpověď #40 kdy: 27. 06. 2013, 17:10:30 »
Ne, prostě jsem jenom popsal, co jsem (nejednou) viděl - Java programátora snažícího se programovat v C++ způsobem, na který byl zvyklý z Javy. Prostě jenom příklad z praxe k prvnímu komentáři, který jsem v tomhle vlákně napsal.
Jenom tak naokraj: a není to trochu taky tím, že C++ je prostě jazyk, který si hraje na OOP, ale člověk ho nemůže normálně jako OOP používat, aniž by nemyslel na miliony různých skrytých souvislostí? ( => byla to opravdu chyba toho programátora, že předpokládal, že C++ je sane OOP jazyk?)

Honťa

Re:Učit se Javu nebo C++?
« Odpověď #41 kdy: 27. 06. 2013, 17:34:19 »
Tak, že je Java rychlejší než C#, je tvrzení od člověka, který má o C# asi dost zkreslené představy. Ono taky záleží, jestli člověk člověk v C# používá pointry (to jsem si nevymyslel, pár let v tom programuju). V C# člověk totiž může používat garbage collection, který je tam "default", ale taky nemusí a může se přistupovat i přímo do paměti. CLR funguje jinak, než JVM. To je jeden z důvodů proč se v C# píšou i drivery.
S kolegy jsem prováděli nějaké testy C# x C++, na velkých množství dat a C# byl v některých momentech jen o málo pomalejší než C++.
Navíc dnes už není pravda, že C# je jen pro malé aplikace. Vyvíjel jsem pár rozsáhlých serverových systémů, které byly v C# (měly OS Win i Linux). Nemám nic proti Javě, každý jazyk se hodí k něčemu, ale mám hodně proti podobným unáhleným (možná trošku zaslepeným) tvrzením, které tu zazněly.

DK

Re:Učit se Javu nebo C++?
« Odpověď #42 kdy: 27. 06. 2013, 21:05:38 »
Honta: nikde netvrdim, ze C# se neda pouzit na velke aplikace... jinak by se nepouzivalo :) s CLR moc zkusenosti nemam, nicmene JVM se da vyborne skalovat
hlavne ono ani neni pravda, ze je java vzdy rychlejsi nez c#... v necem je c# rychlejsi, ale z mych zkusenosti (a nejenom mych), je java obecne rychlejsi (ale rikam, zalezi na aplikaci, programatorova a optimalizacich jvm)... tvrdit, ze java je vzdy rychlejsi nez c# je stejna blbost, jako napsal Withy14
no a o monu ani nediskutuju, to je na linuxu paskvil... je treba na nem jeste zapracovat, aby se c# mohlo nazyvat multiplatformnim jazykem

x86: na takoveho programatora narazit v praci, tak ho hnedka vyrazim... nejenom proto, ze neznam snad zadneho javistu, ktery by programoval tak prasacky

Withy14: a nejakou takova existuje? proc by nekdo delal velkou aplikaci dvakrat v ruznych jazycich? podivejte se na benchmarky z implementaci "jednoduchych aplikaci", ktere jsou urcene prave pro toto... no a jak muzete hodnotit javovske aplikace a tvrdit, ze java je blba, pomala, ze c# je rychlejsi, kdyz javu neumite? navic, ja vas o nicem presvedcovat nehodlam... svuj nazor mate, zaryte se ho budete drzet, i kdybych predvedl solidni argumenty

heh

Re:Učit se Javu nebo C++?
« Odpověď #43 kdy: 27. 06. 2013, 22:37:52 »
CLR funguje jinak, než JVM. To je jeden z důvodů proč se v C# píšou i drivery.

V C# drivery ?!

Pokud se bavime o kernel-modu, tak je to zcela vylouceno.
Pokud se bavime o user-modu, tak jedine s nejakym dalsim frameworkem, cimz tak nejak postradam, proc to tu vlastne zminujes.

gamer

Re:Učit se Javu nebo C++?
« Odpověď #44 kdy: 27. 06. 2013, 22:39:39 »
namísto atoi, scanf, printf raději na haldě vytvoří stringstream

printf a spol. narozdíl od streamů nemá žádnou typovou kontrolu a dá se s tím užít spousta legrace:
Kód: [Vybrat]
    int a = 0, b = 1;
    printf("%i\n%i\n", a, b);

Upíšu se a místo \n napíšu %n:
    printf("%i%n%i%n", a, b);
Neoprávněný přístup do paměti (SIGSEGV)