2009-05-14 2 views
34

Все говорили мне учиться на C++. Не нарушая языков справа и слева, может кто-то, пожалуйста, указать некоторые веские причины, почему я должен изучать C++ сегодня?Зачем мне учиться C++

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

+45

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

+20

Сделай это! Изучите C++! Все крутые дети делают это! –

+3

Лингвистическое давление сверстников - это, пожалуй, наименее крутое давление со стороны всех ... :-) –

ответ

64

Должен ли я научиться нырять или китайский?

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

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

Нужна ли она вам? Если да, изучите его. Вы хотите это узнать? Если да, изучите его.

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

Но это не то, и другое. Изучение новых языков всегда хорошая вещь и будет всегда сделать вас лучшим программистом. Если у вас есть этот вариант, вы всегда должны изучать новые языки. В идеале, да, вы должны изучить C++, , а также Ruby, C, D, F #, Haskell, Io, Lisp и любой другой язык, о котором вы когда-либо слышали.

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

+17

@jalf: Обратите внимание, что он действительно не спрашивал *, должен ли он изучать язык или нет, но по причинам * почему * нужно, возможно, изучить его. Хотя я полностью согласен с тем, что вы пишете, я не думаю, что вы действительно отвечаете на вопрос. – Reunanen

+3

Ну, в таком случае ответ будет «потому что вы сможете код на C++». ;) – jalf

+1

Справедливо! :) – Reunanen

2

Многие из более новых языков, таких как Java и C#, имеют корни в C++. Изучая C++, вы получите опыт работы со многими концепциями, которые абстрагируются на более новых языках. Это позволит вам ценить более новые языки намного больше. Такие вещи, как управление памятью, очень тривиальны в Java/C#, но задумайтесь и проявите терпение, чтобы правильно реализовать на C++.

+1

Я бы с уважением спорил, поможет ли обучение C++ каким-либо образом сделать вас лучшим разработчиком C#. Я пришел с фона C++/VB до выхода .Net, и я обнаружил, что C# достаточно различен в своей философии, чтобы сделать ненужным знание предыдущих C++. Это не значит, что это не помогает. Но переход непосредственно на C# без предварительного опыта на C++ не помешает вам вообще. – Eric

+0

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

+1

Возможно, я неправильно понял ваше заявление. Виноват! ;) – Eric

6

По какой-то причине он очень широко используется в мире программирования. С другой стороны, это интеллектуальный предшественник двух других основных языков, Java и C#. Таким образом, C++ и методы, непосредственно полученные из C++, используются в очень высокой пропорции профессиональных проектов в мире Software Engineering (у меня нет точных nubmers, но я бы сказал, что более 50%).

+0

Очень мало в Java и C# происходит от C++, кроме немного синтаксиса. В основном, эти языки вдохновлены тем, что более точно называется C с классами. Оба языка основаны на том, что C++ было в середине 90-х. Сегодняшний C++ почти не имеет ничего общего с этим. – jalf

+0

@jalf: вы уверены, что не объединяете «синтаксис языка» с «типичным использованием»? –

+0

Уверен, да. C# и Java унаследовали немного синтаксиса от C++, и ничего больше. Они, конечно же, не унаследовали «типичное использование». – jalf

16

Это должно быть дубликатом что-то ...

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

+3

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

+2

Это не «очень обычно используется". Он обычно используется в некоторых областях, и почти нигде в других. Многим программистам никогда не нужно даже смотреть на код C++. – jalf

+6

@jalf - говоря о относительной популярности использования, C++ - это «очень часто используемый» язык, наряду с C, Java и C#. # 3 на TIOBE в этом месяце. –

2

Это зависит от того, что your'e планирует делать с ним.

Языки - это инструменты в ящике для инструментов. Выберите подходящую для работы.

  • разработка для Windows: C#
  • UNIX разработки: C++ или Java
  • разработка OS X: Objective C или РЕАЛ Basic

В конце концов, это решение вызова. Я уверен, что кто-то будет оспаривать предыдущий список. Это мнение, а не Евангелие.

:)

+0

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

+0

