Какие преимущества я могу получить от изучения C++, если я - главным образом Программист C#? [закрытый]

Вы не упоминали платформу, таким образом, вот большое сравнение из инструментов Mac OS X SQLite. Я лично нашел MesaSQLite больше всего быть похожим на свое предпочтение инструментов базы данных, которое было CocoaMySQL случайно. (Для Windows я просто использовал упомянутое выше дополнение Firefox.)

25
задан halfer 7 August 2015 в 22:58
поделиться

18 ответов

Я был разработчиками на C ++ последние 10 лет, и последние два года я использую java для разработки новых продуктов. Я также занимался программированием на C # , просто чтобы изучить его. Основываясь на своем опыте, я бы сказал, что C ++ - сложный и высокопроизводительный язык, который хорошо подходит для студентов, изучающих информатику, для понимания концепции и алгоритмов программирования. Другое использование C ++ - реализация протокола, который не часто меняется. Например, реализация SIP Proxy или HTTP Server.

Для практической разработки продукта, где требования часто меняются, я бы рекомендовал любой язык высокого уровня, где разработчики могут вместо этого сосредоточиться на логике приложения. изобретать колесо. Э. g Недавно я начал проект с открытым исходным кодом xcapserver , который я смог быстро создать за два дня, используя Java-технологии (Glassfish, REST, log4j, eXist db), но я хотел использовать библиотеки Boost, и снова это протокол, который не ожидается частого изменения, поэтому я решил реализовать на C ++. Я потратил 4 дня только на то, чтобы заставить регистратор работать с помощью BOOST :: log , и еще 4 дня на устранение проблем с тупиками потоков с помощью Berkeley DB XML.

Другой аспект - обслуживание продукта. Я тратил дни и ночи на устранение утечек и повреждений памяти, и кривая обучения для новых разработчиков слишком высока по сравнению с J2EE или .NET, где легко найти разработчиков, а обслуживание намного проще.

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

11
ответ дан 28 November 2019 в 17:36
поделиться

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

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

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

1
ответ дан 28 November 2019 в 17:36
поделиться

Во-первых, похоже, вы хотите узнать больше. Это действительно самая важная часть хорошего программиста.

Тем не менее; Почти все крупные проекты с открытым исходным кодом написаны на C или C ++, если вы хотите использовать или строить на основе тех, которые вам нужно знать язык. Работа с большим проектом с открытым исходным кодом не только отлично смотрится в резюме, но и позволяет вам изучить действительно хороший (и действительно плохой) код. Для меня это само по себе стало бесценным опытом обучения.

1
ответ дан 28 November 2019 в 17:36
поделиться

Это зависит от того, над какими программами вы работаете. Я никогда раньше не использовал Python, поэтому не могу это комментировать.

Что касается C ++; на нем написано большинство критически важных программ из-за его скорости. У вас больше власти над своим оборудованием, но с этой властью приходит ответственность и более крутая кривая обучения. У него также нет доступа к .NET; так что вам, вероятно, придется копаться в программировании Win32 для выполнения некоторых задач!

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

Лично я считаю, что изучение C / C ++ делает вас в целом лучшим программистом, многому вас учит; особенно про производительность и память. А также ... почти все важное построено на C ++.

1
ответ дан 28 November 2019 в 17:36
поделиться

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

2
ответ дан 28 November 2019 в 17:36
поделиться

Изучите C ++, чтобы почувствовать, что вы взорвали себе мозги.

3
ответ дан 28 November 2019 в 17:36
поделиться

