Ono také velice záleží na přístupu. Já když jsem byl v 9. třídě tak jsem se zapsal do kroužku programování a pořídil jsem si knihu Jazyk C od Dalibora Kačmáře a tu jsem měl celou přečtenou asi za tři dny a pochopil jsem tak 70% toho co tam bylo (u těch stromů jsem se trochu zasekal), pak jsem ji asi měsíc každý den četl znovu a znovu a dělal si příklady co tam byly v Borland C++ takové to dosové IDE s modrou obrazovkou. Pak se mi podařilo rozjet grafiku, z toho jsem měl tehdy velkou radost protože jsem nevěděl že knihovnu je třeba zatrhnou někde v IDE tak jsem si kvůli tomu vytvořil .bat soubor který to kompiloval s potřebný parametrem (takže jsem se vlastně vytvořil jakýsi makefile, ale to jsem tehdy nevěděl že se tomu tak říká). No a pak hrátky s grafikou a pokus o vymyšlení způsobu jak zobrazit 3D objekt, ale na to už jsem sám nepřišel a muselo to počkat až do doby kdy se mi dostaly do rukou dokumenty o tom jak to naprogramovat, vzorec co jsem tehdy objevil ale umožňoval otáčení hmotného bodu kolem kružnice, a to mi trvalo tři dny přemýšlení než jsem z učebnice s přehledem učiva pro ZŠ a SŠ vymyslel x=r*cos(2*pi*t) a y=r*sin(2*pi*t) a pak po malých to krocích foroval t od 0.0 do 1.0 a po obrazovce obíhal zelený bod kolem červeného středu. A někdy v té době se zbytek třídy dostal právě k cyklům...
Ve své mladické nerozvážnosti jsem byl extremista, a věřil že kód je můj, pokud vznikl mým ťuknutím do klávesnice. A proto pokud jsem chtěl použít cizí kód, tak místo copy-paste jsem ho ručně přepisoval, abych si ho "přivlastnil". Našel se tam kód jednoho týpka který už na tý škole nebyl a v něm byly classy a to jsem taky ručně přepsal aniž bych to plně chápal, a teprve při tom přepisování mi trochu doklaplo, jak to funguje. Tak jsem začal používat classy na členění kódu, hlavní program jsem ale psal vždy do mainu či funkcí a classy používal jen jako pomocné objekty. Dědičnost jsem neřešil, přistupoval jsem k tomu jen jako k lepší struktuře.
Pochopit základy pointerů není naprosto problém, v porovnání s takovými ADT je to brnkačka. Akorát se to musí dobře vysvětlit. To je tak těžké říct že pamět je v podstatě jedno obrovské pole bajtů(...) číslovaných od nula do něco (dnes obvykle 4 miliardy), a pointer je vlastně proměnná ve které je uložen index(číslo) do toho pole bajtů (unsigned char) na místo kde je "něco" uložené, a když se před něj dá hvězdička pak teprve získáme to "něco", s tím že pokud to "něco" má více jak jeden bajt tak se načtou i nějaké další za ním, přesně sizeof(něco)? Každý kdo pochopil co je to pole, tak nutně musí pochopit i pointery, zbytek už je pouze problém pochopení syntaxe, a zde nehraje roli ani tak rozum jako spíš talent na jazyky. Největší chybou při vysvětlování je říct, že pointer "ukazuje na něco" a udělat z něj něco "magického". Dereferovat pointer tedy znamená získat obsah paměti na místě v tom jednom velkém poli jménem pamět na indexu který je v tom pointeru uložen, a dvojitá derefernce pak vezme opět to číslo co se takto získalo a znovu ho použije stejným způsobem a teprve pak se získá to, co tam opravdu je. Opět nic nepochopitelného.
Vůbec kdybych byl učitel a vyučoval C/C++, tak bych alespoň nějaké zjednodušující abstarkce systému na kterém celý program běží zavedl, aby se mohly použít k vysvětlování. Takže třeba pamět je v podstatě velké pole čísel indexovaných od nuly do 4 miliard, ale je jakýmsi způsobem chráněná takže si nemůžeme zapisovat kam chceme jinak program spadne. Ale když deklarujeme proměnnou tak tím počítači mimojiné říkáme, aby nám vyčlenil nějaké místo kam nám povolí ty data zapsat. Každý program má nějaký zásobník, tam se při deklaraci nějaké proměnné bere místo, ze druhé strany roste jakási halda. Proměnné na zásobníku jdou obvykle v paměti po sobě, takže i přes to že je pamět chráněná se nám může povést přepsat si pomocí pointeru něchtěně data. Také to že počítač nemusí mít ty 4GB paměti nevadí, prostě se tváří že je má dokud pamět nedojde a většinou nic stejně tolik paměti nechce. Každý program má jakoby svojich celých 4GB.
V takovém pythonu programátor nejspíše jakousi abstrakci paměti vůbec nepotřebuje znát, protože to jazyk řeší za něj, ale pro pochopení C/C++ je nějaká abstrakce paměti klíčová. Učení se C++ tedy klade větší nároky jak na žáka, tak na učitele, to je bez debat.