Co robisz, gdy wydaje się, że nie rozumiesz określonej części programowania? [Zamknięte]

11

Uczę się nowych języków, piszę, piszę kod dla bardzo podstawowych programów w wielu językach i chodzę na zajęcia. Czytałem książki, artykuły, lekcje, filmy, ty to nazywasz, jednak wydaje mi się, że nie rozumiem pewnych rzeczy.

Na przykład nigdy nie rozumiałem wskaźników - w czym są dobrzy. (NIE CZĘŚĆ PYTANIA - zmiana tagu „Wskaźniki” nie jest wymagana ...)


Moje pytanie nie brzmi jednak, co robią wskaźniki, ale jak mam rozumieć takie rzeczy? Jeśli po przeczytaniu książki lub artykułu o pewnej części programowania i nie rozumiem, co mam zrobić? Pisanie kodu w pewnej funkcji programowania z pewnością pomaga, ale tak naprawdę nie pomaga w zrozumieniu zbyt wiele. Część teoretyczna jest ważna dla zrozumienia.

Bugster
źródło
11
Chciałbym zrozumieć, dlaczego ludzie mają tak duże problemy ze zrozumieniem wskaźników. Nazwa zawiera wszystkie potrzebne wyjaśnienia.
ChaosPandion
1
Niektóre Computer Architecture 101kursy bardzo pomogłyby w zrozumieniu wskaźników. ...i wszystko inne.
ZJR
6
Pytanie nie dotyczy dokładnie wskaźników, jest to pytanie ogólne, ale dzięki.
Bugster
2
Nie sądzę, aby przypominanie facetowi o jednym przykładzie, z którym wyznał, że ma problemy, pomoże mu choć trochę w kierunku oświecenia ... Zrobione wystarczająco często, ale nie pozwoli mu poprosić o pomoc ze strachu przed uderzeniem. długi ciąg skąpych i pedantycznych odpowiedzi oraz poniżających komentarzy.
haylem
4
@FrustratedWithFormsDesigner: Myślę, że „jak nauczyć się się uczyć”. Które jest ważne i cenne pytanie.
haylem

Odpowiedzi:

22

Jeśli masz problemy ze zrozumieniem abstrakcyjnej koncepcji, po prostu zejdź o jeden poziom niżej. Jeśli nie możesz uzyskać wskaźników w C - zejdź na poziom zestawu. Nadal masz problemy? Dowiedz się więcej o sprzęcie, aż do bramek logicznych.

Logika SK
źródło
2
+1: Pracował dla mnie. Miałem problemy ze wskaźnikami w ALGOL, dopóki nie zacząłem pisać języka asemblera PDP-10.
kevin cline
2
Ciekawy pomysł. Chociaż chciałbym zauważyć, że pisanie i uruchamianie programu w asemblerze posuwa się za daleko. Moim zdaniem przekroczenie poziomu podstawowego zrozumienia nie jest konieczne na tym poziomie. Ale hej, jeśli to właśnie chcesz zrobić, więcej mocy dla ciebie!
Bryan Field
1
@George Bailey, tak, może być trochę przesadzone w przypadku każdego prawdziwego montażu i prawdziwego sprzętu. Właśnie dlatego istnieją MIXi inne podobne architektury zabawek. W przypadku części sprzętowej jest tak samo - istnieje wiele prostych, zabawkowych rdzeni procesora do zbadania.
SK-logic
+1: Ciekawy pomysł i na pewno się sprawdzi, ale (aby ponownie wykorzystać przykładowy przykład PO) przejście z poziomu podstawowego C do poziomu podstawowego ASM może być długą, trudną i krętą drogą dla początkującego, prawdopodobnie więcej czasu niż przewiduje kurs / projekt / inny. Może także odseparować słabo zmotywowanych ludzi (co prawdopodobnie nie jest przypadkiem PO, ale z wyższego poziomu zablokowałoby to wielu uczniom, którzy biorą lekcje CS i muszą to zrozumieć, ale nie obchodzi ich samo) . Ale zdecydowanie dobry pomysł na dłuższą metę.
haylem
Mój dyplom CS opisał to w architekturze komputerowej. Dowiedzieliśmy się o bramkach logicznych, połączyliśmy je w symulatorze logicznym, aby zbudować sumatory, ALU i ostatecznie bardzo prosty procesor RISC. Napisaliśmy również proste programy w asemblerze MIPS. To wszystko było wymagane dla licencjata w dziedzinie informatyki i tak naprawdę nie było uważane za jeden z kursów „odchwaszczania”, więc nie sądzę, aby było to przesadzone lub posunięcie się za daleko.
Adam Jaskiewicz
17

Krótki cykl życia nauki przyrostowej

  1. Spróbuj i nie rozumieją pojęcia.
  2. Spróbuj wdrożyć coś ilustrującego tę koncepcję.
  3. Spróbuj narysować schemat na tablicy (jeśli dotyczy)
  4. Spróbuj porozmawiać z kimś, kto rozumie pojęcie.
  5. Spróbuj wyjaśnić bity, które rozumiesz dla tej osoby (czasami pomaga zobaczyć światło).
  6. Rozpocznij ponownie od 1, aż w końcu będziesz w stanie wyjaśnić to komuś, kto jest w stanie 1 i sprawi, że go zdobędzie.

Dodatkowe kroki

Używaj ostrożnie.

  • Wyszukaj dodatkowe materiały do ​​czytania i nauki :
    • online (popularne wyszukiwarki i Wikipedia są świetnymi przyjaciółmi),
    • w bibliotece (nie lekceważ książek, a ludzie, którzy tam je czytają),
    • w systemie (w zestawie dokumentacji i doc narzędzia są często alienacji w pierwszym, ale najlepiej goto-kumpel po jakimś czasie. nauczyć się znaleźć to, czego szukasz w nich na przykład man -k, apropositd ...)
  • Spróbuj przeczytać kod przy użyciu tej koncepcji ...
  • ... i przejdź przez kod za pomocą debuggera.

Są bardziej niepewne, ponieważ musisz dokonać ponownej oceny, aby upewnić się, że wszystko dobrze. Bezpośredni mentoring przez osobę kompetentną jest zwykle lepszy, po czym następuje oczywiście własna walidacja zdobytej wiedzy poprzez ponowne wdrożenie tego, czego się nauczyłeś (a następnie próba posunięcia się o krok dalej i nauczenia się koncepcji wyższego poziomu zbudowanej na tego, np. powiązane listy dla twoich wskaźników).

Kredyty: Nupul (do tworzenia diagramów)

Haylem
źródło
2
+1! Czy mogę dodać - przed rozmową wypróbuj tablicę, aby ją „naszkicować” (lub po prostu trzymaj tablicę pod ręką, kiedy z kimś rozmawiasz)
PhD
1
+1 za „przejście kodu za pomocą debuggera”. Dowiedziałem się o wielu koncepcjach za pomocą prostych narzędzi do debugowania ...
funkymushroom
@Nupul: dodano dobrą sugestię.
haylem
@funkymushroom: Rzeczywiście, choć powiedziałbym, że zwykle tak naprawdę nie uczysz się tej koncepcji. Pomaga jednak „podnieść mgłę”, gdy jest tuż przed tobą i po prostu nie widzisz, jak kawałki się łączą, ponieważ jesteś zbyt skupiony na czymś lub umysł jest usmażony. Uważam, że bardziej pomocne jest zrozumienie ogólnych problemów algorytmicznych niż ogólnych pojęć.
haylem
Rozmowa z tablicą zrobiła to dla mnie.
Peter
5

Z mojego doświadczenia wynika, że ​​chodzi o wkład i opinie. Chcesz uzyskiwać informacje w jak największej liczbie form, a informacje zwrotne na temat swoich błędów tak szybko, jak to możliwe.

Z mojego doświadczenia, mój dyplom CS był bardzo suchy, bardzo formalny i całkowicie bezwartościowy w nauczaniu jakiegokolwiek programowania. Uczęszczałem na dwa-trzy wykłady tygodniowo, a jeśli go nie dostaniesz, to w zasadzie to wszystko - wykładowca ma kolejną klasę do nauczenia i nie może pozostać, aby ci pomóc. I jest szansa, że ​​jeden facet rozumie to w określony sposób, a on nauczy go w określony sposób i to wszystko, więc jeśli nie myślisz tak jak on, nigdy go nie zrozumiesz. Co gorsza, ponieważ prawdopodobnie rozumie miliard innych pokrewnych pojęć, prawdopodobnie sformułuje je w kategoriach tych innych pojęć, które mogą być o wiele za daleko lub nawet nie w materiale kursu.

Poszedłem do Stack Overflow i zapytałem na kanale czatu C ++ i otrzymałem pięć różnych wyjaśnień w ciągu pięciu minut. Wszystkie były specjalnie dostosowane do mnie i dokładnie takiego problemu, jaki miałem, więc nie jest zaskoczeniem, że jeden z nich uderzył w moją stronę i dostałem to. Częstotliwość uczenia się na podstawie informacji zwrotnych na żywo od wielu ekspertów znacznie przewyższa to, co można uzyskać ze źródła suchego papieru.

Idealnie więc zrób sobie przerwę, a wtedy znajdziesz małą lub średnią grupę podobnie myślących ludzi, którzy nie mają nic lepszego do roboty i rozmawiać z nimi na żywo. Nawiasem mówiąc, Stack Overflow to doskonałe miejsce, aby uzyskać tego rodzaju wysokiej jakości szybkie informacje osobiste.

DeadMG
źródło
3

Bez kolejności książki, znajomi i czytanie dobrze udokumentowanego kodu są dobrymi źródłami. Praktyka jest jedynym sposobem na naukę: spróbuj napisać małe testy jednostkowe. Na przykład, w przypadku wskaźników napisz kod, który obsługuje ciągi: odwróć ciąg, odwróć każde słowo w ciągu, przetestuj palindrom, zamień literę na liczbę ...

Zadawaj pytania dotyczące wymiany stosów ...;>

Sardathrion - przeciw nadużyciom SE
źródło
2

Praktyka czyni mistrza! (i tak lepiej). Po prostu próbuj i staraj się używać tylu różnych źródeł i zmysłów, ile możesz:

Źródła: Książki, Internet, Grupy użytkowników, przyjaciele, Uczenie się wideo, za pomocą stron, które pozwalają przetestować trochę „kodu”, takiego jak jsfiddle (głównie HTML),
Rubular (wyrażenia Ruby),
SQlzoo do wypróbowania sql,
jslint dla javascript,
pad kodu dla wielu języków.

Aby pamiętać o abstrakcyjnych rzeczach, rozważ mneomikę - używają ich lekarze!

Uważaj się za uczącego się przez całe życie i bądź pokorny, a możesz posunąć się daleko.

śmieciowy
źródło
1
+1 za „ćwiczenie”. Ale mnemoniki, ugh. Są bardzo niewystarczającą kulą, która nigdy nie może zastąpić i nigdy nie powinna zastąpić zrozumienia. W rzeczywistości wskazują na brak zrozumienia. „Lekarze używają ich”, ponieważ są zmuszeni nauczyć się zbyt wielu niepowiązanych faktów w zbyt krótkim czasie. Powoli dochodzimy do wniosku, że nasza edukacja dla lekarzy jest do kitu, a na przykład Stany Zjednoczone są na dobrej drodze do całkowitej przebudowy edukacji. Mnemoniki nie są rozwiązaniem, stanowią część problemu. Jeśli ich używasz, nie rozumiesz.
Konrad Rudolph
1

Musisz zmienić skupienie na chwilę, a nie 5 minut. lub 5 godzin ... Mam na myśli coś takiego jak 1 dzień bez patrzenia na ten kod .... po prostu się wyluzuj ... przeczytaj coś innego ...

Jeśli mają to zrozumieć teraz ... poprosić o pomoc przyjaciół lub tutaj =)

Gerep
źródło
1

Co robią wszyscy inni w IT.

