Stránka 1 z 2

Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 17:55
od Rutherther
Ahoj, v květnu minulého roka jsem začal programovat a to v C#. U něj jsem zůstal asi do dnes, mnohé jsem se toho naučil a strašně mě to bavilo i baví.

Java

Asi v září jsem začal programovat v Javě. Hrál jsem minecraft a strašně jsem chtěl dělat pluginy, tak jsem se podíval na pár tutoriálů a Javu jsem se naučil. Později (asi v prosinci) jsem se začínal zabývat i deskropovými appkami v Javě. Tak jsem si udělal takovou menší hru. Tento jazyk mě také baví, jinak bych v něm asi neprogramoval. :D

Html, PHP, css, trochu js

Ke svátku jsem si přál knížky html okamžitě, css okamžitě, javascript okamžitě, php okamžitě. Asi o měsíc později jsem si je šel všechny pročíst, díky nim jsem se mnohé naučil, následně jsem se přiučil i něco na internetu. Vytvořil jsem například http://ffb.8u.cz. Tyto jazyky mě samozřejmě také baví až na js, o kterém do teď skoro nic nevím, protože jsem z něj nic nepotřeboval.

No a teď k otázce..

Mám začít programovat v C nebo C++? Jestli ne, tak proč mysłíte? A pokud ano, tak v jakém z nich a proč? Moc díky všem, vám, co jste to dočetli až sem a i za vaši odpověď.

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 18:10
od satik
Jaký k tomu máš důvod?
Smysl by to mělo, pokud by jsi chtěl naprogramovat vlastní OS, ovladače nebo chtěl začít dělat na nějakém projektu napsaném v C++ (i třeba jako práci), jinak všechno ostatní v C# napíšeš.

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 18:36
od Rutherther
Protože chci udělat menší hru a vůbec nevím, jak na to v c#. Zároveň jsou tyto jazyky rychlejší.

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 18:51
od faraon
http://forum.root.cz/index.php?topic=10482.msg118275#msg118275 píše:U nas v firme (banka) sa zbavujeme vsetkych aplikacii napisanych v C# (a inych jazykoch) a snazime sa ich nahradit Javou.

No, Java je sice z louže pod okap, ale furt lepší než proprietární vendor lock od redmondských vyděračů.

Céčko je určitě jednodušší (pouze deset příkazů a něco přes třicet klíčových slov), i když budeš mít asi hodně velké problémy s ukazateli a kouzlením s nimi. On je to sice základ většiny dnešních jazyků (i Javy a C#), ale od něj výš se dá jít mnohem snadněji než opačně, dolů k hardwaru... Zato tam někde v temných sklepeních zažiješ skutečné osvícení, až pochopíš jak počítače vlastně pracují.
V C++ se dělá spousta náročných věcí, je v něm naprogramovaná většina špičkových her a také Windows ;-)

Jestli ti tak záleží na rychlosti, pak věz že dobře napsaný program v Javě je rychlejší než špatně napsaný stejný program v C++. A také je možné napsat rychlejší program v C nebo C++, ale určitě napíšeš rychleji stejný program v Javě...

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 19:02
od Rutherther
Faraone moc díky :)

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 19:06
od faraon
Ještě jsem si vzpomněl na jednu hlášku z osmdesátých let:

"Kolik programovacích jazyků umíš, tolikrát jsi počítačem." :lol:

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 19:14
od satik
Psát hru v C# je podobné jako v C++, dokonce je to lehčí.

C++ je rychlejší jak na co, např. alokace paměti na haldě je rychlejší v C# než v C++ a jak už tu zaznělo, není až tak důležitá rychlost jazyka, ale jak je to napsané.
Taky je celkem důležitá věc, jak rychlý je v daném jazyku vývoj aplikací a tam je C# dnes už násobně dál než C++, spousta konstrukcí, co v C++ zabere 30 řádků se dá v C# napsat na dva řádky.

