Jestem początkujący. Czy mogę bezpośrednio rozpocząć naukę C ++ 11? czy muszę nauczyć się starego C ++? [Zamknięte]

36

Jestem początkującym i mam niewielką wiedzę na temat programowania.

Czy dobrze byłoby, gdybym bezpośrednio uczył się C ++ z książek obejmujących nowe C ++ 11, czy powinienem studiować stare najlepsze książki C ++?

Czy powinienem mieć niewielką wiedzę na temat C ++ przed nauczeniem się C ++ 11? czy mogę zacząć bezpośrednio z tego miejsca?

Czy spowodowałoby to problem, jeśli bezpośrednio zacznę od C ++ 11? Jeśli nie, to zasugeruj kilka książek na temat C ++ 11.

Dhananjay
źródło
18
Skąd te negatywne punkty? Czy na te pytania już udzielono odpowiedzi? Czy początkujący nie mogą zadawać pytań? Motyka, czy ktoś prowadzi w tej sprawie badania? Myślę, że jednym z najlepszych sposobów jest zwrócenie się do osób z większym doświadczeniem. +1, ponieważ początkujący również zasługują na
wskazówki
12
@ Simon wydaje mi się to koncepcyjnym pytaniem o rozwój oprogramowania: od czego zacząć? A skąd wiesz, że nie jest profesjonalnym programistą? ;)
adosaiguas
4
@MSalters Mówiąc o książkach; Accelerated C ++ to niesamowita książka, choć nieco uproszczona. Barbara E. Moo jest niesamowitą pisarką, a jej wpływ na książkę można łatwo zauważyć. Ale ta książka rzeczywiście jest „stara”. Jednak nie wszystko stracone - istnieje wysoko oceniana książka C ++ Primer autorstwa Lippmana , Lajoie i Barbary E. Moo , piąte wydanie zostało opublikowane w tym miesiącu (sierpień 2012 r.) I z pierwszych kilku rozdziałów czytałem kopia, jest to doskonała książka obejmująca C ++ 11. Wpływ Moo jest znowu obecny. Jest boginią, jeśli chodzi o pisanie techniczne.
zxcdw
2
@ Simon Programmers — Stack Exchange is a site for professional programmers...W takim przypadku, czy mógłbyś poprowadzić mnie do strony dla początkujących programistów? Jestem również początkującym programistą i mam kilka podstawowych pytań ...
Jeyekomon
2
Myślę, że to pytanie jest wyraźnie nie na temat ze względu na FAQ (być może nie było, kiedy zadawano to jako pierwsze). Pyta „jaki język (wersję) powinienem wybrać w następnej kolejności”, dotyczy porad edukacyjnych i prosi o zasoby poza rozmiarami - trzy standardowe powody zamknięcia.
Doc Brown

Odpowiedzi:

38

Istnieje wiele ulepszeń użyteczności, które sprawiają, że C ++ 11 jest bardziej zrozumiały dla początkujących, szczególnie tych, którzy mają doświadczenie w innych językach z tymi funkcjami. Inne zmiany w C ++ 11 są interesujące tylko dla zaawansowanych użytkowników, więc możesz zostać przytłoczony, jeśli wybierzesz książkę zaprojektowaną głównie do nauczenia różnic. Upewnij się, że każda książka, którą otrzymujesz, jest przeznaczona dla całkowicie początkujących w C ++.

To powiedziawszy, prawdopodobnie będziesz musiał ostatecznie nauczyć się starego sposobu, ponieważ istnieje wiele istniejących kodów, a nawet nowy kod C ++ 11 będzie zawierał stary sposób robienia rzeczy, jeśli programista tak zdecyduje. Piszę C ++ na co dzień, a moja firma wciąż nie zajęła się oceną kompilatorów kompatybilnych z C ++ 11, nie mówiąc już o zastosowaniu jednego z nich w produkcji.

Karl Bielefeldt
źródło
Uczę się od c ++ primer 4. edycja. dobra książka na początek?
Dhananjay
1
Otrzymuje dobre recenzje i wygląda na właściwym poziomie, ale od dawna nie patrzyłem na książki dla początkujących w języku C ++ , więc nie jestem najlepszą osobą, o którą można zapytać. Myślę jednak, że będziesz potrzebować piątej edycji, jeśli chcesz objąć C ++ 11.
Karl Bielefeldt,
jest ok i tak, wiem, że wydanie 5 obejmuje c ++ 11.
Dhananjay,
10

Nie musisz używać starego C ++, aby zacząć korzystać z C ++ 11, są nowe funkcje w C ++ 11, ale użycie jest opcjonalne. Umiejętność korzystania z funkcji C ++ 11 może być zaletą, ale na pewno nie będzie to niekorzystne w przypadku pracy ze starszymi (wcześniejszymi niż 11) bazami kodu, gdy poznasz specyfikę starszych wersji.

Nauka języka C ++ byłaby dobrym miejscem do rozpoczęcia nauki, a dodatek B nauczy Cię funkcji języka C ++ 11 po opanowaniu podstaw.

Rozumiem, dlaczego niektórzy sugerowali Java / CSharp itp. Jako łatwiejsze języki alternatywne, ale nauczyłem się trochę C ++ przed przejściem do CSharp i nie jestem gorszym programistą z tego powodu, wręcz przeciwnie, umiejętności programowania sięgają znacznie głębiej niż język składnia / funkcjonalność i solidne podstawy w C ++ pozwalają łatwo nauczyć się dowolnego innego imperatywnego języka OOP.

Joel
źródło
8

Trudno powiedzieć.

Stare C ++ jest bardziej polem minowym i fajnie jest nauczyć się nawigować po takiej bestii. Pomoże ci również zrozumieć, dlaczego rzeczy są wykonywane tak, jak są i jakie są implikacje różnych konstrukcji.

Z drugiej strony stary C ++ nie jest tym, czego chcesz, gdy piszesz kod.

Ale, po raz kolejny, stary C ++ jest czymś, co będzie się rozwijać w branży przez kolejne 20 lat.

Uwielbiam C ++ 11, ale na razie można go używać tylko w startupach. Nie w dużych starszych kodach. A przejście od razu do C ++ 11 może sprawić, że będziesz mieć nierozwinięte umiejętności w nieprzyjemnych częściach C ++. Który zadziała, gdy jakiś zaawansowany konstrukt C ++ 11 wycieknie lub ulegnie awarii, ponieważ jest używany w poprawny składniowo, ale logicznie niepoprawny sposób.

Koder
źródło
Dlaczego znaczna część przemysłu nie aktualizuje tam kompilatorów, oprócz niszowych systemów wbudowanych? Ryzyko (nawet przy testach jednostkowych)? Konserwatyzm?
TheLQ
1
@TheLQ: Chyba ... Ale kiedy pomyślę, co bym zrobił, gdybym był szefem, bardzo prawdopodobne, że zrobiłbym to samo. Chyba że istnieją pewne zauważalne oszczędności kosztów w porównaniu z kosztami migracji.
Koder
1
@TheLQ: Tak, aby podstawy kodu mogły przejść do nowszej wersji kompilatora. Rzadko zdarza się, aby projekt dostosowywał nową wersję kompilatora do woli. Nowy projekt częściej korzysta z nowego kompilatora (o ile nie wchodzi w interakcję ze starym kodem).
Martin York,
1
@Coder: Co sprawia, że ​​C ++ 11 różni się od C ++ 03 tym, że nauczenie się go nie przełoży się bezpośrednio na C ++ 03. Istnieje kilka nowych funkcji, które ułatwiają pisanie, ale nic nie stoi na przeszkodzie, aby wkroczyć na pola minowe.
Martin York,
1
@TheLQ: tak, to w zasadzie procesy, ale zapomniałeś o testach integracyjnych (najbardziej złożona część. Nie wszystkie aplikacje są samodzielne (w rzeczywistości powiedziałbym, że jest to mniejszość)). Musisz sprawdzić, czy cały kod działa poprawnie i wchodzi w interakcje (nie tylko z kodem, ale z kodem klienta). Jest to proces trwający miesiące, jeśli nie tak, testy i walidacja. Jeśli niektórzy z twoich klientów nie przechodzą na C ++ 11, może być konieczne utrzymanie obu wersji na niektórych systemach (na szczęście gcc jest bardzo dobry z kompatybilnością wsteczną, ale nie wszyscy dostawcy kompilatorów C ++ są).
Martin York,
8

Pomimo wielu ulepszeń C++11, C++nadal nie jest łatwym językiem. Java, choć nie tak łatwa, jak niektórzy mogą sądzić, wciąż jest łatwiejszym językiem o bardzo dobrej wydajności (często prawie tak szybkim C++) i oferuje lepsze IDE (może Visual C++jest tak dobra jak obecne IDE Java, ale nie ma szczęścia tutaj w Linuksie), dużo bardziej wszechstronna standardowa biblioteka (JDK), więcej bibliotek (np. Hibernacja , Spring , JEE , Lucene itp.) i brak wycieków pamięci (cóż, prawie żadna - nadal można zbudować wyciek pamięci w Javie, ale trudniej to zrobić niż w C++). Mówiąc szczerze, dzięki nowoczesnemu o C++11wiele łatwiej jest unikać porów pamięci.

C ++ 11 ma wiele ciekawych funkcji, takich jak lambda, automatyczne słowa kluczowe, semantyka przenoszenia i wiele innych. To zdecydowanie lepszy język niż wcześniej C++98. Zobacz przegląd autorstwa Herb Sutter na temat nowych funkcji w C++11: Elementy nowoczesnego C++stylu.

Podsumowując, myślę, że każdy powinien nauczyć się przynajmniej trochę C++. Jeśli zostały programowania w Java, Scala, Rubylub Pythonw ostatnim dziesięcioleciu i nigdy nie dotknął Club C++, teraz z C++11myślę, że nadszedł czas, aby nauczyć się C++11i doskonalić swoje umiejętności programowania robiąc tak.

Prawdopodobnie nie będę C++dużo używać w pracy w nadchodzących latach, a kiedy będę potrzebować mocniejszego języka Java, prawdopodobnie wybiorę Scalę, ale przyjrzę się bliżej C++11i spróbuję nauczyć się i zrozumieć nowe funkcje, w szczególności te dotyczące wielowątkowości i współbieżności.

Pamiętaj: Zawsze pomaga nauczyć się nowego języka programowania, nawet jeśli nie planujesz go używać w środowisku produkcyjnym.

Jenny Casarino
źródło
1

Weź głęboki oddech i przeczytaj ten artykuł Petera Norviga.

Przeczytałeś to? Ok, jeśli jesteś początkujący, musisz zacząć od małych kroków. - wstaw tutaj język - może przyjść później, sprawdź Coursera lub Udacity, aby zapoznać się z niektórymi kursami dla początkujących w zakresie informatyki.

Po zakończeniu tego radzę powoli przejść przez to język programowania K&R The C, jeśli jesteś ustawiony na język „C”.

Pracuj nad podstawami, reszta przyjdzie na czas.

lwm
źródło
10
Nie rozumiem, jak to jest odpowiedź na zadane pytanie. C nie jest nawet tym samym językiem, co C ++.
vartec
1
Ale C ++ jest oparty na C i jest w dużej mierze kompatybilny wstecz: ogromna większość współczesnej składni C ma bezpośrednie zastosowanie do C ++. Ponieważ C jest prostszy niż jakakolwiek wersja C ++, nauka C najpierw daje niezłą spójną edukację w podstawowej składni i semantyce C ++ - i pomaga wyjaśnić niektóre niezrozumiałe brodawki w większym języku ...
nadchodzi burza
2
@comingstorm Pierwszą rzeczą, którą powinien zrobić programista C, jest nauczenie się prawie wszystkiego, co wie o C, a następnie rozpoczęcie nauki C ++. Istnieją subtelne różnice, które mogą cię gryźć.
BЈовић
1
Ponadto idiomatyczny nowoczesny kod C ++ niewiele pożyczy od C oprócz składni. To nie tak, że nadal używamy ciągów C i malloc / free. Jako kompletny początkujący język lepiej wybrać książkę taką jak C ++ Primer 5. wydanie, Accelerated C ++ itp. Zamiast skupiać się na C.
bstamour 30.01.2014
1