Вы получите больше пользы от изучения функционального языка, такого как Clojure, Haskel (или, может быть, F #, если вы, очевидно, чувствуете себя комфортно с CLR). У них другая базовая модель программирования, которая расширит ваш кругозор так, как изучение нового синтаксиса не поможет.

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

4
ответ дан 28 November 2019 в 17:36
поделиться

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

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

3
ответ дан 28 November 2019 в 17:36
поделиться

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

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

I ' Мы также обнаружили, что это укрепляет понимание людьми и понимание лексического объема. Такие концепции, как пространства имен RAII или C ++, действительно подталкивают к необходимости очень осторожного управления областью видимости ... в C # многие из этих проблем существуют, но они менее "в лицо". Метапрограммирование шаблонов - еще одна уникальная концепция, которую предлагает C ++, а C # - нет.

3
ответ дан 28 November 2019 в 17:36
поделиться

Помимо того, что говорили другие:

Людям действительно нравится видеть это в резюме.

Изучение любого языка помогает вам перевести этот язык на C #, что делает вас более ценным программистом.

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

Обертки! Изучение C ++ поможет вам обернуть эти надоедливые dll C ++ для потребления в C #!

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

5
ответ дан 28 November 2019 в 17:36
поделиться

Изучите C ++, чтобы лучше понять C #.

6
ответ дан 28 November 2019 в 17:36
поделиться

Что касается C / C ++, вот несколько вещей, которые приходят на ум из моего собственного опыта.

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

  2. Знание того, как взаимодействовать с компонентами и библиотеками, написанными на C / C ++, является полезным навыком. Есть много полезных библиотек, которым до сих пор нет адекватных эквивалентов в C #. TSAPI (телефония), библиотеки различных форматов файлов и унаследованные компоненты намного проще работать на C #, если вы понимаете их конструкцию на C / C ++ и других языках.

  3. Если вы работаете с приложениями Windows, опыт работы с Win32 через C / C ++ позволяет понять, как работает ряд других приложений, написанных на неуправляемом коде; даже если у вас нет доступного исходного кода. Затем вы можете более эффективно использовать P / Invoke для работы с библиотеками, которые обычно были бы недоступны или слишком непрозрачны для обработки в противном случае.

  4. Многие методы, хотя они потенциально являются черными по своей природе, сложнее реализовать с помощью C #. Такие вещи, как подстановка DLL, переписывание точек входа в функции, внедрение кода в другие процессы и создание встроенного ассемблерного кода, легче сделать с помощью C / C ++; хотя это возможно с C #.

  5. Наконец, точный контроль над неуправляемыми объектами лучше подходит для кода, написанного на C / C ++. Например, такие вещи, как перекрывающийся ввод-вывод в окнах, некоторые функции библиотеки сокетов (например, UDP Multicast), и управления устройствами есть больше рабочих примеров C / C ++, чем C #. Но это довольно непонятно и обычно не обрабатывается в приложениях C #. Некоторые из них, вероятно, будут иметь эквиваленты в будущих API-интерфейсах или фреймворках.

Таким образом, основная мотивация, которую я бы предложил для изучения C / C ++, - это расширить ваши знания о других системах, которые недоступны в C #. Изучение Python было бы шагом в другом направлении, где изучение других стилей и семантики построения кода является более вероятным преимуществом. Код C / C ++, написанный другими людьми, обычно не имеет более полезных или узнаваемых шаблонов, таких как программное обеспечение, написанное на Python, Ruby или Lisp.

Некоторые из них, вероятно, будут иметь эквиваленты и в будущих API-интерфейсах или фреймворках.

Таким образом, основная мотивация, которую я бы предложил для изучения C / C ++, - это расширить ваши знания о других системах, которые недоступны в C #. Изучение Python было бы шагом в другом направлении, где изучение других стилей и семантики построения кода является более вероятным преимуществом. Код C / C ++, написанный другими людьми, обычно не имеет более полезных или узнаваемых шаблонов, таких как программное обеспечение, написанное на Python, Ruby или Lisp.

Некоторые из них, вероятно, будут иметь эквиваленты и в будущих API-интерфейсах или фреймворках.

Таким образом, основная мотивация, которую я бы предложил для изучения C / C ++, - это расширить ваши знания о других системах, которые недоступны в C #. Изучение Python было бы шагом в другом направлении, где изучение других стилей и семантики построения кода является более вероятным преимуществом. Код C / C ++, написанный другими людьми, обычно не имеет более полезных или узнаваемых шаблонов, таких как программное обеспечение, написанное на Python, Ruby или Lisp.

где изучение других стилей и семантики построения кода является более вероятным преимуществом. Код C / C ++, написанный другими людьми, обычно не имеет более полезных или узнаваемых шаблонов, таких как программное обеспечение, написанное на Python, Ruby или Lisp.

где изучение других стилей и семантики построения кода является более вероятным преимуществом. Код C / C ++, написанный другими людьми, обычно не имеет более полезных или узнаваемых шаблонов, таких как программное обеспечение, написанное на Python, Ruby или Lisp.

3
ответ дан 28 November 2019 в 17:36
поделиться

Есть причины использовать практически любой язык.

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

Практически все игры (особенно шутеры от первого лица) написаны на C или C ++.

К вам это применимо? Понятия не имею, потому что понятия не имею, чего вы пытаетесь достичь.

Чему вы научитесь у C или C ++? Указатели, управление памятью и тому подобное. Это совсем другой мир по сравнению с более современными языками сбора мусора, такими как C #, Java или Python.

6
ответ дан 28 November 2019 в 17:36
поделиться

Это зависит.

Что мне нравится в C ++, так это то, что в некотором смысле это более выразительный и да, более элегантный язык, чем C #. Он позволяет использовать некоторые действительно хорошие абстракции (например, общее программирование или RAII), которые просто невозможно воспроизвести в C #.

В этом смысле это открывает глаза. Конечно, функциональные языки тоже. Как и Python. Все они заслуживают изучения, даже если вы напишете весь свой код на C # сейчас и навсегда.

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

Конечно, многие люди будут кричать ПРОИЗВОДИТЕЛЬНОСТЬ! когда вы спрашиваете, зачем вам изучать C ++. Я не буду. Потому что во многих распространенных случаях C # будет таким же быстрым или быстрее, как ваш код на C ++. Этот старый обмен данными между Рэймондом Ченом и Рико Мариани довольно хорошо иллюстрирует характеристики производительности обеих платформ.

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

Если вы интересуетесь языками программирования, C ++ - прекрасный пример теории эволюции. ;)

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

В С ++ ООП как бы отошло на периферию, не столько как осознанное дизайнерское решение, сколько потому, что изменились лучшие альтернативы. вверх.

Это забавный язык. И я бы рекомендовал изучить его только ради того, чтобы стать лучшим программистом. Но я не уверен, что вам действительно нужно использовать его. Конечно, это упростит определенные задачи (собственное взаимодействие или программирование небольших программ, которые по тем или иным причинам не могут предполагать, что .NET framework установлен), но в большинстве случаев вам это, вероятно, не понадобится.

Остается "

13
ответ дан 28 November 2019 в 17:36
поделиться

Краткий ответ: Изучение хотя бы некоторого количества C ++ (и некоторого языка ассемблера тоже) поможет вам лучше использовать и, что, возможно, более важно, отлаживать программную платформу глубоко внутри вашего кода. Это верно независимо от языка программирования или ОС, в которой вы работаете.

Длинный ответ:

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

Поэтому я всегда рекомендовал разработчикам на определенном этапе своей карьеры потратьте хотя бы некоторое время на изучение двух языков, которые лежат в основе почти каждого программного стека: C / C ++ и язык ассемблера x86. Это не означает, что вам нужно стать экспертом в любом из них, но наличие практических знаний о таких вещах, как указатели, регистры, управление памятью, стеки и кучи, строковые буферы без GC, утечки и т. Д., Очень полезно, когда вы вам нужно обратиться к стеку, чтобы диагностировать проблему, лучше понять странное поведение или просто принимать более разумные решения при разработке программного обеспечения более высокого уровня, независимо от языка.

Аналогия: я стал намного лучше ручным переводом водитель однажды я разобрал двигатель своего мотоцикла и увидел, как работает сцепление. Это не значило, что мне нужно было стать механиком мотоциклов, только то, что это помогло моим общим навыкам вождения, когда то, что происходило внутри моего мотоцикла, больше не было загадкой.

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

Обратите внимание, что я намеренно не затрагиваю более спорный вопрос о том, следует ли вам писать целые приложения на C ++ или нет. Другие ответы отлично справились с этими аргументами. Вместо этого я просто утверждаю, что навыки C ++ принесут вам пользу, независимо от того, продолжаете ли вы писать большую часть своего кода на C # (или Java, или Python, или Ruby, или ...)

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

Обратите внимание, что я намеренно не затрагиваю более спорный вопрос о том, следует ли вам писать целые приложения на C ++ или нет . Другие ответы отлично справились с этими аргументами. Вместо этого я просто утверждаю, что навыки C ++ принесут вам пользу, независимо от того, продолжаете ли вы писать большую часть своего кода на C # (или Java, или Python, или Ruby, или ...)

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

Обратите внимание, что я намеренно не затрагиваю более спорный вопрос о том, следует ли вам писать целые приложения на C ++ или нет . Другие ответы отлично справились с этими аргументами. Вместо этого я просто утверждаю, что навыки C ++ принесут вам пользу, независимо от того, продолжаете ли вы писать большую часть своего кода на C # (или Java, или Python, или Ruby, или ...)

