C++ dla 10cio latka.

0

Dzień dobry.

Tak się złożyło, że uczę syna córki mojego brata (jak w Dynastii :) ) programowania. Jest dopiero w 3 klasie sp ale jest bystry i łapie w mig. Nie chciałbym go zniechęcić do programowania dlatego poszukuję materiałów dostosowanych do jego poziomu. Myślę, że jak będzie w 6 klasie i będzie znał już porządnie podstawy dam mu już jakąś książkę dla "dorosłych". Jednak teraz szukam kreatywnych zadanek. Macie cos godnego polecenia?

Dziękuję.
Michał.

6

Python, i są prześliczne książki na Helionie. bezpieczny, zwięzły, bez boileraplate, jasno i natychmiast mówiący o błędach. Same zalety.

Nie kalecz go C++

https://helion.pl/ksiazki/hello-world-przygoda-z-programowaniem-dla-dzieci-i-absolutnie-poczatkujacych-wydanie-ii-warren-sande-carter-sande,hellow.htm#format/d
(przeglądałem, idealna dla dzieci)

Są też inne.

1

https://colobot.info/pl/ grałem w dzieciństwie, polecam :)

1

A czemu nie C++? Chodzi o zawiłe dziedziczenie? C++ był moim pierwszym językiem po Pascalu i C. I jest moim ulubionym językiem. Czemu uważacie, że pokaleczę nim chłopca?

Dzięki
Michał

4

Od dawna nie jestem na bieżąco z C++, ale pamiętam komunikaty pojedynczego błędu kompilacji na kilka tysięcy znaków lub więcej z <...> zagnieżdżonymi na kilka poziomów przy drobnych pomyłkach z użyciem czegoś z np. biblioteki standardowej opartego na template'ach. Czy coś z tym zrobiono w nowszych wersjach kompilatorów C++? Bo w Pythonie przy pisaniu pętelek po listach raczej takiego strzału w nos na dzień dobry dzieciak nie dostanie.

8
mpaw napisał(a):

A czemu nie C++? Chodzi o zawiłe dziedziczenie?

Myślę że chodzi o zawiłe wszystko. Zrazisz dzieciaka do programowania :)

4

A może coś stworzonego dla dzieci? Np. Logo? Albo ostatnio chyba dość popularny jest Scratch. Albo LEGO Mindstorms? Nie dość, że to LEGO, to jeszcze można zaprogramować (za pomocą bloczków).

A potem z czasem możesz przejść do bardziej "programistycznych" języków.

1
mpaw napisał(a):

A czemu nie C++? Chodzi o zawiłe dziedziczenie?

Dziedziczenie w C++ jest akurat właściwie takie samo, jak w Pythonie. Nie, problemem są raczej template’y, trudne w użyciu kolekcje czy brak interpretera. C++ ma wyższy „narzut mentalny” przy najprostszych programach. Jasne, wraz ze stopniem skomplikowania pisanej aplikacji często się to odwraca i to w Pythonie trzeba pamiętać na raz o większej liczbie rzeczy, ale takie rzeczy pokonają każdego dziesięciolatka niezależnie od wybranego języka programowania.

0

Chyba rozumiem Wasze obawy i spostrzeżenia, jednak ja chcę go nauczyć podstaw. Bez szablonów, klas etc. Poza tym jak dostanie przy kompilacji jakiś wielki error to się mnie spyta i mu wytłumaczę bez stresu. Rozumiem Wasze podejście, ale myślę że c++ przy wsparciu z mojej strony nie pokaleczy go, a nadto, jak opanuje ten język na poziomie solidnie podstawowym to nauka dowolnego innego języka będzie o wiele łatwiejsza. Nie wiem co Wy na to ;)

4

jaki prosty i przy tym ciekawy projekt moze poczatkujacy zrobic w C++? Myslalam ze to jezyk juz dla mocno specyficznych celow, gdzie np python jest za wolny. Na co 10-latkowi przyda sie znajomosc C++?

1

