Jak se efektivně učit programovat?

lopata

Jak se efektivně učit programovat?
« kdy: 15. 08. 2018, 10:19:47 »
Ako ste sa zacali ucit programovat a postupne sa vtom rozvijali? Uz som sa skusal ucit HTML a CSS, C++ a Python. No moj problem je ze vzdy sa naucim zaklady skusam nejake jednoduche priklady. A postupne stratim motivaciu. V podstate to mam takto vo vsetkom. Ked nepracujem na nejakom vyuzitelnom projekte. Zadat si ako novacik nejaky zlozitejsi projekt mi pride nerealne. Nejake napady? Popripade postupy ako ste zacinali?
« Poslední změna: 15. 08. 2018, 11:21:17 od Petr Krčmář »


balki

Re:Ako sa efektivne ucit programovat?
« Odpověď #1 kdy: 15. 08. 2018, 10:28:48 »
Ako ste sa zacali ucit programovat a postupne sa vtom rozvijali? Uz som sa skusal ucit HTML a CSS, C++ a Python. No moj problem je ze vzdy sa naucim zaklady skusam nejake jednoduche priklady. A postupne stratim motivaciu. V podstate to mam takto vo vsetkom. Ked nepracujem na nejakom vyuzitelnom projekte. Zadat si ako novacik nejaky zlozitejsi projekt mi pride nerealne. Nejake napady? Popripade postupy ako ste zacinali?

Na pmd 85-2 sme sa ucili programovat v jazyku basic jednoduche vypoctove ulohy a vykreslovat rozne obrazky na displej - maly televizor zn tesla. Potom o trosku neskor sme sa ucili algoritmizovat v jazyku turbo pascal a vytvarali sme si male aplikacie (hry) pre zabavu na pocitacoch PP06.

Neviem, kde sa pmd 85-2 a PP06 daju dnes zohnat ale je to jedna z moznosti, ako sa naucit programovat.

grgs

Re:Ako sa efektivne ucit programovat?
« Odpověď #2 kdy: 15. 08. 2018, 10:29:05 »
Tak si vymysli nejaky jednodussi vyuzitelny projekt, ktery pro tebe dava smysl a mohli by ho pouzivat i ostatni (u me to byl spravce financi v C# (WPF), protoze od mala rad pocitam penize :D). Hod ten tvuj vymysl jako open source na github.

DragonMaster

Re:Ako sa efektivne ucit programovat?
« Odpověď #3 kdy: 15. 08. 2018, 10:51:15 »
Ty vole a proč se chceš naučit programovat? Abys vydělal prachy? Tak na to se vyser, když k té práci nemáš vztah, tak nikdy nebudeš dobrý a ani nebudeš mít motivaci se učit.

Nebo se chceš naučit programovat, abys mohl něco vytvořit? Tak to zkus vytvořit. Já si vždycky přál vytvořit nějakou počítačovou hru, tak se učím tak, že tvořím jednoduché hry. Není to sice žádný Far Cry ani GTA, ale jednoduché hry, při kterých musím řešit mnoho zajímavých problémů. Dokonce si myslím, že při programování her se člověk naučí programovat nejlépe, protože musí řešit atypické i komplexní problémy, se kterými se např. při tvorbě blogů, eshopů, tabulkových systémů nesetká (tam je to jen nakouknout do databáze, něco z ní vzít a vrátit). U her je potřeba aplikovat mnoho různých algoritmů - path finding, zkoumání vítězného tahu, kooperace agentů, kontrolování neplatných stavů hry. Na hru musí nahlížet z více konceptů - hra jako systém, hra jako stavový automat, hra jako objekt.

Já tvrdím, že programátor, který si vytvořil dvě, tři hry, tak dovede řešit v komerčních projektech typu eshop, internetové bankovnictví 95 % problémů, protože i u her, zejména browserových, či multiplayerových server/klient řeší databáze a podobné věci.

DragonMaster

Re:Ako sa efektivne ucit programovat?
« Odpověď #4 kdy: 15. 08. 2018, 10:53:24 »
A ještě něco. Efektivní učení je takové, kdy i produkt (projekt) má nějaký smysl a neskončí v šuplíku (jako na VŠ). Při učení se ptej, jak to tam funguje, proč to tak je. Google ti to zodpoví, a pokud ne Google, tak v nějaké poradně určitě.


Re:Ako sa efektivne ucit programovat?
« Odpověď #5 kdy: 15. 08. 2018, 11:18:29 »
A ještě něco. Efektivní učení je takové, kdy i produkt (projekt) má nějaký smysl a neskončí v šuplíku (jako na VŠ). Při učení se ptej, jak to tam funguje, proč to tak je. Google ti to zodpoví, a pokud ne Google, tak v nějaké poradně určitě.

Ne nutne.

Trebas code retreaty nebo katy jsou postavene na tom, ze kod se zahodi. A je to dobre - umozni ti to ozkouset praci s nejakym omezenim, ktere bys v "praktickem" zadani nemel.

Samozrejme je "prakticke" zadani lepsi pro motivaci. Ale ne nutne pro mnozstvi veci, ktere se naucis.

karel

Re:Jak se efektivně učit programovat?
« Odpověď #6 kdy: 15. 08. 2018, 11:28:45 »
Ja doporucuju taky pro pochopeni napast si nejaky kod pro mikrokontroler, on clovek pak ledasco pochopi.
A nebo nejaky pekny projekt v nejakem vysim jazyku, ja zacinal s php a delphi kde jsem si vytvarel roboty aby za me hrali online hry.
Dnes je mi jedno v cem delam, je to jen o zmene syntaxe a trosku uprave mysleni pro dany jazyk, ale podle me pokud si programator tak jazyk ve kterem pracujes je az na druhe koleji.

Leoš

Re:Jak se efektivně učit programovat?
« Odpověď #7 kdy: 15. 08. 2018, 12:07:04 »
Já jsem od začátku prázdnin u známého na brigádě ve firmě a dělám v C# SW pro ovládání průmyslových robotů (interface, algoritmy...). Nevadilo mu, že jsem na začátku toho moc neuměl, počítal s tím a teď už to jde líp, sám cítím, že jsem udělal velký pokrok a baví mě to. A teď jsem si dal za cíl vytvořit jednoduchou aplikaci na Android, kterou využiju, takže další motivace

Jak se skutečně naučit programovat
« Odpověď #8 kdy: 02. 09. 2018, 17:31:36 »
Programování není nic těžkého. Zvládnout programovací jazyk je jednoduché, to co je nejtěžšího na programování je algoritmizace.

***

Jsou dvě cesty: Buď 1) chcete nějaký výsledek nebo vás 2) programování baví samo od sebe. Pokud neplatí ani 1) ani 2), nechte toho a o programování se vůbec nepokoušejte.

Ad 1) Nejlépe je najít si nějaký cíl/problém, který by člověk chtěl naprogramovat. Ale ten cíl by měl být reálný pro začátečníka.

***

Programování a programovací jazyky jsou záludné v jedné věci. Programování je trochu běh na dlouhou trať. Algoritmizaci se naučíte tak za 2-3 roky, pokud půjdete lážo plážo. V programování existují dva druhy programovacích jazyků:

a) Programovací jazyky, které dají na začátku rychlé výsledky, a pak to začne drhnout. Jinak řečeno, jednopduchý program je v cukuletu. Čím složitější program/problém, tím více vám ten jazyk hází klacky pod nohy. Až vás zcela znechutí.

b) Programovací jazyky, které dají výsledky pomaleji od začátku. Potřebují, abyste překonal začátek, ale pak vám ten jazyk více a více pomáhá při složitějších úlohách.

Velice mnoho lidí jde cestou ad a). Rychle udělají první program, který je tak jednoduchý, že je vlastně k ničemu. A když chtějí pokračovat, začíná být problém. Záměrně nejmenuji, který jazyk je který - vznikla by z toho diskuse plná spamu a trolů.

***

Pak další modifikace:

i) Někteří lidé se chtějí rovnou učit jazyk a prostředky, které budou používat v praxi. Takoví si musejí vybrat praktický jazyk. Obvykle sklouzávají k tomu, že "myslí v jazyce" a nedokáží "myslet na problém/úlohu". Typičtí zástupci jsou velice často javisté.

ii) Lepší je začít s dobrým učebním programovacím jazykem, který člověka naučí "štábní kultuře". Kdysi takovým jazykem býval Pascal, a tuto úlohu plnil velmi dobře. Pak je ale nutné časem přejít na praktičtější jazyk.

***