Najnowsze książki wprowadzające na temat C ++ coraz częściej obejmują także C ++ 11. Czytam Sam's Teach Yourself C ++ po pracy z językami skryptowymi, ale nie C / C ++ przez prawie dziesięć lat i uważam to za bardzo pomocne. Bardzo szybko zacząłem rozumieć główne idee C ++ (w tym dużo STL) i zdałem sobie sprawę z bardzo wielu szczegółów, które różnią się w C ++ 11.

Jak niektóre inne plakaty wspomnieli, C ++ 11 jest pod wieloma względami łatwiejsze niż starszych standardów z dodatkami w stylu jak skryptowy auto, for(int &i : m_vector){}itd. Więc jeśli „trochę wiedzy” pochodzi z języków takich jak Python lub Matlab, znajdziesz c ++ 11 nieco bardziej „naturalny” niż wcześniejsze standardy.

Chciałbym również zauważyć, że do tej pory kompatybilność kompilatora dla C ++ 11 jest ( prawie ) kompletna, więc posiadanie kodu „zbyt aktualnego do kompilacji” nie jest już problemem.

Krótko mówiąc, zrób to.

mmdanziger
źródło
-1

Kiedy mój czas C był uważany za warunek C ++, szczególnie dla początkujących programistów. Ponieważ musisz dowiedzieć się, co robi język i dlaczego został tak zaprojektowany. C ma mnóstwo świetnych i wystarczających pomysłów na język programowania, który nigdy nie będzie nieaktualny. Dlatego uważam, że to najlepszy początek.

A po zapoznaniu się z podstawowym punktem widzenia na temat programowania, być może będziesz musiał wybrać, co należy zrobić jako następny ruch, co oznacza, że ​​wybierz język do nauki tak głęboko, jak to możliwe. Bez względu na to, jak głęboko się zagłębiasz, na ogół może decydować o tym, jak głęboko możesz się dostać w przypadku innych języków, co oznacza, bez względu na to, ile języków się nauczyłeś, najgłębszy zawsze będzie pierwszym, który wykopałeś. Dla mnie przeprowadziłem badania nad Javą i sam stworzyłem niektóre modele Javy, aby lepiej zrozumieć jego funkcjonalność jądra.

Następnie możesz nauczyć się wszystkiego, czego chcesz, ponieważ całkowicie rozumiesz technologię języka programowania. Zacząłem uczyć się C #, Go, Python, a nawet Scali i wykonałem wiele projektów dla zabawy / pracy. Osobisty rekord to 3 miesiące od rozpoczęcia nauki języka do stania się 1,0 szefem rozwijającego się projektu.

W moim przypadku minęło ponad 15 lat od mojego pierwszego programu i nawet nie pamiętam, co to jest. Wierzę, że jeśli wystarczająco ciężko pracujesz, na pewno poczujesz się lepiej i szybciej ode mnie.

WinstonWu
źródło
to nie odpowiada na zadane pytanie
komara
Całkowicie przepraszam. Chcę tylko powiedzieć, że nie. Nie ma znaczenia, czego w końcu chcesz się nauczyć, tylko podstawa języka programowania może decydować o tym, jak głęboko możesz kopać w tej dziedzinie. Jednocześnie musisz poświęcić temu więcej czasu niż szybki strzał.
WinstonWu,
-2

Jako początkujący myślę, że najpierw musisz przejść przez koncepcje C ++, ponieważ C ++ 11 i wszystko jest jak nowa wersja, ale C i C ++ są podstawą każdego rodzaju rozwoju. Gdy nauczysz się C ++, większość pojęć zostanie automatycznie wyczyszczona.

Pooja Runija
źródło
1
Witamy w Programistach! Nie jestem pewien, czy twoja odpowiedź dodaje tyle do tego pytania; i gramatycznie mówiąc trochę bałaganu. Mam problem z podążeniem za tym, co próbujesz powiedzieć. Czy możesz rozwinąć swoją odpowiedź, być może dodać przykłady, dlaczego C ++ 11 różni się tak bardzo, że nauka C i wcześniejszych wersji standardu C ++ jest lepsza?
Martijn Pieters
-3

