Wiem, że ucząc się języka, możesz po prostu kupić książkę, podążać za przykładami i, jeśli to możliwe, wypróbować ćwiczenia. Ale tak naprawdę szukam, jak opanować język, gdy się go nauczysz.
Teraz wiem, że doświadczenie jest jednym z głównych czynników, ale co z uczeniem się wewnętrznych elementów języka, jaka jest jego podstawowa struktura itp.
Istnieją artykuły mówiące, że czytaj tę książkę, czytaj tę książkę, stwórz tę grę i tę grę. Ale dla mnie nie oznacza to opanowania języka. Chcę być w stanie czytać kod innych ludzi i rozumieć go, bez względu na to, jak trudny to jest. Aby zrozumieć, kiedy należy użyć funkcji, a kiedy innej itp.
Lista mogłaby być długa, ale wydaje mi się, że o to mi chodziło. :)
I na koniec weź dowolny język jako przykład, jeśli to konieczne, chociaż najlepiej byłoby, gdyby C został wzięty za przykład.
źródło
Odpowiedzi:
Muszę odpowiedzieć: „Wszystkie powyższe”. Ludzie kłócą się o to, czy kodowanie jest sztuką, rzemiosłem, dyscypliną inżynierii, czy gałęzią matematyki, i myślę, że uczciwiej jest powiedzieć, że to niektóre z nich. W związku z tym im więcej technik opanujesz, tym lepiej. Oto częściowa lista:
Używaj języka przez cały dzień, każdego dnia. Zwykle oznacza to zatrudnienie na pełny etat w tym języku.
Przeczytaj wszystko, co możesz o języku. Zwłaszcza „najlepsze praktyki” i idiomy.
Dołącz do grupy użytkowników, aby porozmawiać z innymi na temat języka i jego działań.
Pracuj z kodem innych ludzi! Nie ma szybszego sposobu na nauczenie się, czego nie robić w języku, niż sprzątanie po kimś, kto zrobił coś okropnego.
Wspieraj napisany kod - każdy błąd staje się zapowiedzią twoich najgorszych decyzji!
Studiuj informatykę i ogólnie języki
Naucz się zupełnie innego języka. Świetnym komplementem dla C byłby funkcjonalny język, taki jak Lisp. To zmieni sposób myślenia o języku proceduralnym na lewą stronę.
Naucz się korzystać z ram i interfejsów API dostępnych dla tego języka.
Poświęć trochę czasu na własne eksperymenty z językiem. SICP nie ma zastosowania do C, ale podejście do nauki języka poprzez testowanie jego ograniczeń jest bardzo produktywne.
Przeczytaj historię języka, aby dowiedzieć się, dlaczego został on utworzony taki, jaki jest.
Weź udział w konferencjach, aby usłyszeć, jak mówią autorzy języków lub usłyszeć, co liderzy branży robią z tym językiem.
Weź udział w zajęciach w języku.
Naucz język innym (dzięki Bryan Oakley )
Podsumowując, rób wszystko, co możesz wymyślić. Nie ma możliwości dowiedzenia się wszystkiego o większości języków. Każda zastosowana technika uczenia się zapewnia dodatkową perspektywę do zrozumienia.
źródło
Every technique you use to learn brings and additional perspective to your understanding.
Potrzebne jest 10 000 godzin ćwiczeń.
Przeczytaj „Naucz się programowania w ciągu dziesięciu lat”
Najważniejsze punkty z góry:
źródło
NIGDY nie uważaj się za mistrza całego języka, dopóki nie zaimplementujesz lepszego języka niż ten. Co oznacza, że aby dowiedzieć się, jak działa dany język od dołu, zdobądź książkę, która uczy kompilatora / interpretatora tego języka. Na przykład:
C: Książka LCC Compiler
C ++: Projektowanie i ewolucja C ++ (A następnie buduj własny kompilator C ++ lub przynajmniej zrozum implementację jednego z nich przy użyciu kodu kompilatora GNU C ++)
Java: Pobierz „Inside JVM” i pobierz kod źródłowy javac. Pomocny jest także kod .C „java”
Python: implementacja CPython.
Cel C: Prawie każdy materiał od Apple na temat wewnętrznych elementów środowiska wykonawczego ObjC env i kodów źródłowych kompilatora pomoże ci.
Lisp: SICP Book (uczy Cię Schematu i podstawowego interpretera-kompilatora dla języka podobnego do seplenienia): Lisp in Small Pieces (kolejna dobra książka).
źródło
Spróbuj użyć języka dla czegoś, do czego nie był przeznaczony. Napisz sterownik urządzenia w Pythonie lub bibliotekę manipulacji matrycą w języku COBOL. Myślę, że jednym z najlepszych sposobów opanowania języka jest naprawdę popychanie go, staranie się, aby jego mocne strony pokonały jego słabości.
źródło
Ułatwię ci to. Nigdy nie opanujesz języka. Kropka. Jeśli uważasz, że tak, to oczywiście nie masz. Nie ma szczytu, do którego nagle dotrzesz i powiesz „Cóż, teraz w pełni opanowałem ten język. Co teraz?” Nawet doświadczeni programiści, którzy pracują z tym samym językiem od dziesięcioleci, powiedzą ci, że czasem natrafiają na nowe pomysły, procesy, praktyki itp. Prawdziwym celem jest opanowanie twojego rozumienia języka lub języków. Umiejętność uczenia się nowych pojęć i szybkość, z jaką można wprowadzać nowe lub zmienione funkcje w języku, jest o wiele ważniejsza niż znajomość każdego słowa kluczowego i składni. Przestań się martwić o „opanowanie” języka i po prostu martw się o ciągłe doskonalenie i udoskonalanie jakości i wydajności kodu.
źródło
The true goal is to master your conceptual understanding of a language or languages.
Dokładnie. Tak naprawdę miałem na myśli.Znasz już odpowiedź na to pytanie
Wszystko sprowadza się do ciężkiej pracy i determinacji oraz do wszystkiego, czego możesz nigdy nie osiągnąć.
Zastanów się, skąd pochodzi ten termin - aby zostać mistrzem rzemieślnika, musiałeś być uczniem, a następnie czeladnikiem i tylko oni mogliby mieć szansę zostać mistrzem. Po drodze bylibyście nauczani i ćwiczyliście, obserwowaliście i zadawali pytania innym w ich rzemiośle oraz (miejmy nadzieję) ucząc się od nich.
Nie ma magicznej kuli ...
źródło
Zacznij od przeczytania i zrozumienia, czym jest SDLC (alias Cykl życia oprogramowania). Jest to iteracyjny proces obejmujący samodoskonalenie, uczenie się,
**practicing, practicing...**
To otworzy Twoje horyzonty na obszary, których musisz się nauczyć lub ulepszyć. Istnieje kilka podstawowych książek z zakresu inżynierii oprogramowania, które przydałyby się również przy samodzielnym tworzeniu kilku aplikacji.
Ponadto, gdy poczujesz się pewnie w języku OOP , możesz zacząć uczyć się wzorców projektowych , a wzorce Head First Design to naprawdę dobra książka do rozważenia. Kocham tę książkę.
źródło
Nic nie zastąpi doświadczenia. Aby coś opanować, musisz to zrobić / wykorzystać na wiele różnych sposobów.
Dlatego używaj tego języka do ćwiczeń (takich jak Project Euler ) i osobistych projektów, rzeczy, których naprawdę potrzebujesz, lub rzeczy, które uważasz za interesujące. Napisz grę, napisz aplikację internetową, napisz parser, co tylko chcesz. I na każdym kroku staraj się zrozumieć, co robisz, zamiast wklejać razem kod lub postępować zgodnie z instrukcjami.
Możesz to zrobić od razu po zrozumieniu podstawowej składni. Po prostu weź trochę kodu i poświęć czas, aby go szczegółowo zrozumieć. Wyszukaj rzeczy, których nie rozumiesz, lub zadaj konkretne pytania w miejscach takich jak Przepełnienie stosu .
źródło
Po stronie wysokiego poziomu problemu dowiedz się o architekturze: jak organizować swoje projekty, jaka jest jej struktura. Nie pozwól im rosnąć losowo.
Na poziomie średnim naucz się różnych technik i paradygmatów. Im bardziej różnorodne narzędzia masz w swoim repertuarze, tym więcej mocy dla Ciebie. Jeśli studiowałeś tylko java, python i ruby, byłeś narażony na bardzo małą część przestrzeni programistycznej. Naucz się programowania imperatywnego i funkcjonalnego, naucz się prologu i J. Ideą nie jest „opanowanie” stu języków, ale poznanie różnych sposobów rozwiązywania tych samych problemów.
Po stronie niskiego poziomu problemu jedną rzeczą, która może ci pomóc być lepszym programistą (a właściwie lepszym w tym, co robisz), jest dobry model mentalny platformy. Na przykład możesz dowiedzieć się, jak działają struktury kontrolne C i poznać najpopularniejsze biblioteki, ale jeśli nie masz mentalnego modelu działania wskaźników i pamięci, będziesz mieć problemy z umiarkowanie złożonymi wyrażeniami.
źródło
Czy mogę zrobić kilka sugestii?
Po pierwsze, jeśli znajdziesz mentora, z którym porozmawiasz o używaniu języka, uzyskasz najlepsze porady i wskazówki oraz odpowiesz, gdy jedna technika będzie lepsza od drugiej.
Po drugie, ćwicz jak najwięcej i wypróbuj język do maksimum! Kiedyś pracowałem w zespole, który każdego dnia wybrałby z podręcznika czasownik lub inny język programowania. To był znak honoru, jeśli mógłbyś wprowadzić go do swojego kodu tego dnia. Oznaczało to, że cały zespół programistów musiał przyjrzeć się i zrozumieć (czasami) niejasny termin, aby go zrozumieć i skutecznie z niego korzystać. W niektóre dni nam się nie udawało, ale ten zespół był zabawny i naprawdę technicznie włączony !!
źródło
Języki programowania odzwierciedlają idee stojące za paradygmatami programowania, które zostały opracowane z myślą o opracowywaniu oprogramowania ogólnego lub opracowywaniu oprogramowania specjalnego. Na przykład język programu, taki jak Java, reprezentuje zorientowany obiektowo paradygmat programu, ale AspectJ (rozszerzenie Java) jest używane do programowania zgodnie z programowaniem aspektowym.
Biorąc pod uwagę to krótkie wprowadzenie, aby naprawdę opanować język, samodzielne kupowanie i czytanie książki nie byłoby zbyt pomocne. Musisz zrozumieć środowisko, w którym możesz programować w wybranym języku, uczyć się o paradygmacie i, co ważniejsze, budować sensowną aplikację przy użyciu tego języka. Bardzo przydatnym podejściem do nauki jest zbudowanie małej aplikacji, która da ci przedsmak różnych narzędzi udostępnianych przez język.
Widziałem ludzi pochodzących ze społeczności czystego C, którzy nie dowiadywali się niczego o orientacji obiektowej i zmagali się w nauce języka Java lub celu-c. Widziałem także ludzi, którzy zmagają się z programowaniem interfejsów użytkownika, gdy tak naprawdę nie zrozumieli elementów interfejsu użytkownika, programowania sterowanego zdarzeniami itp.
Mam nadzieję, że to pomoże!
źródło
Dodałbym dwa elementy do listy Glen
źródło
Aby wykorzystać to, co powiedział @TMN. Odniosłem wielki sukces w nauce języków, pisząc ten sam program w innym języku.
Na przykład napisanie programu, który wczytuje plik CSV, analizuje tekst, a następnie zapisuje go z powrotem w drugim pliku CSV z kolumnami w odwrotnej kolejności.
Lubię to,
do
Zapewni to podstawową znajomość języka. Zobacz, co jeszcze możesz zrobić. Może zezwalaj na podstawianie wartości, zmianę kolejności lub czytanie z wiersza poleceń. Zrób to tak skomplikowane, jak chcesz.
Myślę też, co powiedział @GlenPeterson,
To świetny pomysł. Sugerowałbym język taki jak Haskell, ponieważ w najnowszych wersjach możesz programować przy użyciu wszystkich czterech paradygmatów programowania OO, proceduralnego, logicznego lub funkcjonalnego. Mimo że jest to właściwie język funkcjonalny, można z pewnym wysiłkiem wdrożyć inne paradygmaty, które byłyby dobrym doświadczeniem w nauce.
Świetny język do zabawy.
źródło
Nie możesz nauczyć się języka z książki. Wszystko czego potrzebujesz to ćwiczyć i ćwiczyć. Nie sądzę, że możesz nauczyć się języka z tej konkretnej książki lub tego konkretnego źródła. Po prostu myśl, że język programowania jest taki sam jak język ludzki. Nie możesz po prostu nauczyć się angielskiego lub francuskiego, czytając określoną książkę. dzień życia. Kod od podstaw, rozszerz jego funkcjonalność, spróbuj zbudować coś, co sprawi, że będziesz trochę zadowolony. A jeśli myślisz o opanowaniu języka jako znajomości całego języka i wykorzystaniu każdego elementu języka programowania w praktycznym kodowaniu ... NIE MOŻESZ. A nawet jeśli możesz, może to potrwać 10-15 lat.
źródło