Czy istnieje możliwość, że ktoś, kto nauczył się wszystkich kluczowych aspektów C ++ i bardzo dobrze zna podstawy języka, nauczy się innych języków (takich jak Python, Perl, Java) szybciej i łatwiej?
Czy istnieje możliwość, że ktoś, kto nauczył się wszystkich kluczowych aspektów C ++ i bardzo dobrze zna podstawy języka, nauczy się innych języków (takich jak Python, Perl, Java) szybciej i łatwiej?
Odpowiedzi:
Dogłębna znajomość dowolnego języka programowania może pomóc w szybszym wyborze innych języków. Dzieje się tak częściowo, ponieważ programowanie jest sposobem myślenia bardziej niż uczeniem się składni. Większość praktyk programistycznych byłaby prawdziwa w przypadku większości innych języków programowania. Dlatego ludzie mówią, że zawsze uczysz się drugiego języka programowania szybciej niż pierwszego.
C ++ to język, który pozwala na znacznie większą „kontrolę” niż inne języki. Może to być zarówno dobre, jak i złe. Na przykład prawdziwa broń jest lepsza niż broń powietrzna, gdy idziesz do lasu (ponieważ możesz faktycznie zestrzelić coś z niej), ale jest też bardziej niebezpieczna dla ciebie i osób wokół ciebie. C ++ ma takie pojęcia, jak zarządzanie pamięcią, o które nie musisz się martwić w większości innych języków. Dokładne zrozumienie tych koncepcji nie jest jednak bezcelowe, nawet podczas pracy z językami automatycznego zarządzania pamięcią. Możesz także wykonywać operacje bitowe i zejść znacznie niżej do „metalu” za pomocą języka takiego jak C ++. Nawet podstawowa znajomość tych obszarów może bardzo pomóc jako programista w dowolnym języku.
Najpierw osobiście nauczyłem się języka Java przez prawie 3 lata, zanim zacząłem uczyć się C ++ i powinienem powiedzieć, że trochę tego żałuję (kurs uni ...). To sprawiło, że uczenie się C ++ (wciąż się uczę - dalekie od „głębokiej” wiedzy: D) nie jest tak proste, jak bym tego chciał. Gdybym zrobił to na odwrót, powiedziałbym, że byłoby to dla mnie o wiele łatwiejsze. Zwłaszcza, gdy wiesz, DLACZEGO coś zostało zrobione w określony sposób, a nie tylko pewny auto-magii języka. Gdybym mógł wyrazić opinię, zasugerowałbym: C (dla podstawowych i uniwersalnych paradygmatów programowania) -> C ++ (dla podstawowego zrozumienia OOP wraz z zarządzaniem pamięcią) -> Następnie możesz przejść do dowolnego „prawdziwego” języka OOP z dobry fundament lub możesz kontynuować z bardziej zaawansowanymi tematami w C ++, wszystko w zależności od tego, co „
ORiAND
Niestety nie. Jest to w rzeczywistości duży problem podczas nauczania języka C ++ na lekcjach programowania, szczególnie na poziomie początkującym: możesz nauczyć się zasad programowania lub języka C ++, ale język C ++ ma zbyt wiele pułapek i głupie małe problemy, aby skutecznie uczyć się obu w ramach zakres zajęć semestralnych!
Jest wiele rzeczy, które zostały wypróbowane w C ++ i ostatecznie stały się idiomatyczne w tym języku dzięki czystej bezwładności, którą prawie każdy inny język od tej pory oglądał i odrzucał, ponieważ okazał się to wielkim błędem. Najważniejsze to szablony C ++ i model obiektowy C ++ (obiekty jako typy wartości nigdy nie są dobre, ponieważ psują podstawienie Liskowa i sam OOP tysięcy).
Więc jeśli najpierw pogłębisz znajomość C ++, a potem będziesz chciał nauczyć się innych języków programowania, będzie wiele szkodliwych i bezproduktywnych problemów, których będziesz musiał się nauczyć , aby być skutecznym w innych językach programowania.
Nie. Znajomość C ++ ułatwi naukę innych języków, takich jak C ++. Ale to byłoby nudne. Dlaczego chcesz poznać dwa języki, które są takie same? To nic ci nie kupuje. (Pamiętaj, że nie dotyczy to języka C ++. Dotyczy dowolnego języka. Porównaj z językami naturalnymi: nauka języka włoskiego nie ułatwi nauki innych języków. Uczy języka hiszpańskiego, francuskiego lub portugalskiego i nauki trzech z tych ułatwi ci naukę czwartego, ale nawet nauka wszystkich języków romańskich nie pomoże ci w nauce fińskiego, chińskiego, hindi, hebrajskiego, arabskiego, paszttu, greckiego itp.)
Języki programowania implementują paradygmaty. Peter van Roy zebrał plakat 34 głównych paradygmatów programistycznych .
Z kolei paradygmaty składają się z pojęć. Ten plakat wymienia około 18 pojęć.
Wszystkie paradygmaty (a przynajmniej te na plakacie) składają się z tych pojęć. Wszystkie języki implementują jeden lub więcej paradygmatów złożonych z tych pojęć. Jeśli więc nauczysz się tych pojęć, nauczysz się (w pewnym sensie) każdego języka programowania na raz.
Oczywiście nadal istnieje wiele dziwactw specyficznych dla języka (wśród nich składnia). Ponadto plakat ten całkowicie ignoruje pisanie i istnieje oczywiście znacząca różnica między systemem typu System F <: ω, systemem typu Scala lub dynamicznym systemem typu kaczego, nie mówiąc już o zależnym systemie typów à la Idris, Agda, Coq, Guru lub ATS.
Powiedziałbym, że głęboka znajomość dowolnego języka programowania pomoże w nauce innych, przynajmniej innych języków w tej samej rodzinie. Na przykład znajomość języka C ++ niewiele pomoże w LISP lub Haskell, ale w przypadku obiektowych języków proceduralnych to pomoże. Moje podejście polegało na tym, aby dobrze nauczyć się języka z każdej z różnych rodzin (proceduralnych, funkcjonalnych, obiektowych itp.) Języków, aby wiedza ta mogła zostać przeniesiona na inne języki w tej rodzinie. Z drugiej strony dogłębna znajomość APL nie pomoże w niczym innym ...
Przyjmę tutaj inną interpretację.
C ++ jest dobrym językiem do nauki o strukturach pamięci i danych, ponieważ zmusza do uważnego przemyślenia takich pojęć, jak własność obiektu i długość życia. Poznanie struktur pamięci i danych jest jedną z zasadniczych części każdego programu inżynierii oprogramowania.
Ale musisz uczyć się o strukturach danych. Jeśli po prostu „nauczysz się C ++”, tak naprawdę nie zyskasz zbyt wiele i może to spowolnić proces uczenia się innych języków w krótkim okresie.
Kiedy byłem na studiach, Data Structures była wymaganym kursem na poziomie dla początkujących, podjętym po CS1 (z którego przynajmniej połowa klasy postawiła). To było trudne. Format kursu był w zasadzie „Oto struktura danych, której nigdy wcześniej nie widziałeś [np. Lewicowa kupa ]. Zaimplementuj ją w C ++ w ciągu tygodnia i dopasuj dane wyjściowe do naszych oczekiwanych wyników, bajt po bajcie, więc może oceniać to automatycznie ”. W następnym tygodniu dostaniesz nową strukturę danych i nowe zadanie. Prawdopodobnie nauczyłem się więcej na tym kursie niż na wszystkich innych kursach łącznie.
Taki rodzaj nauki musisz robić, aby C ++ był cenny.
Każdy język, którego się uczysz, ułatwia naukę następnego, szczególnie w ramach tego samego paradygmatu. Pożyczają się od siebie mocno, a po chwili dochodzisz do punktu, w którym nowy język wygląda jak tylko zbiór funkcji z innych języków, z kilkoma wyjątkowymi zwrotami.
Nie sądzę, aby C ++ był lepszy lub gorszy niż jakikolwiek inny język pod tym względem. Jest to jeden z bardziej szczegółowych języków, jakie znam, i sprawia, że niektóre rzeczy są trudne, które są łatwe w większości innych języków, ale niekoniecznie przekłada się to na ułatwienie nauki następnego języka . To ma generalnie sprawiają, że obok języka lżej do użytku , choć. Jest różnica.
Nie. Dogłębna znajomość C lub podzbioru C ++, czyli „zasadniczo C”, pomoże w nauce innych języków, przynajmniej w wyobrażeniu sobie, jakie muszą być ich implementacje. Z drugiej strony, dogłębna znajomość C ++ będzie głównie informacją mylącą lub nieistotną podczas nauki innych języków; jeśli nauczysz się orientacji obiektowej C ++ na więcej niż poziomie powierzchni, na przykład, przechodząc do Perla / Pythona / Ruby, poświęcisz więcej czasu na uczenie się tego, co wiesz, niż korzystania z niego, ponieważ obiekty w tych językach są implementowane w zupełnie inny sposóbniż w C ++. To samo odnosi się w większym lub mniejszym stopniu do większości innych języków oraz do innych funkcji językowych (na przykład szablony C ++ i polimorfizm Haskella są w zasadzie tą samą cechą, z znowu zupełnie innymi implementacjami). Tak więc dogłębna znajomość C ++ będzie głównie specyficzna dla C ++.