Któregoś dnia mój tata zadał mi pytanie, którego nigdy nie oczekiwałbym od niego.
„Jak mogę nauczyć się C ++?”
Mój tata kończy w tym roku 56 lat, a komputery to dla niego odległa koncepcja. Nie bardzo dobrze posługuje się telefonem poza numerami telefonicznymi (brak szybkiego wybierania i kontaktów); chociaż zaczął trochę lepiej uczyć się komputerów - do tego stopnia, że wie, jak otworzyć Internet (w systemie Windows) i przeglądać (z powodzeniem ukończył kilka aplikacji o pracę całkowicie na własną rękę online, którym również zaoferowano mu stanowiska ). Ale wciąż są to zbyt wąskie okna, by naprawdę wiele znaczyć.
Chociaż może nie mieć tła, mój tata umie czytać. Mam na myśli czytanie jako umiejętność, a nie tylko umiejętność. Nie ma prawie żadnego wykształcenia wyższego (problemy finansowe, rodzinne itp.) I miał szczęście ukończyć szkołę średnią, ale nadal nauczył się zostać mistrzem elektrykiem i jest nim od prawie 30 lat. To samo zrobił z gitarą, ucząc się grać na bardzo profesjonalnym poziomie i był chwalony za swoje umiejętności. W szkole średniej podniósł książkę do podnoszenia ciężarów - i był wówczas jedyną osobą w jego szkole średniej, która oficjalnie zakwalifikowała się jako „sportowiec” według standardów krajowych.
We wszystkich przypadkach potrzebował po prostu czegoś do czytania. Czego go nauczyć. Pochłania informacje jak gąbka.
Nie mam wątpliwości co do motywacji lub zdolności mojego taty, więc moim ogólnym celem jest po prostu:
Wprowadź tatę w świat komputerów i zabierz go na drogę programowania.
Mocno wierzę, że kiedy poprowadzę go przez podstawy, jego popęd i umiejętności czytania pozwolą mu działać dalej.
Więc pytam was wszystkich: od czego powinienem zacząć? A jakie są najlepsze zasoby? Czy powinienem zmusić go do uruchomienia Linuksa zamiast Windowsa? Czy C ++ to zły pomysł?
Pamiętaj, że musi najpierw (IMO) nauczyć się komputerów, a następnie zdobyć pierwsze doświadczenie (doświadczenie „Hello world”) programowania.
Ze względu na pieniądze i najwyższe preferencje chciałbym darmowych zasobów online, które on może przeczytać, ale wszelkie dobre sugestie w formie drukowanej lub płatne online są mile widziane (które mógłbym sprawdzić później).
A także zamierzam zacząć od C ++ (bez Pythona, Javy itp.), Ponieważ znam go najlepiej i będę mógł mu pomóc po drodze z kodem. (Mam teraz minimalną wiedzę w innych językach).
Edycja: Otrzymuję wiele trwałych sugestii dotyczących używania Pythona. Jedynym powodem, dla którego chciałem zrobić C ++, jest to, że WIEM i może być TAM, gdy mój tata potrzebuje pomocy. Moją BARDZO PIERWSZĄ ekspozycją na programowanie była Java. Nauczyłem się języka Java i jestem w tym dobry. Otwieram się na inne sugestie, ale proszę o skuteczne zastosowanie swoich sugestii.
EDYCJA 2: Rozumiem, że moje podejście / myślenie / wiedza mogą być tutaj brakujące. Jestem studentem drugiego stopnia na kierunku CS. Jeśli nie zgadzasz się z niczym w moim poście, powiedz mi dlaczego - daj mi pomysły, informacje - dlatego właśnie pytam. Zawęzić mój ogólny cel do konkretnych osiągalnych celów.
Odpowiedzi:
Po pierwsze, nawet jeśli dobrze znasz C ++, jest to okropny, okropny pierwszy język dla początkujących i nie mogę polecić wystarczająco mocno, aby trzymał go jak najdalej od niego, jeśli chce z powodzeniem nauczyć się pisać kod. Nauka programowania nie polega na języku, chodzi o naukę wyrażania abstrakcyjnych wymagań w logice formalnej. C ++ sprawia, że trudno się na tym skupić, ponieważ ciągle potykasz się o problemy specyficzne dla języka.
Jeśli chce nauczyć się wyrażać pomysły w logice formalnej, wybierz coś, co czyni to prostym. Moje wybory to Pascal (do programowania na poziomie aplikacji) lub Python (do pracy na poziomie skryptu), ponieważ oba są zaprojektowane tak, aby były intuicyjne i łatwe do nauczenia się jako podstawowe priorytety. Kiedy naprawdę pozna zasady pisania kodu, to jeśli naprawdę troszczy się o C ++, może go podnieść.
Z tego samego powodu nie uruchamiaj go w systemie Linux zamiast w systemie Windows, ponieważ wtedy ma on dwa problemy, na których powinien się skoncentrować: nauka Linuksa i nauka kodowania w tym samym czasie! Ogranicz rozproszenie do minimum.
Jeśli chodzi o rzeczywiste zasoby programistyczne, łatwo jest znaleźć samouczki online, ale odkryłem, że najlepszym sposobem na naukę programowania jest programowanie. Znajdź coś, co chcesz zrobić, a następnie zacznij wymyślać, jak to zrobić.
Kilka lat temu widziałem grę i pomyślałem: „Mogłem to zrobić i mógłbym to zrobić lepiej”. Odpaliłem więc Delphi i zacząłem rozgrzebywać związane z tym zasady. Wciąż uczę się nowych rzeczy z tego osobistego projektu, a po drodze stałem się naprawdę dobrym programistą! Spróbuj tego; spytaj tatę, co chciałby zrobić, gdyby mógł zaprogramować - i upewnij się, że jest to możliwe i ma stosunkowo niewielki zakres, ponieważ nie ma jeszcze doświadczenia - a następnie usiądź z nim i zacznij z nim zastanawiać się, jak to zrobić to.
A jeśli ma jakieś pytania, załóż mu konto StackOverflow. :)
źródło
Myślę, że zainteresowanie twojego ojca C ++ jest zdecydowanie fajne, ale nie byłbym moim wyborem dla pierwszego języka programowania - chyba że ma on bardzo specyficzny wymóg, że jest zainteresowany spotkaniem. (Nawet wtedy nauka języka C ++ po nauczeniu się innego, prostszego języka może być znacznie łatwiejsza.)
Jest kilka rzeczy ważnych dla programowania:
Pod wieloma względami składnia i semantyka poszczególnych języków zbliża się do końca umiejętności niezbędnych do programowania. W końcu, jeśli masz prawie rację, większość kompilatorów powie ci, jaki popełniłeś błąd - choć dekodowanie tego, co konkretnie mówią kompilatory, wymaga doświadczenia.
Sugeruję więc, aby twój ojciec od razu zajął się znacznie prostszym językiem programowania: Ruby, Python, C, C #, Haskell itp. (Haskell jest zdecydowanie trudny dla ludzi, którzy zaprogramowali tylko języki imperatywne, ale ja ” bądź ciekawy, czy kompletni nowicjusze odczuwają to samo uczucie „ryby bez wody”).
Trzymanie się prostszego języka z góry oznacza, że twój tata odniesie wcześniej większy sukces i łatwiej będzie mu „grać”. Interaktywna pętla REPL wielu języków jest doskonałym miejscem do nauki.
Gdy twój tata zapozna się z funkcjami, klasami, obiektami, metodami, to drobiazgi i niuanse C ++ nie będą już tak przytłaczające. Heck, nawet rozpoczęcie od C byłoby łatwiejsze: nie jest to wybaczające , ale jest mniej mylących funkcji, o które trzeba się martwić.
Jesteś ciekawy systemu Linux kontra Windows; Nie jestem pewien, czy to rozróżnienie ma duże znaczenie. Jeśli zna już jedno lub drugie środowisko, zmiana jest kolejną przeszkodą. Jeśli nie wie, sugeruję Linuksa, ale głównie dlatego, że instalacja dobrych narzędzi jest absurdalnie łatwa:
apt-get install <foo>
działa w większości dystrybucji, a dystrybucje, które nie obsługują,apt
często zapewniają coś podobnego. Minutę później instalujesz nowy schludny pakiet, często szybciej niż zajmie mi znalezienie niezawodnego źródła pobierania wstępnie skompilowanych plików binarnych systemu Windows, które nie cuchną końmi trojańskimi.źródło