Я початківець. Чи можу я безпосередньо почати вивчати C ++ 11? або я повинен вивчити старий C ++? [зачинено]


36

Я початківець і маю незначні знання в програмуванні.

Було б добре, якби я безпосередньо вивчив C ++ з книг, які висвітлюють нові C ++ 11, або я повинен вивчати старі найкращі книги C ++?

Якщо я маю мало знань про C ++, перш ніж вивчати C ++ 11? або я можу почати прямо звідти?

Чи спричинить це проблему, якщо я безпосередньо почну з C ++ 11? Якщо ні, то запропонуйте кілька книг на C ++ 11.


18
Чому ці негативні моменти? На це питання вже відповіли? Чи не дозволено допитуватися новачкам? Мотики хтось досліджує в цьому питанні? Я думаю, що один з найкращих способів - це звернутися до тих, хто має більше досвіду. +1, так як новачки теж заслуговують на те, щоб орієнтуватися
adosaiguas

12
@Simon це звучить для мене як концептуальне питання щодо розробки програмного забезпечення: з чого почати? А звідки ти знаєш, що він не професійний програміст? ;)
adosaiguas

4
@MSalters Розмова про книги; Прискорений C ++ - це дивовижна книга, хоча і дещо спрощена. Барбара Е. Му - дивовижна письменниця, і її вплив на книгу легко помітити. Але книга, про яку йдеться, справді є "старою". Однак не вся надія втрачена - є книга з високим рейтингом під назвою C ++ Primer від Lippman , Lajoie та Barbara E. Moo , п'яте видання було опубліковано цього місяця (серпень 2012 р.) Та з перших кількох розділів, які я читав у своєму копія, це відмінна книга, що охоплює C ++ 11. Знову присутній вплив Му. Вона богиня, коли справа стосується технічного написання.
zxcdw

2
@Simon Programmers — Stack Exchange is a site for professional programmers...У такому випадку ви проти завести початківців програмістів на сайт? Я також новачок, що кодує, і у мене виникнуть основні питання ...
Jeyekomon

2
Я думаю, що це питання явно поза темою через FAQ (можливо, його не було в той момент, коли його задали спочатку). Він запитує, "яку мову (версію) я повинен вибрати далі", мова йде про поради щодо освіти, і вона вимагає нестандартних ресурсів - три із стандартних причин закриття.
Док Браун

Відповіді:


38

Є багато удосконалень юзабіліті, які роблять C ++ 11 більш зрозумілим для початківців, особливо того, хто має досвід інших мов з цими можливостями. Інші зміни на C ++ 11 цікавлять лише просунутих користувачів, тому ви, швидше за все, захворієте, якщо підберете книгу, розроблену з метою викладання відмінностей. Переконайтеся, що будь-яка книга, яку ви отримаєте, розроблена для початківців на C ++.

Зважаючи на це, вам, мабуть, доведеться в кінцевому підсумку вивчити старий спосіб, оскільки там існує багато існуючого коду, і навіть новий код C ++ 11 міститиме старий спосіб виконання дій, якщо програміст захоче. Я пишу на C ++ на життя, і моя компанія досі навіть не придумала оцінювати компілятори, сумісні з C ++ 11, не кажучи вже про використання одного у виробництві.


я навчаюсь з c ++ букваря 4-го видання. хороша книга для початку ??
Dhananjay

1
Він отримує хороші відгуки і зовнішній вигляд буде на потрібному рівні, але я не дивився на книгах початківця рівня C ++ в довгий час, так що я не найкраща людина , щоб запитати. Я думаю, вам буде потрібно 5-е видання, якщо ви хочете, щоб C ++ 11 висвітлювався.
Карл Білефельдт

добре, і я знаю, що 5-е видання охоплює c ++ 11.
Dhananjay

10

Вам не потрібно використовувати старий C ++, щоб почати використовувати C ++ 11, в C ++ 11 є нові функції, але використання необов’язково. Знання, як використовувати функції C ++ 11, може стати перевагою, це, звичайно, не буде недоліком при роботі зі застарілими (до 11) базами кодів, як тільки ви дізналися про ідіосинкразію старих версій.

Вивчити C ++ було б хорошим місцем для початку навчання, а додаток B навчить вас C ++ 11 особливостям після того, як ви засвоїли основи.

Я бачу, чому деякі люди пропонують Java / CSharp тощо як простіші альтернативні мови, але я навчився трохи C ++ перед тим, як перейти на CSharp, і я не гірший програміст через це, навпаки, навички програмування йдуть набагато глибше, ніж мова синтаксис / функціональність і з міцною основою на C ++ ви можете легко вивчити будь-яку іншу імперативну мову OOP.


8

Важко сказати.

Старий C ++ - це більше мінне поле, і приємно навчитися орієнтуватися на такого звіра. Це також дасть вам зрозуміти, чому все робиться таким, яким вони є, і які наслідки мають різні конструкції.

Знову ж таки, старий C ++ - це не те, що потрібно, коли ви пишете код.

Але тоді, знову ж таки, старий C ++ - це те, що буде розвиватися багато галузей ще протягом 20 років.

Я люблю C ++ 11, але він зараз доступний лише для стартапів. Не у великих базах застарілих кодів. А стрибки прямо на C ++ 11 можуть залишити вас нерозвиненими навичками у противному C ++ частинах. Що призведе до виправлення помилок після того, як деякі просунуті конструкції C ++ 11 можуть витікати або вийти з ладу, оскільки він використовується синтаксично правильним, але логічно неправильним способом.


Чому б основні частини галузі не оновлювали там компіляторів, окрім сфери вбудованих системних систем? Ризик (навіть при одиничних тестах)? Консерватизм?
TheLQ

1
@TheLQ: Я здогадуюсь ... Але коли я думаю, що б я зробив, якби був начальником, велика ймовірність, що я би зробив те саме. Якщо тільки не помітна економія витрат порівняно з міграційними витратами.
Coder

1
@TheLQ: для переходу до нової версії компілятора потрібно базами кодів. Рідко хтось із проектів адаптує нову версію компілятора мимоволі. Новий проект швидше використовує новий компілятор (доки він не взаємодіє зі старим кодом).
Мартін Йорк

1
@Coder: Що робить C ++ 11 тим, що відрізняється від C ++ 03 тим, що його вивчення не переводить безпосередньо на C ++ 03. Є кілька нових функцій, які полегшують процес написання, але нічого, що не заважає вам зайти на ці мінні поля.
Мартін Йорк

1
@TheLQ: так, це в основному процеси, але ви забули інтеграційне тестування (найскладніша частина. Не всі програми є автономними (за фактом я б сказав, що це меншість)). Вам потрібно переконатися, що весь ваш код працює і правильно взаємодіє (не тільки з вашим кодом, але і з кодом клієнта). Це місячні процеси, якщо не випробовування та перевірка. Якщо хтось із ваших клієнтів не переходить на C ++ 11, можливо, вам доведеться підтримувати обидві версії в деяких системах (на щастя, gcc дуже хороший із зворотною сумісністю, але не всі постачальники компіляторів C ++ є).
Мартін Йорк

8

Незважаючи на багато вдосконалень C++11, C++мова все ще не є легкою. Java, хоча і не така проста, як може здатися, все-таки легша мова з дуже хорошою продуктивністю (часто майже настільки ж швидкою C++) і пропонує кращі IDE (можливо, Visual C++це так само добре, як і поточні IDE Java, але не щастить тут в Linux), багато більш всебічна стандартна бібліотека (JDK), більше бібліотек (наприклад, в сплячому режимі , Spring , JEE , Lucene тощо) і відсутність витоків пам'яті (ну майже нічого - ви все одно можете створити витік пам'яті на Java, але це складніше зробити ніж у C++). Якщо бути справедливим, то з сучасними C++11набагато простіше уникнути лишаю пам’яті.

C ++ 11 має багато цікавих функцій, таких як лямбда, автоматичне ключове слово, семантика переміщення та багато іншого. Це, безумовно, набагато краща мова, ніж C++98була. Дивіться цей огляд Herb Sutter про нові функції у C++11: Елементи сучасного C++стилю.

Підводячи підсумок, я думаю, що кожен повинен навчитися хоча б деяких C++. Якщо ви програмували в Java, Scala, Rubyабо Pythonза останнє десятиліття і не доторкнувся Cабо C++, тепер C++11я думаю , що настав час , щоб дізнатися C++11і поліпшити свої навички програмування при цьому.

Я, напевно, не буду C++сильно користуватися на роботі в найближчі роки, і коли мені потрібна більш потужна мова, ніж Javaя, мабуть, я пітиму за Scala, але я детальніше ознайомлюсь C++11і спробую вивчити та зрозуміти нові функції, зокрема ті, що стосуються багатопоточності та паралельності.