34
ответ дан 28 November 2019 в 17:36
поделиться

Наибольшие проблемы заключаются в следующем:

  • C ++ является де-факто стандартом системного и прикладного программирования за последние 20 лет
  • C ++ является переносимым, и компиляторы существуют для ~ 95% все архитектуры процессоров.
  • C ++ может улучшить ваш код .NET, я имею в виду, что PInvoke может быть выполнен для запуска оптимизированного кода, написанного на C ++ -ИЛИ- может использоваться для запуска кода от сторонних производителей, что позволяет вам писать собственные оболочки и т. д. .
  • C ++ совместим с linux / mac / PSP / Cray II / Random OS из Таиланда, у него нет проблем с компиляцией, потому что он не работает через .NET CLI (что, я должен признать, является прекрасным произведением искусства) На данный момент C # привязан к реализациям Mono и Windows через .NET.

Как профессиональный программист .NET-приложений, я люблю C # и поклоняюсь той земле, по которой шли архитекторы. Но C ++, на мой взгляд, самый важный язык, который вы можете / когда-либо выучите, потому что он откроет больше возможностей для карьеры, чем любой другой язык в современной индустрии. Если вы знаете C #, вам потребуется несколько месяцев, чтобы выучить его. Я рекомендую книгу Тимоти Д'Орази по C ++, если у вас есть академическое образование в области разработки программного обеспечения.

Запоздалые мысли: C ++ - это инструмент, точно так же, как C # или дрель или дробовик (возможно), подходящий инструмент для задачи, я бы лучше умер, чем писал функциональный код на C ++, точно так же я бы не стал заниматься разработкой приложений на F #, они ' re все прекрасные языки. Узнай то, что тебя интересует! Если вы хотите быть лучшим программистом, изучите C ++, если вы хотите стать лучшим разработчиком приложений, вам может быть выгоднее изучать новые технологии в рамках той структуры, в которой вы уже работаете! Вы программист на C #, вы узнали WPF? WCF? как насчет возможностей C # 4.0? Вы освоили лямбда-функции? деревья выражений? Отсюда можно пойти по многим направлениям, и C ++ - лишь одно из них. Задайте себе следующие вопросы:

43
ответ дан 28 November 2019 в 17:36
поделиться

Чтобы уважать пожелания OP, я не буду ничего говорить о том, как, по моему мнению, C ++ может помочь программисту C # по-другому думать о коде. -p

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

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

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

2
ответ дан 28 November 2019 в 17:36
поделиться

Обновление 2015 г.

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

По иронии судьбы, в моей нынешней работе над привязками C # для Realm я все еще использую свои навыки C ++ наряду с C #, но за последние 6 лет мое отношение мало что изменилось.

Оригинал

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

Я очень, очень впечатлен C # как языком, особенно с улучшениями в C # 3.0.

Я бы придерживался противоположной точки зрения:

  1. Если вы не хотите заниматься написанием компьютерных игр или относительно низкоуровневых компонентов, забудьте о C ++ как о языке, потому что есть достаточно квалифицированных программистов на C ++. там и игровая индустрия производит намного больше (предположительно различного качества). Это не улучшит ваши карьерные перспективы.
  2. Не пожалейте времени на изучение интересных глубин C #, последствий перегрузки операторов, того, как использовать небезопасный код и т. Д. Возьмите книгу вроде превосходного C # in a Nutshell и уметь просматривать и аннотировать весь контент с более глубокими объяснениями того, как можно использовать эту идиому.
  3. Изучите динамический язык, такой как Ruby или Python, используйте его для некоторых реальных задач, таких как создание или изменение тестовых файлов, так что вы цените более простой язык для управления файлами, структурами и строками.
  4. Изучите F # или другой функциональный язык и придумайте несколько собственных ухмылок о последствиях функциональных языков для параллельной обработки и облаков :-) Через несколько лет (или раньше) это принесет огромные выгоды в карьере, когда люди ищут опытных программистов. Помните, что вы не выучили новый язык, пока не сравните его со старыми, поэтому вам нужно иметь возможность размышлять о том, когда и где использовать F # (или Haskell) вместо C #.
4
ответ дан 28 November 2019 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: