Должен ли я изучать C до изучения С++?

Сегодня я посетил открытый университетский отдел CS, и в гастрольном туре мы сели, чтобы поиграть с несколькими финальными проектами студентов из бакалавриата. Один был особенно хорош - своего рода игра с астероидами FPS. Я решил заглянуть в каталог src, чтобы найти, что это было сделано на С++ (большинство других проектов были приложениями Java 3D).

Я раньше не делал C, но раньше я просматривал код C. Из того, что я видел в коде .cpp в этой игре, это выглядело совсем не так.

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

Ответ 1

Нет необходимости изучать C до изучения С++.

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

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

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

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

Обратите внимание на дальнейшие аргументы в этом ответе.

Ответ 2

Мне нравится этот вопрос - ему нравится спрашивать: "Чему я должен научиться сначала, кататься на сноуборде или кататься на лыжах"? Я думаю, это зависит от того, хотите ли вы кататься на сноуборде или кататься на лыжах. Если вы хотите сделать то и другое, вам нужно изучить оба.

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

Ответ 3

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

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

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

Самое главное, IMHO, должно быть подвергнуто различным парадигмам программирования, таким как процедурные, объектно-ориентированные, функциональные и логические, на ранней стадии, прежде чем ваш мозг замерзнет одним из способов взглянуть на мир. Кстати, я также настоятельно рекомендую вам изучить функциональный язык программирования, например Scheme. Это действительно расширит ваши горизонты.

Ответ 4

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

Возьмите K & R и прочитайте это. Он короткий и даст вам достаточное представление о языке. После того, как у вас возникнут проблемы с указателями и функциями, вы можете перейти на С++ немного проще.

Ответ 5

Я думаю, вам следует сначала изучить C, потому что сначала я научился C. C дал мне хорошее представление о синтаксисе и gotchas с такими вещами, как указатели, все из которых поступают в С++.

Я думаю, что С++ упрощает завершение всех этих gotchas (нужен массив, который не будет переполняться при использовании оператора [] и хитроумного индекса? Конечно, сделайте класс массива, который проверяет границы), но вам нужно знать, что они есть, и укусить их, прежде чем вы поймете, почему все делается определенным образом.

Когда все сказано и сделано, способ, которым обычно учит С++, - "С++ - это C с объектами, здесь C-материал и здесь, как все это работает OO", поэтому вы, вероятно, изучите базовый C до того, С++, если вы все равно следуете большинству текстов.

Ответ 6

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

Ответ 7

Если вы решили изучить оба (и, как говорили другие люди, нет явной необходимости изучать оба), сначала изучите C. Переход с C на С++ похож на естественную прогрессию; другой путь чувствует, как умышленно завязывать одну руку за спиной.: -)

Ответ 8

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

Ответ 9

Нет.

Как правило, более полезно изучать С++, потому что он ближе к самым современным языкам OO, таким как Eiffel или С#.

Если ваша цель - изучить С++, сначала изучите современный, стандартный С++. Оставьте mallocs в стороне.


Но Стив Роу имеет точку...

Ответ 10

Обучение C заставляет вас больше думать о некоторых проблемах, таких как явное и неявное управление памятью или размеры хранилища основных типов данных во время написания кода.

Как только вы достигли точки, в которой вы чувствуете себя комфортно вокруг функций C и misfeatures, у вас, вероятно, будет меньше проблем с обучением и написанием на С++.

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

Ответ 11

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

Ответ 12

Как и ответы на многие другие вопросы в жизни, это зависит. Это зависит от ваших интересов и целей программирования. Если вы хотите программировать настольные приложения, возможно, с помощью графического интерфейса, то С++ (и OOP), вероятно, лучше всего подходит. Если вас интересует аппаратное программирование на чем-то отличном от чипсета x86, то C часто является лучшим выбором, как правило, для его скорости. Если вы хотите создать новый медиаплеер или написать бизнес-приложение, я бы выбрал С++. Если вы хотите сделать научное моделирование столкновений галактик или динамику жидкости, вот сила C.

Ответ 13

Я думаю, что обучение C сначала - хорошая идея.

Там есть причина, по которой курсы comp sci по-прежнему используют C.

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

Я думаю, что процедурное программирование - это самый естественный способ научиться программированию. Я думаю, что это правда, потому что в конце дня это то, что у вас есть: строки кода, выполняемые один за другим.

Многие тексты сегодня подталкивают подход "объектов первым" и начинают говорить о машинах и переключениях перед тем, как ввести массивы.

Ответ 14

Мои два цента:

Я предлагаю сначала изучить C, потому что:

  • Это основополагающий язык - множество языков, спустившихся с C
  • больше платформ поддерживает компилятор C, чем С++, - будь то встроенные системы, чипы GPU и т.д.
  • согласно TIOBE index C по-прежнему примерно в 2 раза популярнее, чем С++.

Ответ 15

Я думаю, что c - действительно хороший язык программирования, он компактный и несколько простой в освоении. но если вы только хотите изучить С++, начните с С++. но я предлагаю вам изучить оба. и если вы хотите это сделать; я думаю, что лучше начать с c. как говорилось ранее: он маленький и несколько простой в освоении. может быть хорошим шагом вперед к более сложному языку программирования как С++. (так как c дает вам некоторые основы)

удачи.

Ответ 16

Некоторые книги на С++ предполагают, что у читателя минимальные знания на C, но кто бы вы не выбрали язык, потому что многие языки программирования частично основаны на C/С++, а для будущего обучения другие языки будут немного проще.