Пам'ятайте: це завжди допомагає вивчити нову мову програмування, навіть коли ви не плануєте використовувати її у виробництві.


1

Зробіть глибокий вдих і прочитайте цю статтю Пітера Норвіга.

Ви це читали? Гаразд, якщо ви новачок, вам потрібно почати невеликими кроками. -вставте мову тут - можна пізніше, ознайомтесь із Coursera чи Udacity для початкових курсів впровадження інформатики для початківців.

Закінчивши, я б порадив повільно працювати свій шлях через мову програмування K & R в С , якщо ви налаштовані на мові «с» , .

Попрацюйте над основами, решта прийде вчасно.


10
Я не бачу, як це відповідь на поставлене запитання. C не є навіть такою ж мовою, як C ++.
vartec

1
Але C ++ заснований на C і значною мірою відповідає сумісності: переважна більшість сучасних синтаксисів C безпосередньо стосується C ++. Так як C простіше , ніж будь-якої версії C ++, навчання C першим дає вам хороший когерентне освіту в синтаксисі основний C ++ і семантики - і допомагає пояснити деякі незрозумілі інакше бородавок на більшій мовою ...
comingstorm

2
@comingstorm Перше, що повинен зробити програміст на C - це навчитися майже всього, що він знає про C, а потім почати вивчати C ++. Є тонкі відмінності, які можуть вас вкусити.
BЈоviћ

1
Плюс ідіоматичний сучасний код C ++ не сильно займає у C, крім синтаксису. Це не так, як ми все ще використовуємо C-рядки та malloc / free. Як повний новачок на мову ви краще збирання книгу як C ++ Primer 5 - е видання, Accelerated C ++, і т.д. , замість того , щоб зосередитися на С.
bstamour

1

Останні вступні книги про C ++ все частіше висвітлюють і C ++ 11. Я читав « Сам навчати себе» C ++ після роботи з написаними мовами, але не C / C ++ протягом майже десяти років і вважав, що це дуже корисно. Я дуже швидко став розбиратися в центральних ідеях C ++ (включаючи безліч STL) і усвідомлював дуже багато деталей, які відрізняються в C ++ 11.

Як згадували деякі інші афіші, C ++ 11 багато в чому простіший за старіші стандарти із доповненнями в стилі сценаріїв, наприклад auto, for(int &i : m_vector){}тощо. Отже, якщо ваші "малі знання" походять з таких мов, як Python або Matlab, ви знайдете C ++ 11 дещо «природніше», ніж попередні стандарти.

Я також хотів би зазначити, що до теперішнього часу сумісність компілятора для C ++ 11 ( майже ) повна, тому наявність коду, який "занадто актуальний для компіляції", вже не є проблемою.

Словом, зробіть це.


-1

Коли мій час, C вважали обов'язковою умовою C ++, особливо для початківців програмування. Тому що ви повинні розібратися, що робить мова і чому вона була спроектована так. C отримав безліч чудових і достатніх ідей мови програмування, які ніколи не застаріють. Таким чином, я вважаю, що це найкращий початок.

І після того, як ви маєте основні точки зору щодо програмного забезпечення, можливо, вам доведеться вибрати, що робити як наступний крок, а значить, вибрати мову, щоб вивчити як можна глибше. Незалежно від того, наскільки глибоко ви заглиблюєтесь, він, як правило, може вирішити, наскільки глибокий ви можете отримати для будь-яких інших мов, а значить, незалежно від того, скільки мов ви вивчили, найглибша завжди буде першою, яку ви викопали. Для мене я провів дослідження Java і самостійно створив деякі моделі Java, щоб краще зрозуміти її функціональність ядра.

Після цього ви, можливо, зможете вивчити все, що завгодно, оскільки ви повністю розумієте технологію мови програмування. Я почав вивчати C #, Go, Python навіть Scala і зробив багато проектів для розваг / роботи. Особистий запис триває 3 місяці від початку вивчення мови до 1,0 керівника розвиваючого проекту.

У моєму випадку минуло 15 років з моєї першої програми, і я навіть не можу згадати, що це таке. Я вірю, якщо ти будеш працювати досить наполегливо, ти обов’язково станеш кращим і швидшим за мене.


це не відповідає на поставлене запитання
gnat

