Jak wprowadzić komputerowego analfabetyzmu 50-latka do programowania [zamknięte]

10

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.

skippr
źródło
1
To pytanie nie dotyczy profesjonalnego tworzenia oprogramowania. Chociaż w ciągu dnia musimy wchodzić w interakcje z innymi ludźmi, technicznymi i nietechnicznymi, a czasem ich uczyć, nie jesteśmy profesjonalnymi nauczycielami ani instruktorami i nie możemy udzielić dobrych porad, jak najlepiej kogoś uczyć. Jeśli chcesz to omówić dalej, możesz zadać pytanie na naszej stronie Meta .
Thomas Owens
@ThomasOwens, skąd wiadomo, że w społeczności nie ma profesjonalnych nauczycieli ani instruktorów? Czy rzadziej oglądana Meta naprawdę jest tam, gdzie muszę iść? Myślę, że mogę się poddać (choć naprawdę chciałbym, żeby tu został), proszę migruj to dla mnie. Jeśli jest coś, co mogę zrobić, aby dostosować to pytanie do kryteriów, które będą lepiej widoczne dla społeczności SO / Programistów, pomóżcie mi to zrobić.
skippr
1
Według mojej najlepszej wiedzy nie ma strony, która zaakceptowałaby to pytanie. Właśnie przejrzałem listę i nie widziałem żadnej. Jeśli chcesz to omówić dalej, zadaj pytanie na Meta .
Thomas Owens
@ThomasOwens Cóż, nie jestem tu, by jęczeć lub trollować, więc zrobię, co w mojej mocy. Dzięki
pomiń
Ukrywanie mojej odpowiedzi w komentarzach ... W przeciwieństwie do poniższych odpowiedzi, myślę, że C ++ to tak naprawdę świetny pierwszy język. Specjalnie dla początkujących. Zaczynasz od zwykłej konsoli IO, a C ++ jest pod tym względem znacznie bardziej przyjazny dla początkujących niż Java czy C #. Mniej kodu płyty kotła, żeby go również zdezorientować. Pewnie, że istnieją zaawansowane funkcje, które spowodują zamieszanie, ale możesz posunąć się bardzo daleko, ograniczając się do kilku podstawowych funkcji.
Lord Tydus

Odpowiedzi:

13

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. :)

Mason Wheeler
źródło
4

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:

  • Umiejętność rozwiązywania abstrakcyjnych problemów
  • Zdolność do rozkładania problemów na wystarczająco małe części do rozwiązywania problemów
  • Możliwa jest iteracyjna budowa rozwiązań w wystarczająco małych kawałkach, aby postęp był możliwy
  • Składnia i semantyka poszczególnych języków.

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ą, aptczę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.

Sarnold
źródło
Mój tata zdecydowanie ma tę „zdolność myślenia”, która jest tak ważna dla programistów. Widzę jego zdrowy rozsądek i inteligencję w tym, co robi teraz, i wiem, że można to zastosować w programowaniu. Załóżmy, że mamy optymalnego kandydata do nauki. Moje pytanie brzmi: jak je tam dostać?
skippr
Hrm, podzieliłem umiejętności na różne kategorie, aby podkreślić, że zagłębianie się w składnię i semantykę może zaciemnić rozwój innych umiejętności - język z mniejszą ilością tajemnych reguł pozwoli na łatwiejszy przepływ abstrakcji - ale ja wydaje się, że nie stwierdził tego dobrze.
sarnold
1
Spośród sugerowanych języków z pewnością wolę Python. Ale jeśli twój tata jest skłonny wizualnie, przetwarzanie (patrz www.processing.org) może być ciekawym wprowadzeniem (choć istnieje wiele rodzajów problemów, dla których nie jest odpowiednie).
James Youngman
@James: heh, chyba nigdy wcześniej nie widziałem frazy Interaktywne programy używające ... danych wyjściowych PDF . :)
sarnold