Czy jest jeszcze za wcześnie, aby uczyć się nowego języka? [Zamknięte]

11

Kontekst osobisty: C ++ uczyłem się formalnie przez ostatnie 6 miesięcy na uniwersytecie. Wcześniej przez rok zajmowałem się JavaScriptem. Teraz rozważam naukę języka Python podczas miesiąca wolnego od szkoły.

Czy dzieląc swoje skupienie na wczesnym etapie procesu uczenia się, zmniejszam efektywność uczenia się? Czy powinienem spędzić miesiąc wolny, kontynuując pracę w C ++? A może nigdy nie jest za wcześnie na naukę nowego języka?

Przewidywanie
źródło
6
Jeśli rozumiesz programowanie w ogólności, nauka nowych języków powinna pomóc Ci zostać lepszym programistą. Jeśli dopiero zaczynasz programować i nie rozumiesz takich rzeczy jak kontrola przepływu, typy danych, funkcje / metody itp., Czekałbym na naukę innych języków.
The Muffin Man
Czuję się swobodnie w C ++ ze wszystkim, o czym wspominałeś.
Przewidywanie
1
Umieszczę twoje pytanie w perspektywie. W ciągu pierwszych 6 miesięcy pobytu na uniwersytecie zapoznałem się już z 5 różnymi językami programowania. Montaż (zapomniałem dokładnie, jaką to była platforma Moto), C, C ++, Visual Basic 6 i Java. Później zacząłem uczyć się Basic, C #, Visual Basic .NET, x86 Assembly. Po studiach nauczyłem się co najmniej 5 dodatkowych języków programowania w ciągu pierwszych 2 lat.
Ramhound
2
Jeśli potrafisz wielozadaniowo, ustalać priorytety i mieć zdyscyplinowane podejście do nauki, to z całą pewnością kontynuuj naukę drugiego języka. Zwykle najlepiej jest skoncentrować się na pierwszym języku i opanować go. Jednak ważne jest również poznanie różnych paradygmatów programowania. Przeczytaj sekcję programowania następujących linków, aby zobaczyć, co mam na myśli: Co powinien wiedzieć każdy informatyk i matryca kompetencji programisty
Anthony

Odpowiedzi:

8

Moje doświadczenie z Pythonem jest ograniczone do niektórych kodów odtwarzania tylko nieco bardziej skomplikowanych niż hello world, więc nie będzie to bardzo szczegółowa odpowiedź dla Pythona, ale mogę wam powiedzieć:

Różnice między językami są w szczegółach, takie jak składnia, a niektóre specyfikacje języka będą różne (na przykład różne sposoby obsługi błędów, możliwości we / wy i sposób, w jaki kompilatory przekształcają dane wejściowe w coś wykonywalnego), ale zarówno C ++, jak i Python oferują to samo paradygmaty, więc rozwiązywanie problemów można wykonać w podobny sposób w obu językach. Zarówno C ++, jak i Python są imperatywne i zorientowane obiektowo, więc prawdopodobnie będziesz dość szybko wychwytywał python, jeśli nie masz problemów z C ++ po opanowaniu nowej składni przy użyciu technik rozwiązywania problemów, które znasz z C ++. Jeśli chcesz, możesz używać Pythona również do programowania funkcjonalnego, ale nigdy nie dotknąłem tej części, więc nie mogę ci o tym wiele powiedzieć.

Czy jest za wcześnie? Naprawdę nie mogę opowiedzieć z twojej historii w ostatecznym tak lub nie. Czy jesteś już wystarczająco pewny, aby pisać pełne aplikacje (GUI) w C ++? (tj. używaj bibliotek, bardziej złożonych funkcji językowych, takich jak generyczne i / lub szablony itp.) Myślę, że nauka nowego paradygmatu języka jest znacznie trudniejsza niż nauka nowego języka w tej samej rodzinie paradygmatów. Kiedy wkroczysz na nowe terytorium paradygmatu, będziesz musiał poświęcić znacznie więcej czasu na uzyskanie dobrego pomysłu na rozwiązanie problemów z tym paradygmatem. Pomiędzy językami OO istnieją różnice w tym, jak traktowane jest dziedziczenie i jak dane są przekazywane do pamięci, gdy przekazujesz parametr / argument do funkcji wpływającej na wydajność. Ale aby zacząć, na początku są to zwykle niewielkie problemy.

Domyślam się, że jeśli jesteś wystarczająco pewny siebie w C ++, aby zrobić coś więcej niż cześć, świat w fantazyjny sposób, jesteś gotowy na uruchomienie. Powierzchowna nauka wielu języków pomoże ci zrozumieć przykłady kodu niezależnie od używanego języka, ale tworzenie własnego kodu wymaga nieco większego zrozumienia, w jaki sposób języki działają i jak się od siebie różnią.

PS Kiedy chcę nauczyć się powierzchownie używać nowego języka, zwykle próbuję następujących rzeczy, aby poznać składnię języka i powierzchowne działanie:

  • Witaj świecie (Tekst na ekranie)
  • Witaj świecie, zapisany do pliku (uczy podstaw we / wy pliku dla tego języka, a także bardzo często innych rodzajów we / wy)
  • Wykonywanie standardowych obliczeń na różnych podstawach (10, szesnastkowy, ósemkowy), zarówno liczb całkowitych, jak i zmiennoprzecinkowych. (uczy cię o obcinaniu i notowaniu liczb)
  • Spróbuj użyć biblioteki graficznej, aby pokazać cześć światu w fantazyjnym oknie dialogowym. (uczy, jak korzystać z bibliotek i kodu zewnętrznego)
Na nie
źródło
Uwagi końcowe w ostatnim akapicie są doskonałe. Chociaż nie jestem do końca w pełni zajęty aplikacjami w C ++, doceniam twój argument o poszerzeniu zakresu tego, co znam, nawet jeśli jest to tylko powierzchowne.
Przewidywanie
6

Oczywiście, że tak.

Bez wątpienia, czasem jest zbyt wcześnie, aby nauczyć się nowego języka programowania.

Najprostszym przypadkiem jest pojawienie się języka el-stinko, a zanim ktokolwiek zauważy, że jest nieodpowiedni, ucząc się go, uszkadzasz mózg. Kilka, które przychodzą na myśl to BASIC, FORTH i APL.

W przypadku bardziej skomplikowanego przypadku jeden z wielkich informatyków opisał ten problem, który bardzo krótko stwierdził, że praktyka utrwala się i istnieje wiele dyscyplin, których należy się nauczyć przed nauką języków komputerowych, aby język ten nie zakłócał bardziej fundamentalnego zrozumienia . Jego słowami:

Narzędzia, których używamy, mają głęboki i przebiegły wpływ na nasze nawyki myślowe, a tym samym na nasze zdolności myślowe.

Przeciwnik nurkowania w programowaniu nazywa się Edsger Dijkstra i miał bardzo wybitną karierę. Został wyróżniony nagrodą ACM Turinga z następującym cytatem:

Za fundamentalny wkład w programowanie jako duże wyzwanie intelektualne; dla wymownego nalegania i praktycznego wykazania, że ​​programy powinny być poprawnie tworzone, a nie tylko debugowane w celu poprawności; do oświetlania percepcji problemów u podstaw projektowania programu.

Artykuł, w którym rzuca się przedwczesną naukę języków programowania, to:

„O okrucieństwie faktycznego nauczania informatyki” http://www.cs.utexas.edu/users/EWD/ewd10xx/EWD1036.PDF

Poza tym proszę, nie płoń mnie, jestem tylko posłańcem.

DeveloperDon
źródło
„Zacząłem od języka BASIC i byłem bliznowacony do końca życia” - czy to nie obala twojego punktu widzenia? Gdybyś wcześnie zapoznał się z innymi językami programowania, BASIC nie wywarłby tak dużego wpływu?
tdammers
Chyba potrzebowałem emotikonu. Jeśli to pomaga, usunąłem to zdanie.
DeveloperDon
3

Czy jest jeszcze za wcześnie, aby uczyć się nowego języka?

Powiedziałbym tak. Jeśli nadal skupiasz się na samej idei, że komputer może faktycznie robić to, co ci powiesz, to nauka drugiego języka prawdopodobnie tylko Cię dezorientuje.

Ale jeśli przekroczysz punkt, w którym zdasz sobie sprawę, że komputer robi dokładnie to , co mu powiesz, bez względu na to, jak głupie jest, istnieje prawdopodobieństwo, że masz wystarczającą znajomość swojego pierwszego języka, który patrzy na drugi (i trzeci) !) język nie przeszkadza.

Joachim Sauer
źródło
2

Nie możesz zrobić obu? Zrobiłbym projekt w C ++ i uczyłbym się bitów Pythona (tylko dlatego, że jest tak niesamowity), możesz rozwiązać problemy na ProjectEuler.net przy użyciu Pythona

Ogólnie myślę, że to zły pomysł na naukę języka, porzucenie go i rozpoczęcie nauki nowego. Na wczesnym etapie należy elastycznie pracować z różnymi paradygmatami. Ale tak właśnie myślę.

nischayn22
źródło
ProjectEuler.net wygląda niesamowicie! Dziękuję za rekomendację.
Przewidywanie
2

Praktykującemu programistowi powiedziałbym bez zastrzeżeń, że nauka nowego języka prawie nigdy nie jest złym pomysłem. Studentowi uniwersytetu nalegam na ostrożność, zależnie od tego, jakie zajęcia się zbliżają. Powodem jest to, że na szkolnym egzaminie często musisz recytować szczegóły językowe bez korzyści ze środowiska kompilacji / wykonywania, które z łatwością wskaże twoje błędy.

Zwłaszcza gdy masz tylko kilka miesięcy doświadczenia, bardzo łatwo jest pomieszać szczegóły w swojej głowie. Jeśli troszczysz się o swoje oceny i bierzesz lekcje z takimi egzaminami, byłbym ostrożny. W prawdziwym świecie to nie jest problem.

edytuj : Pierwotnie powiedziałem składnię, ale nieskompaktowe szczegóły są równie ważne dla profesorów, a jest ich o wiele więcej.

Karl Bielefeldt
źródło
Jeśli jako student nie pamiętasz różnic między składnią między językami, masz problem. Nie zawsze będziesz miał kompilator do sprawdzania składni, w tej dziedzinie istnieją bardzo realne sytuacje, w których musisz móc natychmiast przywołać składnię.
Ramhound
Nie twierdzę, że nie da się zapamiętać, po prostu utrudnia to początkującym. Duże różnice składniowe są dość łatwe, ale profesorowie mogą być denerwująco wybredni w kwestii szczegółów, takich jak append()vs. push_back()dla listy, co jest czymś, co nawet doświadczeni programiści muszą sprawdzić, jeśli od pewnego czasu nie używali określonej funkcji w określonym języku. Zdolność przywołania składni na miejscu bez wątpienia pomaga, ale w zdecydowanej większości zadań nigdy nie jest wymagana .
Karl Bielefeldt