W ubiegłym roku w szkole średniej brałem zaawansowaną informatykę. Wydaje się, że uczono nas po prostu zapamiętywania kodu i funkcji, a nie tego, jak być zaradnym i wydajnym w korzystaniu z dokumentacji i tym podobnych.
Praktycznie wyobrażam sobie, że wiele (jeśli nie wszystkie) zadania programistyczne pozwoliłyby ci przejrzeć dokumentację, przejrzeć wcześniejszy kod i kod innych, zasadniczo robiąc to, co mój nauczyciel uznałby za „oszukiwanie”.
Chociaż zgadzam się, że podstawowe pojęcia są niezbędne do zapamiętywania (w dowolnym temacie), wydaje mi się zbędne i niepraktyczne, aby dać egzamin papierowy dla klasy CS, szczególnie gdy praktycznie miałbyś kompilator, debugger, referencję podręczniki i cały internet, do którego można się odnosić w każdej rzeczywistej sytuacji w pracy.
Dlaczego CS uczy się koncentrowania na zapamiętywaniu kodu i funkcji, a nie na nauczaniu przydatnych umiejętności, w tym jak używać i interpretować dokumentację, przykładowy kod, debugger i tym podobne?
Odpowiedzi:
W klasie licealnej jesteś na najbardziej podstawowym poziomie swojej ścieżki do opanowania. Rzeczy, które są objęte twoją klasą, to rzeczy, które profesjonalny programista powinien znać na zimno. Pod wieloma względami przypomina to naukę „tabel czasów”. Oczywiście zawsze będziesz mógł pobrać kalkulator w „rzeczywistym świecie”, ale to zapamiętywanie nie tylko zwiększa Twoją szybkość w bardziej złożonych zadaniach, ale także promuje głębsze zrozumienie podstawowych zasad.
Na przykład powinieneś znać kilka algorytmów sortowania, w jaki sposób są one zaimplementowane, jak działają, kiedy najlepiej je wykorzystać, a kiedy nie. To zawsze można było podnieść, ale nie powinno tak być - już więcej matematyk nie powinien szukać 6 razy 8.
źródło
Często uczy się tego w ten sposób, ponieważ nauczyciele zazwyczaj nie znają żadnego innego sposobu sprawdzania zrozumienia. Wasze uczucia są całkowicie słuszne, ponieważ nie warto się tak uczyć. Sposób, w jaki ludzie są wykształceni, wymaga desperackich reform!
Życie staje się lepsze, przynajmniej na UIUC odkryłem, że im wyżej idziesz na zajęciach CS, tym mniej egzaminy są zorientowane, jak opisujesz, i na większości moich kursów pozwolono nam na ściąganie kart na całe bzdury że prawdopodobnie zetknąłbyś się z Google, gdybyś faktycznie siedział przy komputerze.
To powiedziawszy, im wyżej poszedłem na moje zajęcia, tym mniej faktycznie uczą cię języków i jak coś wdrożyć. W rzeczywistości miałem tylko jedną klasę, w której faktycznie nauczyły nas wszystkiego o programowaniu, głównie abstrakcyjne koncepcje matematyczne i oczekiwano, że sami rozwiążemy tę kwestię programowania (pod warunkiem, że zawsze chętnie pomagali, ale to było nigdy czegoś na egzaminie).
źródło
Nie pozwól, aby edukacja przeszkadzała w Twojej edukacji.
- Mark Twain
Jestem Meksykaninem i mówię to, ponieważ w Meksyku nie jest to dobre miejsce na edukację (na żadnym poziomie), przynajmniej na edukację publiczną.
Cóż, w połowie mojej kariery (CS) czuję się dokładnie tak, jak się czujesz, więc zaczynam uczyć się sam i spędzam rok nauki algorytmów, linuxa, skryptów, działania mojego komputera, trochę relacyjnych bazy danych, html, css itp. (trochę o wszystkim). I oczywiście musiałem pomijać zajęcia *, obniżać oceny * i kończyć studia rok później *, wszystko po to, by się uczyć.
Po tym roku wracam do „normalnej” rutyny, wracam do regularnych zajęć, prac domowych, egzaminów i projektów. Zajęcia były nadal nudne, nic nowego do nauczenia, wszystko było takie samo. Postanowiłem więc wejść na strony z programami konkursowymi, takie jak UVA, oceniam online , szef kuchni i euler projektu , a potem obejrzałem kilka wykładów w MIT Open Course Ware i nadal uczyłem się samodzielnie, ale w inny sposób.
Lekcja: Nie pozwól, aby rzeczy się wydarzyły, spraw, aby się stało. Jeśli nie jesteś zadowolony ze sposobu, w jaki się uczysz, zmień go!
* Nie najmądrzejsze decyzje, które podjąłem.
źródło
To zależy od tego, co próbujesz zapamiętać ...
Na przykład, aby studiować matematykę, trzeba znać algebrę i często trzeba wykazać się kreatywnością w wykonywaniu manipulacji algebraicznych w celu uproszczenia równań. Ale musisz zapamiętać pewne bloki konstrukcyjne, aby móc skupić się na tych interesujących bitach. Musisz na przykład znać swoje tabliczki mnożenia na pamięć i musisz znać pewne tożsamości, abyś mógł rozpoznać, jak manipulować równaniami w celu użycia tych tożsamości.
Aby studiować informatykę, podobnie musisz znać podstawowe struktury i algorytmy danych budulcowych, ponieważ będziesz musiał zastosować je do problemów wyższego poziomu. Jest bardzo mało prawdopodobne, abyś na przykład napisał własną implementację listy połączonej w prawdziwym świecie, po prostu skorzystałby z tej dostarczonej przez bibliotekę. Ale wiedząc, jak zaimplementowana jest lista połączona i jak zaimplementować własną, będziesz w stanie zastanowić się, gdzie i czy użyć połączonej listy, kiedy zaczniesz pracować nad problemami wyższego poziomu. Podobnie, nigdy nie napisałbyś własnej funkcji wyszukiwania binarnego, ale ważne jest, aby zrozumieć, jak to działa, abyś mógł rozumować, na przykład, gdzie baza danych może korzystać z indeksu, a gdzie nie.
Po zapamiętaniu podstawowych elementów konstrukcyjnych łatwiej jest robić takie rzeczy, jak interpretacja dokumentacji. Dokumentacja może wskazywać, że lista jest używana i zakładać, że programista domyślnie wie, że oznacza to, że wstawki to O (1), a wyszukiwania to O (n). Bloki konstrukcyjne są również znacznie bardziej stabilne w czasie - najprawdopodobniej będziesz używać nowych debuggerów co kilka lat, prawdopodobnie będziesz używać tego samego wyszukiwania binarnego przez całą swoją karierę.
źródło
„Dlaczego CS uczy się koncentrowania na zapamiętywaniu ... w przeciwieństwie do uczenia przydatnych umiejętności” - myślę, że zbytnio przeceniasz zapamiętywanie. Podobnie jak powinieneś ćwiczyć pisanie kodu, interpretowanie dokumentacji, używanie debuggera, powinieneś także ćwiczyć zapamiętywanie.
Możesz być zaskoczony, o ile możesz stać się bardziej wydajny, jeśli nie będziesz musiał tak często sięgać do interfejsu API lub wyszukiwać tylu poleceń debuggera.
Jedną z najlepszych rzeczy, których nauczyłem się w liceum, było obserwowanie przyjaciela, który nigdy nie robił żadnych notatek w klasie. Argumentował, że pamięta, co jest ważne. Zacząłem robić to samo i myślę, że poprawiło to moje umiejętności zapamiętywania, które uważam za bardzo przydatne na co dzień, mimo że wszystkie te odniesienia API były łatwo dostępne.
źródło
Egzaminy pisemne i papierowe faktycznie mają sens, jeśli celem jest sprawdzenie pełnego zrozumienia przedmiotu. Zdałem egzamin Computer Science AB prawie dziesięć lat temu i zgadzam się z metodą pisaną i papierową.
Powinieneś znać wystarczająco dużo każdego algorytmu, którego się uczysz na niższych poziomach informatyki, aby móc zrozumieć, jak napisać kod implementacyjny w języku docelowym. Studenci powinni również umieć pisać kod ręcznie, z poprawną składnią. Wszyscy czasami pomijamy średnik lub nawias :). Można także testować umiejętności debugowania i projektowania bez wnioskowania z pomocnego IDE.
Jeśli uczeń nie może tego zrobić, nie ma opanowania tego tematu, może tylko przelotną znajomość.
źródło
Z mojego doświadczenia wynika, że zapamiętywanie przychodzi z prostą praktyką i absolutnie nie trzeba go wcale uczyć. Co ważniejsze, takie podejście oznacza jedynie zapamiętywanie tego, co naprawdę musisz pamiętać w tym, co robisz, a nie kilka przypadkowych śmieci, których nauczyciel ma nadzieję, że będziesz potrzebować i niezmiennie nie będziesz. Czas poświęcony na zapamiętanie implementacji jakiegoś algorytmu może być znacznie lepiej poświęcony innej sprawie.
W końcu, dlaczego miałbyś kiedykolwiek ćwiczyć pisanie algorytmu? Gdy raz go napiszesz, możesz go ponownie używać na zawsze - nawet przy bardzo odległej szansie, że ktoś jeszcze nie napisał darmowej implementacji dla wybranego przez ciebie języka i że twoje środowisko nie zapewnia już takiej algorytm do użytku, który nie jest prawdą w przypadku większości prostych algorytmów, takich jak sortowanie i tym podobne. Ćwiczysz coś, co jest bardzo mało prawdopodobne, że kiedykolwiek będziesz musiał to zrobić, a nawet jeśli to zrobisz, będziesz musiał to zrobić tylko raz? Nie cenne wykorzystanie czasu.
Ważne, aby wiedzieć o Heapsort, nie jest to, jak go w ogóle wdrożyć. Jest to złożoność operacyjna w najlepszych i najgorszych przypadkach oraz podobne rzeczy. Ale, niespodzianka, na Wikipedii znajduje się poręczny, elegancki stolik, który natychmiast poda te informacje. Więc znowu nie ma żadnej wartości w posiadaniu tej wiedzy. Jest on natychmiast dostępny dla Ciebie, kiedy tylko chcesz, do końca czasu, bez żadnych kosztów. Dlaczego więc chcesz to zapamiętać? To bezcelowe.
Z mojego doświadczenia wynika, że nie ma absolutnie żadnego powodu, aby wymagać od ucznia zapamiętania czegokolwiek. Jeśli zadajesz pytanie, na które można uzyskać odpowiedź ze źródła referencyjnego, zadajesz pytanie, gdzie odpowiedź na nie nie ma żadnej wartości.
źródło
ORDER BY
i C ++std::sort
.