C++ - co všechno se naučit?

Lucas

C++ - co všechno se naučit?
« kdy: 14. 07. 2014, 09:06:50 »
Zdravím. Potřeboval bych radu ohledně C++. Několik let programuju ve vysokoúrovňových jazycích, takže jazyk samotný mi tak těžký nepřipadá, většinu toho znám už odjinud. Ale jak narážím na poměrně velké rozdíly mezi jednotlivými standardy, tak jsem pořád víc na vážkách, co všechno se mám vlastně naučit. Absence jinde základních věcí ve starších verzích (např. možnost standardním způsobem převést řetězec na číslo, možnost jednoduše zjistit počet prvků pole, atd) jsou pro mě tak trochu kulturní šok, ale zase nic, s čím bych se nesrovnal. Je mi jasné, že v cizích kódech si jenom s nejnovějšími vychytávkami nevystačím, ale zase bych se nechtěl zbytečně učit úplně prehistorické postupy. Takže otázka zní - jak daleko do minulosti bych se měl dívat při učení C++?


JSH

Re:C++ - co všechno se naučit?
« Odpověď #1 kdy: 14. 07. 2014, 10:03:58 »
C++ si prostě táhne historický balast.

Doporučuju se soustředit na nové věci. Nové normy hlavně přidávají nové a elegantnější postupy. I nepovedených věcí se zbavuje dost blbě. Jak narazíš na něco starého, tak si to najdeš. Ale většinou to nebude nic neznámého. Jen místo knihovních věci tam něco bude napsané ručně.

Lucas

Re:C++ - co všechno se naučit?
« Odpověď #2 kdy: 14. 07. 2014, 10:32:11 »
Jo, to mi taky připadá jako rozumná cesta. Do začátku se budu učit jenom nové postupy a když narazím na nějakou haluz, tak si prostě doplním znalosti. Takhle nějak jsem to měl v plánu, ale potřeboval jsem vědět od někoho zkušenějšího, jestli to stačí. Díky za radu.

fail

Re:C++ - co všechno se naučit?
« Odpověď #3 kdy: 14. 07. 2014, 10:58:40 »
bude hur. naplanovana je dalsi standardizace.
https://isocpp.org/std/status

JSH

Re:C++ - co všechno se naučit?
« Odpověď #4 kdy: 14. 07. 2014, 13:52:25 »
bude hur. naplanovana je dalsi standardizace.
https://isocpp.org/std/status
Co tak sleduju, tak to nevypadá až tak šíleně. Hlavně tam bude spousta knihovních věcí.


Honza

Re:C++ - co všechno se naučit?
« Odpověď #5 kdy: 14. 07. 2014, 14:39:41 »
Na Vaši otázku není univerzální odpověď. Záleží na tom, co chcete s C++ dělat, jaký bude Váš překladač, kdo budou Vaši kolegové, jaký je Váš styl programování. Pokud se Vám la Vašim kolegům líbí C a jen to chcete trochu naskládat do tříd a občas využít dědičnost a pár dalších drobností, chcete maximální přenositelnost, líbí se Vám jednoduchý kód atd. atd., bude rada zcela opačná než v případě, že musíte mít vše nejnovější, děsně se Vám líbí šablony, přetězování operátorů a vrhání výjimek z destruktoru, jste frikulín, rád ukazujete začátečníkům, jak jsou blbí, free a malloc (nebo i delete a new) považujete za sprostá slova, máte jednu konkrétní verzi nového překladače a kompatibilita Vás vůbec nezajímá, v čistém C byste nenapsal ani hello world atd. atd.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:C++ - co všechno se naučit?
« Odpověď #6 kdy: 14. 07. 2014, 14:56:48 »
Nedávno jsem implementoval ne zcela triviální kompresní algoritmus v C++. Obrovský rozdíl je mezi C++11 a staršími standardy. Pokud máte jako já výhodu v tom, že si můžete zvolit novou normu, tak zcela určitě je to dobrá cesta - více to připomíná vysokoúrovňový jazyk.

Pokud tu možnost nemáte a jdete na nějaký stávající projekt, je třeba se naučit starší věci. Existuje celkem dost knih - stačí probrat amazon a podívat se na míru prodávanosti a recenze čtenářů. Každému sedí něco jiného a ve Vašem příspěvku je málo informací na konkrétní radu.

Lucas

Re:C++ - co všechno se naučit?
« Odpověď #7 kdy: 14. 07. 2014, 15:34:24 »
Citace
Na Vaši otázku není univerzální odpověď. Záleží na tom, co chcete s C++ dělat...

C++ se učím čistě pro osobní potřebu, s týmem to momentálně nemá nic společného, jedeme čistě dynamické jazyky(Python, Ruby, JS, ...). Jsou to všechno fajn jazyky, píše v nich úžasně, ale je to dost na úkor výkonu. Občas prostě potřebuju napsat něco, co pojede opravdu RYCHLE a mělo by to být pokud možno použitelné na libovolné platformě. Všechny ty třídy, lambdy, generátory a další už mám až moc zadřené pod kůží, takže čisté C mě nějak neoslovuje, C++ je mi podstatně sympatičtější. No a do budoucna se to bude hodit i pro vývoj webových aplikací, s neustále zvyšující se komplexností aplikací to bude velká konkurenční výhoda(ne-li nutnost). Takže podle všeho pro mě bude opravdu lepší držet se primárně novinek a "oldschool" až podle potřeby.

Honza

Re:C++ - co všechno se naučit?
« Odpověď #8 kdy: 14. 07. 2014, 16:05:35 »
Vám bych doporučil co nejvíc hardcore C++ a co nejnovější standard, ovšem s omezením na podmínku

mělo by to být pokud možno použitelné na libovolné platformě.

a počítal bych s tím, že čím víc exotická platforma (já jsem třeba před 5 lety dělal navigace do aut a překládalo se to nějakou starší verzí microsoftího c++ pro hardware, pokud ale třeba děláte web servery, tak jste celkem v pohodě), tím víc můžete čekat problémů.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:C++ - co všechno se naučit?
« Odpověď #9 kdy: 14. 07. 2014, 16:35:42 »
V tomto případě je dobré držet se novějších standardů. Dále knihovna Boost má pár dobrých věcí - některé již ve standardu jsou, některé ještě ne a některé nikdy nebudou. Příklad takové, která pravděpodobně nikdy nebude, je spolupráce s Pythonem. Zatím obecně platí, že cokoliv co je potřeba volat odjinud, ne z C++, je potřeba obalit Cčkovým rozhraním*, viz např.

http://blog.eikke.com/index.php/ikke/2005/11/03/using_c_classes_in_c.html

Boost.Python toto dokáže řešit (minimálně ve většině případů).

*Je to z důvodu nekompatibilních ABI (application binary interface) mezi různými C++ kompilátory - knihovnu zkompilovanou v jednom obecně nelze použít z programu zkompilovaného jiným. U Cčka je to vyřešené - je jedno, kterým C kompilátorem se zkompiluje knihovna, použít se dá i z programu zkompilovaného jiným (při dodržení platformy).

Lucas

Re:C++ - co všechno se naučit?
« Odpověď #10 kdy: 14. 07. 2014, 16:54:18 »
Díky všem za rady, jdu se na to zase vrhnout :-)