Odwiedziłem dziś dzień otwarty na wydziale CS na uniwersytecie i podczas wycieczki po laboratoriach usiedliśmy, aby pobawić się kilkoma projektami z ostatniego roku przygotowanymi przez studentów. Jeden był szczególnie dobry - coś w rodzaju asteroidy FPS. Postanowiłem zajrzeć do src
katalogu, aby stwierdzić, że został wykonany w C ++ (większość pozostałych projektów to aplikacje Java 3D).
Nie robiłem wcześniej żadnego C, ale wcześniej przejrzałem kod C. Z tego, co widziałem w kodzie .cpp w tej grze, nie wyglądało to zupełnie inaczej.
Jestem zainteresowany nauką C lub C ++, ale prawdopodobnie poznam inne później. Czy jest dla mnie jakaś korzyść, jeśli uczę się jednego przed drugim, a jeśli tak, to który?
Odpowiedzi:
Nie ma potrzeby uczyć się C przed nauką C ++.
To są różne języki . Powszechnym błędem jest przekonanie, że C ++ jest w pewnym sensie zależny od C, a nie jest samodzielnym w pełni określonym językiem.
Tylko dlatego, że C ++ ma dużo tej samej składni i wiele tej samej semantyki, nie oznacza, że musisz najpierw nauczyć się C.
Jeśli nauczysz się C ++, w końcu nauczysz się większości języka C z pewnymi różnicami między językami, których będziesz się uczyć z czasem. W rzeczywistości bardzo trudno jest napisać poprawny C ++, ponieważ średniozaawansowani programiści C ++ mają tendencję do pisania w C / C ++. Jest to prawdą niezależnie od tego, czy zaczynałeś w C, czy nie w C ++.
Jeśli znasz C jako pierwszy, to jest to dobry plus do nauki C ++. Zaczniesz od znajomości języka. Jeśli najpierw nie znasz języka C, nie ma sensu skupiać się na innym języku. Dostępnych jest wiele dobrych książek i samouczków, które rozpoczynają się od niczego nie wiedzącego i obejmują wszystko, czego nauczyłbyś się z C, co dotyczy również C ++.
Proszę zobaczyć dalsze uzasadnienie w tej odpowiedzi .
źródło
Uwielbiam to pytanie - to tak, jakby pytać „czego powinienem się najpierw nauczyć, jeździć na snowboardzie czy nartach”? Myślę, że zależy to od tego, czy chcesz jeździć na snowboardzie, czy na nartach. Jeśli chcesz robić jedno i drugie, musisz się nauczyć obu.
W obu sportach zjeżdżasz ze wzgórza po śniegu za pomocą urządzeń na tyle podobnych, aby sprowokować to pytanie. Jednak są one również na tyle różne, że poznanie jednego nie pomoże ci zbytnio z drugim. To samo z C i C ++. Chociaż wydają się być językami wystarczająco podobnymi pod względem składni, sposób myślenia, którego potrzebujesz do pisania kodu OO w porównaniu z kodem proceduralnym, jest na tyle inny, że prawie musisz zacząć od początku, niezależnie od języka, którego się uczysz jako drugi.
źródło
Najpierw nauczyłem się C, a zanim nauczyłem się C ++, wziąłem udział w kursie struktur danych, w których był używany. To zadziałało dla mnie dobrze. Kurs struktur danych w C dał mi solidne zrozumienie wskaźników i zarządzania pamięcią. Ujawniło również korzyści płynące z paradygmatu zorientowanego obiektowo, kiedy już się dowiedziałem, co to jest.
Z drugiej strony, ucząc się najpierw C, rozwinąłem pewne nawyki, które początkowo powodowały, że pisałem zły kod w C ++, takich jak nadmierne używanie wskaźników (gdy wystarczą odwołania w C ++) i preprocesora.
C ++ jest naprawdę bardzo złożonym językiem z wieloma funkcjami. Tak naprawdę nie jest to jednak nadzbiór C. Jest raczej podzbiór C ++ składający się z podstawowych konstrukcji programowania proceduralnego (pętle, if i funkcje), który jest bardzo podobny do C. W twoim przypadku zacznę od tego, a następnie przejdę do bardziej zaawansowanych koncepcji jak klasy i szablony.
Najważniejszą rzeczą, IMHO, jest wystawienie się na różne paradygmaty programowania, takie jak procedury, zorientowanie obiektowe, funkcjonalne i logiczne, na wczesnym etapie, zanim twój mózg zamarznie w jeden sposób patrzenia na świat. Nawiasem mówiąc, gorąco polecam również naukę funkcjonalnego języka programowania, takiego jak Scheme. To naprawdę poszerzyłoby twoje horyzonty.
źródło
Jeśli zdecydujesz się uczyć obu (i jak wspominały inne osoby, nie ma wyraźnej potrzeby, aby uczyć się obu), najpierw naucz się C. Przejście z C do C ++ wydaje się naturalnym postępem; pójście w drugą stronę jest jak celowe zawiązanie jednej ręki za plecami. :-)
źródło
Myślę, że powinieneś najpierw nauczyć się C, ponieważ ja nauczyłem się C. C dał mi dobre pojęcie o składni i problemach z takimi rzeczami, jak wskaźniki, z których wszystkie przechodzą do C ++.
Myślę, że C ++ ułatwia podsumowanie wszystkich tych problemów (potrzebujesz tablicy, która nie przepełni się, gdy użyjesz operatora [] i podejrzanego indeksu? Jasne, utwórz klasę tablicy, która sprawdza granice), ale musisz wiedzieć, co są i dają się przez nie ugryźć, zanim zrozumiesz, dlaczego coś się dzieje w określony sposób.
Kiedy wszystko jest już powiedziane i zrobione, sposób, w jaki C ++ jest zwykle nauczany, to „C ++ to C z obiektami, tutaj jest C, a oto jak działają wszystkie te OO”, więc prawdopodobnie nauczysz się podstawowego C przed jakimkolwiek prawdziwym C ++, jeśli i tak śledź większość tekstów.
źródło
Nie zgadzam się z większością tutaj. Myślę, że powinieneś nauczyć się C przed nauką C ++. Na pewno nie jest to konieczne, ale myślę, że znacznie ułatwia naukę C ++. C jest sercem C ++. Wszystko, czego dowiesz się o C, ma zastosowanie do C ++, ale C jest dużo mniejsze i łatwiejsze do nauczenia.
Podnieś K&R i przeczytaj to. Jest krótki i daje wystarczające wyczucie języka. Kiedy już opanujesz podstawy wskaźników i wywołań funkcji, możesz trochę łatwiej przejść do C ++.
źródło
static
, szablony (i śmiesznie zastraszające błędów szablonów kompilatory emitują) itd.Podczas nauki języka C ++ nauczysz się również większości języka C. Ale pamiętaj, że dużo kodu w C ++ jest nieprawidłowych C. C ++ został zaprojektowany tak, aby był zgodny z kodem w C, więc powiedziałbym, że najpierw naucz się C ++. Brian napisał świetną odpowiedź dotyczącą tego.
źródło
Podobnie jak odpowiedzi na wiele innych życiowych pytań, to zależy. To zależy od Twoich zainteresowań i celów programistycznych. Jeśli chcesz programować aplikacje desktopowe, być może za pomocą GUI, C ++ (i OOP) jest prawdopodobnie lepszym rozwiązaniem. Jeśli interesuje Cię programowanie sprzętu na czymś innym niż chipset x86, C jest często lepszym wyborem, zwykle ze względu na jego szybkość. Jeśli chcesz stworzyć nowy odtwarzacz multimedialny lub napisać aplikację biznesową, wybrałbym C ++. Jeśli chcesz przeprowadzić naukowe symulacje zderzeń galaktyk lub dynamiki płynów, spójrz na moc C.
źródło
restrict
specyfikatorem C nie ma innej konstrukcji składniowej / semantycznej związanej z wydajnością niż C ++, dlaczego właściwie myślisz, że kod C ++, z jego bogatszą składnią i np. Metaprogramowaniem, powinien dawać wolniejszy kod? Czy znasz w ogóle szablony wyrażeń?restrict
który jednak wszystkie główne kompilatory C ++ udostępniają jako rozszerzenie). I czy naprawdę myślisz, że biorąc pod uwagę ten sam kod, będzie jakaś różnica w wydajności między C ++ i C przy tym samym kompilatorze? [...]Nauka języka C zmusza Cię do dokładniejszego przemyślenia niektórych kwestii, takich jak jawne i niejawne zarządzanie pamięcią lub rozmiary magazynów podstawowych typów danych w czasie pisania kodu.
Gdy osiągniesz punkt, w którym będziesz czuć się komfortowo z funkcjami i nieprawidłowościami C , prawdopodobnie będziesz miał mniej problemów z nauką i pisaniem w C ++.
Jest całkowicie możliwe, że kod C ++, który widziałeś, nie różnił się zbytnio od standardowego C, ale może tak być, ponieważ nie był zorientowany obiektowo i nie używał wyjątków, orientacji obiektowej, szablonów ani innych zaawansowanych funkcji.
źródło
Myślę, że nauczenie się C najpierw to dobry pomysł.
Jest powód, dla którego kursy informatyczne nadal używają C.
Moim zdaniem jest to dla uniknięcia całego „tłoczenia się” przedmiotu obowiązku wymagającego prowadzenia OOP.
Myślę, że programowanie proceduralne to najbardziej naturalny sposób na naukę programowania. Myślę, że to prawda, ponieważ pod koniec dnia masz to, co masz: wiersze kodu wykonujące się jedna po drugiej.
Wiele dzisiejszych tekstów naciska na podejście „najpierw przedmioty” i zaczyna mówić o samochodach i zmianach biegów, zanim wprowadzą tablice.
źródło
Nie.
Ogólnie bardziej przydatna jest nauka C ++, ponieważ jest bliższa najnowocześniejszym językom opartym na obiektach obiektowych, takich jak Eiffel lub C #.
Jeśli Twoim celem jest nauka C ++, najpierw naucz się nowoczesnego, standardowego C ++. Odłóż mallocs na bok.
Ale Steve Rowe ma rację ...
źródło
Obserwując ludzi, którzy jako pierwsi nauczyli się Javy, zmagają się z koncepcjami wskaźników i zarządzania pamięcią w C ++, powiedziałbym, że nauka C jako pierwsza jest dobrym pomysłem, aby uchwycić te dwie koncepcje, odizolowane od złożoności innych C ++. cechy.
źródło
Moje dwa centy:
Proponuję najpierw nauczyć się C, ponieważ:
źródło
Myślę, że c to naprawdę fajny język programowania, jest zwarty i dość łatwy do nauczenia. ale jeśli chcesz się tylko nauczyć C ++, zacznij od C ++. ale proponuję nauczyć się obu. i jeśli chcesz to zrobić; myślę, że lepiej zacząć od c. jak powiedziałem wcześniej: jest mały i dość łatwy do nauczenia. może być fajnym krokiem naprzód w kierunku bardziej złożonego języka programowania, jakim jest c ++. (ponieważ c zapewnia kilka podstaw)
powodzenia.
źródło