Otóż to. Programowanie to nie nauka języka, składni i poleceń, to sposób myślenia o problemie, o możliwych zdarzeniach, i możliwych sposobach rozwiązania ich. Najpierw jest algorytm, i sposób jego tworzenia, a dopiero potem można myśleć o jakimś sposobie jego przelania w jakiś język który coś wykona. Cała sztuka to umiejętność projektowania algorytmu. Choćby to było na kartce, i choćby to miał być algorytm "jak zrobić jajecznice"
Ma to też drugą stronę. Jakiś czas temu pomagałem córce znajomych w (szkolnej) nauce C++ (a może C, nie pamiętam dokładnie). Liceum, jedno z lepszych, a ona z tych najzdolniejszych i najbardziej ambitnych. Jakaś taka podstawowa numeryka, liczby pierwsze, równania kwadratowe itp. Zdziwiła się bardzo informacją, że w tym lub podobnym języku napisane jest Windows, Office i właściwie wszystko czego używa. "To musi byc okropnie trudne, tak wszystko zaprogramować żeby działało i wyglądało" -- na twarzy miała takie współczucie, że chyba gotowa była w tym momencie zapłacić Gatesowi dziesięć razy więcej niż żąda. Musiałem jej wytłumaczyć na czym w praktyce wygląda pisanie programów. W szkole nikt jej tego nie powiedział.
Każdy odpowie inaczej, ja też dorzucę swoje trzy grosze.
Nie wiem czy 8 lat to nie jest za wcześnie. Ja zacząłem programować gdzieś tak w wieku 10-11 lat. Zaczynałem od BASIC-a na Spectrum i Atari. Przy czym BASIC na spectrum był teoretyczny (programy pisałem na kartce) ze względu na brak dostępu do sprzętu.
Następnie po kilku latach po przesiadce na peceta był Pascal. To wymagało całkowitego przeprogramowania myślenia na strukturalne konstruowanie algorytmów, zdziwienie że nie ma numerowanych linii i da się bez goto. W zasadzie w tym wieku (miałem z 15 lat) można się szybko przestawić i BASIC mi krzywdy nie zrobił, a dodatkowo znam zalety programowania strukturalnego.
Natomiast uważam za swój największy błąd zajmowanie się Pascalem zamiast C. Po przyjęciu nawyków pascalowych przejście do C jest niesamowicie trudne i w zasadzie nigdy mi się w pełni nie udało tego zrobić, bo C zająłem się już znacznie później. Odpowiednio wczesne uczenie alokacji pamięci i uważania na indeksowanie zmiennych (aby program nie wywalał się z niewiadomego powodu), odpowiednio wczesne zwracanie uwagi na pewne galimatiasy konstrukcyjne pozwoliłoby mi na kodowanie w C "bez zastanowienia", jednak tego etapu nigdy nie osiągnąłem, gdyż C uczyłem się w wieku, kiedy umysł nie chłonie wszystkiego i wiele rzeczy się momentalnie zapomina, a potem godzinę szuka błędu typu wyjście za tablicę o jeden rekord. Dlatego byłem zmuszony po wejściu windowsa przejść na Delphi zamiast jakiegoś C++ i to wspominam ze smutkiem. Tutaj nauczyłem się dopiero myślenia obiektowego (bo Delphi jest obiektowe, a Pascal nie był) na tyle, na ile musiałem. Potem miałem okres skutecznego programowania w czystym C, ale to wymagało częstego sięgania do książek, gdyż zapominałem pewne sprawy bardzo szybko.
Co ja mogę doradzić?
Zacznij od nauki Logo. Niech córka spróbuje pisać proste programy sterujące żółwiem, potem może wprowadzać bardziej skomplikowane elementy, pętle, instrukcje warunkowe (rysowanie jakichś wielkich ażurowych wzorków). Trzeba zachęcić do zabawy w eksperymentowanie - co będzie gdy zmienię tę linię w taki sposób i dlaczego?
Przejdźcie potem na czyste C i realizujcie np. książkę "Algorytmy" z Helionu. Niech to będzie czyste C, nieobiektowe, z samym stdin i stdout. Tak, żeby wiedzieć co to są pętle for, do-while, repeat-until, co to jest funkcja, jak grupować kawałki kodu w funkcje, i tak dalej. Do tego np. rekurencja.
Jak czyste C opanujecie dość dobrze, lecimy C++ (uważam i będę uważał, że od tego języka trzeba się zacząć uczyć programowania obiektowego). Też na stdin/stdout. Realizujemy myślenie obiektowe, czyli konstruowanie obiektów, dziedziczenie.
Potem można robić GUI i nauczyć się odniesienia obiektowości do elementów tegoż GUI.
Jeśli córka to zrealizuje (ale to kwestia lat), to nie będzie miała żadnego problemu z przejściem na dowolny język programowania, bo elementy, schematy i konstrukcje są w zasadzie identyczne, a zmienia się tylko składnia i detale. Natomiast to, że opanuje C/C++ z dobrym zrozumieniem granicy między nimi będzie zaletą i atutem, bo wszystkie nowsze języki są łatwiejsze i myśleć tam trzeba mniej. Jak na studiach każą jej przeliczyć 1500 wyników badań w taki sam sposób, to napisze sobie stronę kodu w R albo Octave i zrobi obliczenia w 15 minut idąc potem do koleżanki, a inni studenci będą 5 nocy obklikiwać je w mozolnie zrobionych arkuszach. Jak trzeba będzie przekonwertować 1500 zdjęć, to napisze sobie skrypt shellowy do imagemagicka, zamiast się zastanawiać nad makrami albo ręcznie przerabiać każde. Do takich przykładowych ułatwień życia ma służyć szaremu człowiekowi umiejętność programowania.
Nigdy też nie podzielałem i nie podzielam opinii, że należy się uczyć programowania od programowania obiektowego, co spotyka się w niektórych książkach. Znam osoby, które tak zrobiły i mają wielkie problemy z zakodowaniem pewnych rzeczy (generalnie wszystko robiłyby obiektowo).
Tak ale to trzeba omawiać. Nawet taką prostą czynność jak nakarmienie kota. Można kazać rozpisac przypadki co należy zrobić i co będzie jak to czy tamto.
Moja córka ma własny komputer od chyba 4 rokużycia. Najpierw miała laptopa z core2duo i grała w larę croft, a teraz ma potężną maszynę i dwa monitory, a ma niecałe 9 lat. Ja ją cisnę żeby nie szła drogą wykluczenia społecznego. Uczę wszystkiego od zaznaczania tekstu klawiszami z sziftem i controlem, przez cmd i pingowanie jak nie działa internet. Jak coś nie gra to pokazuję gdzie się w windowsie ustawia. No i windows ma w wersji Angielskiej, a nie Polskiej. Nigdy nie kupiłem konsoli żeby nie zgłupiała od prostego interfejsu. Nie wiem ale ja prę z nauką żeby miała szerokie horyzonty. Zapisałem też na dodatkowe zajęcia po lekcjach na szachy, robotykę i chiński.
Chociaż moją córkę nauczyli w szkole rysować w paincie i formatować w wordpadzie. W domu ma open office i w nim cos córka pisze. Drukuje na drukarkach sieciowych :-) Świadomie wybierają na której chce drukować :-)
zanim jeszcze pojawilo sie delphi@windows, to istnialo srodowisko turob-pascal, ktore udostepnialo od ktorejs tam wersji obiektowosc. obiektowy turbo pascal byl swietnym narzedziem edukacyjnym (oop, alokacje na stosie/stercie, kontrola zakresu tablic, itp.) z przyjemna biblioteka TUI (turbovision). a jak ktos potrzebowal na niskim poziomie dlubac, to assembler tez dalo sie wciagnac do dzialania.
tak czytam co piszesz i sie zastanawiam, kiedy Twoja córka ma czas na prozaiczne dziecinstwo? Horyzonty są ważne, ale czy Ty spełniasz marzenia córki, czy to Twoje ambicje?
Znasz takie pytania jak to: "Czy ktoś ma notę katologową to ATmega najchętniej w języku polskim" ? Znasz tego typu pytania? Wiesz co znaczy ukończyć studia i nie znać angielskiego? Tyle znaczy, że jesteś nikim, nic nie umiesz i się nie nauczysz. Pójdziesz do słabo płatnej pracy przybijać pieczątki albo pójdziesz jako inżynier elektronik do pracy w hurtowni -> dział "kariera".
Java na Androida robi dziwne rzeczy, wcześniej w niej nie pisałem ale programuję od zawsze. W javie pierwszy raz cokolwiek pisałem. Pokaż może co ty ostatnio napisałeś od początku do końca?
Dawno temu poszedłem na udry z dwoma szkołami i kuratorium - nie zgodziłem się, żeby mój syn poszedł do szkoły z językiem niemieckim - a tylko taka była dla niego dostępna zgodnie z rejonizacją. Wygrałem walkę - poszedł do szkoły z angielskim i dzisiaj pracuje dla BBC a nie przy kartoflach u bauera.
Jak doczekam wnuka czy wnuczki to sam będę namawiał do uczenia chińskiego obok angielskiego - to się naprawdę może przydać.
Oh przyda się. Szczególnie, że w szkole mają taki program dla absolwentów, fundowany przez kongres o nazwie "teach and travel". Można jeździć za darmola, uczyć angielskiego w innych krajach i samemu się uczyć np chińskiego. Wszystko w ramach czasu nauki aż do końca studiów. A i jak mówił ostatnio Pan Minister Rostowski PE, o zieloną kartę prościej :-) Córka ma jako dodatkowy język zachodni właśnie niemiecki i jeszcze chiński. Angielski jest wykładowy, chyba tylko po naszemu jest polski :-)
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.