IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Chci si napsat svůj program a nic za to neplatit

Aktivity
Avatar
tomlib
Člen
Avatar
tomlib:30.6.2022 20:38

Dobrý den, snažím se zajímat o programování. V dětství jsem poznal trochu Sinclaira a BASIC a protože nemám moc schopností, tenhle způsob psaní programů mi vyhovuje asi nejvíc. Rád bych uplatnil na PC nebo mobilu nějaké schopnosti, které v této oblasti mám, což sice není moc, ale psaní takového kódu je pro mě logické a přímé, což se třeba o JAVA nedá říct. Vše se mi zdá ale strašně složité, nerozumím tomu co je to třída (vím, že se v programování třeba používají nějaké knihovny s již hotovými programy ale tohle nechápu). Vše je ale napsané bez vysvětlení toho na co se člověk vlastně ptá což je třeba důvod takového větvení a je zaváděn a odváděn myšlenkami jinam. Třeba co mě zajímá, tak seznam slov, která mohu použít, jejich parametry, příklady programů, stavební kameny, ze kterých se dá něco skládat. Existuje něco, co by mě mohlo v tomto směru s tímto názorem zaujmout?

Zkusil jsem: Zkoušel jsem knihovnu, internet, referenční soubory. Nikde jsem textům neporozuměl.

Chci docílit: Snažím se vytvořit jakýkoli program pro mobil nebo PC, který by fungoval a který třeba chybí na GooglePlay. Třeba záznam otřesů na mobilu. Stačilo by mi třeba zaznamenávat polohové čidlo. K tomu je ale potřeba dost značná znalost systému.

 
Odpovědět
30.6.2022 20:38
Avatar
znovacek
Člen
Avatar
znovacek:15.7.2022 13:58

Ahoj, to co chceš i kdybys našel, tak ti k ničemu nebude. Java je objektové programování, což se o Basicu říct nedá. Abys porozuměl knihám, internetu a souborům o Javě, musíš pochopit nejdřív obecně objektové programování. I na to zde jsou dobré tutoriály. Nic jiného než dokola číst, zkoušet a snažit se najít souvislosti + pochopení ti nikdo asi neporadí. Programování je o stovkách a tisících věnovaných hodin času. Nic není zadarmo ač se to na první pohled možná zdá. Musíš usoudit sám, zda je pro tebe lepší hledat a učit se mnohem více hodin na různých místech danou věc, nebo zda za naučení stejné věci nejsi ochoten něco zaplatit kde je to všechno přehledně od A do Z ušetřený čas investovat do něčeho jiného.

 
Nahoru Odpovědět
15.7.2022 13:58
Avatar
Lubor Pešek
Člen
Avatar
Odpovídá na tomlib
Lubor Pešek:9.8.2022 14:50

No nevím, jak je tohle vlákno po měsíci a půl aktuální, ale popravdě jsem z takového požadavku trochu zmatený.
Píšeš v jedné větě: protože nemám moc schopností,, tenhle způsob psaní programů mi vyhovuje asi nejvíc
A hned v následující větě napíšeš: Rád bych uplatnil na PC nebo mobilu nějaké schopnosti, které v této oblasti mám
:)

Přiznám se, že já jsem čistě objektově orientovaný programátor (proto mám teď třeba s JS velké problémy) a o Sinclair tady čtu poprvé. Když jsem si to v rychlosti vygooglil, připadá mi to jako hybrid assembleru a céčka, ale to je fuk.

Když to řeknu zjednodušeně, tak úplně základní myšlenka OOP je postavená na tom, aby se pokud možno virtuální svět a vše, co programuješ, podobalo reálnému světu. Proto vznikly i metodiky, bez kterých ti sice kód bude fungovat, ale jejich nedodržování potom vede k nesmyslům.
Například: Jedno z pravidel OOP je SRP (single responsibility principle). V podstatě to znamená, že když definuješ metodu, tak aby se metoda zabývala pouze tím, k čemu je určená (zrovna předevčírem jsem o tom tady psal "komentář" :D Píšu uvozovky, protože mé komentáře bývají větší, než články :D:D). Takže když máš třeba metodu nastavTlacitko(), tak bys od takové metody asi neočekával, že tlačítko vytvoří, že bude řešit matematickou logiku atd. Ano, jde to do té metody narvat a bude ti to fungovat, ale pak to ztrácí smysl.

Takže OOP znamená ve stručnosti, že jak funguje svět, tak by měly fungovat i programy.
Když v reálném světě vyrobíš židli, tak to samé bude i v programování. Když v reálném světě nemůže židle propadnout podlahou, tak by neměla propadat ani v programování. Takhle se na to musíš dívat.

Rozdíl mezi OOP a strukturovaným programováním (nebo scriptěním scriptů) je především v tom, že už z názvu orientovaně OBJEKTOVÉ programování si celý program rozdělíš na objekty.
No a celkově smyslem toho všeho je, že každý objekt (část programu) programuješ samostatně a pokud možno naprosto nezávazně na ostatních objektech.

Například - když bys ve strukturavaném programování programoval robota, tak v jednom souboru od shora dolů budeš programovat kompletně všechno (aspoň tak mi to bylo vysvětlováno :D jak říkám - já jsem čisto krevný OOP developer, takže mám o strukturovaném programování jen ty nejhorší představy:) )
Na rozdíl od toho budeš v OOP třeba programovat dejme tomu samostatně končetiny (a těm budeš dávat pouze jedinečné funkce. Nohy budou chodit, zatímco ruce budou mávat, držet, ukazovat fakáče, atd. A hlava bude třeba mrkat, vrtět se, plakat, smát se atd.)

To je ten zásadní rozdíl v pohledu na OOP.
Když bych ti řekl třeba příklad z praxe, tak jedna část programu bude řešit pouze a jenom zpracování dat do databáze a nebo do kódu.
Druhá část zase bude řešit pouze a jenom mapování, druhá část bude řešit business logiku, třetí část bude vše managovat, atd. atd. atd. Prostě každý úsek bude mít pouze jednu odpovědnost.

Výhody jsou patrné - pokud programuješ dejme tomu zobrazení trojúhelníku na základě vypočítaných souřadnic, tak nehrozí nebezpečí, že bys omylem třeba narušil výpočet těchto souřadnic. Ty se řeší samostatně a zase jiná část kódu řeší právě jejich zobrazení atd.
A jak jsem řekl - máš takhle pracovní proces i v reálu.
Dejme tomu, že jsi výrobce aut.
Tebe nezajímá, jak kdo vytvořil šroubek, jaké nástroje na to použil a jaké k tomu použil postupy. To je jeho problém. Ty chceš po něm objekt (šroubek). To samé barva laku. Tebe nezajímá, jakými chemickými postupy vyrobili tu barvu. Ty si prostě koupíš barvu (objekt) a použiješ ji.
A na tomhle principu jsou třeba právě založeny ty knihovny. Knihovna není skutečně nic jiného, než někým jiným naprogramovaný kód, který něco umí a ty jen využíváš tento kód. Vytvoříš si z těchto programů objekty a pak už jen voláš (volat = používat) metody (metoda = funkce objektu), tak, jak se ti hodí.

Co se týče toho pojmu třída...
Tak třída je spolu s objektem prakticky základní stavební dvojice OOP.
Objekt = už něco hotového, co můžeš specifikovat.
Třída = něco jako předloha, kterou ty sice programuješ, ale je to něco abstraktního, z čeho se právě vytváří konkrétní objekty.
Nerad používám slovo šablona, protože šablona znamená, že by všechny objekty byly pak stejné, ale v podstatě by sis mohl třídu představit jako továrnu na objekty.

Například: Máš auto. Auto samo o sobě nemůžeš nijak popsat. Když 100 lidem řekneš, ať si představí auto, tak je prakticky vyloučené, aby si dva lidé představili naprosto to samé auto (pokud nejsou z jedné rodiny a nebudou myslet na svého žigulíka zaparkovaného v garáži :D)
Auto je tedy třída.
A proč? Protože ty můžeš říct, že vytvoříš nové auto (instanci třídy) (instance je synonymum pro objekt. Máme pro tu samou věc dva pojmy, abychom vypadali víc chytře :D). A když vytvoříš nové auto, tak teď je na tobě:

  • Kolik bude mít kol? 3, 4 a nebo 6 (třeba tahač)
  • Jakou bude mít barvičku?
  • Jaký to bude typ? (sedan, SUV, kombik)
  • Jakou bude mít SPZ?
  • Jakou bude mít značku?

atd. atd. atd.

Takže třída prostě značí něco, z čeho se teprve budou vytvářet objekty. Je to něco, co nemůžeš přesně specifikovat.
Objekt naopak právě můžeš specifikovat a už s ním nějak pracovat.

Malinko matoucí může potom být v kódu to, že ty neprogramuješ objekty, ale právě třídy. V té třídě najednou všechno nastavuješ (budeš tam psát, že "třída má atribut (vlastnost) spz, že má atribut značku, že má atribut počet kol" atd.)
Jenomže to je právě všechno příprava na budoucí objekty.
Popravdě v tom je celá krása toho programování. Ty jako programátor právě určíš, co tvá třída bude umět.
Dejme tomu - budu programovat třídu MatematickeOperace.
A tuto třídu zadáš 3 programátorům a ať ji naprogramují. Samozřejmě, tak jak ti to teď v tuto chvíli popisuji, tak špatný programátor by hned začal programovat a tak by to být nemělo. Správný postup je takový, že programátor nejdřív zjistí, co se po něm chce (takže by mi měl říct - fajn, chceš, abych naprogramoval třídu MatematickeOperace. Co všechno ta třída má umět? Tím se myslí, co budou umět objekty, které se z této třídy vytvoří?), ale teď na demonstraci, abys pochopil ty rozdíly, tak od tohoto upustím:)

  1. programátor napíše kód v této třídě tak, že ta třída bude umět jen sčítat, odčítat, násobit, dělit.
  2. programátor napíše tu třídu tak, že bude umět výše uvedené 4 úkony + zjišťovat medián, počítat průměr, práci s procenty, výpočty obsahů, objemů a obvodů, výpočet pravděpodobnosti, a prostě spoustu dalších věcí.
  3. programátor je idiot a místo toho, aby třída pouze obsahovala funkce pro výpočty, tak tam do toho narve i vypisování výpočtů do nějakého okna, vytváření souborů, které tyto výpočty budou ukládat atd.

Ano, to by bylo potřeba, ale určitě bys nehledal metodu ulozitDoSouboru() ve třídě MatematickeFunkce. To je to samé, jako kdybys hledal funkci prodatKladivo() ve třídě Drogerie nebo funkci vypravVlak() ve třídě Koupaliště. Ano, šlo by to naprogramovat, ale je to nelogické (čili není to objektově orientované).

No a popravdě nevím, co tě k tomu programování vede. Jestli nepochopíš tak základní vlastnost OOP, jako co to je třída (což doopravdy je v OOP světě asi to samé, jako se v matematice naučit psát číslice), tak pak zvaž svou touhu programovat. Existují daleko složitější praktiky a pojmy. Kupříkladu dědičnost, to je hodně široká oblast a hlavně pochopit, kdy má smysl a kdy ne, to je na ní to nejtěžší...

Každopádně pokud bys měl dobré nápady, tak i tak se v IT můžeš uplatnit. Analytici jsou víc nedostatkové zboží, než developeři.
Programátoři to mají ve skutečnosti velmi jednoduché - ti se musí naučit tyto výše uvedené praktiky, ovládat je a dávají především pozor na to, aby kód měl hlavu a patu a aby se v něm hlavně jiní programátoři dokázali rychle orientovat. Ale jinak mají jednoduchou práci - zpracovávají požadavky zákazníka/analytika do kódu.
Analytik má naopak velmi těžkou práci - vymýšlí CO je potřeba naprogramovat a celkovou realizaci aplikace. Pak jen řekne - hele, tohle a tohle mi někdo napište tak, aby to uměl počítač. A programátor pak řekne - jo, to zvládnu a na toto bude vhodná Java, nebo JS nebo Python, atd.

Tím tě nechci úplně odradit, ale pokud máš problém vstřebat skutečně tu nejzákladnější věc, tak by ses mohl potom prakticky neustále trápit.

Nahoru Odpovědět
9.8.2022 14:50
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
DarkCoder
Člen
Avatar
Odpovídá na tomlib
DarkCoder:9.8.2022 15:48

Pokud chceš něčeho dosáhnout, je třeba postupovat systematicky. Je třeba mít jakousi představu o tom, o jaký typ aplikace se bude jednat. Je třeba si v úvodu zodpovědět zásadní otázku. Na jaké platformě má být tvá aplikace funkční. Poté je třeba zvolit vhodný nástroj, pomocí kterého svoji aplikaci napíšeš a co vše k tomu budeš potřebovat. Následně přichází na řadu studium, pěkně od základů.. Zde už není cesty zpět, musíš pochopit jak se s daným nástrojem pracuje. Různý nástroj přináší různé možnosti ale i různou obtížnost. Odhodlání, vytrvalost a touha uspět, to je co bys měl mít. Hodně zdaru!

Nahoru Odpovědět
9.8.2022 15:48
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
tomlib
Člen
Avatar
tomlib:9.8.2022 17:15

Děkuji za obsáhlé zprávy. Pokud jsem napsal, že moc schopností nemám, klidně ale nějaké mít mohu. To není snad zas nějaký protimluv. Co jsou knihovny vím, bohužel jsem se nedostal zatím k jejich použití. Do odpovědi jsem se ale nezačetl příliš hluboko, protože je matoucí a zdá se mi násilná. Sledujte všichni blázna a pamatujte si co po vlastně po vás zopakoval a dejte si to do hlavy od něj a přemýšlejte sním jen o tom. Chtěl jsem hlavně poznamenat, že Basic dává logiku, že programu a jeho syntaxi v Javě není tak lehké porozumět. Cíl pro programátora je aby mohl vytvořit aplikace, které třeba na trhu z nějakého důvodu chybí. Myslím, že jsem konkrétní případ třeba uváděl. Zde jsem nalezl po čase zase aplikaci, která batoh pohlídá, ale zase není tak uzpůsobená, jak bych chtěl. Kdyby byla psaná v Basicu, dokázal bych možná nalézt potřebné proměnné a možná jí upravit v Javě určitě ne. Co je programování objektové není ani tak zcela jasné. I v jazycích jako je Basic existují podprogramy a větvení, kde se pro určité rutiny odskakuje vedle, protože je potřeba aby byly dostupné z více míst a je blbost je psát za sebou znovu. To ale asi těmi objekty nenazýváme. Zase je otázkou na kolik je pevný proti zásahům zvenčí třeba ten systém počítače. Ono třeba můžeme si vytvořit program na nějaké výpočty nebo speciální kalkulačku na nějaký vzorec, což můžeme udělat ale klidně i v Excelu. Ale pokud někdo získá informace o fungování počítače a www atd., kde jsou třeba systémy bezpečnosti a bank a bude pomocí nějaké rutiny třeba mapovat a dekódovat celou RAM a s výstupy nějak nakládat.ohrožuje únik takových znalostí další osoby a systémy a finance celých firem. Pokud někdo vytvoří třeba ten šroubek do toho auta jako do programu, mě budou zajímat jeho vlastnosti. Tj. vstupy a výstupy toho šroubku. To je blbost. A dál. Do úrovně vstupů a výstupů se k takovým věcem se v literatuře moc dostat nejde. Pokud mi někdo na 150 stranách vysvětluje proměnné, přitom se vyhne použití klasické syntaxe a nevysvětlí třeba důvod proč se používá tak, je to pro mě sice zázrak, že dovede tak dlouho kecat o ničem a zatěžovat mozek nesmysly, ale já si z toho nedokážu nic nového vzít. Vlastně jen se různě dokola kroutí a přehazuje co je jasné a co člověk zná vlastně od mala. Jak říkám, pokud bych chtěl třeba programovat, bude mě zajímat, jak otevřu v systému okno pro svůj program, vytvořím třeba tlačítka, seznam slov toho kterého jazyka, jejichž skládání bylo třeba v jazyku Basic logické. Jsem člověk a jako člověk přemýšlím, jsou pro mě důležité věci hmatatelné ne abstraktní. Zase kde jsou ale hranice té bezpečnosti. Tím bych asi tuhle diskusi protože jsem ji začal i skončil.

 
Nahoru Odpovědět
9.8.2022 17:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.