Ja do C++ przeszedłem z Pascala (a przed Pascalem był Basic). I jak jeszcze pisałem w Pascalu, to C++ wydawał mi się trudny (no bo w sumie jest taki trochę tajemniczy, dużo dziwnych symboli, zasad, które trzeba pamiętać - np. pętla for w Pascalu jest bardziej zrozumiała dla laika niż pamiętanie, o co chodzi z tym for (.....; .....; .....)). No i składnia, w której łatwo było sobie zrobić kuku (i wywalić dziwny błąd kompilatora). A Pascal wygląda jak zdania w języku angielskim.

Jednak Python też jest dość czytelny i obecnie to prędzej Pythona mógłbym polecić, bo dzisiaj jest to język szerzej używany. Ok, do celów czysto edukacyjnych zastosowanie praktyczne nie musi mieć znaczenia, tym niemniej łatwiej będzie znaleźć dzisiaj materiały edukacyjne czy inne zasoby dotyczące Pythona (którego dzisiaj prawie każdy się uczy, kto wchodzi w programowanie) niż Pascala (jest to pewna nisza jednak), więc jednak popularność ma znaczenie.

serek napisał(a):

A może coś stworzonego dla dzieci? Np. Logo? Albo ostatnio chyba dość popularny jest Scratch. Albo LEGO Mindstorms? Nie dość, że to LEGO, to jeszcze można zaprogramować (za pomocą bloczków).

A potem z czasem możesz przejść do bardziej "programistycznych" języków.

Kiedyś taka gra w programowanie była Colobot, bardzo fajna, pisało się kod i robot np. szukał baterii na planecie. Co prawda programowało się w jakiejś Javie czy czymś innym C-podobnym, ale mimo wszystko - gra fajna.

1
LukeJL napisał(a):

Jednak Python też jest dość czytelny i obecnie to prędzej Pythona mógłbym polecić, bo dzisiaj jest to język szerzej używany. Ok, do celów czysto edukacyjnych zastosowanie praktyczne nie musi mieć znaczenia, tym niemniej łatwiej będzie znaleźć dzisiaj materiały edukacyjne czy inne zasoby dotyczące Pythona (którego dzisiaj prawie każdy się uczy, kto wchodzi w programowanie) niż Pascala (jest to pewna nisza jednak), więc jednak popularność ma znaczenie.

Mam taką swoją ideę, że w procesie nauczania tzreba "zmarnować" trochę. Na przykład język, którego nie będzie się kontynuować. Ale jak da się nie zmarnować, to jeszcze lepiej. I Python takim jest

1
LukeJL napisał(a):

... No i składnia, w której łatwo było sobie zrobić kuku (i wywalić dziwny błąd kompilatora). A Pascal wygląda jak zdania w języku angielskim.

Jednak Python też jest dość czytelny

Mówisz kompilacji, A błędy wykonania? Niewidzialne w C++. Stacktrace (gdy projekt rośnie)? Nie istnieje. Szybkie wyświetlenie zmiennych?
Języki z jakąś formą interpretacji są tu niezastapione.

2

Uczenie 10latka programowania, nauką programowania w C++, jest jak uczenie dzieciaka jak działa grawitacja przy pomocy Ogólnej Teori Względności - na pewno bardzo mu się przyda zabawa z tensorami jak zechce np. zrzucić balon z wodą na kolegę pod oknem, wyliczy wszystko co do centrymetra, przy okazji skrytykuje pod nosem Newtona za niedokładność jego teorii, a na koniec kolega pewnie skręci w złą stronę i te wszystkie obliczenia diabli wezmą, no ale +1000 pkt do bycia cool na podwórku gwarantowane.

5
mpaw napisał(a):

Chyba rozumiem Wasze obawy i spostrzeżenia, jednak ja chcę go nauczyć podstaw. Bez szablonów, klas etc. Poza tym jak dostanie przy kompilacji jakiś wielki error to się mnie spyta i mu wytłumaczę bez stresu. Rozumiem Wasze podejście, ale myślę że c++ przy wsparciu z mojej strony nie pokaleczy go, a nadto, jak opanuje ten język na poziomie solidnie podstawowym to nauka dowolnego innego języka będzie o wiele łatwiejsza. Nie wiem co Wy na to ;)

No to wytłumacz dziecku:

  1. że, jak masz takie int tab[10]; tab[10] = 5;, to jest to błędne. Python od razu powie, że wychodzisz za zakres.
  2. char s[] = "abc"; s[0] = 'd'; s != "dbc" - chyba, że zamierzasz użyć std::stringów, ale to kolejny narzut mentalny
  3. Jeszcze raz w kwestii stringów, wytłumacz może dlaczego sizeof("abc") == 4.
  4. 1000000 * 1000000 nie ma dobrze określonej wartości (undefined behaviour)
0

Mam wrażenie, że uważacie, że C++ jest za trudny na początek, bo chłopiec sobie sam nie poradzi. Ale ja cały czas będę przy nim, i jak tylko gdzieś się zatrzyma pomogę mu. Mam też wrażenie że mnożycie kolejne argumenty by poprzeć swoje tezy, ale nie chcecie wspólnie dojść do kompromisu.

C++ za trudny bo wywala błędy. A jak nie korzystać z zaawansowanych funkcji to też źle bo nie uczy języka. Nie zapominajcie że on jest w 3 sp. Nie miał jeszcze równań i niewiadomych na matmie. Nawet funkcji nie miał. Zanim będę go uczyć klas i przeciążenia operatorów to minie jeszcze kilka lat. Poza tym nie będzie miał tych problemów co studenci, bo ja będę ciągle przy nim i będę go wspierać, zarówno merytorycznie jak i emocjonalnie.

Dziękuję wszystkim za odpowiedzi.

2

Czyli chcesz go uczyć bardzo ograniczonych podstaw. A prawdziwe podstawy (np. klasy) będą za kilka lat. No ok, ma sens, ale czy w tym wypadku nie lepiej użyć języka, który został dla takich rzeczy stworzony? Bo wydaje mi się, że po zrezygnowaniu z tych prawdziwych podstaw w C++, to zostanie taki mega szkielet, którego może dzieciak się nauczyć w każdym języku. I tu może lepiej jednak wybrać coś mniej złożonego, zamiast kombajnu w postaci C++, co równie dobrze będzie nadawać się do nauki?

4

Rodzice są obecnie strasznie okrutni :|

0
czysteskarpety napisał(a):

Rodzice są obecnie strasznie okrutni :|

Zawsze mogli uznać, że lepiej już za dzieciaka uczyć go niszowych języków, które się przydają jeszcze, a mało ludzi je umie. Cobol, Erlang... xD

0

Jakiś czas temu, stworzyłem taką stronę na wodress.com. Jakbyście mieli pomysły na więcej zadań, proszę o kontakt. Zarzuciłem projekt, ale planuję go w końcu uzupełnić o nowe zadania. Nawiązując do tematu postu, proszę, macie jakieś strony z zadaniami do polecenia? Dzięki Mike

https://zakoduj.wordpress.com/

0

Myślę, że warto.

Gdy młody będzie rozglądał się za pierwszą pracą, to może już ten język i jego środowisko będą dojrzałe ;)

1

pytanie czy dzieciak z takich co grzecznie uczą się co mu każą, czy sam se skombinuje jakąś książkę teoretycznie za trudną i będzie kombinował

0

A może po prostu pokaż mu kilka prostych programów napisanych w cpp i niech dzieciak sam się wypowie, czy to co widzi mu odpowiada czy jednak schowa się pod łóżko na widok kodu? ;)

BTW CppCon 2019: Patrice Roy “C++ as a First Language... Really?”
I coś przeciwko wojenkom językowym How To Think Like A Programmer

4

dzieciak ma 10 lat a ty mu zabierasz frajde z dzieciństwa kalecząc go programowaniem, w jego wieku plany na przyszłość zmieniały się co 5h, raz chciało sie byc skoczkiem narciarskim, potem piłkarzem, astronautom czy policjantem, zdecydowanie za wcześnie by mu zacząć to wbijac do głowy, niech nauczy się przede wszystkim myśleć na poziomie podstawówki, teraz na 80% się zrazi do tego

0

Widzę siebie chcesz dowartościować, nie jego - AnyKtokolwiek 52 minuty temu

piotrek2137 napisał(a):

dzieciak ma 10 lat a ty mu zabierasz frajde z dzieciństwa kalecząc go programowaniem, w jego wieku plany na przyszłość zmieniały się co 5h, raz chciało sie byc skoczkiem narciarskim, potem piłkarzem, astronautom czy policjantem, zdecydowanie za wcześnie by mu zacząć to wbijac do głowy, niech nauczy się przede wszystkim myśleć na poziomie podstawówki, teraz na 80% się zrazi do tego

Te dwa posty idealnie podsumowują temat. Niech rozwija się we własnym tempie jak każdy z rówieśników, a nie ulega chorym fantazjom wuja :D Czemu tak szybko się uczy? Bo to jeszcze dziecko i chłonie wiedzę jak gąbka? Na kod przyjdzie jeszcze pora pod warunkiem, że młody zechce, a teraz wprowadzenie z jakimiś graficznymi programami typu logo komeniusz będzie wystarczające żeby zobrazować sposób myślenia itd.. Jeżeli kiedyś podejmie decyzję, że chce spędzić resztę życia przy komputerze to wtedy wkraczasz do akcji Ty i szkolisz przyszłego korposzczura. Zrobisz lepszy uczynek jeżeli zajmiesz go czymś innym niż komputerem i telefonem - np. nauka gry na instrumencie, języka, jakiś wyjazd, narty/sanki, rower :)

1

Nie przesadzajmy w drugą stronę. Nauka programowania to na pewno nie jest żadne "szkolenie korposzczura". Jeżeli ktoś chce się w tym kierunku rozwijać, sprawia mu to frajdę i ma do tego talent, to z całą pewnością wyjdzie mu to na dobre.

0

Ja w tym wieku (chyba, nie wiem, może rok albo dwa-trzy lata później) patrzyłem się w ściane i obliczałem kolejne potęgi 2-jki, dochodziłem do jakichś pięciocyfrowych, może maks sześciocyfrowych liczb i na tym się kończyło moje programowanie. A dopiero w wieku 13 lat zacząłem się uczyć programować. Poza tym, nie mam wiedzy dostatecznej w tej dziedzinie, ale coś co wyczytałem na temat psychologii rozwoju kłóci mi się z tym, czy faktycznie nauczysz dziecko C++ w wieku 10 lat. Szansa że go nauczysz czegokolwiek z C++ w wieku 10 lat jest bliska zerowej. Szansa że go zrazisz do programowania próbując go uczyć c++ w wieku 10 lat jest średnio wysoka.

Oczywiście można założyć, że trafisz tą blisko zerową szanse, tylko lepiej przewidywać przewidując wszelakie możliwości. Oczywiście mówimy tutaj konkretnie o wieku - 10 lat i języku C++. W tym konkretnym czasie i sytuacji.

Ta rzecz z psychologii rozwoju to pewien przedstawiony fakt o tym, że dziecko zaczyna myśleć pojęciami abstrakcyjnymi na pewno w prawie każdej sytuacji conajmniej rok, dwa, trzy lata po wieku 10 lat. Przed rozpoczęciem myślenia (na serio, a nie na niby) pojęciami abstracyjnymi , wzorce myśleniowe to coś co możemy nazwać "concrete thinking". a nie "abstract"

Oczywiście. Są pewne sytuacje w których dziecko myśli pojęciami abstrakcyjnymi znacznie wcześniej przed rówieśnikami. Więc jest możliwość że dziecko o którym mówisz już ma 10 lat i już myśli (na serio) pojęciami abstrakcyjnymi i ma na tyle rozwinięty umysł, by zacząć programować w języku C++. Ale ja przewiduję że szansa że tak jest, jest, jak wcześniej wspomniałem - bliska zerowej. Jeżeli zauważyłeś w nim ogromny potencjał intelektualny i widzisz że ma 10 lat, możesz spróbować. (ja jednak sądze że tak nie jest) Inaczej, nie ryzykuj.

