Základy programování

Re:Základy programování
« Odpověď #60 kdy: 30. 05. 2020, 23:02:48 »
V po­sled­ní do­bě jsem uva­žo­val o za­čát­ku s pro­gra­mo­vá­ním, po­dí­val jsem se na in­ter­net, ja­ký je dob­rý za­čí­na­cí ja­zyk.

1) Webové stránky
Klidně bych ti php doporučil v nejnovější verzi 7.4 a zapnutou striktností hledej strict_types https://www.php.net/manual/en/control-structures.declare.php.

Pravděpodobně budeš potřebovat databázi, kde nejrozšířenější je Mysql alternativa MariaDb, ale jak víme co je nejrozšířenější nemusí být nejlepší, doporučil bych ti PostgreSQL. Základy budou všude stejný.

Pak se neobejdeš bez javascriptu a pokud nechceš php, tak na servru můžeš využít také javascript, hledej nodejs.


To je dost komplikované. Respektive určitě bych do toho netahal databáze (může používat regulérní soubor). Nevím, jak je na tom php, ale nodejs také dost bolí. Pokud webové stránky, tak bych se vydal cestou čistého JS, případně ten TypeScript, když už musí být. Naprogramovat si nějakou skákačku v klientovi také lecos naučí. (a seznámit se s async prostředím hned na začátku taky nemusí být od věci)

2) Aplikace pro android
Kotlin nebo Java, to IDE (Android studio) co dodává google je fakt dobře připravený pro začátečníka a spustit první aplikaci a nahrát ji do telefonu je celkem jednoduchý a když vidíš výsledky hned, v ten moment máš chuť zkoušet víc. Tady bude databáze sqlite.

To ho zabije. Java v kombinaci s Android Studiem je jedna z nejšílenějších věcí. Také to není nejrychlejší (ale čtyřku jsem ještě nezkoušel).

Pokud by byla cílem mobilní platforma, tak by nemusel být od věci Flutter. Na takové ty první aplikace se to jeví celkem použitelně (a kreslí se na canvas), ale to by měl potvrdit někdo, kdo s tím má víc zkušeností.

3) Aplikace pro Apple
- swift

Flutter je multiplatformní, to by mohlo být zajímavé.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #61 kdy: 30. 05. 2020, 23:28:05 »
V po­sled­ní do­bě jsem uva­žo­val o za­čát­ku s pro­gra­mo­vá­ním, po­dí­val jsem se na in­ter­net, ja­ký je dob­rý za­čí­na­cí ja­zyk.

1) Webové stránky
Klidně bych ti php doporučil v nejnovější verzi 7.4 a zapnutou striktností hledej strict_types https://www.php.net/manual/en/control-structures.declare.php.

Pravděpodobně budeš potřebovat databázi, kde nejrozšířenější je Mysql alternativa MariaDb, ale jak víme co je nejrozšířenější nemusí být nejlepší, doporučil bych ti PostgreSQL. Základy budou všude stejný.

Pak se neobejdeš bez javascriptu a pokud nechceš php, tak na servru můžeš využít také javascript, hledej nodejs.


To je dost komplikované. Respektive určitě bych do toho netahal databáze (může používat regulérní soubor). Nevím, jak je na tom php, ale nodejs také dost bolí. Pokud webové stránky, tak bych se vydal cestou čistého JS, případně ten TypeScript, když už musí být. Naprogramovat si nějakou skákačku v klientovi také lecos naučí. (a seznámit se s async prostředím hned na začátku taky nemusí být od věci)

2) Aplikace pro android
Kotlin nebo Java, to IDE (Android studio) co dodává google je fakt dobře připravený pro začátečníka a spustit první aplikaci a nahrát ji do telefonu je celkem jednoduchý a když vidíš výsledky hned, v ten moment máš chuť zkoušet víc. Tady bude databáze sqlite.

To ho zabije. Java v kombinaci s Android Studiem je jedna z nejšílenějších věcí. Také to není nejrychlejší (ale čtyřku jsem ještě nezkoušel).