Хотя это, безусловно, верно, я думаю, что основная часть разработки Windows не потребует использования C++. C# имеет гораздо более короткий цикл разработки и намного проще в обслуживании, поэтому корпоративная разработка (крупнейшее сообщество разработчиков Windows) использует C# в качестве основного инструмента выбора. – Eric

+0

@ Эрик Я не думаю, что существует множество программ/игр Windows «в штучной упаковке» (приобретаемых в большом магазине), которые написаны на C#. Какие-нибудь примеры, помимо отдельных частей Visual Studio? – xanatos

12

Изучите C первым. Затем изучите C++, чтобы оценить силу. Затем изучите язык более высокого уровня. Возможно, вы даже захотите изучить очень небольшое количество ассемблера, прежде чем начать с C. Да, это звучит как много работы, но ... хорошо, что это большая работа. К счастью, это приятная работа. :) Дело не в том, чтобы стать экспертом в сборке, C и C++. Суть заключается в том, чтобы понять, как красивые блестящие языки делают что-то внутренне, что, безусловно, сделает вас лучшим разработчиком.

Также см https://stackoverflow.com/questions/296/should-i-learn-c

+13

Вначале нет преимущества для обучения C. C++ сделано правильно - это такой язык, что большая часть C не имеет значения. Хотя многие люди все еще пишут C с классами (это отличается от C++) –

+2

«C++ сделано правильно - это такой язык», в этом преимущество! Это разные языки с разными уровнями абстракции. Это все мое дело. Я не рекомендовал сначала изучать C, чтобы дать ему «ногу» по изучению C++. – dss539

+3

Я думаю, вам следует изучить языки программирования более высокого уровня, прежде чем вы изучите более низкоуровневые, такие как C. Сначала вы должны уметь мыслить абстрактно о своих программах, видеть их как математические объекты, тогда вы можете пойти играть с указателем арифметики или регистры. – Artefacto

2

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

Я думаю, вы можете просто чувствовать себя неполными без него и даю в шумиха о «реальных» программистах.

7

Научившись языком низкого уровня, таких как C++ вы узнаете основные понятия, такие как:

  • управление памятью
  • Указатели
  • кодирования Опыта без «богатого» встроенных библиотек (по сравнению с : Java API, .NET Framework)

Как только вы приобретете опыт работы на более низком уровне, вы сможете лучше понять, как платформы более высокого уровня работают «под капотом». В долгосрочной перспективе это поможет сделать вас лучшим разработчиком в Ruby, Python, Java и т. Д.

+1

«C++ также объектно-ориентированный», пожалуйста, будьте осторожны, когда рассказываете об этом программисту-неофиту. Это часто заставляет их думать: «Я создал класс, поэтому мой дизайн - это OO!» – dss539

+1

Что также происходит на Java, хотя они думают: «Эта программа была написана на Java, поэтому это OO!». Однако C++ особенно опасен для неопытного ноу-хау. –

+7

C++ - это OO в смысле «OO, он снова разбился!» –

25

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

  • Это как изучение латыни, чтобы лучше понимать английский. Многие языки были смоделированы по синтаксису и конструкциям, например C#, Java, JavaScript и т. Д. Подбирая C++ или, по крайней мере, C, вы начнете, обучая вас общему знаменателю между всеми этими языками.

  • Понимание того, что абстрагируется от вас на других языках (указатели, базовые структуры данных, сбор мусора), теоретически делает вас лучшим программистом, даже если вы не напрямую разбираетесь в деталях.

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

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

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

BTW: Я написал быстрый blog article в ответ на этот вопрос, который идет в немного более подробно.

+3

+1 для «Это как изучение латыни, чтобы лучше понимать английский», хотя статус C++ сегодня отличается от статуса латинского :) –

+0

Предоставлено. Я был немного обеспокоен тем, что кто-то слишком сильно удалит этот аналаг и предположим, что я называю C++ мертвым языком, которого нет. Это язык DYING. Дж/К !! – JohnFx

+0

