Za jak dlouho se naučím C++?

Za jak dlouho se naučím C++?
« kdy: 12. 06. 2019, 03:00:22 »
Ahoj ahoj,

jsem čerstvý učenec jazyka c++ a veru, baví mě to. Lepší, než kuchař-číšník ... nebo ne?:)

Mám na Vaše zkušené programátorské mozky jistý dotaz za který mě určitě sežerete, ale chci být v obraze!

K meritu věci:

Za jak dlouho je člověk schopný se naučit programovat, je-li šikovný a učí se každým den. Např. Já se učím druhý týden z e-knihy:"Programování c++ bez předchozích znalostí" a prošel jsem 8 kapitol, čili 120 stran cca. Obsah jsem pochopil a psaní jazyka mě baví. Nedokážu ovšem zatím napsat nějakou jedinečnou myšlenku, čemuž se po 2 týdnech nedivím.

Děkuji za orientační odpovědi a skvělé tipy do začátků!!

P.S.: Mám na mysli, za jak dlouho je člověk schopný naučit se takovou úroveň, díky které si začne vydělávat!
« Poslední změna: 12. 06. 2019, 06:07:08 od Petr Krčmář »


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Dotaz ohledně programování c++
« Odpověď #1 kdy: 12. 06. 2019, 04:00:17 »
Mám na mysli, za jak dlouho je člověk schopný naučit se takovou úroveň, díky které si začne vydělávat!
Znám lidi, co začali vydělávat po měsíci, ale je třeba být realista, půl roku je minimum. Záleží na předchozích znalostech (jiných jazyků).

Re:Za jak dlouho se naučím C++?
« Odpověď #2 kdy: 12. 06. 2019, 07:03:23 »
Imho umět programovat a vydělávat programováním jsou dvě odlišné věci...

Re:Za jak dlouho se naučím C++?
« Odpověď #3 kdy: 12. 06. 2019, 09:17:36 »
A učil ses opravdu C++ nebo C with classes? On je v tom totiž dost podstatný rozdíl.

_Jenda

  • *****
  • 1 550
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Za jak dlouho se naučím C++?
« Odpověď #4 kdy: 12. 06. 2019, 09:36:33 »
P.S.: Mám na mysli, za jak dlouho je člověk schopný naučit se takovou úroveň, díky které si začne vydělávat!
Za 10 minut. Už jsem například dostal do situací, kdy bylo potřeba napsat skript v Lua, upravit program v Perlu nebo napsat jednoduchý program pro PLC v IEC 61131-3 ST, což jsou věci, které jsem nikdy před tím neviděl. No a prostě jsem to nějak zařídil (googlení, lepení examplů).


Re:Za jak dlouho se naučím C++?
« Odpověď #5 kdy: 12. 06. 2019, 09:50:04 »
Idris: To zní dosti motivačně!

Cikáda: Asi chápu, jak to myslíš. Sehnat práci ve firmě, která je zaplacena tak, že odpovídá náročnosti studia je prý celkem těžké. Programátoři prý nejraději pracují na faktury jako živnost. Je to tak lepší? Já osobně bych preferoval programovat grafiku a hry.

pavels: Je to C++, na což odkazuje i ona kniha. Do budoucna bych se rád naučil i vícero programovacích jazyků

_jenda: 10 minut? To jsi asi špatně pochopil  ;D

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Za jak dlouho se naučím C++?
« Odpověď #6 kdy: 12. 06. 2019, 10:06:23 »
Idris: To zní dosti motivačně!

Cikáda: Asi chápu, jak to myslíš. Sehnat práci ve firmě, která je zaplacena tak, že odpovídá náročnosti studia je prý celkem těžké. Programátoři prý nejraději pracují na faktury jako živnost. Je to tak lepší? Já osobně bych preferoval programovat grafiku a hry.

pavels: Je to C++, na což odkazuje i ona kniha. Do budoucna bych se rád naučil i vícero programovacích jazyků

_jenda: 10 minut? To jsi asi špatně pochopil  ;D
Na hry to chce spíše studium fyziky, na to jsou přímo knihy s názvy jako Physics for game developers.

D.A. Tiger

  • ****
  • 486
  • Tygr, který žere tučňáka ;-)
    • Zobrazit profil
    • E-mail
Re:Za jak dlouho se naučím C++?
« Odpověď #7 kdy: 12. 06. 2019, 10:37:48 »
Citace
"Za jak dlouho se naučím C++?"
Jak to mame vedet? My nejsme vestci.

A ted vazne. Je totiz otazkou, co povazujete za cil. Ze se nasprtate ucivo? To jde rychle, ale znamena to taky, ze zvladnete nejaky projekt? Na to samotny jazyk totiz nestaci. Spoustu zaku se nasprta ucivo, zvladnou priklady a v praxi to nedovedou pouzit, nebo jen stezi.

Taky je otazkou do jake hloubky Vami zminovana ucebnice jde. Jsou taci jedinci, kteri pokud nevidi v projektu jedinou sablonu, pomalu to nepovazuji za program v C++. A jsou taci, kteri si vystaci pouze pouze s funkcemi a strukturami (jako v C) a pouzivaji kompilator C++ kvuli silne typove kontrole. Oba pristupy jsou extremy (priznavam), ale oba prave C++ umoznuje.

Tak jako tak, ja osobne jsem presvedceny o platnosti, ze cviceni a praxe dela mistra (a to nejen v C++). I ja sam po tolika letech porad objevuji v C++ nove veci. Takze hlavne programujte. Pokud nemate dost vlastnich napadu, zkuste priklady treba na www.codewars.com.

PS. Jenda Vas asi pochopil spravne. A myslim, ze i spravne Vam odpovedel - pohledem evidentne zkuseneho programatora.

Re:Za jak dlouho se naučím C++?
« Odpověď #8 kdy: 12. 06. 2019, 10:53:28 »
Citace
P.S.: Mám na mysli, za jak dlouho je člověk schopný naučit se takovou úroveň, díky které si začne vydělávat!

Definuj „začít vydělávat“. Pokud to myslíš jako freelancer, tak imho tak dva až pět let.

C++ není ostrov v moři, a přestože jako jazyk je relativně těžký, tak jím to teprve začíná. Potřebuješ toho znát kopec o toolingu kolem toho (kompilátory, linkery, makefiles, build systémy, způsoby interakce s knihovnami, operační systémy, sítě, endiany, ..). Musíš taky trochu rozumět hardware počítače, chápat jak asi funguje procesor, jak je organizovaná paměť. Hodí se mít nějaké základní zkušenosti s assemblerem, abys chápal kde se vůbec vzala půlka těch konceptů a nebyl ztracený s pointery a nepřímým adresováním a tak podobně.

Hodně záleží na tom jaké máš předchozí znalosti. Pokud jsi se vším tímhle dělal už někdy dřív třeba v nějakém jiném kompilovaném jazyce, tak to bude do velké míry jen otázka mapování jednoho konceptu do druhého a jsi schopný to udělat jak píše Jenda; během pár minut vygooglit a nějak si upravit ukázky. Pokud ne, tak ti vždycky bude trvat nějakou dobu než to pochopíš a ve skutečnosti věci často nechápeš, dokud si je nevyzkoušíš, což žere čas. Další věc je, že tohle můžeš dělat když se doma učíš, nebo když jednou za čas něco upravuješ, ale když tohle budeš praktikovat v práci, tak jednak nebudeš vůbec stíhat (potřebuješ to mít v hlavě, to lookup rychlejší o několik řádů než googlení a čtení článků) a druhak kolegové vážně nebudou nadšení ze špagety co jsi poslepoval z kousků kódu, kterým sám pořádně nerozumíš.

Vím že je to lehce irelevantní k dotazu na práci, ale uvádí se, že aby ses stal skutečným odborníkem, či mistrem v nějakém oboru, tak se říká, že tomu musíš věnovat minimálně deset tisíc hodin. Platí zde Parretovo pravidlo, které říká, že prvních 80% se naučíš za 20% času. Zbylých 20% ti bude trvat 80% času. Takže za cca 20% z 10000 hodin, tj 2000 hodin, tj 250 dní, když tomu věnuješ 8 hodin denně.

Samozřejmě, spousta firem je v dnešní situaci, kdy lidi na trhu moc nejsou, ochotna nabrat juniora a zaučit si ho, i když neumí prakticky nic. Takže práci můžeš sehnat po pár měsících, a učit se průběžně u toho.

Jazyk a tooling a prostředí a knihovny a tak dál jsou navíc jen jedna věc, a to ta čistě technická. Pak tu máš různé sociální stránky, jako například jak psát čistý kód (viz kniha Čistý kód), jak správně dokumentovat, ať už interně formou komentářů a docstringů, tak externě, formou generované dokumentace a UML diagramů. Jak dělat dobrou a rozšiřitelnou architekturu, což se třeba já mám pořád ještě hodně co učit, přestože jsem začal programovat v roce 2004 a profesionálně to dělám už víc jak pět let. Jak spolupracovat s lidmi v týmu (slack, IRC, wiki, ..), dělat nějaký agile (standupy, issues, sprinty..) a verzovat kód, ať už jde o třeba o GIT (viz třeba kniha Pro Git), nebo mercurial, jaký branchovací model budete používat. Jak dělat code review, a naopak, jak přijmout code review. Jak si plánovat práci (mně třeba hodně pomáhají osobní kanbany), odhadovat a pak dodržovat termíny. Jak rozplánovat projekt. Pak tu mýš čistě psychologické stránky, jako kde třeba brát dlouhodobě motivaci, jak se vyrovnat s frustrací, s nedostatkem energie, s tím když se nedaří. Jak nevyhořet, čím se rechargnout a jak dlouhodobě a konzistentně nabírat energii, abys podával optimální výkon. Jak se sebevzdělávat a nepřestat v tom jakmile se dostaneš na nějakou dostatečně funkční úroveň. Jak snášet kritiku a oddělit se od své práce, abys mohl snášet kritiku svojí práce. Spousta věcí je navíc propojená, různá algoritmizace jde plynule do teorie grafů a her a matematiky. Debugování třeba dost souvisí s vědeckou metodou a formováním hypotéz. Naučit se jak v klidu mnoho hodin debugovat nějaký problém, systematicky procházet prostor možných chyb a dělat heuristiky, které ti usnadní hledání chyb, a to vše bez toho aniž bys z toho měl stres a frustraci, to je taky běh na dlouhou trať.

Co se samotného hledání práce týče, tak jsem to kdysi trochu nakousl tady: http://www.abclinuxu.cz/blog/bystroushaak/2017/7/jak-se-stat-programatorem

Relevantní meme:


Re:Za jak dlouho se naučím C++?
« Odpověď #9 kdy: 12. 06. 2019, 16:04:18 »
Kdyz znas prislusna paradigmata, jazyk nehraje roli. Po trose praxe muze clovek zacit v libovolnem jazyku programovat v podstate okamzite skoro bez uceni (snad s vyjimkou nejakych exotik), resp. nauci se to za pochodu. Samozrejme to zpocatku nepujde uplne efektivne a hodne toho prepise, ale pujde to.

Otazka, za jak dlouho si muzes s C++ vydelavat je IMO znacne naivni, neco jako by ses ptal, za jak dlouho si muzes vydelavat sroubovakem. Ve "vydelavani pomoci C++" hraje C++ uplne stejnou roli jako ve "vydelavani pomoci sroubovaku" hraje sroubovak.

Nevim kolik ti je, ale asi bys svuj postoj k programovani v C++ mel prehodnotit ze "chci si vydelavat programovanim v C++" na "chci se naucit programovat v C++".

Re:Za jak dlouho se naučím C++?
« Odpověď #10 kdy: 12. 06. 2019, 18:33:03 »
Všem děkuji za komentáře. Některé z nich jsou pro mě přínosné, některé méně, ale od toho tu jsem. Abych si vyslechl názor od lidí, kteří jsou skutečně zasvěceni do svého oboru.

Idris: To ano, ale předpokládám, že bych měl nejprve porozumět jazyku čistě teoreticky. Přečíst nějaké čtivo a sesmolit pár kódů. Pak bych se rád specializoval konkrétněji.

D.A. Tiger: Nu dobrá. Rozklikl jsem stránku, na kterou jste mě odkázal a nestačím na složení toho kódu v c++.

Mám zadáno: 

int multiply(int a, int b)
{
    a * b;
}

-Nejsem schopný určit, co je multiply. Nehledal jsem to hned na internetu, chtěl bych to vyřešit sám, až dosahnu potřebných znalostí. Podle mě tam chybí:

1) příkaz return 0;
2) nevidím knihovnu neboli hlavičku
3) nevidím tělo funkce
4) proměnné nejsou deklarované

Nejprve bude ovšem třeba zjistit, co multiply. Podle mého čistě nezaujatého názoru, je to nějaká funkce ke které se teprve dopracuji v knize.

K tomu příspěvku od _jenda. Ano přesně tak, napsal to jako zkušený programátor člověku, který je ve vajíčků. Asi proto jsem ho z logického a lidského hlediska nepochopil:)

Bystroushaak: Díky za skvělé informace. Budu dělat, co mohu:)

smrt28: Dobře, děkuji ti. Mé dotazy jsou čistě hypotetické a amatérské. Mohou proto pro Vás programátory působit nerelevantně.

Úplně nejlepší by byla osoba s kterou bych mohl občas prohodit pár slovíček a zeptat se ho jako mistra na mé chyby. Asi by se zde někdo takový nenašel, že?

Re:Za jak dlouho se naučím C++?
« Odpověď #11 kdy: 12. 06. 2019, 19:09:36 »
Mám zadáno: 

int multiply(int a, int b)
{
    a * b;
}

-Nejsem schopný určit, co je multiply. Nehledal jsem to hned na internetu, chtěl bych to vyřešit sám, až dosahnu potřebných znalostí. Podle mě tam chybí:

1) příkaz return 0;
2) nevidím knihovnu neboli hlavičku
3) nevidím tělo funkce
4) proměnné nejsou deklarované
1) O return tam opravdu jde.
2) Příklad je malá součást libovolného většího programu, nepotřebuješ celý kód.
3) Tohle je celá funkce, hlavička i tělo funkce!
4) Proměnné jsou deklarované zcela dostatečně v hlavičce.
5) Je vhodné funkce pojmenovat podle toho co dělají. Multiply anglicky znamená...
Kód: [Vybrat]
long long int multiply(int a, int b)
{
    return a * b;
}

Jo, Jenda to napsal velmi přesně, tak jen pro úplnost: http://norvig.com/21-days.html Nebo řeklad do lidského jazyka: http://www.efton.sk/sk/learn_programming_in_10_years.html

Mimochodem, C++ není vhodný jazyk pro učení se programování.

alex6bbc

  • *****
  • 1 432
    • Zobrazit profil
    • E-mail
Re:Za jak dlouho se naučím C++?
« Odpověď #12 kdy: 12. 06. 2019, 21:18:34 »
To je otazka co je vhodny jazyk na uceni.
Jako stary C a C++kar bych se dnes ucil GO.
Neco jsem si cetl o Rust, ze = je tam vlastne move z C++ a pro C++kare je move novinka.
C++ me zivi a musim to umet, ale je to verkill templates, polymorphism, lambda, smart pointers, boost, qt no proste halda veci.
Jak rad bych delal v Go nebo v C.

Mlocik97

  • *****
  • 830
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Za jak dlouho se naučím C++?
« Odpověď #13 kdy: 12. 06. 2019, 21:25:04 »

Re:Za jak dlouho se naučím C++?
« Odpověď #14 kdy: 12. 06. 2019, 21:29:20 »

A učil ses opravdu C++ nebo C with classes? On je v tom totiž dost podstatný rozdíl.

pavels: Je to C++, na což odkazuje i ona kniha.


Že se ta kniha jmenuje C++ ještě neznamená, že ve skutečnosti není o C with classes. Tam je právě ten podstatný rozdíl, ke kterému mířím. Moderní, idiomatické C++ by vypadalo nějak takto:

Kód: [Vybrat]
// C++11
template<class A, class B>
auto multiply( A&& a, B&& b) -> decltype(a * b)
{
    return a * b;
}

Nebo dokonce:
Kód: [Vybrat]
// C++14
const auto multiply = [](auto a, auto b)
{
    return a * b;
};