.[ ČeskéHry.cz ].
Nový web pro podporu výuky jazyka C++
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
evonox



Založen: 08. 03. 2013
Příspěvky: 12

PříspěvekZaslal: 22. říjen 2017, 04:51:54    Předmět: Nový web pro podporu výuky jazyka C++ Odpovědět s citátem

Vážená komunito Českých her,
rád bych představil tímto tématem nový web vznikající jako podpora výuky jazyka C++, který lze nalézt na adrese http://www.jazyk-cpp.cz.

Je sice pravda, že podobných webů je na internetu spousta, já si ale kladu za cíl podpořit výuku nejen čtením článků, ale i uvedením spustitelných příkladů s možností jejich úpravy pro vlastní pokusy čtenáře, a neméně důležitou součástí je i vývoj testů, kde si čtenář může ověřit své znalosti.

Práce na webu je rozdělena asi do tří etap. V první etapě je cílem napsat vstupní tutoriál pro jazyk C++, tak aby byl čtenář po jeho absolvování schopen programovat jednoduché aplikace a samostatně již si dohledávat další informace ve zdrojích spíše referenčního charakteru. Tutoriál je rozdělen na tři moduly:

  1. Procedurální programování
  2. Základy programování OOP
  3. Prvotní seznámení s knihovnou STL

Momentálně je na webu cca. 25 článků, které jsou zatím jen prvotním "rukopisem" a potřebují ještě uzávěrku jak stylistickou, tak kompletaci a v některých bodech upřesnění obsahu.

První, co mne zajímá, je reakce komunity na tento web a případně už budu rád i za nějaké prvotní připomínky či konstruktivní kritiku, co by se mohlo zlepšit. Děkuji moc.
_________________
Evonox
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
mar



Založen: 16. 06. 2012
Příspěvky: 602

PříspěvekZaslal: 22. říjen 2017, 10:21:50    Předmět: Re: Nový web pro podporu výuky jazyka C++ Odpovědět s citátem

Nápad je to dobrý, zpracování mi přijde pěkné, jednoduchý design a čitelný.

Co mi nepřijde úplně pohodlné, je navigace. Nešlo by přidat tlačítko zpět a na levé liště vysvícení právě vybrané kapitoly včetně podkapitoly?
Tzn. např. vysvítit "číselné datové typy a proměnné" a pod tím ještě konstanty (a další podkapitoly)

Co se týká obsahu, nejsem moc daleko, ale docela mě u těch konstant překvapilo toto tvrzení:
"Důvodem postupného odklonu od funkcí preprocesoru je hlavně doba překladu, kdy textové substituce jsou časově velmi náročné"

Považuji to za nesmysl, s dobou překladu to přece vůbec nesouvisí (navíc si troufnu tvrdit, že to není pravda)
Hlavní důvod (pro mě) je, že makra jsou v globálním scopu. Druhý důvod je, že pak při ladění programu nevidím, co ta konstanta je (podle jména), protože to preprocesor zaměnil za hodnotu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 602

PříspěvekZaslal: 22. říjen 2017, 10:56:56    Předmět: Re: Nový web pro podporu výuky jazyka C++ Odpovědět s citátem

Další poznámky k obsahu.

U polí:
"Překladač neprovádí žádnou syntaktickou kontrolu, ani kontrolu za běhu programu,..."
Tady bych vynechal tu zmínku o syntaktické kontrole, indexování mimo rozsah nemá nic společného se syntaxí.

Dynamické datové struktury a dál: nefunguje link (asi chybí obsah) - celkově obsahově to je zatím docela chudé, ale chápu, že to je rozpracované

U testu znalostí by bylo dobré vědět, které otázky jsem měl špatně
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
evonox



Založen: 08. 03. 2013
Příspěvky: 12

PříspěvekZaslal: 22. říjen 2017, 18:16:56    Předmět: Re: Nový web pro podporu výuky jazyka C++ Odpovědět s citátem

Děkuji moc za vyjádření připomínek. Mám k nim doplňující dotazy:

  1. Jak myslíš to tlačítko Zpět? Jako přechod do nadřazené položky dle navigace? Mohl bych na to vytvořit jednoduchý WP Widget a dát jej např. na levý sidebar nad vyhledávání.
  2. Všíml jsme si až teď, že volbou článku se ztratí informace v levém menu. Mohu například dopsat jednoduchý WP plugin, který volbou článku nebo kapitoly (tedy seznamu článků), který způsobí dropdown levého menu zvoleného modulu a zvýrazní nějakou barvou v pozadí zvolenou kapitolu, kde se daný článek nachází. Myslíš to takto?
  3. V testu znalostí zobrazení špatných odpovědí je. Po dokončení testu je tam tlačítko "Zobrazit mé odpovědi", kde červenou barvou jsou označeny. Jde to špatně nalézet?
  4. Máš pravdu, od "Dynamických struktur" content chybí. Aktivně ten web vyvíjím teprve od počátku září tohoto roku. Za chvíli budu dávat komunitě k připomínkám osnovy zbytku článků pro modul Procedurálního programování. Chci tím předejít pravda ne nejlepšímu současnému obsahu. Víc hlav přece jen víc ví.
  5. Teď k obsahu. Detailně se k tvým připomínkám k obsahu vyjádřím v dalším příspěvku. Musím přiznat, že na současném obsahu se promítl výrazně subjektivní slohotvorný činitel dopisování těch článku do dvou či tří do rána Very Happy . Musím se dokopat k celkové revizi současného contentu.

_________________
Evonox
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
evonox



Založen: 08. 03. 2013
Příspěvky: 12

PříspěvekZaslal: 22. říjen 2017, 18:44:17    Předmět: Odpovědět s citátem

Tak jsem prověřoval ta makra a dost to asi bude fakt nesmysl. Vlastní měření nemám a dohledat zdroj té informace v mojí hromadě záložek se mi nepodařilo. Asi jsem naletěl na stejně nepřesnou informaci jako, že např. šablony funkcí nelze specializovat. Musím na ty zdroje dávat víc bacha.
_________________
Evonox
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
mar



Založen: 16. 06. 2012
Příspěvky: 602

PříspěvekZaslal: 22. říjen 2017, 19:22:57    Předmět: Re: Nový web pro podporu výuky jazyka C++ Odpovědět s citátem

Tlačítko zpět není nutné, stačilo by, kdybych měl v levém menu otevřenou kapitolu a v ní rozbalený seznam podkapitol, mezi kterými bych si klikem mohl vybírat.

U těch odpovědí jsem to přehlédnul, moje chyba. Funguje to dobře.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 23. říjen 2017, 09:32:35    Předmět: Odpovědět s citátem

Web jsem lehce proklikal a budu jej nadále sledovat. Design je příjemný, ke stávajícímu obsahu se zatím moc vyjadřovat nebudu, protože bych tomu musel dát větší čas. Rozhodně ale takovou aktivitu chválím!

Nápady, návrhy:

Líbila by se mi sada článků, které by zdůraznili správné zásady programování. V C++ je to podle mě alfa a omega úspěchu. Začátečník by měl rovnou vsřebávat z C++ to lepší. Ne začít pár lekcí C a pak na tom stavit OOP, bez většího pochopení. Vzniká pak skoro stejný kód jako v C#, ale více nebezpečný :-). Chápu, že "C" základy jsou nutné, ale občas by se už přímo v textech prvních tutoriálů mohla mihnout nějaká finesa se stručným vystvětlením, nebo odkazem.


Např: "ukazatele, pole a reference" bych doplnil článkem nebo obsahem typu "(moderní) práce s pamětí". V článku by se zdůraznilo, že new a delete je "low-level" okrajová záležitost (případně ukázat zásady jejich správného používání), proč a jak používat alokaci na stacku, inicializace v konstruktorech, copy / move konstruktory, smart pointery (proč, kde a jak)... atp.

Článek "Pole v C++" na konci zmiňuje STL. A je jasné, že začátečník musí klsické pole pochopit ještě před std::vector. Ale nebál bych se místo pouhé zmínky na konci článku zamíchat std::vector více do textu. Nějak chytře, aby těch informací nebylo na začátečníka moc. Zdůraznit důležitost zapouzdření, bezpečné uvolnění paměti (při alokaci na stacku).. A taky ukázat, jak používat std::vector, aby byl tak rychlý, jako klasické pole.

A asi také přidat nějaké téma o ošetřování chyb. Exceptions a podobně. Mimochodem i ty exceptions souvisí hodně s automatickým uvolněním paměti (stack, smart pointery)...

