fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Стоит ли мне изучать Си перед изучением С? закрыто

Стоит ли учить Си перед изучением C++? [закрыто]

В нынешнем виде этот вопрос не подходит для нашего формата “вопрос-ответ”. Мы ожидаем, что ответы будут подкреплены фактами, ссылками или опытом, но этот вопрос, скорее всего, вызовет дебаты, споры, опросы или расширенное обсуждение. Если вы считаете, что этот вопрос можно улучшить и, возможно, снова открыть, посетите центр помощи для получения рекомендаций.

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

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

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

Прежде чем перейти к нижеприведенным ответам (IMO они идут по кругу), позвольте мне предложить несколько советов: ИСТИНА: C++ сохраняет все функции и атрибуты, применяемые в C, таким образом, неявно “устаревая” C (точка зрения, которую большинство ответов ниже пытаются сделать). КАК бы то ни было: Си не умер, не умер, НЕ УМЕР. Люди, кажется, хватаются за троп “нет необходимости изучать оба языка”, но в действительности это не имеет под собой никаких оснований. Заимствуя синтаксис из C, C++ != C. Знание C++ НЕ сделает вас квалифицированным разработчиком C, и точно так же знание C НЕ сделает вас квалифицированным разработчиком C++.

ИТОГО: Нет ничего плохого в том, чтобы изучить C, прежде чем погрузиться в C++ – Чем больше вы знаете, тем лучше – Но, напротив, нет необходимости изучать C, если ваша конечная цель – изучить C++. Если вы хотите изучать C++, изучайте C++, а если вы хотите изучать C, изучайте C. У обоих есть плюсы и минусы (простота C и-ультра глубокие – возможности C++ – это и проклятие, и благословение по-своему), и оба используются до сих пор (C для встроенных систем, Unity, PHP и т.д. – C++ также для Unity, Unreal и т.д.).

ПОИНТ: Хотите выучить C++? Тогда пропустите С. Он вам не нужен. Хотите выучить С? Тогда хорошо, идите учить С. Если вы хотите выучить и то, и другое, то сначала выучите С. Они оба занимают свое место в мире, так что не думайте, что одного из них достаточно для другого.

14 Ответов 14

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

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

То, что у C++ во многом схожий синтаксис и семантика, не означает, что вам нужно сначала выучить C.

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

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

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

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

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

@Matt: Мне жаль, что вы все еще не понимаете. Нарисуйте диаграмму Венна для C и C++ и посмотрите на части, которые пересекаются. C++ состоит из всего круга C++, который вы нарисовали, а не только из тех частей, которые не пересекаются. Если вы знаете сначала C, то это хорошо, вы сможете быстрее освоить C++. Если вам не случилось узнать C первым, нет причин изучать его первым. Вы полагаете, что в каждой книге по C++ не будут рассматриваться указатели, управление памятью, строковые литералы и т.д.? Я собираюсь прекратить обсуждение, но не стесняйтесь оставлять свои заключительные комментарии.

@Matt: как С приводит к лучшему пониманию C++? Обычно программисты, изучающие C++, пишут уродливый, склонный к ошибкам код в стиле “C с классами”. Я не говорю, что так происходит всегда, но это наиболее естественное развитие событий, если начинать с C, потому что C гораздо ближе к этому ужасному стилю C++, чем к “современному” C++.

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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *