Jak efektivně studovat programování?

Artii

Jak efektivně studovat programování?
« kdy: 20. 10. 2020, 11:03:58 »
Zdravím, chtěl se zde místní komunity zeptat na pár rad ohledně studia programování.

Moje zkušenosti:

Java (začátečník) - na úrovni semstrálního projektu (základní syntaxe, OOP, okenní aplikace, IO operace, vyjímky)
HTML a CSS (začátečník) - opět jen na úrovni semestrálky (jednoduchý web)

Chtěl bych (alespoň pro začátek) se naučit:
- efektivně skriptovat (jak ve win a v linuxu), myslím tím různé automatické práce se soubory, hromadné úpravy atd.
- vytvářet jednoduché webové aplikace (například něco jako požadavkový systém s napojením na DB apod.)

Podle toho co jsem hledal existuje spousta jazyků ale vyznat se v tom jaký který je lepší na to nebo na to je už horší, určitě budu muset alespoň částečně zůstat u Javy kvůli škole.

Zároveň mě zajímá jaké znalosti k tomu rozvíjet? Má smysl se vracet například k jazyku C? Jakým způsobem jste se učili programovat a čemu se vyhnout?

Budu rád za každou radu, tip případně i zdroje na nějaké materiály k studiu. Díky


Mlocik97

  • *****
  • 830
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Jak efektivně studovat programování?
« Odpověď #1 kdy: 20. 10. 2020, 11:25:16 »
Osobne C a Python sú na začiatok asi najlepšie, Python kvôli krivke učenia, a C pretože je nižšej úrovne než Java, Rust, Kotlin, Haskell a pod. C je ťažší, ale když sa to naučíš, už nebudeš mať väčšie problémy naučiť sa aj iné jazyky. Navyše pochopíš ako sa pracuje s pamäťou, ako optimalizovať aplikácie, na čo si dávať pozor. Určite by si si mal pozrieť aj základy JavaScriptu, ktorému sa vo webovom vývoji len ťažko vyhneš.

Začínať s Javou ako s prvým jazykom si nemyslím že je dobré, keď sa ju naučíš, tak potom procedurálne a funkcionálne jazyky sa budeš učiť skoro ako od nuly.

Re:Jak efektivně studovat programování?
« Odpověď #2 kdy: 20. 10. 2020, 11:50:38 »
Vyber si oblast, která tě baví a snaž se pro ni vytvořit nějaký program. Když jsem začínal, tak jsem si chtěl vytvořit program na zkoušení otázek autoškoly.

Programovací jazyk je asi jedno. Každou chvíli budeš potřebovat nějaký jiný.
Zmínil jsi skriptování. Na skriptování pro sysadminy ve windows asi budeš chtít použít powershell, na skriptování v linuxu bash, zsh ....

Pokud máte ve škole javu, tak ji používej i na svoje další projekty. Ze začátku bych se snažil naučit jeden jazyk velmi dobře s celým ekosystémem. Je málo oblastí, pro které by java byla vyloženě špatné řešení.
Pokud chceš něco opravdu jiného, pak bych zvolil programování robotů a Arduino, Edison 2.0 podporuje Python, Lego Javu (ale moc to do detailu neznám)

Processing je další zajímavý jazyk na učení. Psal jsem tady o tom dřív, tak dávám jen dva linky
https://processing.org/ a https://natureofcode.com/

Pokud opravdu trváš na dalších jazycích, tak místo Pythonu bych k Jave pridal něco funkcionálního. Zeptej se učitele, jestli nějaký funcionální jazyk zná - používá. Zkus ten, protože v případě problémů tě může postrčit.

Nezapomínej na jazyky jako Angličtina a Němčina. Těm bych dal stejnou prioritu jako učení se programován. Dá se to i kombinovat, když budeš používat jen anglickou dokumentaci k učení se.

Hodně štěstí.

Re:Jak efektivně studovat programování?
« Odpověď #3 kdy: 20. 10. 2020, 12:53:55 »
jestli jsi soutezni typ, zacal bych treba s leetcode, codewars, codingame, hackerrank a podobnymi strankami. Muzes prohlizet reseni od jinych uzivatelu, stranka automaticky vyhodnoti tve reseni, hodne se naucis.

ne kazdeho bavi vytvaret nejaky hobby projekt, ktery stejne nikdo nebude pouzivat
« Poslední změna: 20. 10. 2020, 12:55:35 od A.P.Hacker »

_Jenda

  • *****
  • 1 550
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Jak efektivně studovat programování?
« Odpověď #4 kdy: 20. 10. 2020, 13:30:49 »
Má smysl se vracet například k jazyku C?
V uvedeném (jednoduché weby, skriptování a jednoduché okenní aplikace) je C k ničemu, ale pokud budeš dělat něco složitějšího (interakce s hardware nebo nějakými knihovnami co nemají binding pro tvůj jazyk, kód co musí být rychlý (i když javový JIT je relativně rychlý taky)), tak se tomu nevyhneš.

Jakým způsobem jste se učili programovat a čemu se vyhnout?
Učil jsem se strašně živelně -- když bylo něco potřeba udělat, tak jsem to vždycky nějak vygooglil a zbastlil. Pak mi strašně pomohla spolupráce na několika projektech s kamarády a potom je velmi přínosné dělat code review s někým kdo tomu rozumí. A pak jsem šel na matfyz, kde jsem se naučil různé algoritmy a datové struktury. Můžeš si o tom přečíst slidy a knížku: http://ktiml.mff.cuni.cz/~cepek/vyuka.html (ADS 1 a 2), http://pruvodce.ucw.cz/, kuchařky a vzorová řešení na https://ksp.mff.cuni.cz/.


Re:Jak efektivně studovat programování?
« Odpověď #5 kdy: 23. 10. 2020, 03:19:04 »
Re. Efektivně.... :

Aby to bylo efektivní, tak by za tím asi měla být pevná a jasná motivace.
Někdo má plnou hlavu vlastních nápadů a má touhu je zhmotnit, někdo se chce přidat k něčemu velkému, smysluplnému a mít dobrý pocit, že má kousek kódu v něčemu, co používají miliony lidí. Někdo se chce programováním především živit, a pak je dobré se zabývat tím, jak si najít své místo ve výdělečné mašinérii (freelancer s vlastními projekty od A do Z, člen malého startupu, specialista na nějakou oblast, architekt, frontend/backedn, databázista, projekťák, vědec,  ...) Také obor působnosti hraje velkou roli. Někomu by se příčilo stavět programy pro dolování dat ze sociálních sítí, někdo si libuje při vývoji "AI" pro armádu, někdo miluje piplání s realtime systémy pro kosmické sondy.
Kombinace více pozic a oblastí se nevylučují.

Od té motivace se odvíjí další kroky, aby to bylo "efektivní", tedy to přímočařeji vedlo k cíli. Po chvíli učení základů to chce "na něčem dělat" a nejlépe pravidelně a intenzivně.

Chtěl bych (alespoň pro začátek) se naučit:
- efektivně skriptovat (jak ve win a v linuxu), myslím tím různé automatické práce se soubory, hromadné úpravy atd.


V těchto úlohách pro mě jasně vede Python.
PowerShell a Bash bych řešil jen do úrovně jednoduchých, přímočarých scriptů a případně z důvodu orientace se ve scriptech druhých.

- vytvářet jednoduché webové aplikace (například něco jako požadavkový systém s napojením na DB apod.)

Pokud už budeš umět Python, tak s ním můžeš dělat i ty webové aplikace.
Nejlépe asi za pomoci některého z webových frameworků.

Základní principy programování: dekompozice, abstrakce, syntéza,  algoritmizace, proměnné, základní datové typy, podmínky, cykly, funkce, objekty, výjimky, debugování, testování,... za tím stojí stejné koncepty a tyhle znalosti jsou víceméně přenositelné napříč většinou jazyků.