...Všechno je to pěkně propletené dohromady. Začátečník má co dělat :-). Proto bych nechával v textech nějaká ta vodítka, jak jsem psal. Jen pro spojení - rozšíření obzoru, ne rovnou vychrlit všechny informace, to by bylo příliš složité.



Sám bych mohl pomoct třeba přečtením článků. Nebo třeba i něčím v omezené míře přispět.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
evonox



Založen: 08. 03. 2013
Příspěvky: 12

PříspěvekZaslal: 23. říjen 2017, 13:58:52    Předmět: Odpovědět s citátem

Souhlasím s tím, že není špatný nápad kombinovat výuku C++ se zásadami psaní čistého kódu. Také mám doma na poličce knížku od Uncle Boba, Čístý kód.

Co se týče vyjímek, ty jsou samozřejmě zařazeny do kapitoly o OOP. Jen jsem ještě nezveřejnil celkové osnovy k této kapitole.

Jinak teď trochu tápu v tom, jak si představuješ ty "finesy". Osobně se snažím dopředným tématům na neprobranou látku vyhýbat, ale sám už zjišťuji, že to dost dobře ani nejde. Jinak by nešlo probrat ani úvodní Hello World článek a učit v době I/O proudů nějaké printf se mi už fakt nechce.

Ono je otázka jak učit std::vector, když čtenář nemá ponětí o třídách, objektech, na tož tak o šablonách. Napadá mně jen zaměření na různé cílové skupiny. Úplní začátečníci a pak lidé, co třeba přechází z jazyků Java či C#, pro ty toho tolik nového na začátek není. Napadá mne třeba forma zařadit do textu odstavce menším písmem s náročnější látkou dopředu, např. ten std::vector právě pro lidi přicházející z končin jako C#, Java či PHP. Nebo máš jinou představu? Co si myslíš o tom způsobu řešení? Není mi moc vlastní nutit naprosté začátečníky std::vector, ti si to musí prošlápnout poctivě Very Happy .

Jinak pokud se někdo bude věnovat čtení článků, bude to fajn. Ještě ale věc, která by mně více pomohla, je napřed recenze osnov zbytku procedurálního programování. Dal jsem na to speciální téma do fora o C++. Důvodem je, že přepsat článek je snad víc práce než ho napsat znovu. Hlavně přepíšeš odstavec, změníš větu a pak musíš koukat, aby to obsahově navazovalo a stylisticky dávalo hlavu a patu. Děsná práce ty předělávky Evil or Very Mad.
_________________
Evonox
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 23. říjen 2017, 17:11:43    Předmět: Odpovědět s citátem

evonox napsal:
Souhlasím s tím, že není špatný nápad kombinovat výuku C++ se zásadami psaní čistého kódu. Také mám doma na poličce knížku od Uncle Boba, Čístý kód.

Nejde ani tak o čistotu. Čistě to může být napsáno i starým způsobem. Ale jde o správné návyky a efektivní programování. Osobně si myslím, že C++ je hodně mocné na zápis algoritmů (kratší, čitelnější a lepší kód proti jiným). Ale musí se vědět jak na to. To začátečník neví. Obzvlášť pokud už nějaký jazyk umí, bude hledat analogie a hned začne blbě.

Finesy..to jsem zvolil asi špatné slovo. Myslel jsem to tak, že by se ukázkové kódy v článcích nevyhýbaly novým konstrukcím (jen kvůli jednoduchosti). Klidně by se ten kód mohl v článku vyvíjet, např:

kód:
    int main() {
        const int velikost = 5;
        int pole1[velikost] = {1, 2, 3, 4, 5};
        int pole2[velikost];
        int *pZdroj = pole1;
        int *pCil = pole2;
        for(int i = 0; i < velikost; i++) {
            *pZdroj = *pCil;
            pZdroj++;
            pCil++;
        }
        return 0;
    }


můžeme dále upravit na:

kód:
int main() {
  const int velikost = 5;

  int pole1[velikost] = {1, 2, 3, 4, 5};
  int pole2[velikost];
  int *pCil = pole2;

  for (int *pZdroj = pole1; pZdroj != &pole1[velikost]; ++pZdroj)
    *pCil++ = *pZdroj;

  return 0;
}

Což je stejné jako:
kód:
#include <algorithm>
int main() {
  const int velikost = 5;

  int pole1[velikost] = {1, 2, 3, 4, 5};
  int pole2[velikost];

  std::copy(pole1, &pole1[velikost], pole2);  //do podrobna probereme v kaptiole o STL algoritmech
}



Třeba tvůj článek "Předávání a vracení polí z funkcí" vůbec nezmiňuje move semantiku. Chápu, že bez znalosti struktur a zapouzdření to nelze pochopit. Ale proč se o tom alespoň nezmínit? Třeba tím menším textem, jak si psal.
I to STLko poslední dobou nabylo na důležitosti. Hodně se zkvalitnilo a nabízí toho moc. Nemělo by být prezentováno jen jako pozlátko navrch, ale jako důležitá součást C++ světa. Základní tutoriály by měly tuto skutečnost nějak reflektovat - připravit čtenáře na další látku, ukázat témata pro další studium.

Je těžký popsat to pár řádkama tady na fóru. Proto je můj post asi tak zmatený, i když ho smolím už asi 3/4 hodiny...:-) Vždycky bude záležet na konkrétním článku a celkovém kontextu. Jde zkrátka o to, ukázat správný, soudobý postup. Jednou jsem koupil mladšímu bráchovi knížku o programování her v C#. Přestože byla hodně pro začátečníky, byl tam podobný přístup použit - autor se nevyhýbal "správné" konstrukci kvůli zjednodušení pochopení, spíš to pospsal stylem "prozatím budeme tohle chápat jako nástroj, který nám poslouží tímto způsobem". Ta kniha se mi zdála kvalitní a brácha to z toho chápal.

evonox napsal:

Ještě ale věc, která by mně více pomohla, je napřed recenze osnov zbytku procedurálního programování.

Jak to myslíš? Jestli nějaký téma nechybí?
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
evonox



Založen: 08. 03. 2013
Příspěvky: 12

PříspěvekZaslal: 24. říjen 2017, 02:36:51    Předmět: Odpovědět s citátem

Tak to souhlasím. Nebráním se myšlence ukazovat, jak si zjednodušit život pomocí STL i s tím, že se začátečníkovi některé věci vysvětlí jako "magie". Prostě takto se to zapisuje a pochopíte to později. Ono stejně už tam mám I/O proudy a stringy, tak proč ne další součásti STL.
Přesunul bych tedy debatu třeba už na konkretizaci, co z STL použít:

  • I/O proudy - textová konzole i soubory
  • string a wstring třídy
  • jednoduchost použití knihovny STL algoritmů
  • smart pointery typu unique_ptr a shared_ptr
  • std::vector, případně std::array třídy

Napadá tě něco dál?

Co se týče move semantiky, mrknu do Stroustrupa primárně, jak s tím tématem pracuje a rozvíjí toto know-how. Je pravda, že on má tuto kapitolu hned v úvodním tutoriálu, tak proč si nevzít inspiraci.
_________________
Evonox
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
evonox



Založen: 08. 03. 2013
Příspěvky: 12

PříspěvekZaslal: 24. říjen 2017, 02:40:30    Předmět: Odpovědět s citátem

Dodatek:
pomohli by mi připomínky na osnovy zbývajících článků pro kapitolu Procedurální programování.
Jsou v tomto dokumentu: http://www.jazyk-cpp.cz/ProceduralniProgramovani.pdf
_________________
Evonox
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 24. říjen 2017, 08:53:41    Předmět: Odpovědět s citátem

evonox napsal:

Napadá tě něco dál?

Teď honem ne, to asi vyplyne přímo z ukázkových kódů těch článků.

Připomínky k osnovám
(ber s rezervou)

Organizace dat v paměti RAM
- Nezacházel bych asi do velkých podrobností ohledně stránek adres a tak. Nepřijde mi to pro programování až tak důležitý.

Struktury
- ad 9) co je to velká a malá struktura? Já se snažím na zásobníku alokovat všechny struktury a asi jsem zatim nenapsal žádnou dostatečně velkou, aby to vadilo :-)

New a delete
- zmínit dobré pravidlo "co si kdo naalokuje, to si taky uvolní"
- zmínit důležitost zapouzdření (std::vector, std::unique_ptr...)
(osobně preferuju přístup alokace na stacku v kombinaci s std kontejnerama, který si to zalokujou na haldě)

Generování náhodných čísel
- možná lehce ukázat <random> (nebo spíš jen říct, že existuje? ...)

Práce s textem
- raw strings konstanty
- string stream (u C snprintf)

Moduly v jazyce C++
Vzpomínám, že jako začátečník jsem měl hodně nejasno, jak správně includovat. Zmínil bych, že v .h by mělo být jen to nejdůležitější a zbytek, pokud to jde, includovat v .cpp a případně oddělit přes forward deklarace. Zrychlení překladu.
- Připomenout, že pokud kompilujeme knihovnu a do .h se nám dostane nějaké 3rdčko, musí i "uživatel" té naší hnihovny toto 3dčko mít. Tzn. zapouzdření i na úrovni modulů, nejen tříd a funkcí.
- Připomenout, co udělá #define v .hčku (doporučit nepoužívat, nebo s prefixem)
- #pragma once ?

Jmenné prostory
- osobně bych důrazně doporučil nepoužívat "using namespace" v .Hčku. Leda v těle funkce nebo v .cpp.
- namespace fs = boost::filesystem;



Další, co mě napadlo
Do uplného úvodu napsat možná něco víc o C++ světa:
- aktuální dění
- více o rysech jazyka (silnou typovost, možnost volby a stylu)
- velká základna knihoven
- popřít některé mýty :-) (jakože se v c++ vyvíjí 3x pomalejc a podobně...)
...

Někam dostat i nové konstrukce:
- constexpr
- lambda funkce
- auto
- for (auto &x : pole)
- ...
- (sice neni nový, ale: ) pravidlo "const všude kde to jde..."
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory


Naposledy upravil ]semo[ dne 24. říjen 2017, 14:22:11, celkově upraveno 1 krát
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 24. říjen 2017, 10:13:06    Předmět: Odpovědět s citátem

Ahoj, tohle je mimo fakticke pripominky - zkus si zuzit okno prohlizece, navigace pak uplne zmizi. Myslim, ze podobny problem bude i na mobilnich zarizenich. Smile
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
evonox



Založen: 08. 03. 2013
Příspěvky: 12

PříspěvekZaslal: 24. říjen 2017, 19:16:26    Předmět: Odpovědět s citátem

micky napsal:
Ahoj, tohle je mimo fakticke pripominky - zkus si zuzit okno prohlizece, navigace pak uplne zmizi. Myslim, ze podobny problem bude i na mobilnich zarizenich. Smile

Juj, tak to je gól. Nevím, zda jsem do toho WP Themu dělal až takové brutální zásahy, aby to dělalo toto. Ale to je jedno, ať to je tak či tak, opravit se to musí Evil or Very Mad .


Díky moc ]semo[ za kompletní review, připomínky si přeberu, promítnu do osnov, případně napíšu nějaké další dotazy.
_________________
Evonox
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
evonox



Založen: 08. 03. 2013
Příspěvky: 12

PříspěvekZaslal: 29. říjen 2017, 00:17:18    Předmět: Odpovědět s citátem

Zdravím vespolek,
měl bych dvě otázky do pranice:

  • Znáte někdo nějaký ustálený český výraz pro termín capture list u Lambda funkcí. Mne napadá jen používaní nějakých opisných forem.
  • Z dob jazyka C se táhne zvyklost používání datového typu char pro binární buffery. Vzhledem k tomu, že jsem se někde na StackOverflow ale dočetl, že char je na MacOS už dva byty, jeví se mi jako nejlepší řešení pro buffery používat uint8_t z knihovny <cstdint>. Máte někdo jiný názor? Jinak zatím se neshoduji s názorem, že použití pole tohoto datového typu není správné použití C++, sám Stroustrup říká, že to je middle-level jazyk, kde i použití low-level features jako ukazatelů, polí a strohých new a delete mají své opodstatnění, pokud píšeme něco blíže pro hardware.
  • Jaký by byl nejlepší překlad výrazu R-value reference?
  • A na závěr mne nenapadá ani nejlepší český název pro Copy a Move semantics? Chci se vyhýbat co nejvíce anglikanismům, ale zase si nechci hrát na Národního obroditele.

Děkuji za všechny případné názory.
_________________
Evonox
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna