Oryginalne pytanie
Obecnie uczę mojego brata programowania. Jest całkowicie początkujący, ale bardzo inteligentny. (I tak naprawdę chce się uczyć). Zauważyłem, że niektóre z naszych sesji utknęły w drobnych szczegółach i nie wydaje mi się, że byłem bardzo zorganizowany. ( Ale odpowiedzi na ten post bardzo pomogły ).
Co mogę zrobić lepiej, aby skutecznie go uczyć? Czy istnieje logiczny porządek, którego mogę użyć, aby przejrzeć koncepcję według koncepcji? Czy są komplikacje, których powinienem unikać do później?
Językiem, w którym pracujemy, jest Python , ale porady w każdym języku są mile widziane.
Jak pomóc
Jeśli masz dobre, dodaj w odpowiedzi:
- Ćwiczenia dla początkujących i pomysły na projekt
- Materiały do nauczania początkujących
- Screencasty / posty na blogu / darmowe e-książki
- Drukuj książki, które są dobre dla początkujących
Opisz zasób z linkiem do niego , abym mógł obejrzeć. Chcę, aby wszyscy wiedzieli, że zdecydowanie korzystam z niektórych z tych pomysłów. Twoje zgłoszenia zostaną zebrane w tym poście.
Materiały online dla początkujących nauczycieli:
- Delikatne wprowadzenie do programowania za pomocą Pythona
- Jak myśleć jak informatyk
- Alice: program 3d dla początkujących
- Scratch (system do rozwijania umiejętności programowania)
- Jak projektować programy
- Struktura i interpretacja programów komputerowych
- Naucz się programować
- Robert Read's How To Be Programmer
- Microsoft XNA
- Spawning nowej generacji hakerów
- Wykłady COMP1917 Higher Computing Richarda Bucklanda (wymaga iTunes)
- Zanurz się w Pythonie
- Python Wikibook
- Project Euler - przykładowe problemy (głównie matematyczne)
- pygame - łatwa biblioteka Pythona do tworzenia gier
- Wymyśl własne gry komputerowe za pomocą Pythona
- Podstawy programowania dla następnego kroku poza podstawami.
- Piszczał przez przykład
- Snake Wrangling For Kids (nie tylko dla dzieci!)
Polecane drukowane książki dla początkujących
źródło
Odpowiedzi:
Musiałem współpracować z kilkoma początkującymi (nigdy nie napisałem linii kodu) programistami, a jesienią będę robił warsztaty po szkole z uczniami szkół średnich. To najbliższa mi dokumentacja. To wciąż praca w toku, ale mam nadzieję, że to pomoże.
1) FizzBuzz. Zacznij od programów wiersza poleceń. Możesz pisać zabawne gry lub narzędzia bardzo szybko i bardzo szybko uczysz się wszystkich funkcji językowych, bez konieczności wcześniejszej nauki narzędzi GUI. Te wczesne aplikacje powinny być na tyle proste, aby nie trzeba było używać żadnych prawdziwych narzędzi do debugowania, aby działały.
Jeśli nic innego jak FizzBuzz to dobre projekty. Kilka pierwszych aplikacji nie powinno mieć do czynienia z bazami danych, systemem plików, konfiguracją itp. Są to pojęcia, które dezorientują większość ludzi, a kiedy dopiero uczysz się składni i podstawowych funkcji frameworka, naprawdę nie potrzebujesz więcej złożoności.
Niektóre projekty:
2) Prosty projekt Gdy już dobrze opanują funkcje językowe, możesz rozpocząć projekt (proste, fajne gry działają dobrze.). Powinieneś postarać się, aby pierwszy projekt mógł zostać ukończony w ciągu 6-12 godzin. Nie marnuj czasu na jego wczesne zaprojektowanie. Pozwól im to zaprojektować, nawet jeśli jest do bani. Jeśli się rozpadnie, porozmawiaj o tym, co się stało i dlaczego się nie udało, a następnie wybierz inny temat i zacznij od nowa.
W tym miejscu zaczynasz wprowadzać możliwości debugowania swoich narzędzi. Nawet jeśli widzisz problem po przeczytaniu kodu, powinieneś nauczyć go, jak korzystać z narzędzi, a następnie pokazać im, jak możesz go zobaczyć. Służy to podwójnemu celowi uczenia narzędzi do debugowania i uczenia się, jak identyfikować błędy bez narzędzi.
Gdy projekt stanie się funkcjonalny, możesz go użyć do wprowadzenia narzędzi refaktoryzacyjnych. Dobrze, jeśli możesz rozwinąć projekt za pomocą prostych funkcji, których nigdy nie planowałeś. Zazwyczaj oznacza to refaktoryzację i znaczące debugowanie, ponieważ bardzo niewiele osób po raz pierwszy pisze nawet w połowie przyzwoity kod.
Niektóre projekty:
3) Prawdziwy projekt Rozpocznij prawdziwy projekt, który może zająć trochę czasu. Używaj odpowiedniej kontroli źródła i ustal harmonogram. Uruchom ten projekt jak prawdziwy projekt, jeśli nic więcej jego dobre doświadczenie związane z narzędziami.
Oczywiście musisz to dostosować dla każdej osoby. Najważniejszą rzeczą, jaką znalazłem, jest zastosowanie nawet pierwszych prostych aplikacji do tego, co dana osoba jest zainteresowana.
Niektóre projekty:
źródło
Możesz spróbować użyć Alice . Jest to program 3D przeznaczony do stosowania we wstępnych zajęciach programowania.
Dwie największe przeszkody dla nowych programistów to często:
Alice używa interfejsu przeciągnij i upuść do konstruowania programów, unikając możliwości błędów składniowych. Alice pozwala konstruować światy 3D i sterować kodem (proste) postacie 3D oraz animację, co zwykle jest o wiele bardziej interesujące niż implementacja list połączonych.
Doświadczeni programiści mogą patrzeć na Alice jak zabawkę i drwić z przeciągania i upuszczania linii kodu, ale badania pokazują, że to podejście działa.
Uwaga: Pracowałem nad Alice.
źródło
Polecam Logo (inaczej żółw), aby sprowadzić podstawowe pojęcia. Zapewnia dobrą piaskownicę z natychmiastową graficzną informacją zwrotną, a także można demonstrować pętle, zmienne, funkcje, warunki warunkowe itp. Ta strona stanowi doskonały samouczek.
Po Logo przejdź do Python lub Ruby. Polecam Python, ponieważ jest oparty na ABC, który został wymyślony w celu nauczania programowania.
Ucząc programowania, muszę poprzeć sugestię EHaskins dotyczącą prostych projektów, a następnie złożonych projektów. Najlepszym sposobem na naukę jest rozpoczęcie od określonego wyniku i mierzalnego kamienia milowego. Koncentruje się na lekcjach, pozwala uczniowi na rozwijanie umiejętności, a następnie na te umiejętności, i daje uczniowi coś, co może pochwalić się znajomym. Nie lekceważ potęgi posiadania czegoś do pokazania w pracy.
Teoretycznie możesz trzymać się Pythona, ponieważ Python potrafi prawie wszystko. To dobry pojazd do nauki programowania obiektowego i (większości) algorytmów. Możesz uruchomić Python w trybie interaktywnym jak wiersz poleceń, aby sprawdzić, jak to działa, lub uruchomić całe skrypty jednocześnie. Możesz uruchamiać skrypty interpretowane w locie lub kompilować je w pliki binarne. Istnieją tysiące modułów rozszerzających funkcjonalność. Możesz zrobić kalkulator graficzny, taki jak ten dołączony do systemu Windows, lub klienta IRC lub cokolwiek innego.
XKCD nieco lepiej opisuje moc Pythona:
Następnie możesz przejść do C # lub Java, chociaż nie oferują wiele, czego Python jeszcze nie ma. Ich zaletą jest to, że używają składni w stylu C, z której korzysta wiele (czy mogę powiedzieć, że większość języków). Nie musisz jeszcze martwić się o zarządzanie pamięcią, ale możesz przyzwyczaić się do nieco większej swobody i mniejszego trzymania się ręki dzięki tłumaczowi języka. Python wymusza odstępy i wcięcia, co jest przyjemne przez większość czasu, ale nie zawsze. C # i Java umożliwiają zarządzanie własną białą spacją przy jednoczesnym zachowaniu silnego wpisywania.
Stamtąd standardem jest C lub C ++. Wolność w tych językach jest prawie egzystencjalna. Teraz jesteś odpowiedzialny za zarządzanie pamięcią. Nie ma śmieci, które mogłyby ci pomóc. To tutaj uczysz naprawdę zaawansowanych algorytmów (takich jak scalesort i quicksort). To tutaj dowiadujesz się, dlaczego „błąd segmentacji” jest przekleństwem. To tutaj pobierasz kod źródłowy jądra Linuksa i patrzysz w Otchłań. Zacznij od napisania okrągłego bufora i stosu do manipulacji ciągami. Następnie awansuj.
źródło
Dobry kurs języka Python to delikatne wprowadzenie MIT do programowania za pomocą języka Python . Wszystko to jest bezpłatne online i nie musisz być wybitnym MIT, aby to zrozumieć.
źródło
Pakiet Python VPython - Programowanie 3D dla zwykłych śmiertelników ( samouczek wideo ).
Przykład kodu:
VPython odbijająca się piłka http://vpython.org/bounce.gif
źródło
Rozpocznij od grafiki Turtle w Pythonie.
Chciałbym użyć grafiki żółwia, która jest standardem w Pythonie. Jest wizualny, prosty i możesz użyć tego środowiska do wprowadzenia wielu koncepcji programowania, takich jak iteracja i wywołania procedur, zanim przejdziesz zbyt daleko w składni. Rozważ następującą interaktywną sesję w Pythonie:
Próbując wykonać dwa ostatnie zadania, będą mieli wiele nieudanych prób, ale niepowodzenia będą interesujące wizualnie i szybko się nauczą, gdy będą próbowali dowiedzieć się, dlaczego nie narysowali tego, czego się spodziewali.
źródło
Kluczowe jest to, że dana osoba musi mieć problem, który chce rozwiązać. Jeśli nie masz programu, który chcesz napisać (i czegoś sensownego i dobrze zdefiniowanego, a nie „Chcę napisać następne Quake!”), Nie możesz nauczyć się programować, ponieważ nie masz nic, co by cię motywowało . To znaczy, możesz przeczytać książkę i z grubsza zrozumieć składnię i semantykę języka, ale dopóki nie będziesz mieć programu, który chcesz napisać , nigdy nie zrozumiesz pokrzywy.
Jeśli ten impuls istnieje, wszystko inne to tylko drobne szczegóły.
źródło
Nie wiem, czy ktoś jeszcze o tym wspominał, ale możesz chcieć sprawdzić Zed Shaw 's Learn Python na własnej skórze
Mam nadzieję że to pomoże
źródło
http://tryruby.hobix.com/"> Spróbuj Ruby (w przeglądarce)
źródło
Jak projektować programy
Struktura i interpretacja programów komputerowych . Wykłady wideo na http://www.swiss.ai.mit.edu/classes/6.001/abelson-sussman-lectures/
źródło
To fantastyczna książka, której uczyli się moi młodsi bracia:
http://pine.fm/LearnToProgram/
Oczywiście najważniejsze jest, aby NATYCHMIAST rozpocząć program, który jest przydatny po ukończeniu książki.
źródło
Jeśli jest zainteresowany, czy drobne szczegóły nie są dobre? Używając Pythona, już odciąłeś GUI, dzięki czemu pomyłka zniknęła. Dlaczego nie wybrać projektu, gry lub czegoś i wdrożyć go. Klasyczna gra polegająca na zgadywaniu liczb hi-lo może być po prostu zaimplementowana z wiersza poleceń w 20-30 liniach kodu (w zależności od języka) i daje zmienne, warunki, pętle i dane wejściowe użytkownika.
źródło
Pozwolę mu napisać mnóstwo kodu. Pozwól mu wjechać we wszystko, co robisz, i bądź dostępny, aby odpowiedzieć na pytania.
Wierzcie lub nie, ale po kilku miesiącach pisania ton gównianego kodu zacznie rozumieć i zacznie pisać lepsze programy. W tym momencie możesz zagłębić się w szczegóły (pamięć itp.), A także mówić o ogólnych zasadach projektowania.
Słyszałem, że to, co odróżnia wielkich artystów od przeciętnych, polega na tym, że za każdym razem, gdy ćwiczą, poprawiają coś, bez względu na to, jak małe. Pozwól swojemu bratu ćwiczyć, a on poprawi się za każdym razem, gdy usiądzie przy klawiaturze.
źródło
Po pierwsze, zacznij jak wszyscy inni: z programem Hello World . Jest to proste i daje im podstawowe wyczucie układu programu. Spróbuj przypomnieć sobie czas, w którym programowałeś po raz pierwszy i jak trudne były niektóre z tych koncepcji - zacznij od prostych.
Po Hello World przejdź do tworzenia podstawowych zmiennych, arytmetycznych, a następnie do logiki logicznej i instrukcji if / else. Jeśli masz jeden ze swoich starych podręczników programowania, sprawdź niektóre z pierwszych przykładów i poproś go o przejrzenie tych. Tylko nie próbuj wprowadzać zbyt wiele naraz, bo będzie to przytłaczające i zagmatwane.
źródło
Coś, na co powinieneś bardzo uważać, ucząc swojego brata programowania, polega na tym, aby nie polegał zbyt mocno na tobie. Często, gdy pomagam innym, zaczynają myśleć o mnie jako książce odpowiedzi na wszystkie ich pytania i zamiast eksperymentować w celu znalezienia odpowiedzi, po prostu mnie pytają. Często najlepszym nauczycielem jest eksperymentowanie i za każdym razem, gdy twój brat ma pytanie: „Co się stanie, jeśli dodam 2 do łańcucha?” powinieneś mu powiedzieć, żeby spróbował i przekonał się sam. Zauważyłem również, że kiedy nie mogę komuś przekazać koncepcji, pomaga zobaczyć przykładowy kod, w którym możemy spojrzeć na każdy segment indywidualnie i wyjaśnić go kawałek po kawałku. Na marginesie, osoby początkujące w programowaniu często mają problem z ideą programowania obiektowego,
źródło
Uczyłem programowania, a twój brat ma jedną główną przewagę nad większością moich uczniów, których chce się uczyć :)
Jeśli zdecydujesz się na C, znajomy ma witrynę , na której są programy, których używają starsze generacje, zapamiętują jako podstawowe wpisy. Bardziej złożone z nich używają ncurses, co w pewnym sensie neguje ich użycie jako pomocy dydaktycznej, ale niektóre z nich są małymi drobiazgami i można uczyć się ładunków bez nauki.
Osobiście uważam, że Python i Ruby stworzyliby świetne pierwsze języki.
EDYCJA: lista zadań programowania dla początkujących pojawiła się z dnia na dzień może być właśnie tym, czego szukasz.
źródło
To zależy od stylu uczenia się twojego brata. Wiele osób uczy się szybciej, brudząc sobie ręce i po prostu wchodząc w nie, krystalizując koncepcje i ogólny obraz w miarę postępów i zdobywania wiedzy.
Ja wolę zacząć od dużego obrazu i przejść do drobiazgowości. Pierwszą rzeczą, którą chciałem wiedzieć, było to, jak to wszystko pasuje do siebie, a potem cały ten gobbledygook zorientowany obiektowo, a następnie o klasach, instancjach i tak dalej. Lubię poznać podstawowe pojęcia i trochę teorii, zanim nauczę się składni. Miałem trochę przewagi, ponieważ 20 lat temu napisałem kilka gier w języku BASIC, ale od tamtej pory niewiele.
Być może przydatne jest śledzenie procesu produkcyjnego, zaczynając od ogólnej misji, następnie planu i / lub schematu blokowego, a następnie opracowując jakiś pseudo-kod (skłaniający się do składni, której ostatecznie użyjesz) przed napisaniem kodu.
Złotą zasadą tutaj jest podkreślenie stylu uczenia się twojego ucznia.
źródło
Jeśli twój brat ma dostęp do iTunes, może pobrać wykłady wideo z wstępnego kursu informatyki prowadzonego przez Richarda Bucklanda na University of New South Wales. Jest angażującym instruktorem i obejmuje podstawy informatyki i języka C. Jeśli nic więcej, powiedz swojemu bratu, aby zagrał w tle w vids, a niektóre koncepcje mogą zatopić się w osmozie. :)
COMP1917 Wyższe obliczenia - sesja 2008 1 http://deimos3.apple.com/WebObjects/Core.woa/Browse/unsw.edu.au.1504975442.01504975444
Jeśli link nie działa, oto ścieżka:
Strona główna -> iTunes U -> Inżynieria -> Comp1917 Higher Computing - sesja 2008 1
źródło
istnieje wikibook, który jest całkiem dobry do nauki Pythona .
Nie wiem, jak wyglądają wikibooki dla innych języków, ale osobiście nauczyłem się Pythona z wikibooka, tak jak było w lutym 2007
ps - jeśli nie jesteś zaznajomiony z wikibookami , jest to w zasadzie wikipedia wersja książki. ciężko to opisać, ale jeśli przejrzysz kilka książek, zobaczysz, jak to działa
źródło
Programowanie w języku Python dla absolutnie początkującego
Programowanie w języku Python dla absolutnej okładki dla początkujących http://safari.oreilly.com/images/1592000738/1592000738_xs.jpg
źródło
Myślę, że Python to świetny pomysł. Dałbym mu kilka podstawowych zadań do samodzielnego wykonania i powiedziałbym mu, że wszelkie ślepe zaułki, które trafi, prawdopodobnie zostaną rozwiązane przez podróż do Google. Przynajmniej dla mnie samodzielne rozwiązanie problemu zawsze sprawiało, że lepiej się trzymał niż ktoś, kto powiedział mi rozwiązanie.
Niektóre możliwe projekty (bez określonej kolejności):
Symulator rzutu monetą. Pozwól użytkownikowi wprowadzić żądaną liczbę prób rzutu monetą. Wykonaj go i wyświetl wyniki wraz z procentem dla głów lub ogonów.
Stwórz konwerter temperatury z menu, które pobiera dane od użytkownika, aby wybrać rodzaj konwersji, którą użytkownik chce wykonać. Po wybraniu konwersji i wykonaniu jej należy powrócić do menu głównego.
Oto przykład rozszerzonego konwertera z tym samym pomysłem: http://pastebin.org/6541
Stwórz program, który przyjmuje dane liczbowe i wyświetla ocenę literową, na którą tłumaczyłby. Skończy to na ocenie danych wejściowych względem instrukcji if i elif w celu znalezienia, do czego pasuje.
Zrób prosty quiz, który obejmuje kilka opcji wielokrotnego wyboru lub wypełnij puste pytania. Na koniec wyświetli się sposób, w jaki zrobił to użytkownik. Może wybrać dowolne pytania.
Weź wkład pewnej (prawdopodobnie dużej) liczby groszy i zamień ją na większe nominały. Na przykład 149 groszy = 1 dolar, 1 kwartał, 2 dziesięciocentówki i 4 grosze.
Utwórz prosty menedżer list. Być w stanie dodawać / usuwać listy oraz dodawać / usuwać wpisy na tych listach. Oto przykład menedżera listy świąt: http://pastebin.org/6543
Utwórz program, który zbuduje, a następnie przetestuje, czy wprowadzone liczby tworzą magiczny kwadrat (z tablicą 2D). Oto przykładowy kod, ale tak naprawdę powinien on wydrukować kwadrat na każdym kroku, aby pokazać, gdzie użytkownik znajduje się w obszarze tworzenia kwadratu: http://pastebin.org/6544
Sugerowałbym także zrobienie kilku rzeczy z xTurtle lub innym modułem graficznym, aby pomieszać rzeczy i uniknąć nudy. Oczywiście, jest to bardzo praktyczne programowanie, a nie skrypty, do których wiele osób naprawdę używałoby Pythona, ale podane przeze mnie przykłady pochodzą w zasadzie bezpośrednio z czasów, gdy uczyłem się przez Pythona i okazało się to dla mnie świetne. Powodzenia!
źródło
Po prostu spraw, by było fajnie!
Zadziwiająco Scala może być najłatwiejsza, jeśli spróbujesz Kojo
źródło
Jeśli twój brat lubi łamigłówki, poleciłbym Python Challenge . Nie użyłbym tego jako formalnego narzędzia do nauczania w samouczku 1 na 1, ale jest to coś, co może zrobić, gdy nie jesteście razem, aby rzucić wyzwanie sobie i dobrze się bawić.
źródło
Wyzwanie Python
źródło
Po przejrzeniu kilku bezpłatnych e-książek znalazłem najlepszą książkę do nauki programowania, która została opublikowana przez O'Reily Press. Używa Pythona jako języka i zapewnia programy do pracy od samego początku. Wszystkie są bardziej interesujące niż „Hello World”. Warto wydać na to pieniądze, a ponieważ już trochę nie było, możesz znaleźć tańszą używaną kopię w serwisie eBay lub Amazon.
źródło
Jeśli chcesz nauczyć się podstaw programowania, nie będąc specyficznym językiem, istnieje aplikacja o nazwie Scratch, która została stworzona w MIT. Został zaprojektowany, aby pomóc ludziom w rozwijaniu umiejętności programowania. Gdy użytkownicy tworzą projekty Scratch, uczą się tworzyć warunki, pętle itp. Istnieje również społeczność projektów scratch, z których można pobierać projekty - w ten sposób możesz eksplorować programy innych ludzi i zobaczyć, jak zostały zbudowane.
źródło
Myślę, że kiedy już opanuje podstawy (zmienne, pętle itp.), Powinieneś spróbować pomóc mu znaleźć coś konkretnego, co go interesuje, i pomóc mu nauczyć się, jak to zrobić. Wiem, że jestem o wiele bardziej skłonny i zmotywowany do zrobienia czegoś, jeśli mnie to interesuje. Pamiętaj też, aby pozwolić mu zmagać się z niektórymi trudniejszymi problemami - nic nie jest bardziej satysfakcjonujące niż chwila, w której sam to rozwiążesz.
źródło
Nauczono mnie uczenia się, jak rozwiązywać problemy w sposób agnostyczny w języku za pomocą schematów blokowych i PDL (Program Design Language). Po kilku tygodniach nauczyłem się konwertować napisany przeze mnie PDL na język. Cieszę się, że nauczyłem się w ten sposób, ponieważ większość lat spędziłem na programowaniu, rozwiązywaniu problemów bez przywiązania do języka. Język, którego używam, zawsze był szczegółem implementacji, a nie częścią projektu.
Kluczową umiejętnością jest konieczność rozwiązania problemu poprzez podzielenie go na podstawowe kroki. Myślę, że to jedna z rzeczy, które oddzielają tych, którzy mogą programować od tych, którzy nie potrafią.
Jeśli chodzi o sposób, w jaki radzisz sobie z kolejnością pojęć języka, uważam, że najłatwiejszym sposobem jest zdecydowanie, że masz na myśli projekt i zajęcie się pojęciami, gdy są potrzebne. Dzięki temu możesz je zastosować, gdy są potrzebne do czegoś, co chcesz zrobić. Ucząc się języka, dobrze jest mieć na myśli kilka prostych projektów i kilka o stopniowej złożoności. Wybór tych pomoże ci zmapować potrzebne pojęcia i ich kolejność.
źródło
Poleciłbym także obejrzenie niektórych screencastów - są one generalnie tworzone w kontekście konkretnej technologii, a nie języka, chociaż jeśli wyświetli się kod Pythona, zrobi to :). Chodzi o to, że są tworzone przez dobrych programistów i patrzą, jak dobry program jest dobry. Ty i twój brat moglibyście także trochę programować, może to być jeszcze lepszy pomysł. Tylko nie zapomnij wyjaśnić DLACZEGO robisz coś w ten sposób, a nie w ten sposób. Myślę, że najlepszym sposobem na naukę programowania są dobre przykłady i staram się nawet nie dostrzegać złych.
źródło
Robert Read napisał przydatny przewodnik How to be Programmer , który obejmuje szeroki zakres zagadnień programistycznych, które mogą być pomocne dla początkujących.
źródło