C++ könyv ajánlása ügyes középiskolásnak

 ( horvatha | 2015. augusztus 16., vasárnap - 16:10 )

16 éves fiamnak elég jó agya van a programozáshoz. Eddig Logo-ban és C#-ban tanult programozni a suliban. Írt már saját játékprogramot, a tanulmányi versenyfeladatokban is ügyes, de szeretne valami komolyat megtanulni. Sajnos, én csak C-ben és Pythonban tudok jól (meg C64 Basic és assemblyben :-) ), de úgy látjuk (és a tanulmányi versenyekhez is ez kell), hogy át kellene állni a C++-ra.

Helpek, net-olvasás, stb. alapján is haladgat, valamennyit én is tudok segíteni a C alapján, de egy rendes, módszeres C++ könyv kellene, ami nem a programozás alapkoncepcióival húzza az időt (Mi az a változó? stb.), hanem egy kicsit jártasnak ad módszeres bevezetést.

Milyen könyvet ajánlanátok? Ha lehet, magyarul, de angol sem kizárt.

(Ha számít: Linux, CodeBlocks-ot használ.)

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Bjarne Stroustrup - The C++ Programming Language (4th Edition)

Ha már Stroustrup dolgozta ki a C++-t akkor csak tudja mit ír. :D

A negyedik kiadásban benne van a C++11. A C++14-t még nem tartalmazza, de ez persze kezdés szempontjából lényegtelen.

Nagyon jó könyv, én csak ajánlani tudom. (Ha jól emlékszem talán magyarul is megjelent, de nem biztos.)

+1, illetve ha már pontosan ismeri a nyelvet és szeretné jobban megérteni, hogy melyik szerkezet mire alkalmas és miket lehet építeni belőlük, akkor Design Patterns.
Ezen felül nekem személyes kedvencem a Thinking in C++ 2. kötete

"Design Patterns."

Ezzel szerintem meg varjon 3-4 evet.

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
--> YouTube csatornám

"Bjarne Stroustrup - The C++ Programming Language (4th Edition)"

En kezdonek semmikepp sem ajanlanam.

"Ha már Stroustrup dolgozta ki a C++-t akkor csak tudja mit ír. :D"

Eletem egyik legszarabb szakkonyve egy ruby-rol szolo konyv volt, aminek a nyelv atyja is tarsszerzoje volt. Attol, hogy egy veszett jo informatikus, meg nem biztos, hogy egy temat tomoren, hatekonyan es emesztheto stilusban be tud mutatni.

Kerdezo: nem vagyok kepben a legfrissebb C++ szakirodalommal, csak annyit javasolnek, hogy mindenkeppen angol nyelvu konyvet kapjon a kolok, kesobb legalabb annyira hasznos lesz szamara az angol nyelvtudas, mint minden egyeb infos ismerete!

----------------------
"ONE OF THESE DAYS I'M GOING TO CUT YOU INTO LITTLE PIECES!!!$E$%#$#%^*^"
--> YouTube csatornám

Igen, ebben van némi igazság. A C++ könyv eléggé nehezen emészthető. Némi (sok?) tapasztalat után, illetve amikor a nyelvvel _nagyon alaposan_ akar az ember megismerkedni, akkor ez a to-go olvasmány, de tény, hogy eléggé akadémiai a stílusa. Jó, pár év Juhász Pici (UNIDEB) után tud ez nosztalgikus is lenni, de nem mindenki ugyanígy szocializálódott :)

Koenig, Moo: Accelerated C++. Az benne a jó, hogy tényleg objektum-orientált programozásról szól, nagyon sokat használja STL-t, és nem C++-ban irat veled FORTRAN-programot. A másik előnye, hogy nem egy száraz, hosszú referenciakönyv, hanem egy rövid kis könyvecske, aminek a 20-dik oldala után már működő kódot írsz.

Ne erőltesd rá a C++-t. Végtelen flame war is fölösleges, hogy helyette mit erőltess rá (vagy ha nagyon, akkor nézelődj a programozó munkaerőpiacon). Inkább ne erőltess rá semmi nyelvet, mert nem az számít.

Inkább küldd fel a Codewars-ra vagy a Project Euler-re vagy a TopCoder-re. Ezekben pont mindegy a nyelv, ezek a programozás igazi ízét ismertetik meg vele, és folyamatos sikerélmény jár a megoldott feladatok mellé.

--

Részben +1

Azért lásson egyszer cpp-t, különben sosem tudja eldönteni, hogy álljon hozzá. (szeresse, ne szeresse)

Mifelénk, egyetemen a cplusplus.com+on a tutorialt, s a Levendovszky felé cpp könyvet szokták ajánlani. Utóbbit ismerem, szerintem nem vészes.

Részben +1 a második gondolatra. Én pl. személy szerint nagyon szeretem az Euler-t, de az is pont az része a programozásnak, amit inkább programozó matematikusoknak (értsd: matematikus, aki programozik, és nem a főiskolai szak) ajánlanék :) ettől eltekintve nagyon jó cucc. A többi is.

Tiszteletem Tanár Úr!

Én ezt a könyvet javaslom. Minden benne van, amit első nekifutásra tudni érdemes a nyelvről, nagyon alapos, jól struktúrált, jól érthető. (Igaz angol, de egyszerű a nyelvezete)
A Stroustrup féle könyvet nem javaslom, az inkább egy referencia a nyelvről, mintsem hogy tankönyv.

Nem vagyok pedagogus es altalaban nincs jo erzekem magyarazni, szoval lehet, hogy total mellelovok.

En minding Scott Meyers Effective C++ konyvet szoktam ajanlani (kezdoknek is). Annyi problemaja megvan a dolognak, hogy nem tutorial es nem pepecsel az alapokkal. De ha a srac tenyleg erti mondjuk a C# alapjait (tehat az osztalyfogalom, az oroklodes es a dynamic dispatch mar megy), akkor meg lehet probalni. Nem ilyesztoen hosszu (asszem valami 150 oldal), de nagyon jol magyarazza el erthetoen a C++ fontos koncepcioit es buktatoit. Sajnos jo tutorialt C++-hoz nem nagyon ismerek. A Bruce Eckel fele C++ konyv all talan a legokesabb, de valami elkepesztoen hosszu (700-800 oldal). Tippre egyebkent erdemes inkabb ramenni a trendi C++ eloadok konyveire (+ youtube/channel9 eloadasaira is alkamasint !!!):
- Scott Meyers (Effective C++, More Effective C++, Effective STL, Effective Modern C++)
- Herb Sutter (Exceptional C++, More Exceptional C++, Exceptional C++ Style, C++ Coding Standards)
- Andrei Alexandrescu (Modern C++ Design)

Nagyjabol ez lehet a bonyolultsagi sorrend is, szerintem az Alexandrescu konyv valamikor az egyetemi evek vegen, vagy az utan esedekes ... ;). Viszont van a dolognak elonye is: ezek a konyvek nem referenciak es nem tutorialok, gyakorlo programozoknak szolnak es keves bennuk a redundancia, jol kiegeszitik egymast. Nem magyarazgatjak a 'valtozo' fogalmat. Es egyik sem tul szoszatyar, pl. Scott Meyers konyvei osszesitve rovidebbek, mint mondjuk a Stroustroup-konyv, tanulni viszont tobbszor annyit lehet beloluk. Egy korabbi hasonlo kerdesnel en azt ajanlottam, hogy ezekkel a konyvekkel erdemes probalkozni es kozben ha referenciara vagyunk, akkor elballagni a cppreference.com-ra, ahol erthetoen el lehet olvasni "torveny betujet" ;) ....

Es itt jon a nagy DE. Ha neked csak C-s hattered van, akkor nem ajanlanam a C++-t (mondom ugy, hogy nekem pl. a kedvencem). Bar a szintaxis hasonlo, a koncepciok es a good practice jelentosen kulonbozik. Es sajnos a C++ szerintem eleg nehez az egyedul tanulashoz, keves sikerelmenyt ad az elejen. En azt valasztanam, amiben tudok segiteni a gyereknek, ha van felmerulo kerdes/roadblocker. Sokkal tobbet er ez a segitseg, mint kezebe nyomni egy 700 oldalas angol konyvet, amit te sem ismersz tulzottan.

Amit nem ertek, az az, hogyha egyszer C#-al jol boldogul a srac, akkor miert nem azzal foglalkozik kicsit tobbet. Ketlem, hogy nem lenne mit tanulni es hidd el a C# is "komoly" tud lenni. A megoldando problemak teszik a programozast nehezze. Nyilvan vannak allatorvosi lovak, de neha azert meglepodom, hogy miket oldottak meg annyira lenezett nyelvekkel, mint a JavaScript vagy a PHP.

Ha a tanulmanyi verseny C++-ban van, akkor persze nincs mit csinalni, de legjobb tudomasom szerint a C++ sehol sem kizarolagos megkotes. Java, Pascal, C/C++, C#, (Python???) mindenhol lehetseges, nem?

+1 bár az Effective Modern C++ lehet kicsit túllő a célon :-)

Én ezt ajánlom: http://www.learncpp.com/
Teljesen nulláról indul, kezdőknek is jó és az egyik legjobb tutorial amiről tudok.