Повністю вибачте. Просто хочу сказати, ні те. Не має значення, чого ви хочете вивчити, нарешті, лише основа мови програмування може вирішити, наскільки глибоко ви зможете викопатись у цій галузі. При цьому вам доведеться витратити на це більше часу, а не на швидкий знімок.
WinstonWu

-2

Як початківець, я думаю, що спочатку вам доведеться пройти поняття C ++, оскільки C ++ 11 і все це як нова версія, але C і C ++ є основою для будь-якого типу розробки. Після засвоєння C ++ більшість концепцій автоматично очищаються.


1
Ласкаво просимо до програмістів! Я не впевнений, що ваша відповідь все це значно додає до цього питання; і граматично кажучи трохи безлад. У мене виникають проблеми слідувати тому, що ви намагаєтесь сказати. Чи можете ви розширити свою відповідь, можливо, додати приклади, чому C ++ 11 відрізняється настільки, що вивчення C та більш ранніх версій стандарту C ++ краще?
Martijn Pieters

-3

C ++ - це дійсно чудова і потужна мова. Однак це також несе велику відповідальність на програміста.

Якщо ви абсолютно новачок у програмуванні, полегшіть собі життя і почніть з C #. Його синтаксис заснований на C ++, але поводження з помилками набагато приємніше для початківців, щоб допомогти вам, коли все піде не так.

Якщо вам подобаються методи, класи, успадкування і ви хочете розвиватися в середовищі, де управління пам’яттю та системними ресурсами важливіше, ніж продуктивність, то C ++ - це хороший вибір, і я б почав з вивчення поточного стандарту. Майте на увазі, що C ++ вимагає від вас розуміння пам’яті та активного управління нею. Тут робіть помилки, і все, що ви отримуєте, це або ядро, яке скидається, або ваші дані містять байти, які не мають сенсу. І часто точка, в якій ви знаходите проблему, не пов'язана з тим, де причина є насправді.


1
Якщо хтось починає з C # (s), він звикне програмувати на високому рівні (OOP, автоматичне управління пам’яттю), не знаючи насправді, що відбувається «за кадром». Якщо ця людина потім перейде до C ++, йому не вистачить важливих знань про C / C ++ (я думаю переважно про управління пам'яттю, але є і більше). Це може бути навіть більш оманливим через те, що C ++ і C # мають дуже схожий синтаксис, але те, з чим складається насправді код, зовсім інше. Майте на увазі, що ОП чітко заявила про свою зацікавленість C ++.
Еті

ОП також заявила, що має мало знань про програмування. вивчення вашої першої мови як C ++ - величезна проблема. Набагато краще вибирати свої битви і вибирати серію менших, оскільки у вас набагато більше шансів на успіх.
Майкл Шоу

-6

Чому ти хочеш починати з C ++?

Я особисто рекомендую проти C ++ як першої мови. Це складне, складне, складне ... просто набагато нижчий рівень і "небезпечніший", ніж більшість інших мов програмування.

Раджу вибрати c #, java, python або javascript ... і гарну книгу по дорозі. У вас буде набагато приємніше провести час з ними.


3
Я не згоден з цим як узагальненням. Перейти від легкого життя java / C # / python тощо до складнішого світу C і C ++ не так просто. Якщо ви дійсно налаштовані на вивчення мови програмування, вивчення C та C ++ важко, але стільки віддасте назад. Якщо згодом ви хочете програмувати на java, C #, python тощо, змінити набагато простіше, ніж переходити з них на C або C ++. Підсумок: C / C ++ буде складніше почати, але полегшити зміну на будь-яку іншу мову ОО.
martiert

2
C ++ - найкраща основа для початку. Програмування є складним, і врешті-решт вам доведеться працювати з обладнанням. C ++ - це дивовижний спосіб почати вивчати це без помилкового почуття безпеки.
Coder

Питання ОП повністю розвиваються на його цілі з розвитком.
Незалежна

1
Я не згоден з цим. Вивчення C ++ має ряд переваг і полегшує вивчення інших мов, таких як Java та C #, щоб назвати їх декілька.
Ентоні

2
@Dhananjay: C ++ у багато разів складніше, ніж Java ... Java - це як дитячий велосипед, надзвичайно спрощена версія C ++. Останній міг би бути без надмірних велосипедів без гальм. Якщо вам вже здається, що java важко, C ++ буде болем. Мої 2 копійки.
dagnelies
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.