Я согласен с тобой. Бывают моменты, например, я хочу посмотреть, как все работает за кулисами. Например, я проверял, как работает Node.js, и они являются тысячами абстрактных объяснений, которые вообще не показывают никакого кода, и если вы похожи на то, кто должен видеть какой-то код, чтобы полностью удовлетворить, вам нужно увидеть глубины. И здесь вам нужно знать C++. – Tarik

19

Некоторые другие причины здесь:

  • Почти все книги в области науки и техники имеют свои образцы кода, написанного на C/C++.
  • Известно, что компиляторы C/C++ обеспечивают более эффективный машинный код, чем любые другие компиляторы (возможно, исключение составляют fortran).
  • Есть миллиарды строк кода, уже написанных на C++. Ваши возможности для повторного использования кода огромны!
  • Много книг, форумов, онлайн-контента о языке.
  • Хорошо определенный стандарт ИСО, который время от времени обновляется группой экспертов. (Это не «замороженный» язык).
  • Поддерживается на большинстве платформ, от микроконтроллеров (на самом деле C-языка) до мобильных телефонов.
  • Практически все оперативные системы кодируются в C s
+4

«Почти все книги в области науки и техники имеют образцы кода, написанные на C/C++». - Неправда в моем опыте. Цитаты для этого, пожалуйста. (По общему признанию, старые) книги по машиностроению, которые я использую Fortran. Я бы сказал, что Python также будет широко используемым научным компьютерным языком. – duffymo

+4

Я почти никогда не видел научно-технический учебник, показывающий код python (к сожалению). Да, Fortran был очень популярен еще в 70-х годах, но больше не был. Есть много областей, в которых почти полностью царит C++ (создание сетей, телекоммуникации, дизайн ОС). – Sergio

+0

@duffymo, ну это правда, но только для «научного» материала;) –

22

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

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

+3

+1 «Не изучайте C++, это пустая трата времени». + «Лучше выбирать язык для долгосрочных карьерных планов может включать хинди, урду, китайский или русский язык». –

+2

1 ++ для сравнения C++ и Hindi. Ура! –

+7

+1 для «Вместо того, чтобы создавать свой набор инструментов, почему бы не построить что-то с ним?» –

4

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

+0

отверстия для голубей для голубей – dss539

+2

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

+0

Я думаю, что Java гораздо чаще встречается в колледжах. И да, C++ отличается от большинства языков концептуально. Существует ли общая парадигма программирования в C, C# или Java? Тем не менее, я согласен с вашей точкой зрения. Если вы уже знаете один из этих языков, переход на функциональный следующий, вероятно, будет более полезным. – jalf

8

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

Учитывая эту задачу, я также считаю, что это намного интереснее, чем, например, Java или Objective-C :) Для этого нужно много, чтобы получить хорошее удовольствие, но вознаграждение отлично. Это выразительный язык, и программисту дается большой контроль над тем, что происходит.

ОБНОВЛЕНИЕ: Еще одна причина, по которой C++ отлично - это действительно кросс-платформенный. Он используется почти везде - ПК, Mac, Xbox 360, PS3, сотовые телефоны, встроенные ... вы называете это.Таким образом, вы можете использовать свои навыки практически на любой платформе, которая вам нравится. В отличие от многих других языков, которые часто полезны только для одной платформы.

2

Еще одна причина, чтобы научиться понимать, почему так много людей любят/ненавидят его. Вместо того, чтобы взять на себя свое слово, изучите его сами, чтобы лучше понять ценности и проблемы, с которыми эти люди сталкиваются с языком. У него наверняка есть поклонники и скептики.

Лично, пользуясь им, у него есть некоторые действительно приятные аспекты для работы, которую я делаю, но, оставив ее позади, я не пропущу ее.

2

Я бы сказал, что выучите C++, потому что «это лучше C». C - язык системного программирования, поэтому, если вы планируете это делать, вам нужно знать C/C++.

Отличный талант Петра Норвига "Teach Yourself Programming In Ten Years", независимо от того, каким путем вы решаете пойти.

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

3

Это зависит от того, как вы определяете «изучение языка».

синтаксис Learning C++ является основным вопросом написания несколько практических приложений и читать блоги и форумы (и определенно переполнения стека (:).

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

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

Будучи владением языком высокого уровня, вы можете стать программистом, но «знание» C++ в этом аспекте позволит вам осознать, что вы делали во всех программы, которые вы кодировали. Могут быть люди, которые выдвинут аргумент «если вы хотите знать, что вы делаете, изучите сборку» - я не знаю сборки (пока), поэтому я не смогу ответить, но я все равно скажем, что C++ несколько более «обучаемый».

И есть различные библиотеки, все их плюсы и минусы, все постоянно развивается дальше ... так что «изучение C++» на самом деле не процесс, который вы когда-либо может дойти до конца :)

+1

+1 Вы делаете отличные очки. – dss539

1

Потому что что повысило бы качество как программист (в случае, если это вас беспокоит).

Еще одно замечание - более современные языки более абстрактны. Более старые языки говорят ближе к языку использования ЦП (для меня C++ кажется историей (ни о чем не обижайтесь)).

Например, я начал писать код в ASP.NET. Изучение HTTP и HTML дало мне представление о том, что делает ASP.NET за кулисами, поэтому - я могу лучше контролировать его.

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

5

Для любого достаточно опытного разработчика программного обеспечения, изучение нового статически типизированного объектно-ориентированного языка должно быть куском пирога.Основная трудность в изучении нового языка - это изучение основного API-интерфейса среды программирования, в которой вы находитесь. Для C++ это очень просто, STL довольно мала, и, насколько я знаю, C++ не включает в себя какие-либо другие стандартных библиотек.

Некоторые из наиболее важных причин, чтобы узнать C++ являются:

  • Понимание управления памятью и указатель использования.
  • Изобретайте свою собственную иерархию классов вместо того, чтобы полагаться на предварительно упакованные библиотеки от вашего поставщика языка.
  • Изучение способов использования шаблонов и общих принципов программирования.

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

0

Вы не должны заботиться о C++. Попробуйте что-то новое, например C#, ruby, python и лучше всего, заботиться о шаблоне проектирования и методологии работы. Это приведет вас к небу!

+1

Я полностью согласен с вами, ведь написание подобной части кода в python может быть более элегантным, чем в C++ (imho). – ERJAN

3

Я бы сказал, что основным преимуществом является изучение управления памятью и указателей. Имейте в виду, что есть много преимуществ в понимании того, как обрабатывается память, независимо от того, на каком языке (даже на оборудованных GC языках). Вы просто не получаете этого опыта с большинством других основных языков.

2

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

Аналогия: если вы строите дом без хороших, прочных фундаментов, он может стоять год или два года, но в какой-то момент он упадет. Если, однако, вы строите дом с приличными основаниями, даже если вы никогда не сможете снова взглянуть на эти фонды в своей жизни, вы можете гарантировать, что ваш дом будет структурно обоснованным и может заниматься вашим бизнесом, не беспокоясь о том, что он падает вокруг вас. Разработчики, начинающие с языка высокого уровня, такие как C# или Java, строят свой дом без фундамента.

+0

полностью субъективное мнение, программист может писать/кодировать так же хорошо в java/C#, как в C++. ваш пост дает смутное впечатление о том, что java или C# являются слабыми языками. – ERJAN

+0

Быть веб-разработчиком не эквивалентно тому, чтобы быть разработчиком-юниором или любителем. –

4

Мнение: Вам не обязательно знать, что C++ является программистом.

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

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

Кроме того, вам не нужно знать тригонометрию для создания базы данных. Но вы никогда не найдете хорошего дизайнера базы данных, который не сможет доказать cos(b-a)=cosb*cosa-sinb*sina через 10 минут. Удостоверьтесь, что Деннис Ритчи знал сложное исчисление, когда он проектировал С, и каждый хороший окулист знает, что такое поляризация света, даже если он точно не использует его.

0

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

Сколько графических интерфейсов вы видели с помощью java и C# за последние 12 лет? Многочисленная.

Сколько новых понятий вы видели с ними за последние 12 лет? Многочисленная.

Не может ли кто-нибудь жить своей жизнью без .NET или Java? Абсолютно.

Смежные вопросы