Я начинающий. Могу ли я сразу начать изучать C ++ 11? или я должен выучить старый C ++? [закрыто]

36

Я новичок, и у меня мало знаний в программировании.

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

Должен ли я иметь немного знаний о C ++ до изучения C ++ 11? или я могу начать прямо оттуда?

Не вызовет ли это проблемы, если я начну с C ++ 11? Если нет, то предложите несколько книг по C ++ 11.

Дананай
источник
18
Почему эти негативные моменты? Ответы на эти вопросы уже есть? Разве новичкам не разрешено задавать вопросы? Мотыги кто-то исследует в этом вопросе? Я думаю, что один из лучших способов - это обратиться к тем, у кого больше опыта. +1, поскольку новички также заслуживают того, чтобы им руководили
adosaiguas
12
@ Симон, для меня это звучит как концептуальный вопрос о разработке программного обеспечения: с чего мне начать? А откуда ты знаешь, что он не профессиональный программист? ;)
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
Я думаю, что этот вопрос явно не по теме из-за часто задаваемых вопросов (возможно, его не было в то время, когда его задавали первым) Он спрашивает «какой язык (версию) я должен выбрать следующим», речь идет об образовательном совете и запрашивает негабаритные ресурсы - три из стандартных причин закрытия.
Док Браун

Ответы:

38

Существует множество улучшений удобства использования, которые делают C ++ 11 более понятным для новичка, особенно для тех, кто имеет опыт работы с другими языками на других языках. Другие изменения в C ++ 11 представляют интерес только для опытных пользователей, так что вы, вероятно, ошеломитесь, если вы возьмете книгу, предназначенную, в основном, для изучения различий. Убедитесь, что любая книга, которую вы получаете, предназначена для начинающих C ++.

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

Карл Билефельдт
источник
Я учусь на C ++ учебник для начинающих. хорошая книга для начала ??
Дхананджай
1
Он получает хорошие отзывы и внешний вид будет на нужном уровне, но я не смотрел на книгах начинающего уровня C ++ в долгое время, так что я не самый лучший человек , чтобы спросить. Я думаю, что вам понадобится 5-е издание, если вы хотите, чтобы C ++ 11 освещался.
Карл Билефельдт
все в порядке, и да, я знаю, что 5-е издание охватывает c ++ 11.
Дхананджай
10

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

Изучение C ++ было бы хорошим местом для начала обучения, и Приложение B научит вас особенностям C ++ 11 после того, как вы изучите основы.

Я понимаю, почему некоторые люди считают Java / CSharp и т. Д. Более простыми альтернативными языками, но я немного выучил C ++, прежде чем переходить на CSharp, и из-за этого я не хуже программиста, наоборот, навыки программирования идут гораздо глубже, чем язык синтаксис / функциональность и прочная основа в C ++, вы можете легко выучить любой другой императивный язык ООП.

Joel
источник
8

Сложно сказать.

Старый C ++ - это скорее минное поле, и приятно научиться ориентироваться на таком звере. Это также поможет вам понять, почему все сделано так, как оно есть, и каковы последствия различных конструкций.

Опять же, старый C ++ - это не то, что вы хотите, когда пишете код.

Но с другой стороны, старый C ++ - это то, что многие отрасли будут использовать в течение еще 20 лет.

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

кодировщик
источник
Почему бы основным частям отрасли не обновлять там компиляторы, кроме ниши встраиваемых систем? Риск (даже с юнит-тестами)? Консерватизм?
TheLQ
1
@TheLQ: Я думаю ... Но когда я думаю, что бы я сделал, если бы я был боссом, очень вероятно, что я бы сделал то же самое. Если нет заметной экономии затрат по сравнению с затратами на миграцию.
Кодер
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++, так же хорошо, как нынешние Java IDE, но не повезло здесь, в Linux), что значительно более полная стандартная библиотека (JDK), больше библиотек (например, Hibernate , Spring , JEE , Lucene и т. д.) и отсутствие утечек памяти (ну, почти, ни одной - вы все равно можете создать утечку памяти в Java, но сделать это труднее чем в C++). Если честно, с современными C++11гораздо легче избежать памяти лука-порея.

В C ++ 11 есть много интересных функций, таких как лямбда-выражения, ключевое слово auto, семантика перемещения и многое другое. Это определенно намного лучший язык, чем C++98был. Посмотрите этот обзор Херба Саттера о новых функциях в C++11: Элементы современного C++стиля.

Подводя итог, я думаю, что каждый должен выучить хоть немного C++. Если вы программировали в Java, Scala, Rubyили Pythonза последнее десятилетие и не прикоснулся Cили C++, теперь C++11я думаю , что настало время , чтобы узнать C++11и улучшить свои навыки программирования при этом.

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

Помните: всегда полезно выучить новый язык программирования, даже если вы не планируете использовать его в производстве.

Дженни Казарино
источник
1

Сделайте глубокий вдох и прочитайте эту статью Питера Норвиг.

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

Завершив это, я бы посоветовал потихоньку пробираться по языку программирования C от K & R, если у вас установлен язык «C».

Работайте по основам, остальное придет вовремя.