C ++ to naprawdę świetny i potężny język. Jednak nakłada również dużą odpowiedzialność na programistę.

Jeśli jesteś zupełnie nowy w programowaniu, ułatw sobie życie i zacznij od C #. Jego składnia jest oparta na C ++, ale obsługa błędów jest o wiele bardziej przyjazna dla początkujących, pomagając ci, gdy coś pójdzie nie tak.

Jeśli nie masz nic przeciwko metodom, klasom, dziedziczeniu i chcesz się rozwijać w środowisku, w którym zarządzanie pamięcią i zasobami systemowymi jest ważniejsze niż produktywność, to C ++ jest dobrym wyborem i zacznę od nauki obecnego standardu. Pamiętaj, że C ++ wymaga zrozumienia pamięci i aktywnego zarządzania nią. Popełniaj tutaj błędy, a wszystko, co dostajesz, to zrzut rdzenia lub dane zawierają bajty, które nie mają sensu. I często punkt, w którym znajdziesz problem, nie jest związany z faktyczną przyczyną.

Michael Shaw
źródło
1
Jeśli ktoś zacznie od C #, przyzwyczai się do programowania na wysokim poziomie (OOP, automatyczne zarządzanie pamięcią) bez faktycznej wiedzy o tym, co dzieje się „za sceną”. Jeśli ta osoba przejdzie następnie do C ++, nie będzie miała ważnej wiedzy na temat C / C ++ (myślę głównie o zarządzaniu pamięcią, ale jest więcej). Może to być jeszcze bardziej mylące ze względu na fakt, że C ++ i C # mają bardzo podobną składnię, ale to, do czego kod faktycznie się kompiluje, jest zupełnie inne. Należy pamiętać, że OP wyraźnie wyraził zainteresowanie C ++.
Eti
PO stwierdził również, że ma niewielką wiedzę na temat programowania. nauka pierwszego języka jako C ++ to ogromne wyzwanie. O wiele lepiej wybrać bitwy i serię mniejszych, ponieważ masz większe szanse na sukces.
Michael Shaw
-6

Dlaczego chcesz zacząć od C ++?

Osobiście polecam przeciwko C ++ jako pierwszemu językowi. Jest trudny, złożony, trudny ... po prostu dużo niższy poziom i bardziej „niebezpieczny” niż większość innych języków programowania.

Radzę wybrać c #, java, python lub javascript ... i dobrą książkę po drodze. Dzięki nim będziesz miał o wiele przyjemniejszy czas.

Dagnele
źródło
3
Nie zgadzam się co do tego jako uogólnienia. Przejście od łatwego życia java / C # / python itp. Do bardziej złożonego świata C i C ++ nie jest takie łatwe. Jeśli naprawdę chcesz nauczyć się języka programowania, nauka C i C ++ jest trudna, ale da ci tyle. Jeśli później chcesz programować w Javie, C #, Python itp., Zmiana jest o wiele łatwiejsza niż przejście z nich na C lub C ++. Podsumowanie: C / C ++ będzie trudniejszy na początku, ale ułatwi przejście na inny język OO.
martiert
2
C ++ to najlepsza podstawa do rozpoczęcia. Programowanie jest skomplikowane i ostatecznie musisz pracować ze sprzętem. C ++ to niesamowity sposób na naukę tego bez fałszywego poczucia bezpieczeństwa.
Koder
Pytanie op zależy całkowicie na jego / jej celu w rozwoju.
Niezależny
1
Nie zgadzam się z tym. Nauka języka C ++ ma kilka zalet i ułatwia naukę innych języków, takich jak Java i C #, aby wymienić tylko kilka.
Anthony
2
@Dhananjay: C ++ jest wiele razy trudniejszy niż java ... Java jest jak dziecięcy rower, niezwykle uproszczona wersja C ++. Ten ostatni byłby bez fanaberii bez hamulców. Jeśli już uważasz, że Java jest trudna, C ++ będzie kłopotliwy. Moje 2 centy.
Dagnelies