Typická rychlost C# je zhruba mezi 50-100% rychlosti C++, což tě ve hrách nijak neomezuje a není problém s jednoduchou dobře napsanou 3D hrou v C# dosahovat i třeba přes 1000 fps.
Pokud by jsi chtěl psát hry v C++, tak si k tomu najdi tým, protože sám jen tak nějakou hru nenapíšeš, klidně ti několik let zabere jen psaní enginu (pokud nevyužiješ nějakej existující).

Jinak samozřejmě znát, jak to funguje pod kapotou se hodí, ale není nutné se kvůli tomu učit C++ nebo assembler :)

Tady je pro ukázku jednoduchá 3D hra napsaná v C# : http://zvb.cz/den/

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 19:20
od Rutherther
Satiku, díky.

A jinak, malá hra je pro mě opravdu malá, byla by jen 2D a jen by se hýbal panáček, který by skákal přes překážky a tak.

Faraone: A kolik počítačů jsi ty? :D
Jak jsi psal o té rychlosti, tak jsem si myslel, že c++ je rychlejší, píšou to skoro všude.

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 19:44
od domitea
Masochista jako já ti doporučí ANSI C, resp. verzi céčka z 1989, ve které napsali docela dost věcí a tak nějaká hra ho vůbec nerozhodí :lol: A aby jsme šli s dobou, tak klidně objektově. Je to sice trochu odříkání, ale dá se to :D

Každopádně, abych už na to šel trochu vážněji, tak výběr mezi C a C++ mi přijde trochu irelevantní, protože C++ se počátcích říkalo "C with classes" a díky tomu se ty dva jazyky dokážou krásně doplňovat a spolupracovat. Céčko je navíc trošku jiného ražení, než zmiňované jazyky. Céčko není objektový jazyk, zatímco ty ostatní +- ano. To sebou přináší jistá úskalí, protože tam není luxus jako třídy, rozhraní a podobné habaďůry, které zpomalují :smile:

Když to zkrouhneme na C# nebo C++. Záleží na použití. Jsou věci, které v C# napíšeš rychleji, než C++. Nicméně taková vícenásobná dedičnost je v C# utrpení, protože ji neumí. Musíš si tedy udělat rozhraní (nebo abstraktní třídu) a to je neskutečný zabiják času...

A vzhledem k tomu, že chceš napsat jen skákačku, tak je to úplně fuk, co použiješ. Prostě použij, co máš rád. Já bych na to vzal třeba Processing, což je taková zjednodušená Java a 2D skákačka je takové skriptování na odpoledne :smile:

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 19:54
od faraon
C++ je každopádně rychlejší, a C ještě víc. Jenže nejvíc záleží na tom jak je to naprogramované. Už jsem slyšel o programech, psaných profesionály, které použitím vhodnějších datových struktur zrychlily v řádech desítek až stovek! Ostatně registr vozidel je dostatečně odstrašující a přímo učebnicový příklad špatného programu ;-)

Java a C# jsou interpretované jazyky, běžící ve virtuálním stroji (stejně jako kdysi dávno LISP nebo BASIC). Ty tam sice napíšeš dva řádky kódu, ale provede se jich několik stovek, jenom o tom nevíš. Podstatné je že ten virtuální stroj sleduje činnost programu, a optimalizuje ho za běhu, tak aby byl co nejrychlejší. Takže se může stát že program vykonávající stále stejnou činnost po pomalém rozběhu citelně zrychlí.

A k rychlosti tvorby znám jednu krásnou historku. Když kdysi dávno Steve Jobs s týmem navštívil Xerox, předvedli mu tam GUI obvládané myší. Byl jím naprosto uchvácený, ale nelíbilo se mu že posouvání v oknech je trhané, po krocích. Ptal se tedy jestli by to šlo upravit. Následně někdo z Xeroxu (nejsem si jistý jestli ne dokonce osobně Alan Kay) během necelé minuty vyhledal patřičné soubory, upravil je, a předvedl ohromenému Jobsovi plynulý posun, a to v době kdy IBM-PC ještě neexistoval ani na papíře. Ten jejich systém byl napsaný ve Smalltalku, což je také virtuální stroj, dokonce s vlastnostmi které žádný jiný nemá.

Na 2D hopsačku ti stačí klidně PureBasic, a můžeš si pro zajímavost zahrát předělávku Wolfensteinu 3D přímo v prohlížeči, napsanou (nebo spíš naklikanou!) v dětském Scratchi: http://scratch.mit.edu/projects/27272807/ Ani bych nevěřil že to jde, kdybych to neviděl. Scratch je založený na Squeaku, a ten vychází ze Smalltalku, je vlastně jeho svobodným nástupcem.

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 20:09
od Rutherther
Díky za tipy a za historky od Faraona :)

Vím, že bych si mohl stáhnout program, v něm 2000x kliknout a během dvaceti minut mám skákačku. Ale já chci zábavu na déle.. nevím, co jiného bych dělal, tak zkouším něco vymyslet.. Dnes kámoš ve škole nakreslil jen takovou místnost a chtěl animaci na plochu, tak jsem mu řekl, že by z toho šla udělat hra. No a tímto to vzniklo. Vím, že podle vás úplně odbočuji, ale já to myslím v tom smyslu, že mi tu nabízíte nejspíše nějaké zjednodušené programy.. takže by byla zase zábava na hodinku. Přitom, když to budu dělat v Javě, tak to bude třeba i o něco delší. Díky tomuhle jsem se zabýval tím c/c++, že by mi to tam mohlo trvat ještě déle a mohlo by to být o dost rychlejší.. Ale díky vám jsem zjistil, že je to prakticky jedno.

Re: Zacít s C nebo c++? Je to vůbec dobré rozhodnutí?

Napsal: 22 led 2015 20:28
od satik
domitea píše:Jsou věci, které v C# napíšeš rychleji, než C++. Nicméně taková vícenásobná dedičnost je v C# utrpení, protože ji neumí. Musíš si tedy udělat rozhraní (nebo abstraktní třídu) a to je neskutečný zabiják času...

Vícenásobná dědičnost v C# není cíleně, C# byl tak navržen. Daný problém se dá (a takový je záměr tvůrců C#) řešit komponentami - objekt má u sebe seznam komponent, z nichž jedna je typu kočka, druhá typu pes. A abstraktní třídy jsou v C++ taky :)
Jak už tu padlo, hlavní vliv na výkon nemá jazyk, ale jak je kód napsaný.

domitea píše:A vzhledem k tomu, že chceš napsat jen skákačku, tak je to úplně fuk, co použiješ.

Fuk to je co se týče výsledku, ale např. v C# načíst řádky textového souboru je jeden krátký příkaz

Kód: Vybrat vše

List<String> lines = File.ReadAllLines("soubor.txt");

Zkus si napsat kód se stejnou funkčností v C++, bude to nejspíš kolem 10 řádků, když se budeš hodně snažit, nacpeš to možná i do pěti :)
A to LINQ umožňuje ještě zajímavější věci napsat hodně krátce.
Navíc v C++ musíš řešit hlavičkové soubory, takže spoustu kódu vlastně píšeš dvakrát.
No a nebo to může taky psát v assembleru a třeba se vleze do 100 instrukcí :D

faraon píše:Java a C# jsou interpretované jazyky, běžící ve virtuálním stroji (stejně jako kdysi dávno LISP nebo BASIC). Ty tam sice napíšeš dva řádky kódu, ale provede se jich několik stovek, jenom o tom nevíš. Podstatné je že ten virtuální stroj sleduje činnost programu, a optimalizuje ho za běhu, tak aby byl co nejrychlejší. Takže se může stát že program vykonávající stále stejnou činnost po pomalém rozběhu citelně zrychlí.

Ale fuj, Java ani C# interpretované nejsou, Java tuším bývala v počátcích. Interpretované je třeba PHP, i když už tuším je taky možné ho zkompilovat.
C# je přeložené do bajtkódu (MSIL - něco jako assembler, ale ještě nezávislý na procesoru) a ten je pak na počítači, kde se kód spouští, přeložen normálně do strojového kódu přímo pro daný procesor (a optimalizován) - tudíž může mít i výhodu optimalizace pro konkrétní procesor, zatímco aplikace napsaná v C++ ne.