Další technologie k ochočení by mohli být: zabydlení se v některém z velkých IDEček, GITování, profilování a teorie kolem výpočetní náročnosti, znalosti z oblasti softwarového inženýrství.

Tož ať se daří.


Artii

Re:Jak efektivně studovat programování?
« Odpověď #6 kdy: 23. 10. 2020, 10:39:28 »
Ahoj, díky za názory a odkazy na různé materiály. Jsem z toho právě takovej roztěkanej - čím víc možností tím se mi hůř rozhoduje, rád bych uměl všechno ale času na to tolik mít nebudu - můžu se tomu věnovat maximálně 2-3 hodiny denně.

Mám teď pár nápadů na jednoduché webové aplikace které bych chtěl zhmotnit.

Zkoušel jsem si například pár základních věcí v PHP a přišlo mi to takové jednoduché (třeba proti Jave) ovšem názory na internetu ohledně PHP jsou takové rozporuplné (možná spíš až negativní).

Vím že výběr jazyka není rozhodující ale pokud chci věnovat nečemu čas a usílí tak bych chtěl aby mě to někam posunulo, například a to mě opravte okud se pletu:

Když budu chtít vytvořit nějakou webovou aplikaci budu potřebovat HTML+CSS+JS+PHP - ale z tohohle hlediska mi přijde lepší využit node js místo PHP  protože se tím naučím syntaxi JS pro vytváření front endu (rozumnější by to asi bylo spíš obráceně). Pak když nad tím přemýšlím tak backend jde udělat i v Javě tak proč ztrácet čas s PHP nebo node js a prostě se to vše naučit v Javě.

Omlouvám se asi to moc řeším, jen v tom chci nějak zorientovat a efektivně využít svůj čas.

 

Ink

  • *****
  • 654
    • Zobrazit profil
    • E-mail
Re:Jak efektivně studovat programování?
« Odpověď #7 kdy: 23. 10. 2020, 12:52:00 »
Ahoj, díky za názory a odkazy na různé materiály. Jsem z toho právě takovej roztěkanej - čím víc možností tím se mi hůř rozhoduje, rád bych uměl všechno ale času na to tolik mít nebudu - můžu se tomu věnovat maximálně 2-3 hodiny denně.

Mám teď pár nápadů na jednoduché webové aplikace které bych chtěl zhmotnit.

Zkoušel jsem si například pár základních věcí v PHP a přišlo mi to takové jednoduché (třeba proti Jave) ovšem názory na internetu ohledně PHP jsou takové rozporuplné (možná spíš až negativní).

Vím že výběr jazyka není rozhodující ale pokud chci věnovat nečemu čas a usílí tak bych chtěl aby mě to někam posunulo, například a to mě opravte okud se pletu:

Když budu chtít vytvořit nějakou webovou aplikaci budu potřebovat HTML+CSS+JS+PHP - ale z tohohle hlediska mi přijde lepší využit node js místo PHP  protože se tím naučím syntaxi JS pro vytváření front endu (rozumnější by to asi bylo spíš obráceně). Pak když nad tím přemýšlím tak backend jde udělat i v Javě tak proč ztrácet čas s PHP nebo node js a prostě se to vše naučit v Javě.

Omlouvám se asi to moc řeším, jen v tom chci nějak zorientovat a efektivně využít svůj čas.

Paralýza možnostmi (option paralysis), to je normální. V zásadě ale řešíš několik různých cílů:

1. Udělat něco rychle a dostatečně dobře.
2. Pochopit obecné principy a umět optimalizovat řešení (na rychlost vývoje, rychlost běhu produktu, škálovatelnost, udržovatelnost). Prostě se intelektuálně rozvíjet a růst.
3. Naučit se něco, o co je zájem na trhu (ale viz bod 4).
4. V neposlední řadě - dělat něco, co Tě baví, protože je to tvůj čas a chceš ho strávit i příjemně.

A teď si polož otázky:

Je možno v PHP udělat něco rychle a dostatečně dobře? Můžu se s jeho použitím rozvíjet? Je o něj zájem na trhu? Baví mě práce v PHP, nebo mě nudí a děsí?

To samé pro Javu. To samé pro JS. To samé pro jakýkoli další jazyk.

Třeba v mém případě: Shellové skripty mě nejenom nebaví, ale přijdou mi z programátorského hlediska jako strašná prasárna. PHP mi nevadí, ale víc mě baví Python. V Pythonu se dá naprogramovat "všechno", ale má svoje zjevné nevýhody. Určitě se v něm uživím. Ještě víc mě baví Rust, ale to je takový seriózní drsný pán, není to kamarád na rychlou akci. Spojení Rustu a Pythonu mi řeší prakticky úplně všechno a baví mě. Pokud Tě Java baví, klidně v ní pokračuj, pro mě to není, ale to není podstatné.

Určitě bych zvládl psát v několika dalších jazycích (a živilo mě to), ale nedělám to, pokud nemusím.
« Poslední změna: 23. 10. 2020, 12:53:52 od Ink »

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Jak efektivně studovat programování?
« Odpověď #8 kdy: 23. 10. 2020, 16:14:36 »
Kotlin, Haskell

Na to, zda se učit Haskell mám rozporuplné pocity. Sice se naučíš a pochopíš spousta věcí z programování, jenže... Já třeba teď dělám v C# a furt zakopávám o to, že se samozřejmostí očekávám věci, které C# prostě neumí. Typové varianty, gradual typing, a tak.

Re:Jak efektivně studovat programování?
« Odpověď #9 kdy: 23. 10. 2020, 18:51:15 »
Zdar, mně osobně ani tak abstraktní věci typu datové struktury nebo profilování programu nepřipadají jako to nejpodstatnější. Já bych požadoval co nejjednodušší kód, který bude fungovat. Tedy aplikace typu: Zobraz formulář, zadej jméno, příjmení, datum narození, odešli to do databáze a pak na výchozí tiskárnu. Aplikaci pak nahraj na USB flešku, přenes na jiný počítač, a tam proveď stejný test. Na takovém základu se dá stavět dál.


Re:Jak efektivně studovat programování?
« Odpověď #10 kdy: 23. 10. 2020, 21:43:14 »
V oblasti webu je to trochu divočina, protože se tam míchá několik různých technologií a asi se, bez ústupků, nevyhneš jejich kombinaci.

HTML, CSS, trocha JS to je asi základ.
Pak záleží na tom, jaké webové aplikace chceš vyrábět.
Jestli vyžadují silnou interakci s uživatelem, pak se asi bude třeba ponořit hlouběji do JS a jeho zvěřince.
Na backendu může být PHP+(MariaDB) MySQL, protože to je stále nejpodporovanější mezi hostingy, případně to mít celé postavené na nějakém frameworku, ne-li rovnou jako rozšíření WordPresu.

Cca před 20 lety jsem měl taky rozlítáno a dělal jsem souběžně v Deplhi a Pascalu, PHPčku, baťácích, Bashi, Perlu, Céčku, HTML+CSS+drobnosti v JS+pohrával si Flashem a JavaAplety (o WSH, VBS a dalších podobných raději pomlčím).
Což mi taky nevyhovovalo a hledal jsem něco, čím bych pokryl většinu toho co dělám a nebyl jsem vláčen , tedy od adminování Lin serverů a správu Win stanic přes vlastní tooling, offline GUI aplikace až po webové aplikace na cloudech.
No a většinu z toho dnes pokrývám právě Pythonem.




Mlocik97

  • *****
  • 830
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Jak efektivně studovat programování?
« Odpověď #11 kdy: 23. 10. 2020, 22:05:10 »
Citace
V oblasti webu je to trochu divočina, protože se tam míchá několik různých technologií a asi se, bez ústupků, nevyhneš jejich kombinaci.

Asi stále žiješ v rokoch pred 2010....

Dokonca dnes už len pomocou čistého JS vieš spraviť celú webstránku, vrátane backendu,... ohľadom HTML na tom neviem kto sa čo chce učiť, je to na menej než 10 minút učenia a to vrátane formulárov, a veľmi zriedkavo používaných vecí.
CSS dá trocha zabrať, ale rovnako u desktopových aplikácií používaš na tvorbu UI CSS, alebo nejaký graf. toolkit typu GTK.

Takže hovoriť o nejakom chaosu, když to není o nič komplikovanejšie než tvorba desktopových appiek v iných prog. jazykoch, je dosť prapodivné hovoriť že webový vývoj je divočina... to naopak, by som povedal že najmenšia divočina, lebo tam máš len CSS a hotovo... u Desktop appiek máš GTK, QT, Windows Forms, WxWidgets, Kivy, Fyne, AWT, Ultimate++, FLTK, Elementary, CEGUI, a mnoho ďalších... alebo aj to CSS... mimo to ale samotný JavaScript je samostatný jazyk, ktorý funguje ako akýkoľvek bežný jazyk, a kludne v tom spravý terminálové programy. Tak neviem čo je chaos.

Re:Jak efektivně studovat programování?
« Odpověď #12 kdy: 24. 10. 2020, 01:39:32 »
Ta "divočina" je věc mého osobního názoru a vychází z mých zkušeností. Je přirozené, že to někdo vidí jinak a pokud v tom co je pro mě "webová divočina" vidíte krásnou cestičku rozkvetlým údolím, tak je to jen dobře.

Pro mě je džunglí především ten ekosystém kolem JS, ta záplava všemožných technologií, které s hypem nastoupí a za pár let je přebije zase něco jiného superduper. Mám na mysli technologie jako: jQuery, Angular, React, ...
Nástin trendů třeba zde:
https://insights.stackoverflow.com/trends?tags=jquery%2Cangularjs%2Cangular%2Creactjs%2Ctypescript%2Ccoffeescript%2Cpython%2Cjavascript%2Cknockout.js%2Credux%2Cbackbone.js%2Cember.js%2Cnode.js%2Cvue.js%2Cmootools
Jak enormní úsilí je vyvíjeno, aby se lidi vyhnuli JS je možné vidět například ze seznamu transpřekladačů do JS:
https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS

Třeba nás, v tom ztracené, zachrání WebAssembly. Uvidíme.


A propós, 10 let pro mě není žádný moc velký čas.
Jsem rád, když můžu napsat aplikace a ty pak bez větších oprav mohou běžet "ideálně pořád" a stále dobře plnit svůj účel, stále být bezpečné a umožňovat rozšiřování, když je to třeba.
Nejsem dokonalý a také se v některých případech potýkám s "technologickým dluhem", ale našel bych i 20leté kousky, které téměř bez změny běží a dělají co mají a dá-li Tim a W3C, třeba budou běžet ještě dalších 20 let.

Re:Jak efektivně studovat programování?
« Odpověď #13 kdy: 25. 10. 2020, 01:47:51 »
Třeba nás, v tom ztracené, zachrání WebAssembly. Uvidíme.

Sledoval jste LinuxDays? První přednášku od Špačka? Zmiňoval tam něco (naštěstí fiktivního), zvané FlashAssembly (zřejmě něco jako flash ve WASM). Těšíte se?

Re:Jak efektivně studovat programování?
« Odpověď #14 kdy: 25. 10. 2020, 12:06:20 »
Záznam jsem viděl, ale neměl jsem pocit, že by se o tom vyjadřoval negativně.

Tohle:
WebAssembly describes a memory-safe, sandboxed execution environment that may even be implemented inside existing JavaScript virtual machines.

zní o dost lépe než to čím "byl" Adobe Flash, byť to nepopiratelně byla významná webová technologie, která měla svého času nezastupitelné místo.

Ale abychom se úplně neodofftopicovali z tématu o efektivním studiu programování.