LWM
источник
10
Я не понимаю, как это ответ на заданный вопрос. C даже не тот же язык, что и C ++.
vartec
1
Но C ++ основан на C и в значительной степени обратно совместим: подавляющее большинство современного синтаксиса C напрямую применимо к C ++. Поскольку C проще, чем любая версия C ++, изучение C сначала дает вам хорошее связное обучение основам синтаксиса и семантики C ++ и помогает объяснить некоторые непонятные в остальном бородавки в более широком языке ...
прибывающая буря
2
@comingstorm Первое, что должен сделать программист на C, это отучиться почти от всего, что он знает о C, а затем начать изучать C ++. Есть тонкие различия, которые могут вас укусить.
BЈовић
1
Кроме того, идиоматический современный код C ++ не сильно заимствует у C, кроме синтаксиса. Не похоже, что мы все еще используем C-строки и malloc / free. Если вы новичок в
изучении
1

Последние вводные книги о C ++ все чаще охватывают и C ++ 11. Я прочитал Sam's Teach Yourself C ++ после работы со скриптовыми языками, но не C / C ++ в течение почти десяти лет, и нашел это действительно полезным. Я очень быстро разбирался в основных идеях C ++ (включая множество STL) и осознавал множество деталей, отличающихся в C ++ 11.

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

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

Короче, делай это.

mmdanziger
источник
-1

В моё время C считался обязательным условием C ++, особенно для начинающих программистов. Потому что вы должны выяснить, что делает язык и почему он так разработан. C получил массу отличных и достаточных идей языка программирования, которые никогда не устареют. Таким образом, я считаю, что это лучшее начало.

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

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

В моем случае прошло более 15 лет с момента моей первой программы, и я даже не помню, что это такое. Я верю, что если ты будешь работать достаточно усердно, ты определенно станешь лучше и быстрее меня.

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

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

Пуджа Руния
источник
1
Добро пожаловать в Программисты! Я не уверен, что ваш ответ добавляет так много к этому вопросу; и грамматически говоря немного беспорядка. У меня проблемы с тем, что ты пытаешься сказать. Не могли бы вы расширить свой ответ, возможно, добавить примеры того, почему C ++ 11 отличается настолько сильно, что изучение C и более ранних версий стандарта C ++ лучше?
Мартин Питерс
-3

C ++ действительно великий и мощный язык. Однако это также возлагает большую ответственность на программиста.

Если вы новичок в программировании, сделайте жизнь проще для себя и начните с C #. Его синтаксис основан на C ++, но обработка ошибок гораздо удобнее для новичков, помогая вам, когда что-то идет не так.

Если вы знакомы с методами, классами, наследованием и хотите развиваться в среде, где управление памятью и системными ресурсами важнее, чем производительность, тогда C ++ - хороший выбор, и я бы начал с изучения текущего стандарта. Имейте в виду, что C ++ требует от вас понимания памяти и активного управления ею. Делайте ошибки здесь, и все, что вы получаете, это либо дамп памяти, либо ваши данные содержат байты, которые не имеют смысла. И часто точка, в которой вы находите проблему, не связана с тем, где на самом деле находится причина.

Майкл Шоу
источник
1
Если человек начинает с C #, он (и) привыкнет программировать на высоком уровне (ООП, автоматическое управление памятью), фактически не зная, что происходит «за кулисами». Если этот человек затем перейдет на C ++, ему (ей) будет не хватать важных знаний о C / C ++ (я думаю в основном об управлении памятью, но есть и другие). Это может быть еще более вводящим в заблуждение из-за того, что C ++ и C # имеют очень похожий синтаксис, но то, к чему фактически компилируется код, совершенно другое. Имейте в виду, что ОП четко заявил о своей заинтересованности в C ++.
Эти
ОП также заявил, что они мало знают о программировании. изучение вашего первого языка на C ++ - огромная проблема. Гораздо лучше выбирать свои сражения и выбирать серию меньших, поскольку у вас гораздо больше шансов на успех.
Майкл Шоу
-6

Почему вы хотите начать с C ++?

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

Я советую выбрать c #, java, python или javascript ... и хорошую книгу по пути. Вы будете иметь намного более приятное время с ними.

dagnelies
источник
3
Я не согласен с этим в качестве обобщения. Переход от простой жизни java / C # / python и т. Д. К более сложному миру C и C ++ не так прост. Если вы действительно настроены изучать язык программирования, изучать C и C ++ сложно, но вы получите очень многое. Если позже вы захотите программировать на Java, C #, Python и т. Д., То изменить это намного проще, чем переходить с них на C или C ++. Описание: C / C ++ будет сложнее начать, но облегчит переход на любой другой язык OO.
Мартиерт
2
C ++ - лучшая основа для начала. Программирование является сложным, и в конце концов вам придется работать с оборудованием. C ++ - это удивительный способ начать обучение без ложного чувства безопасности.
Кодер
Вопрос оп полностью зависит от его / ее цели с развитием.
Независимо
1
Я не согласен с этим. Изучение C ++ имеет ряд преимуществ и облегчает изучение других языков, таких как Java и C #.
Энтони
2
@Dhananjay: C ++ во много раз сложнее, чем Java ... Java - это как детский велосипед, чрезвычайно упрощенная версия C ++. Последний будет без мотора без тормозов. Если вы уже находите Java сложным, C ++ будет проблемой. Мои 2 цента.
dagnelies