Každopádně webové programování (HTML, CSS, JavaScript, PHP) není moc motivační. Musíte vynaložit poměrně hodně úsilí, aby byl nějaký výsledek (rozumná webová stránka). Kromě toho webaři a lidé kolem vypouštějí vlčí mlhu, jak strašně složité to je, protože jim jde o prachy od klientů. Je v tom moc a moc dogmat a urban legend. Začátečník by se měl vykašlat na spousty ptákovin, jako je sémantický web, nutnost HTML5, m2l by začít jen s HTML4 bez CSS - protože i bez toho to jde. Nakonec dostat se do stavu, kdy dokážete víc než po instalaci Wordpressu je těžké.

Každý obor programování chce své. Je třeba začít nějakým směrem. Jiné věci chce systémové programování, jiné hry, jiné web, jiné klasické programy, atd. Musíte si alespoň na začátek zvolit.



agent

Re:Jak se efektivně učit programovat?
« Odpověď #9 kdy: 02. 09. 2018, 19:38:34 »
Já kdysi začínal psaním jednoduchých her v Basicu na IQ151 - mělo to 100-200 řádků, spousta GOTO, jen textová grafika, ale dalo se to třeba 4 klávesami ovládat, hýbalo se to a fungovalo to. Pěkné zadání je třeba "had" (ten co žere puntíky a nesmí sežrat sebe), "zajíc a pes" - (ovládáš šipkami rychlejšího zajíce a honí tě pomalejší ale neúnavný pes), "přistání na Měsíci" (raketa klesá gravitací a ovládá se jen tah motoru s omezeným množstvím paliva) atd.
 
Dnes se sice programuje pro jiné prostředí, ale to vcelku není důležité - důležité je najít si podobný dosažitelný cíl, který tě zaujme a pak se ho snažit dosáhnout jakýmikoliv vhodnými prostředky.
A až to bude fungovat, tak si od někoho ochotného schopnějšího nechat vysvětlit, co všechno je v téhle první verzi blbě, jak by se to mělo psát správně (z hlediska funkčnosti, srozumitelnosti a udržovatelnosti kódu) a zkusit to napsat podruhé znovu a lépe.
Já takhle některé aplikace psal i 3x po sobě s tím, jak se rozšiřoval okruh toho, co jsem znal. I první verze fungovala, ale byla zvenku i zevnitř ošklivá a nepřehledná a když přišel požadavek na vylepšení, byl to problém, že bylo vhodnější začít znova a lépe.
Ale tohle se dá naučit jen praxí, ne čtením si v učebnici nebo posloucháním na školení. 

Vlado

Re:Jak se efektivně učit programovat?
« Odpověď #10 kdy: 02. 09. 2018, 19:46:49 »
Citace
Začátečník by se měl vykašlat na spousty ptákovin, jako je sémantický web, nutnost HTML5, m2l by začít jen s HTML4 bez CSS - protože i bez toho to jde.

To akože vážne??? Ty prosím ťa radšej nikomu neraď...

anonym

Re:Jak se efektivně učit programovat?
« Odpověď #11 kdy: 02. 09. 2018, 21:02:58 »
Ja kdybych byl malej jako ty, tak bych si hral s Arduinem. Tam se ti to hybe, sviti, blika a tak a je to samo-zabavne. Udelej samobalancujiciho robota, ve smylu segwaye - tam potrebujes 2 krokove motorky, arduino a mpu6050 coz je akcelerometr s gyroskopem. A potrebujes se podivat, jak funguje PID, to je jednoducha regulace ktera ti to bude balancovat. Casem muzes pridat i dalkove ovladani a co ja vim co jeste, muzes tomu treba udelat pindoura na servo nebo co.  :D

anonym

Re:Jak se efektivně učit programovat?
« Odpověď #12 kdy: 02. 09. 2018, 21:04:54 »
Nebo pokud ses mladej a hulis travu, ty cune jedno, tak si muzes s Arduinem udelat automatizovanou pestirnu. Kupuj tu elektroniku na dx.com, je levna.

Re:Jak se efektivně učit programovat?
« Odpověď #13 kdy: 03. 09. 2018, 03:34:00 »
Citace
To akože vážne??? Ty prosím ťa radšej nikomu neraď...

To myslím naprosto vážně.

***

Stejně jako si začátečník v elektronice může dát za cíl postavit třeba superpočítač, ale nejspíše to nedokáže ani když moc bude chtít. Stejně tak ten kdo začíná s webem těžko udělá hned na začátku vše dokonale.

Možná to není známo, ale web může fungovat jen na HTML. Dokonce i bez CSS. Vzhled většiny věcí se dá určit atributy v HTML značkách. Pro začátečníka dobrý cíl číslo jedna. A hlavně, má něco fungujícího a užitečného. Že to není špičkové a podle poslední módy webových technologií? No a co! Je to začátečník, a první krok, dokonce fungující, je lepší, než se snažit o virtuózní dokonalost a nikdy neuspět.

Pak jako další cíl může zkusit přidat CSS. Postupně po malých dávkách. Pak teprve až zvládne CSS plně, může klidně zkusit sémantický web a další.

***

Zkrátka nikdo na světě (kromě supermana Vlada, ten je jediná výjimka v celém vesmíru) se nenarodil jako špičkový odborník. Odborníkem se člověk stává tak, že začne prvním krokem, a postupně se zdokonaluje. Pokud si za cíl prvního kroku dáte být naprosto dokonalý - tak selžete. Ne nadarmo se říkají dvě přísloví:

1) Každá cesta, i dlouhá tisíc mil, začíná prvním krůčkem.

2) Odborník je člověk, který si v oboru vyzkoušel už udělat všechny chyby, které jdou.

Já bych si hlavně přál, aby lidé jako Vlado nikdy neradili začátečníkům, protože jsou k tomu absolutně a totálně nevhodný. Jsou dobří pouze a jedině k tomu, aby odradili začátečníka, všechno mu znechutili. Namísto postupných kroků po něm chtěli absolutní dokonalost. Takoví lidé jako Vlado jsou totálně škodliví, pokud někomu v čemkoli radí.

Re:Jak se efektivně učit programovat?
« Odpověď #14 kdy: 03. 09. 2018, 06:43:31 »
Ako ste sa zacali ucit programovat a postupne sa vtom rozvijali? Uz som sa skusal ucit HTML a CSS, C++ a Python. No moj problem je ze vzdy sa naucim zaklady skusam nejake jednoduche priklady. A postupne stratim motivaciu. V podstate to mam takto vo vsetkom. Ked nepracujem na nejakom vyuzitelnom projekte. Zadat si ako novacik nejaky zlozitejsi projekt mi pride nerealne. Nejake napady? Popripade postupy ako ste zacinali?
Začínal jsem tak, že jsem opisoval programy z VTM, Abíčka, elektroniky. Pak jsem si koupil knížku o assembleru, a přepsal a pochopil příklady. A pak jsem napsal jednu knihovnu v assembleru. Pak na výšce už člověk musel napsat kód pro semestrálky, a diplomky. Zápočet je docela dobrá motivace. Nicméně relativně rychle jsem se dostal do praxe a napřed psal prográmky (makra) ve VBA pro lidi, co potřebovali automatizovat office (většinou pár set řádek). Pak jsem do jednoho většího projektu nastoupil jako junior a tak jsem se dostal k reálnému programování.

Žádný učený z nebe nepadá, a psát si doma do šuplíku větší projekty je nesmysl. Navíc doma se sám člověk až tak toho nenaučí - může to být dost velká nuda, a navíc si člověk může zafixovat špatné návyky. Ale od toho jsou juniorské pozice - dají se najít firmy, které vezmou juniora bez praxe, co chce programovat. Samozřejmě, že pokud si řekne o nereálný plat, tak neprojde pohovorem. Musíte to brát tak, že junior (bez zkušeností na reálných projektech) je pro firmu ekonomicky spíš zátěž. Nicméně jsou už firmy, které chápou, že bez juniorů nejsou senioři.

Moje první roky v IT jsem si vydělával tak na nájem a na pivko. Ale dostal jsem se k technologiím, k reálným projektům. Něco jiného dnes mají studenti z VŠ. Tam si je odchytávají už ve škole firmy a samy usazují na juniorské pozice.

Programování má dost dimenzí - od vlastního kódování (což je docela jednoduché), zvládnutí API (což může trvat), po sociální dimenzi (komunikace se zákazníkem, uživatelem, zaměstnavatelem) až po psychologickou dimenzi (je to kreativní práce, ale ne vždy člověk píše kód, který ho baví, ne vždy je v pohodě, ale termíny se musí plnit, a kód se musí napsat, ať se člověku chce nebo nechce).

Jakmile člověk zvládne příklady, tak je nejlepší jít rovnou do praxe (brigáda, částečný úvazek, ...). Samozřejmě, že se člověk musí adekvátně ocenit, by si rovnou nezavřel vrátka. V juniorské pozici by člověk měl zůstat rok, dva, a pak se vše restartuje, takže to není o vyjednávání do konce života.