Ważny postedit:
Jeżeli chcesz go czymś realnie zaciekawić, kup mu jakąś fajną literature dedykowaną dla osób młodszych na temat matematyki, albo fizyki, która wprowadza w podstawy podstaw podstaw, a wprowadza fajną narracje dla dziecka aby go zaciekawić światem. To będzie miało pozytywniejszy skutek. Według mojej subiektywnej opinii. Niż pozbawione jakiejkolwiek czułości (które dziecko potrzebuje) typedefy, definy, a także (o zgrozo) specjalizacje templatek.

1

Nie obawiaj się. Klasami i templatkami zajmę się za kilka lat. A chłopiec pomimo, że nie miał na matmie równań i niewiadomych, zapytany przeze mnie sam wydedukowal co to. Jest w klasie matematycznej i startuje w Kangurach. Uczę go również grać na gitarze jak i przekazuję podstawy teorii muzyki. Poza tym chodzi na basen i na karate. W karate ma sukcesy, wygrywa zawody.

Jednym słowem, obawy obawami, a życie życiem.

0
mpaw napisał(a):

Nie obawiaj się. Klasami i templatkami zajmę się za kilka lat. A chłopiec pomimo, że nie miał na matmie równań i niewiadomych, zapytany przeze mnie sam wydedukowal co to. Jest w klasie matematycznej i startuje w Kangurach. Uczę go również grać na gitarze jak i przekazuję podstawy teorii muzyki. Poza tym chodzi na basen i na karate. W karate ma sukcesy, wygrywa zawody.

Jednym słowem, obawy obawami, a życie życiem.

Jednym słowem, obawy obawami, życie życiem, stres stresem, minimum wysiłku minimum wysiłku, "sukcesy" "sukcesami"
a SNAFU (Situation Normal All Fucked Up) jak najbardziej realne.

0

A ja zaczynam mieć wrażenie, że to się robi podobny dylemat jak wśród osób początkujących ("jaki język mam wybrać" - i potem paraliż decyzyjny), tylko w innej odsłonie, bo OP wybiera nie dla siebie.

Mam wrażenie, że uważacie, że C++ jest za trudny na początek, bo chłopiec sobie sam nie poradzi. Ale ja cały czas będę przy nim, i jak tylko gdzieś się zatrzyma pomogę mu. Mam też wrażenie że mnożycie kolejne argumenty by poprzeć swoje tezy, ale nie chcecie wspólnie dojść do kompromisu.

Ja podzielam zdanie innych, że C++ to może nie być najlepszy wybór, ale whatever. Języków jest dużo, więc można sprawdzić, czy C++ będzie odpowiednim językiem, jeśli nie, to można zmienić na inny. Zresztą i tak nie wiadomo, czy chłopakowi się spodoba programowanie.

Pytanie też, jakie programy będzie pisać, bo obstawiam, że taka typowa konsolówka w C++ to będzie nudna. W ogóle jeśli już iść w C-podobne języki, to czemu nie np. Unity 3D? Można w tym gry robić, gdzie masz od razu podgląd, ale logikę sobie programujesz w C# (i w kilku innych językach).

W Unreal Engine podobnie, ale masz wizualne programowanie (układasz takie bloki na ekranie i łączysz strzałkami).

Jeszcze np. Godot jest. Tam też jest jakiś edytor, ale też można programować, z tego co czytam
https://en.wikipedia.org/wiki/Godot_(game_engine)

Ew. iść po prostu w JavaScript. Co prawda uważam, że ten język słabo się nadaje dla początkującego (za dużo rzeczy, które "nie wiadomo skąd się wzięły", jeśli się nie zna historii języka czy samych założeń), jednak w JavaScript można robić cudowne rzeczy. W CSS można wygląd robić. Albo pójść w stronę Canvasa - jest pełno bibliotek do tego - choćby Phaser, czyli biblioteka do robienia grafiki/gier 2D. Więc ma to niesamowity cool factor.

BTW podobny wątek ostatnio się pojawił odnośnie tych rzeczy, o których piszę:
Blender Game Engine.

1 użytkowników online, w tym zalogowanych: 0, gości: 1