Pokud by byla cílem mobilní platforma, tak by nemusel být od věci Flutter. Na takové ty první aplikace se to jeví celkem použitelně (a kreslí se na canvas), ale to by měl potvrdit někdo, kdo s tím má víc zkušeností.

3) Aplikace pro Apple
- swift
Flutter je multiplatformní, to by mohlo být zajímavé.
Flutter je zajímavý, už jen tím, že kašle na Javu. Současná verze je rozumně použitelná na iOS i Androidu (a mají i betu pro macOS and alfy pro Windows a Linux). Dart je poměrně slušný jazyk (pro tyto účely), na rozdíl od třeba JS, se kterým jinak mnohé vlastnosti sdílí. Elegancí sice nemá na SwiftUI, ale to je taky ještě zabugované a nedotažené (a hlavně nejde použít mimo Apple). Kdybych potřeboval psát aplikaci pro Android, sáhnu po Flutteru. Pro začátečníka to je taky docela vhodná platforma, pokud jej zajímá mobilní vývoj.

L..

  • ****
  • 310
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #62 kdy: 31. 05. 2020, 11:11:56 »
Flutter je zajímavý, už jen tím, že kašle na Javu.[/quote]

No nevím. Dart mi přijde jako Java, do které zkusili dobastlit některé modernější vlastnosti, ale výsledek je takový... polovičatý. Asi lepší, než drátem do oka, ale když to porovnám s Typescriptem, tak ten je prostě úplně jinde.

Re:Základy programování
« Odpověď #63 kdy: 31. 05. 2020, 11:45:23 »
Citace
Citace
Flutter je multiplatformní, to by mohlo být zajímavé.
Flutter je zajímavý, už jen tím, že kašle na Javu. Současná verze je rozumně použitelná na iOS i Androidu (a mají i betu pro macOS and alfy pro Windows a Linux). Dart je poměrně slušný jazyk (pro tyto účely), na rozdíl od třeba JS, se kterým jinak mnohé vlastnosti sdílí. Elegancí sice nemá na SwiftUI, ale to je taky ještě zabugované a nedotažené (a hlavně nejde použít mimo Apple). Kdybych potřeboval psát aplikaci pro Android, sáhnu po Flutteru. Pro začátečníka to je taky docela vhodná platforma, pokud jej zajímá mobilní vývoj.

Dovolím si oponovat.

Flutter není vhodná platforma na mobilní vývoj pro začátečníky, stejně jako jakýkoli jiný multiplatformní nástroj.

Realita je taková, že mobilní vývoj je roztříštěný a hlavní platformy mají každý svůj nativní toolkit pro vývoj aplikací, a tyto jsou navzájem na úrovni kódu a architektury aplikací nekompatibilní. A také vývoj aplikací pro mobily má vyšší nástupní práh než třeba pro vytváření webových stránek.

To jsou fakta která se nedají - principielně - obejít. Žádná zkratka kolem neexistuje. Její hledání je marnění času a úsilí. Pokud to někdo myslí s vývojem na mobily vážně, měl by toto přijmout, a vyjít z toho. Ušetří si hodně zklamání a zbydou mu síly na to dělat věci pořádně.

Nadšenci kteří do toho naskočí přes nějaký multiplatformní nástroj který se pokouší překlenou tuto roztříštěnost dalšími vrstvami neustále se rozpadávajícího toolchainu dalších nástrojů,  nadšeně napíšou Hello World a pak možná kalkulačku, a pak zjistí že na cokoli dalšího potřebují rozumět nejen té multiplatformní věci navrchu, ale i těm platformám pod tím, k čemuž je jim zkušenost s Flutterem, React Native nebo Ionicem v podstatě nanic, a k tomu všemu musí rozumět i těm udělátorům které z jejich multiplatformní aplikace udělají nativní appku, a že jim spousta věcí z nativních frameworků chybí a tak buď začnou programovat i nativně a bastlit to zpětně do své multiplatformní aplikace, nebo jsou odkázáni na komponenty třetích stran do kterých nevidí a které ty jejich vývojáře taky nebude bavit věčně udržovat.

Mluvím ze zkušenosti takových možná patnácti let vývoje pro mobilní aplikace, prošel jsem na mobilech od mikro Javy přes Objc až po Swift. Pracuji pro firmu která vyvíjí nativní softwarovou knihovnu kterou bohužel musíme wrappovat i do ne-nativních toolů, a je to... příšerný.

PS: Flutter sice není React Native, nicméně v principu jde o stejný typ nástroje... k přečtení dporučuji (včetně tam odkazovaných původních zdrojů) https://www.ackee.cz/blog/airbnb-konci-s-react-native/

Re:Základy programování
« Odpověď #64 kdy: 31. 05. 2020, 11:48:00 »
Já bych teda z diskuse o základech programování vyškrtnul Flutter, Dart, Haskell, OCaml a všechny další jazyky, které v ČR zná pět a půl programátora. To, jestli je nějaký jazyk něčím zajímavý, je zcela jiná úloha, než jestli je vhodný pro učení se základům programování. Programování je řemeslo, a jako v každém jiném řemesle se musíte naučit obecné postupy, jak se co dělá, a vedle toho si najít svůj vlastní styl, kdy něčemu budete dávat přednost a něco nebudete mít rád, někdy ta obecná pravidla porušíte ale budete vědět proč, někdy na nich zase budete trvat. Aby se tohle člověk naučil, musí dělat pořád dokola to samé, ale pokaždé znovu a trošinku jinak – s jiným mentorem, s jiným zákazníkem, s jiným termínem. Když se budete učit řídit auto, také nezačnete formulí 1, veteránem, Ferrari nebo obrněným transportérem, ale začnete škodovkou nebo něčím takovým, co mají všichni okolo. To není nic proti F1, veteránům nebo ótéčkům, nevypovídá to nic o jejich kvalitách – jenom to nejsou vozidla vhodná pro začátky.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #65 kdy: 31. 05. 2020, 12:40:36 »
Dart mi přijde jako Java, do které zkusili dobastlit některé modernější vlastnosti, ale výsledek je takový... polovičatý. Asi lepší, než drátem do oka, ale když to porovnám s Typescriptem, tak ten je prostě úplně jinde.
Dart má jistě svoje mouchy a není to nějaký zázračný jazyk. Prostě good enough.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #66 kdy: 31. 05. 2020, 12:51:01 »
Citace
Citace
Flutter je multiplatformní, to by mohlo být zajímavé.
Flutter je zajímavý, už jen tím, že kašle na Javu. Současná verze je rozumně použitelná na iOS i Androidu (a mají i betu pro macOS and alfy pro Windows a Linux). Dart je poměrně slušný jazyk (pro tyto účely), na rozdíl od třeba JS, se kterým jinak mnohé vlastnosti sdílí. Elegancí sice nemá na SwiftUI, ale to je taky ještě zabugované a nedotažené (a hlavně nejde použít mimo Apple). Kdybych potřeboval psát aplikaci pro Android, sáhnu po Flutteru. Pro začátečníka to je taky docela vhodná platforma, pokud jej zajímá mobilní vývoj.

Dovolím si oponovat.

Flutter není vhodná platforma na mobilní vývoj pro začátečníky, stejně jako jakýkoli jiný multiplatformní nástroj.

Realita je taková, že mobilní vývoj je roztříštěný a hlavní platformy mají každý svůj nativní toolkit pro vývoj aplikací, a tyto jsou navzájem na úrovni kódu a architektury aplikací nekompatibilní. A také vývoj aplikací pro mobily má vyšší nástupní práh než třeba pro vytváření webových stránek.

To jsou fakta která se nedají - principielně - obejít. Žádná zkratka kolem neexistuje. Její hledání je marnění času a úsilí. Pokud to někdo myslí s vývojem na mobily vážně, měl by toto přijmout, a vyjít z toho. Ušetří si hodně zklamání a zbydou mu síly na to dělat věci pořádně.

Nadšenci kteří do toho naskočí přes nějaký multiplatformní nástroj který se pokouší překlenou tuto roztříštěnost dalšími vrstvami neustále se rozpadávajícího toolchainu dalších nástrojů,  nadšeně napíšou Hello World a pak možná kalkulačku, a pak zjistí že na cokoli dalšího potřebují rozumět nejen té multiplatformní věci navrchu, ale i těm platformám pod tím, k čemuž je jim zkušenost s Flutterem, React Native nebo Ionicem v podstatě nanic, a k tomu všemu musí rozumět i těm udělátorům které z jejich multiplatformní aplikace udělají nativní appku, a že jim spousta věcí z nativních frameworků chybí a tak buď začnou programovat i nativně a bastlit to zpětně do své multiplatformní aplikace, nebo jsou odkázáni na komponenty třetích stran do kterých nevidí a které ty jejich vývojáře taky nebude bavit věčně udržovat.

Mluvím ze zkušenosti takových možná patnácti let vývoje pro mobilní aplikace, prošel jsem na mobilech od mikro Javy přes Objc až po Swift. Pracuji pro firmu která vyvíjí nativní softwarovou knihovnu kterou bohužel musíme wrappovat i do ne-nativních toolů, a je to... příšerný.

PS: Flutter sice není React Native, nicméně v principu jde o stejný typ nástroje... k přečtení dporučuji (včetně tam odkazovaných původních zdrojů) https://www.ackee.cz/blog/airbnb-konci-s-react-native/
Flutter ale funguje trochu jinak než různé wrappery wrapperů v JS. Ma soběstačnou knihovnu a vše si kreslí sám, tedy uniformně. Kód běží nativně a využívá naplno GPU. Napadá mě hodně nevýhod Flutteru, ale jeho podpora více platforem to není. Mají dobře našlápnuto, protože Google si může dovolit psát unifikující rozhraní pro různá nativní API. Akorát se člověk musí učit další “standardní” knihovnu a různé podivnosti Dartu.

V obecné rovině je asi vždy lepší použít na iOS přímo jejich API ve Swiftu, případně SwiftUI, což třeba u nás děláme, protože nás Android nezajímá, ale kdyby zajímal, byl by Flutter horkým kandidátem.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #67 kdy: 31. 05. 2020, 13:02:18 »
k přečtení dporučuji (včetně tam odkazovaných původních zdrojů) https://www.ackee.cz/blog/airbnb-konci-s-react-native/
Zajímavé články, toho sekání na Androidu jsem se taky bál, tak jsem si koupil pomalý shitphone s Androidem na testování — problémy nebyly ani na starých androidech, ani na předpotopních iPhonech. Ale stejně by bylo lepší, kdyby Google radši použil Swift, který má lepší syntax, překladač, knihovnu, GC atd. Na Fuchsii už ho používají.

Re:Základy programování
« Odpověď #68 kdy: 31. 05. 2020, 14:43:06 »
Flutter ale funguje trochu jinak než různé wrappery wrapperů v JS. Ma soběstačnou knihovnu a vše si kreslí sám, tedy uniformně. Kód běží nativně a využívá naplno GPU. Napadá mě hodně nevýhod Flutteru, ale jeho podpora více platforem to není. Mají dobře našlápnuto, protože Google si může dovolit psát unifikující rozhraní pro různá nativní API. Akorát se člověk musí učit další “standardní” knihovnu a různé podivnosti Dartu.

V obecné rovině je asi vždy lepší použít na iOS přímo jejich API ve Swiftu, případně SwiftUI, což třeba u nás děláme, protože nás Android nezajímá, ale kdyby zajímal, byl by Flutter horkým kandidátem.

Děkuji za doplnění. Já ty frameworky docela znám, píšu do nich ty wrappery pro naši nativní knihovnu 🥴.

Je pravda že Flutter si UI zásadně kreslí sám (na iOS snad už taky přechází z OpenGL na Metal), a to je problém v okamžiku kdy chcete zapojit systémové frameworky které Flutter (Google) sám o sobě nepodporuje a nebo knihovny třetích stran: všechno se musí přemostit a cokoli co souvisí s UI udělat pro Flutter od základu znovu. Navíc Flutter pro přidávání knihoven třetích stran (možná i vlastních?) na iOS používá Cocoapods, což přináší další nestabilní vrstvu která některé věci řeší reverse engineeringem Xcode, což není zrovna stabilní praktika která v důsledku vede k takovému tomu vytloukání flagu flagem aby to fungovalo.

Společným problémem těchto ne-nativních frameworků je podle mně že buď jim jdete totálně po srsti a děláte věci výhradně tak jak vyžadují, sledujete jejich vývoj a neustále upgradujete (zpětná kompatibilita nebývá jejich silnou stránkou, překotný vývoj spíš pravidlem), a smíříte se s tím že některé věci prostě "nejdou", a že jste pořád za možnostmi systémových frameworků - to u in-house vyvíjených jednoúčelových utilit asi i může být snesitelný trade-off - nebo jste neustále v problémech že se vám to rozkližuje...

Podle mně nepříjemný vendor lock.

Pokud vývojář začne s Fluterrem, tak se nenaučí "mobilní vývoj", ale Flutter a buď u něj zůstane, nebo musí začít zase skoro od nuly s něčím jiným.

PS: Obecně mi taky vadí taková abych řekl "devopsace" vývoje - místo soustředění se na vlastní funkčnost aplikace nebo knihovny, tráví vývojáři stále více času tím že spravují různé "pomocné" tooly, psané každý v jiném jazyce, s jiným názvoslovím a praktikami, které jsou psané bezohledně k okolí s tím že se snaží docílit hegemonie ve své sub-sub-doméně a vynutit si kompatibilitu okolí, což se jim často na pár měsíců slávy povede, než se ten krysí závod zase převalí zase jinam.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #69 kdy: 31. 05. 2020, 15:01:07 »
Flutter ale funguje trochu jinak než různé wrappery wrapperů v JS. Ma soběstačnou knihovnu a vše si kreslí sám, tedy uniformně. Kód běží nativně a využívá naplno GPU. Napadá mě hodně nevýhod Flutteru, ale jeho podpora více platforem to není. Mají dobře našlápnuto, protože Google si může dovolit psát unifikující rozhraní pro různá nativní API. Akorát se člověk musí učit další “standardní” knihovnu a různé podivnosti Dartu.

V obecné rovině je asi vždy lepší použít na iOS přímo jejich API ve Swiftu, případně SwiftUI, což třeba u nás děláme, protože nás Android nezajímá, ale kdyby zajímal, byl by Flutter horkým kandidátem.
Je pravda že Flutter si UI zásadně kreslí sám (na iOS snad už taky přechází z OpenGL na Metal), a to je problém v okamžiku kdy chcete zapojit systémové frameworky které Flutter (Google) sám o sobě nepodporuje a nebo knihovny třetích stran: všechno se musí přemostit a cokoli co souvisí s UI udělat pro Flutter od základu znovu.
Jo, poslední verze používá Metal.

U toho UI se dají nativní prvky vkládat (embedding) do stromu prvků napsaných ve Flutteru. Zatím jsem to využil jen pro web view, kde s tím problém nebyl. To přemostění nativních API právě dělá Google, prostředků na to má dost.

V zásadě máte pravdu, že to je pořád vopruz, a osobně preferuji na iOS SwiftUI, ale pro Android (nebo desktop) bych použil spíše Flutter (je tam ostatně lépe integrován, u toho Xcode je to nepěkný hack).

Re:Základy programování
« Odpověď #70 kdy: 31. 05. 2020, 15:03:36 »
Ten mobilni vyvoj je stejne takova nevdecna vec. Trba takovy Telco operator bude mit vsehovsudy jedinou mobilni aplikaci, vs mnoho desitek backendovych service a webovych ui. Divim se, ze se nekomu vubec chce mobilni vyvoj ucit. A to ani nepocitam, ze co si chcete sami pro vlastni potrebu pro mobil vyvinout? Nic zajimaveho me nenapada.

Re:Základy programování
« Odpověď #71 kdy: 01. 06. 2020, 09:57:45 »
Ad haskell: asi bych taky rád viděl kontrolovaný experiment... těžko říct.

Včera jsem dostal dotaz od začínající programátorky ohledně počítání fibonacciho posloupnosti. V Pythonu. No... a nějak jsem skončil s tím, že jsem to vysvětloval jak v Haskellu, tak v Pythonu. A ve výsledku to prostě v Haskellu pořád vypadalo jako "popis řešení problému", zatímco v pythonu to zůstávala "posloupnost instrukcí", byť značně učesanější než na začátku a zkušený Python programátor v tom ten popis řešení je asi "schopen uvidět". FP řešení v pythonu nevypadá dobře už vůbec. Ale připadá mi, že přechod od "popisu řešení" k "posloupnosti instrukcí" je výrazně jednodušší, než postup opačným směrem. Ona pak spousta lidí programuje systémem "pokus-omyl" - což v haskellu tak trochu nejde. Zase, nevím nakolik je to špatně, když je člověk začátečník, tak to možná potřebuje....

Jinak ad výhoda Haskellu: vzhledem k tomu, že vyvíjím mimo jiné jednu aplikaci pro Android a google přišel s Kotlinem, tak v tom můžu prakticky okamžitě programovat a akorát řeším, "jak se tahle věc v Haskellu syntakticky zapíše v kotlinu". A podobně to pravděpodobně bude vypadat i s Rustem. Takže pokud jde o praktické využití, tak je mnohem větší, než to na první pohled vypadá.

xyz

  • ***
  • 245
    • Zobrazit profil
Re:Základy programování
« Odpověď #72 kdy: 01. 06. 2020, 10:18:12 »
Ad haskell: asi bych taky rád viděl kontrolovaný experiment... těžko říct.

Včera jsem dostal dotaz od začínající programátorky ohledně počítání fibonacciho posloupnosti. V Pythonu. No... a nějak jsem skončil s tím, že jsem to vysvětloval jak v Haskellu, tak v Pythonu. A ve výsledku to prostě v Haskellu pořád vypadalo jako "popis řešení problému", zatímco v pythonu to zůstávala "posloupnost instrukcí", byť značně učesanější než na začátku a zkušený Python programátor v tom ten popis řešení je asi "schopen uvidět". FP řešení v pythonu nevypadá dobře už vůbec. Ale připadá mi, že přechod od "popisu řešení" k "posloupnosti instrukcí" je výrazně jednodušší, než postup opačným směrem. Ona pak spousta lidí programuje systémem "pokus-omyl" - což v haskellu tak trochu nejde. Zase, nevím nakolik je to špatně, když je člověk začátečník, tak to možná potřebuje....

Jinak ad výhoda Haskellu: vzhledem k tomu, že vyvíjím mimo jiné jednu aplikaci pro Android a google přišel s Kotlinem, tak v tom můžu prakticky okamžitě programovat a akorát řeším, "jak se tahle věc v Haskellu syntakticky zapíše v kotlinu". A podobně to pravděpodobně bude vypadat i s Rustem. Takže pokud jde o praktické využití, tak je mnohem větší, než to na první pohled vypadá.

Jednou jsem si zkousel delat tutorial Haskellu a docela me zarazila vysoka uroven abstrakce. Nejake monoidy a monady. Prislo mi to dost slozite. Podle me to moc pro zacatecniky neni.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Základy programování
« Odpověď #73 kdy: 01. 06. 2020, 10:20:58 »
ve výsledku to prostě v Haskellu pořád vypadalo jako "popis řešení problému"
To je základní rys deklarativních jazyků. Ono vůbec to odrazování od FP je dáno nepochopením didaktiky programování, ale to by bylo na delší diskusi (na akademické půdě, ne v rootím obludáriu).

Re:Základy programování
« Odpověď #74 kdy: 01. 06. 2020, 10:21:18 »
Jednou jsem si zkousel delat tutorial Haskellu a docela me zarazila vysoka uroven abstrakce. Nejake monoidy a monady. Prislo mi to dost slozite. Podle me to moc pro zacatecniky neni.
Možná bych zkusil přirovnání: hrát na housle je fakt těžký, pro začátečníky to moc není. Je potřeba umět noty, rytmus, intonaci, neskutečnou koordinaci v pravé ruce a přesnost v levé. Měli by zkusit kytaru.