Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: jana1965 04. 07. 2022, 21:59:33
-
Ako sa naucit rozmyslat, aby som mohol programovat? Pravidla programovania a syntax konkretneho programovacieho jazyka nauci konkretna kniha.
Problem ale je, ako sa naucit rozmyslat? Nauci to niektora kniha na trhu? Ak ano aka? Mozem povedat, ze ked niekto vynika v matematike/fyzike na základnej a strednej skole je automaticke, ze rozmyslat vie a programovat sa nauci?
Syn si chce kupit seriu knih The art of programming. Myslite, ze je to dobra investicia a nieco ho ta kniha nauci? Pytam sa preto, ze je to vacsia investicia a bola by som nerada, ak by zapadali prachom na policke.
Dik za rady. Budte prosim konstruktivni a piste len ti, co viete a chcete poradit. Nerad by som citala obsiahle komentare mimo temu.
-
K programovani potrebujete pocitac a nejake vyvojove prostredi.. a pro zacatecniky se nabizi infantilni Robot Karel z osumdesatek, nebo nejaka vizualni skladacka (LEGO Mindstorm) - jestli jde o dite na pocatku zakladky.
Jinak co hledate je "jak se naucit algoritmizaci" a ono se to naucit podle me neda - na to je treba mit talent. Jsou na to na vysoke sice predmety, ale to mate jako s vytvarnou vychovou - kdyz nemate talent, umelecky malir z vas nebude. Nehledne na pocet absolvovanych kurzu a nactenych teorii.
-
Syn si chce kupit seriu knih The art of programming. Myslite, ze je to dobra investicia a nieco ho ta kniha nauci? Pytam sa preto, ze je to vacsia investicia a bola by som nerada, ak by zapadali prachom na policke.
Jestli vas trapi jen tohle, tak si nejaky dil pujcte na prazdniny v knihovne :-)
-
Pc hry:
- spacechem
- factorio
Knihy (hutné, ale se spoustou přemýšlivých úloh pro čtenáře):
- Kapitoly z diskrétní matematiky
- Průvodce labyrintem algoritmů
Nejlépe samozřejmě zapsat se na výšku - třeba na tzv celoživotní vzdělávání, kde člověk může studovat dle svých preferencí za drobný poplatek.
(Všechna doporučení jsou na broušení obecných problem-solving skillů.)
a ono se to naucit podle me neda - na to je treba mit talent
Bullshit. Alespoň to buď nazývejme otevřeně inteligencí (kterou se učit opravdu moc nedá), nebo magií (ať je alespoň otevřeně zřejmé že nevíme o čem mluvíme a nemáme ambici to pochopit). Ale i nehledě na inteligenci udělá deliberate-practice obrovský rozdíl.
Jinak co hledate je "jak se naucit algoritmizaci"
Nemyslím si. Myslím si, že to co se hledá je ještě o úroveň obecnější než jen algoritmizace.
-
Mozem povedat, ze ked niekto vynika v matematike/fyzike na základnej a strednej skole je automaticke, ze rozmyslat vie a programovat sa nauci?
Z mojí zkušenosti ne, alespoň co se týče matematiky. Informatika/programování může být o aplikaci matematiky, ale řeší se tam (často) i přízemní věci, např. že máme konečný výpočetní výkon, paměť prostor na disku atd. Ale myslím si, že tam jistá korelace bude (dobrý vztah k matematice/fyzice => větší pravděpodobnost, že programování půjde také).
Za mě je spíš lepší vymyslet si aplikaci/projekt, kterou by syn chtěl naprogramovat, naučit se syntax rozumně vhodného programovacího jazyka (klidně z knížky, tam budou i základy algoritmizace) a zkusit programovat. Klidně za cenu toho, že výsledek bude neefektivní/ošklivý. Tím zjistíte, zda-li má to správné analytické myšlení (tzn. dokáže s prostředky, které mu dává daný jazyk poskládat výsledek).
Znát různé algoritmy se vyplatí podle mě až trochu později, protože zajišťují efektivnější/lepší výsledek a není třeba nad vším tolik přemýšlet a znovuvynalézat to, co již existuje.
Ale samotná znalost algoritmů nestačí, je třeba mít schopnost je i upravit/poskládat na míru konkrétnímu zadání, což se podle mě nedá úplně naučit, jen do jisté míry (ale i ta může být dostatečná, není nutné programovat jaderný reaktor).
-
Případně vzhledem k věku asi nejlépe korespondenční semináře - třeba KSP ( https://ksp.mff.cuni.cz/ )...
A k The art of programming - zkusil bych fakt knihovnu - dle https://www.knihovny.cz/Record/mzk.MZK01-001261154 existuje po jednom výtisku v Praze, Brně a Olomouci. Jestli to je fakticky čtivá kniha a nebo nudná encyklopedie netuším.
(Ty knihy co doporučuji výše jsou fajn, ale je potřeba mít vůli a zájem se jima prokousat.)
-
Osobně bych spíše doporučil najít nějaké "doučování", tak aby si sám vymyslel co chce dělat, a následně ho někdo nasměrovával a radil, hlavně tedy pokud se zasekne a nebude vědět kam už dál.
Kniha (respektive knihy), bych řekl, že na začátek může být moc velké tempo, nebo naopak příliš malé a přeci jen, knížky nejsou tak záživné a kolikrát učí i hrozné detaily, které do začátku nejsou tak zásadní (alespoň z mého úhlu pohledu).
Ideálně si myslím, že sám se tomu bude věnovat týdně třeba 3-5 hodin, kdy on sám bude chtít a pak například s nějakým učitelem/kamarádem třeba 2-4 hodiny, pokud má trochu lepší chápání, tak jednoduché aplikace bude zvládat už do pár měsíců :)
-
Případně vzhledem k věku asi nejlépe korespondenční semináře - třeba KSP [...]
vek syna nevidim, ale uvahou pokud nick tazatelky obsahuje jeji rok narozeni, tak synovy bude 30let? ;-)
-
Syn si chce kupit seriu knih The art of programming. Myslite, ze je to dobra investicia a nieco ho ta kniha nauci? Pytam sa preto, ze je to vacsia investicia a bola by som nerada, ak by zapadali prachom na policke.
Pokud je to The Art of Computer Programing od Knutha, ať ušetří čas a peníze. Rozhodně to není literatura pro začínajícího programátora v roce 2022.
-
Tak třeba tady je, jak se to dělat nemá:
https://forum.zive.cz/viewtopic.php?f=922&t=1320923
Tenhle se snažil naučit AutoCAD:
https://forum.zive.cz/viewtopic.php?f=959&t=1208415
A tenhle se chtěl přeškolit na návrháře elektroniky:
http://www.ebastlirna.cz/modules.php?name=Forums&file=viewtopic&t=100841
:(
BTW: Jak starý je syn a jakou školu dělá?
-
To je dobrá otázka. Ako sa naučiť rozmýšľať, to neviem, ale ako sa naučiť rozmýšľať o písaní softvéru je celkom dobre popísané v knihe How to Design Programs - https://htdp.org/. Už som to tu písal (a určite to ešte niekoľkokrát napíšem), podľa mňa je to asi najlepšia kniha pre začínajúcich programátorov. A to asi preto, lebo neučí písať programy, ale navrhovať ich a rozmýšľať o nich. Rozhodne odporúčam prečítať si aspoň úvod, tam je to pekne vysvetlené - čo, ako a prečo.
Kniha je písana vyslovene na výuku, je v nej použitých niekoľko programovacích jazykov, alebo možno skôr niekoľko úrovní programovacieho jazyka z jednej rodiny, a znalosti sa dajú jednoducho preklopiť do skutočného jazyka z tej rodiny jazykov.
Trochu neštandardné je, že popisuje funkcionálny prístup k programovaniu, ale v tejto dobe sa k tomu aj tak značne vraciame, lebo je to jednoducho vzhľadom na aktuálne dostupné platformy výhodné, pretože, veľmi zjednodušene povedané, sa pri tom musíme starať o menej vecí a tým sa o napísanom programe ľahšie rozmýšľa, a okrem toho, tieto princípy vo veľkom prenikajú aj do iných jazykov, tak to nie je žiadna nevýhoda.
A čo sa toho rozmýšľania týka, tak kniha sprevádza cez niekoľko úrovní problémov, ktoré sa v programárorskej praxi vyskytujú a popisuje ako ich riešiť a to jednotným spôsobom, pričom centrálnom myšlienkou je podľa mňa receptúra návrhu, podľa ktorej sa dá postupovať a ktorá sa pre jednotlivé zvyšujúce sa náročnosti trochu rozširuje aj s nejakou základnou šablónou pre funkcie.
No a čo sa týka náväznosti na matematiku, tak tým vlastne autori začínajú, keď ako minimum, ktoré asi každý pozná, odkazujú na aritmetiku s číslami, a potom ju vlastne rozširujú na "aritmetiku textov" a "aritmetiku obrázkov", potom pridajú funkciu, atď.
-
Ako sa naucit rozmyslat, aby som mohol programovat? Pravidla programovania a syntax konkretneho programovacieho jazyka nauci konkretna kniha.
Problem ale je, ako sa naucit rozmyslat? Nauci to niektora kniha na trhu? Ak ano aka? Mozem povedat, ze ked niekto vynika v matematike/fyzike na základnej a strednej skole je automaticke, ze rozmyslat vie a programovat sa nauci?
Syn si chce kupit seriu knih The art of programming. Myslite, ze je to dobra investicia a nieco ho ta kniha nauci? Pytam sa preto, ze je to vacsia investicia a bola by som nerada, ak by zapadali prachom na policke.
Dik za rady. Budte prosim konstruktivni a piste len ti, co viete a chcete poradit. Nerad by som citala obsiahle komentare mimo temu.
Dobry den,
spravne, najskor sa treba naucit potrebnut techniku. To nauci nejaka kniha.
Co pre vas znamena rozmyslat ako programator? Pre mna to znamena vediet pochopit nejaky problem. Ako toho dosiahnem? Naucit sa rozdelit problem na male, trivialne zvladnutelne problemy. Tomu sa hovori dekompozicia. A opacne, vediet z tychto rieseni malych problemov poskladat uceleny program je kompozicia.
Co na to clovek potrebuje je dobra cvicebnica (zial, neviem odporucat nejaku konkretnu) a chut programovat. Alternativne, ak to synatora fakt bavi, moze si sam vymyslat a pisat programy. Najskor male, potom vacsie. Odporucal by som zacat s "paper and pencil" hrami, lebo to je celkom zabava. Napr. zacat s hodom kostkou, papier-kamen-noznice, hangman, tic-tac-toe, pacman. Proste ide o to ziskat dostatok praxe, z ktorej pochopi principy.
Osobne by som "Art of Programming" nekupoval.
-
Knihy aj škola sú v podstate dobré odporúčania, ale veľká časť schopnosti "myslieť ako programátor" znamená vedieť "myslieť ako nepriateľ".
T.j. po tom, čo človek vymyslí algoritmus na riešenie úlohy je potrebné prepnúť do módu "a teraz potrebujem vymyslieť vstup, na ktorom môj algoritmus nefunguje". Časom sa človek naučí tieto bežné chyby vidieť dopredu, čo sa odrazí na návrhoch budúcich algoritmov (atď).
Aspoň teda čo si pamätám, tak veľká časť cvičení z programovania v 1. ročníku VŠ sa niesla v duchu
- vymyslite algoritmus na ...
- niekto napíše svoje riešenie na tabuľu
- Cvičiaci: "A teraz príde nepriateľ a zadá vášmu algoritmu na vstupe XYZ"
A ako správne píšeš, syntax konkrétneho jazyka je na tomto nezávislá (aj keď je pravdou, že rôzne druhy jazykov budú viac alebo menej náchylné na iné typy chýb). V prvom rade je ale potrebné naučiť sa minimalizovať/predvídať chyby v dizajne, v druhom samozrejme aj naučiť sa napísať v danom jazyku presne to, čo chcem, aby sa dialo.
-
Ja bych pridal jeste jednu vlastnost, kterou ma podle me perspektivni programator. Podle me programator musi byt liny.
Co tim myslim:
Priklad 1) Pisu, pisu kod a vsechno krasne funguje. Za tyden nekdo prijde a rekne, ze chce neco podobneho. V tu chvili spatny programator vezme puvodni kod, udela Ctrl+C a Ctrl+V, prepise X radku a prohlasi za hotovo. Dobry programator se podiva na puvodni kod a zkusi ho upravit tak, aby vyhovoval obema s minimalni upravou.
Priklad 2) Sef mi rekne: V pondeli prekopiruj soubor X ze slozky Y do slozky Z. Tak to udelam. Dalsi tyden prijde, ze je to potreba udelat znova. Spatny programator jde a tupe prekopiruje soubor znova. Dobry programator si udela program, ktery se automaticky kazdy pondeli spusti a o usetreny cas si prodlouzi obed.
-
Ja bych pridal jeste jednu vlastnost, kterou ma podle me perspektivni programator. Podle me programator musi byt liny.
Co tim myslim:
Priklad 1) Pisu, pisu kod a vsechno krasne funguje. Za tyden nekdo prijde a rekne, ze chce neco podobneho. V tu chvili spatny programator vezme puvodni kod, udela Ctrl+C a Ctrl+V, prepise X radku a prohlasi za hotovo. Dobry programator se podiva na puvodni kod a zkusi ho upravit tak, aby vyhovoval obema s minimalni upravou.
Priklad 2) Sef mi rekne: V pondeli prekopiruj soubor X ze slozky Y do slozky Z. Tak to udelam. Dalsi tyden prijde, ze je to potreba udelat znova. Spatny programator jde a tupe prekopiruje soubor znova. Dobry programator si udela program, ktery se automaticky kazdy pondeli spusti a o usetreny cas si prodlouzi obed.
Dobrý programátor musí být taky dostatečně zvídavý a zapálený, takže ochotný nejprve několik obědů obětovat :)
-
Jinak co hledate je "jak se naucit algoritmizaci" a ono se to naucit podle me neda - na to je treba mit talent.
pokud algoritmizaci myslite aplikaci algoritmu na konkretni ulohy, to se naucit da, studiem a resenim uloh napriklad z programatorskych olympiad. Problem je, ze predmety a knihy s nazvem "algoritmy" tohle vetsinou neuci.
i IQ testy se daji do znacne miry natrenovat.
Jsou na to na vysoke sice predmety, ale to mate jako s vytvarnou vychovou - kdyz nemate talent, umelecky malir z vas nebude. Nehledne na pocet absolvovanych kurzu a nactenych teorii.
tohle platilo mozna v devatenactem stoleti, pred vznikem moderniho "umeni".
-
Jestli jde o The Art of Computer Programming od Donalda Knutha, tak to by v tomhle případě byly fakt vyhozené peníze.
-
Jsou na to na vysoke sice predmety, ale to mate jako s vytvarnou vychovou - kdyz nemate talent, umelecky malir z vas nebude. Nehledne na pocet absolvovanych kurzu a nactenych teorii.
tohle platilo mozna v devatenactem stoleti, pred vznikem moderniho "umeni".
Umění vs. řemeslo - hodně se toho dá naučit resp. natrénovat (včetně toho, co bude většina lidí už považovat za projev vrozeného talentu).
-
Jsou na to na vysoke sice predmety, ale to mate jako s vytvarnou vychovou - kdyz nemate talent, umelecky malir z vas nebude. Nehledne na pocet absolvovanych kurzu a nactenych teorii.
tohle platilo mozna v devatenactem stoleti, pred vznikem moderniho "umeni".
Umění vs. řemeslo - hodně se toho dá naučit resp. natrénovat (včetně toho, co bude většina lidí už považovat za projev vrozeného talentu).
nektere formy moderniho umeni nevyzaduji ani ovladnuti remesla ani talent. Klicova je propagace.
naopak, u nevkusneho dila mohou intelektualni snobove predstirat, ze na nem vidi neco co ostatni ne.
-
Ja bych pridal jeste jednu vlastnost, kterou ma podle me perspektivni programator. Podle me programator musi byt liny.
Co tim myslim:
Priklad 1) Pisu, pisu kod a vsechno krasne funguje. Za tyden nekdo prijde a rekne, ze chce neco podobneho. V tu chvili spatny programator vezme puvodni kod, udela Ctrl+C a Ctrl+V, prepise X radku a prohlasi za hotovo. Dobry programator se podiva na puvodni kod a zkusi ho upravit tak, aby vyhovoval obema s minimalni upravou.
Priklad 2) Sef mi rekne: V pondeli prekopiruj soubor X ze slozky Y do slozky Z. Tak to udelam. Dalsi tyden prijde, ze je to potreba udelat znova. Spatny programator jde a tupe prekopiruje soubor znova. Dobry programator si udela program, ktery se automaticky kazdy pondeli spusti a o usetreny cas si prodlouzi obed.
Souhlasím se tebou, ale nevím, jestli "líný" je zrovna nejpřiléhavější označení, protože oba ty "špatný" příklady zrovna obnášejí míň práce než ty "správný" :-) (copy-paste je jednodušší a rychlejší než refaktor a zkopírovat soubor je rychlejší než psát skript) Spíš něco jako "líný v dlouhodobým horizontu"?
-
Cele toto vlakno mi pride akoby sa niekto chcel naucit jazdit na bicykli a namiesto toho aby na neho sadnul a zacal sa ucit metodou pokus - omyl (pád), tak sa snazi na internete najst knihu ktoru si precita a bude z neho dalsi Sagan.
Na programovanie treba mat spravne vlohy,
-treba mat celkovo logicke myslenie (byt schopny riesit problemy, nie googlit kazdu sprostost, pretoze na internete je kopa blbich rieseni),
-treba chapat matematike (ak ma niekto na zakladke problem s matikou a prelieza nou so 4kami, tak z neho nikdy programator nebude),
-treba mat aj nejake slusnejsie IQ (nechcem sa nikoho dotknut, ale clovek s dvojcifernym IQ sa bude pri programovani fakt trapit uz na skole, nie to este v robote),
-treba byt zvedavy (skola ti da sice zaklady programovania, ale treba sa neustale vzdelavat, a tim nemyslim len ucit sa nove jazyky a frameworky, ale hladat do hlbky preco nieco funguje ako to funguje, dost to nasledne pomaha pri hladani optimalneho riesenia a pomaha to pri vyhybani sa pascam ktore clovek bez toho nebude poznat).
-
Bez do kramu, kup chleba a kdyz budou mit rohliky tak jich vem deset.
Dobry den, mate rohliky ?
Ano
Tak prosim deset chlebu.
-
Syn si chce kupit seriu knih The art of programming. Myslite, ze je to dobra investicia a nieco ho ta kniha nauci? Pytam sa preto, ze je to vacsia investicia a bola by som nerada, ak by zapadali prachom na policke.
Jestli vas trapi jen tohle, tak si nejaky dil pujcte na prazdniny v knihovne :-)
Tesat. Hele je to třicet let, ale mě knihovna formovala dost zásadně. Já bych doporučil zřídit průkazku do knihovny. V dnešní době tam budou spíš všelijaké návody ke komerčním produktům co zrovna letí... mezi vykopávkami bych namátkou zmínil s odpuštěním Kernighan+Ritchie C. Tuším u nás kdysi vyšel slovenský překlad. Je tam hezky vysvětlená stavba toho jazyka. I tak je to někde od prostředka, já začínal s páječkou a po pár základech v Basicu mě daleko víc zajímal x86 assembler... A zrovna ta Knuthova encyklopedie (https://en.wikipedia.org/wiki/The_Art_of_Computer_Programming) je zřejmě vážně dost hutná - řekl bych nepříliš záživná třeba i pro vysokoškoláka. Našel jsem někde válet vzorovou kapitlou. Řekněme pokud už člověk má za sebou začátky v nějakém programovacím jazyce a něco si přečetl, a má určitou toleranci vůči vědátorskému slohu, může být zajímavé, přečíst si, co k tomu na mnoha stovkách stran sepsal pan profesor.
Jasně že se programovací knížky nedají číst od začátku do konce jako beletrie. A člověk nemusí/nemůže hned pečlivě zkoušet všechny příklady. Středoškolák to taky nemůže všecko pobrat na první dobrou. Navíc v knížkách v "pokročilých" kapitolách bývají spíš všelijaké speciality a slepé vývojové větve, "vata". Člověk musí umět "přeskakovat pasáže, kterým zatím nerozumím" (protože nejsem tak daleko, nebo protože je autor odflákl, nebo mě to prostě nezajímá). Popravdě hodně důležitá schopnost je "řídké čtení" = být schopen najít kapitolu/pasáž, která mě zajímá, kus si přečíst, mrknout se letmo kolem co je ještě zajímavého k vidění, a pravděpodobně knihu odložit. Vyhledávání klíčových slov v elektronických textech to zvedá ještě o level jinam :-) Najít jehlu v kupce sena - najít kýženou jednu větu nebo položku v tabulce v několika desítkách / stovkách stran nějakého manuálu... Orientovat se v textu, který je vycpaný vatou, a hledat v něm sladká tajemství, často mezi řádky...
Člověk nemuže přečíst všechno. Znám jednoho, který o sobě tvrdí, že má nutkavou potřebu, když už začne číst knihu nebo nějaký návod, přečíst ho úplně do konce (údajně porucha autistického spektra) a je hrozně naštvanej, když se příjemně plynoucí čtení zvrhne v nesrozumitelnou haťmatilku...
K vlastnímu programátorskému hraní schází samoukovi při školní docházce témata. Cíl - co vlastně programátorsky pojednat, jakou úlohu vyřešit. Příklady z učebnice jsou dobré a zajímavé spíš v naprostých začátcích. Tohle se obrátí naruby, jakmile si člověk najde práci :-)
Ohledně postesků starých borců "nekopírovat každou blbost z examplů na internetu" - jasně, člověk se musí naučit používat vlastní mozek, kriticky posuzovat cizí příklady. Ale i tady má nezastupitelnou úlohu pokus/omyl. Něco se dočtete z knížek, nebo Vás před tím varují ve škole, ale ve spoustě věcí si člověk musí čumák namočit sám :-) a začít od cizího examplu je jako rychlý start docela dobré. Jasně, hned tam vidíte blbosti, neošetřené větve a chyby po návratu hnihovních funkcí apod.
Kromě toho, velká část prográtorské činnosti spočívá v práci s hotovými knihovnami / API a tady je Vám často dobrý každý zdroj, který dokážete najít: hrubé základy najdete v referenční příručce / manuálu, pak najdete pár tutorialů a výukových examplů, a když nic jiného nepomůže, ponoříte se do zdrojáků softwaru, který s použitím té knihovny už napsal někdo druhý. Případně do zdrojáků samotné knihovny, pokud jsou k dispozici.
Takže moje doporučení: dopřát to mladému všechno dohromady. Knihovna, vlastní počítač (nebo dva), internet. Pokud nemá staršího kámoše/mentora tak ať si zřídí účet tady na rootu. "Programovacích jazyků" a prostředí je k dispozici fůra zadarmo. Ať se pustí vlastní cestou. Obor "IT" je hrozně široký. A nezanedbávat "nepočítačové" činnosti. Nenutit do vrcholového sportu apod., ať si volný čas řeší po svém, ale ať se trochu vyvětrá / přijde na jiné myšlenky / mezi živé lidi.