Korzystam z wyszukiwarki, aby wyszukać powiązane pojęcia, których nie rozumiem, dopóki nie mogę ponownie przejść do tematu, który początkowo chciałem zrozumieć.

Możliwe, że nie rozumiesz również w pełni stosu, sterty, zmiennych automatycznych, procesu kompilacji C ++, asemblera, pamięci zarządzanej i pamięci niezarządzanej.

Większa przejrzystość tych i innych pojęć związanych ze wskaźnikami prawdopodobnie wszystko wyjaśni.

Brian
źródło
1

Nie ma pewnego szybkiego sposobu na zrozumienie tematu. Twój sukces zależy od tego, ile kontekstu zabierasz ze sobą w trakcie studiów. Będziesz mieć szczęście, że znajdziesz kogoś, kto wyjaśni Ci różne rzeczy z twojego punktu widzenia. Podobnie jak maszyny Turinga, każdy może dowiedzieć się, co wiedzą inni, i tylko kwestia wytrwałości i akceptacji, że frustracja jest naturalna.

Pamiętam ogromną trudność ze wskazówkami. Zrozumiałem to dopiero, gdy bardzo cierpliwy koleś wyjaśnił mi to, jakbym był kompletnym idiotą. Czasami to wystarczy.

Kevin Hsu
źródło
1

Jest to powszechny problem w nauce i nauczaniu. I jak powiedzieli inni, nie ma pewnej metody obejścia tego. Jest to podstawowa prawda, że ​​wszyscy uczymy się inaczej, ponieważ nasze mózgi są inaczej połączone w subtelny, ale kluczowy sposób.

Uczenie się generuje nowe połączenia neuronowe. Bez zbytniego zagłębiania się w neuronaukę (o której wiem prawie nic), generowanie nowych połączeń wymaga różnych rodzajów ekspozycji na koncepcję dla różnych ludzi. Wypróbuj różne kąty, czytaj / słuchaj / oglądaj różne wyjaśnienia. Ćwiczyć!

Jeśli to nie zadziała, odłóż problem na bok: możesz po prostu pominąć inną część układanki, która raz nabyta sprawia, że ​​pierwotny problem wydaje się oczywisty.

Znasz te aha! chwile? To wtedy twój mózg właśnie nawiązał nowe połączenie. Tak dzieje się uczenie się.

Nawiasem mówiąc, każdy dobry nauczyciel wie o tym. Wytyczne dotyczące pisania technicznego często stwierdzają, że każdą koncepcję należy wyjaśnić co najmniej dwa razy, używając różnych słów (i być może tekstu między nimi). Jeśli zwrócisz uwagę, będziesz w stanie zauważyć, że wszyscy dobrzy pisarze naukowi przestrzegają tej zasady.

Niestety, zbyt wielu nauczycieli to ignoruje i wyjaśnia wszystko tylko raz. I nawet jeśli uda im się znaleźć eleganckie wyjaśnienie z wielką metaforą, to po prostu nie wystarczy.

Konrad Rudolph
źródło
0
  1. Przeczytaj odpowiednią dokumentację, a Google swoje wątpliwości.

  2. Spróbuj napisać przykłady kodu, zobacz, co robią.

  3. Spróbuj wykonać kod podczas debugowania i obserwuj go krok po kroku.

  4. Jeśli nadal nie rozumiesz określonego zachowania, zapytaj kogoś osobiście lub na takiej stronie internetowej. Jeśli wypróbowałeś wszystkie powyższe, powinieneś mieć wszystkie elementy, aby ułożyć dobre pytanie. Nie wstydź się :)

Myślę, że to w zasadzie to, co robią wszyscy inni.

jlemos
źródło
0

Kontynuuj badania i ucz się. Miałem ten sam problem z różnymi innymi aspektami programowania. Ale rozmawianie z innymi i czytanie artykułów ostatecznie prowadzi do momentu „AHA”. Zasadniczo jest to inny post na blogu lub odpowiedź SO, która przedstawia informacje, które mogę śledzić.

Zasadniczo, szukaj dalej i bądź cierpliwy, zanim zrozumienie nadejdzie.

Schleis
źródło