Köszönöm a tippeket. Megnézegetem őket.

A C++-t nem én erőltetem: a középiskolai tanulmányi versenyek egy részén ez kötelező. (Más részén még lehetne Pascal vagy C# is, de ezek közül is egyértelműen a C++ a nyerő.) A versenyek meg jó motivációt jelentenek a tanulásra.

(Egyébként valamennyire én magam is tudok C++-ban, mert tanulgattam és egyszerű példaprogramokat írtam is benne, de komoly feladatra nem használtam, ezért nem vagyok belőle tanításra képes.)

Mondjuk egyszeru eldonteni a dolgot: fogod az Effective C++-t es elolvasod az elso fejezetet. Ha ugy erzed, hogy neked ez a dolog nem uj, akkor nincs problema, ha sorra jonnek a relevaciok, akkor nyilvan nem te fogsz magyarazni.

Szerintem a *minimum* alapfogalmak a c++ bevezeteshez:
- osztalyfogalom, alapveto oroklodes
- konstruktorok/destruktorok/virtualis destruktorok/inicializalo listak *pontos* mukodese (pl. tudod, hogy viselkednek a konstruktorok/destruktorok kivetelek eseten? es miert ugy?)
- memoriafoglalas (stack-based/heap based), new/delete *pontos* mukodese (new vs. malloc, delete vs. free)
- masolas/ertekadas/konverzio mukodese (default masolas es ertekadas viselkedese), mit kell tudnia a masolo konstruktornak egy konverzios konstruktornak es egy ertekado operatornak?

Ez a minimum szerintem, ami mondjuk szvsz kell, hogy a programod ne csak algoritmikusan legyen helyes, hanem mondjuk az eroforrasokat is korrekten kezelje. (Es hat mino veletlen errol szol a Scott Meyers konyv elso fejezete, es mino veletlen legtobb tutorial de meg szerintem a Stroustroup konyv sem igazan jol taglalja ezeket a temakat).

Aztan utana jon sok-sok apro/nem-apro dolog, amit meg kell tanulni, de azok mondhatjuk ugy, hogy opcionalisak. Ha akarod hasznalod, ha akarod nem. Lepesrol-lepesre lehet haladni.
- tobbszoros oroklodes, virtualis oroklodes, absztrakt osztalyok
- operator overloading
- implicit/explicit konverziok
- STL (kontenerek, iteratorok, algoritmusok)
- template-ek (generikus tarolok, template fuggvenyek, template specializacio)
- kivetelkezeles
- nevterek, scope-ok, lathatosag, Koenig lookup
- tarolasi osztalyok, etc. etc.
- memoria management (placement new, allokatorok)

Ha valaki ezen is tul van, na kb. akkor tudja azt mondani, hogy mar produktiv is c++-ban, nem csak latta messzirol. Es akkor meg nem beszeltunk a C++11 ujitasokrol, ugy latom, hogy manapsag mar sokan foglalkoznak ezzel is
- variadic template
- smart pointerek
- metaprogramozas
- lambda-k
- rvalue referenciak es move support
- ...

Meg annyi jutott eszembe, hogy a Meyers konyvet a Kiskapu anno kiadta magyarul Hatekony C++ neven. Lehet, hogy ez kicsit konnyit a dolgokon.

Elég szomorú, ha versenyen erőltetik... Hát akkor tanuljon meg egy alap STL-t az adatstruktúrák miatt, de egyébként továbbra is azt mondom, hogy maradjon nyitott, és tolja az online versenyeket, amik jellemzően nyelvfüggetlenek.

--

Ha a kozepiskolai tanulmanyi versenyen valo jo szereples a cel, akkor persze, tanuljon C++-t a gyermek.

Ha viszont tenylegesen a programozas erdekli (es esetleg a matek), akkor sokkal fontosabb alapveto dolgokkal kellene foglalkoznia: pl. rekurziv algoritmusokkal (algoritmusokkal ugy altalaban), valamilyen lambda-kalkulussal (= egyszerubb funkcionalis nyelvvel, ahol megtanulhatja, mi tortenik, ha nincsenek valtozok (bar ez a Logobol ismeros lehet), mi az a closure, mi az a first class function es mire jo es hogyan kell hasznalni stb)). Mik azok a tipusok, statikus/dinamikus tipusossag stb. Persze tudom, egy kozepiskolasnak ez meg sok lehet, de nyilvan van olyan reszhalmaza a fentieknek, ami alapszinten is tanithato. Es ezekre a C++ nem a legalkalmasabb nyelv (majdhogynem a legalkalmatlanabb), erdemes korulnezni es tobbfele nyelvvel is megismerkedni. Hosszu tavon ez a kifizetodo strategia szerintem.

És algoritmusokat miből érdemes tanulni?

Sokan útálják, ezért lehet, hogy viccnek szántad. Amúgy van értelme, azon kevés tárgyak egyike, aminek a való életben hasznát vettem. Elég nagy átfedést mutat egy Google SWE interjú anyagával.

--

+1
a BSZ mellett az egyik leghasznosább tárgy a BME-n. kicsit sajnálom, hogy nem Friedl tartotta nekünk...

Igen, BME-re jártam, egyébként aki tanította nagyon jó tanár volt, és ráadásul videókat is találtam:

http://bme.videotorium.hu/hu/recordings/details/9503,Algoritmuselmelet_-_6._eloadas

Friedl Katalin előadásai, s gyakorlatai vannak felvéve. Néhány előadás viszont nincs (s igencsak fontos helyről hiányzik), akinek feltűnik, ne keresse.

Évek óta Katona Y. Gyula tartja az infósoknak - szegénynek sokkal rosszabb előadói stílusa van, bármennyire is jó matematikus.

OP: BTW, ha pestiek vagytok, Nagy Gergelyék (NGG) szoktak ACM felkészítőt tartani a BME-n péntekenként. Jófejek, szívesen magyaráznak, többnyire közösen gondolkozás megy: https://cs.bme.hu/acm
Ha érdekli a fiadat, szerintem érdemes elnéznie egyre-kettőre, sok matekot felszedhet...
--
blogom

Katona Gyula Ypszilon
Az Y. a Gyula utan van (pont ezert vette fel, mert zavarta, hogy kulfoldiek K.G.-kent roviditik Gy helyett).
A linkelt eloadason pedig Csima Judit az eloado, nem Friedl (az oldalon is irja).

--
The Bible is the longest set of Terms & Conditions ever.
So many people agree with it without knowing why.

mybad
a videót nem néztem most meg, flash.
de az infós algelt Friedllel vették fel, ebben viszont biztos vagyok.
a többiektől távolról is elnézést.
--
blogom

Gráfelméleti problémák többször is előkerültek munka során (mondjuk max egy kezemen meg tudom számolni, hányszor) mindenesetre akkor nagyon hasznos volt,
a kollégák meg csak pislogtak :D

A kollégák pislogása nekem is ismerős, de már nem :). Érdekes belegondolni, hogy bizonyos területeken mennyire nincs szükség ilyen tudásra.

--

Ezzel abszolute egyetértek, a 10 év alatt szerintem ha egy tucatszor kellett ilyen szintű dolgokkal foglalkoznom. Viszont akkor baromira jól jött.

"max egy kezemen meg tudom számolni, hányszor"
"10 év alatt szerintem ha egy tucatszor"

Érdekes kezed lehet :) (vagy nem triviális kódolást használsz)

a múlt héten megint előjött a gráfelmélet, most egy kicsit komolyabb formában, úgy látszik, csak nem tudjuk megúszni :D

Ez biztosan jo (nem ismerem, en ELTEs voltam :)), de ha mar egyetemi anyag, akkor miert ernenk be kevesebbel, mint a top. Robert Sedgewick a Princetonrol (lasd: Algoritmusok konyv) csinalt egy ketreszes algoritmusokrol szolo kurzust a Courseran: https://www.coursera.org/instructor/~211
Ha valami, akkor EZ alap.

Masreszt viszont ez nem gimnazista szint. Bar kivancsi lennek, egy erdeklodo, jo kepessegu kozepiskolas mennyit tud feldolgozni ebbol az anyagbol...

Oszinten szolva nem tudom, kozepiskolahoz mit lehetne ajanlani, csak morzsakat tudok, peldaul a Little Schemer / Seasoned Schemer szerintem meg belefer es egesz jo, de ez meg edeskeves. En is varom a tippeket :)

subs

Lehet kilógok a sorból a véleményemmel, de én a C++ alapjait ebből a könyvből tanultam: Visual C++ mesteri szinten.
Igaz, hogy a címében Visual C++ szerepel, de ebben az első kötetben van egy kb. 150 oldalas rész, ami egy az egyben bevezet a C++-ba. Osztályok, öröklődés, virtual függvények.

A linken kereszül elérhető a tartalomjegyzék. Az alapján szerintem el tudod dönteni, hogy erre a tematikára gondoltál-e?
Standard Template Library és a többi huncutság nincs benne. Kezdő könyvnek ideális.

Máté

Alex Allain - Jumping into C++
a cprogramming.com illetve cplusplus.com-ot üzemeltető srác írta, ahogy néztem, teljesen korrekt mű, és modern a stílusa.