Подтвердить что ты не робот

Какие преимущества я могу получить от изучения С++, если я в основном программист на С#?

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

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

Итак, мой вопрос в том, какое преимущество я могу получить от изучения С++ (помимо знаний и расширения моих горизонтов), когда я в основном программирую на С#?

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

  • Что я могу узнать, что добавит мне ценность?
  • Что я могу узнать, что будет интересовать меня как разработчика?
  • Что я могу узнать, что принесет пользу мне на моем ближайшем месте?
  • Что я могу узнать, что поможет мне войти в карьерный путь, в котором я хочу быть?

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

Это зависит.

То, что мне нравится в С++, заключается в том, что в некотором смысле это более выразительный и да, более элегантный, чем С#. Это позволяет использовать некоторые действительно красивые абстракции (например, общее программирование или RAII), которые просто не могут быть дублированы на С#.

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

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

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

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

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

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

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

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

Это оставляет аргумент "стать лучшим программистом", и хотя это допустимый аргумент, он также верен для других языков. Вы должны обязательно знать функциональный язык. И Python, или подобный прагматичный, высокоуровневый "облегчает программисту" вид языка.

Ответ 5

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

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

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

Это применимо к вам? Не знаю, потому что я понятия не имею, чего вы пытаетесь достичь.

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

Ответ 6

Изучите С++, чтобы вы могли лучше оценить С#.

Ответ 7

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

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

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

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

Упаковщики! Изучение С++ помогает вам обернуть эти досадные С++ dll для использования на С#!

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

Ответ 8

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

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

Ответ 9

2015 Update

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

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

Оригинал

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

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

Я бы принял противоположные взгляды:

  • Если вы не хотите нанимать компьютерные игры или относительно низкоуровневые компоненты, забудьте о С++ как языке, потому что там достаточно опытных программистов на C++, и игровая индустрия генерирует намного больше (по-видимому, различного качества). Это не улучшит перспективы вашей карьеры.
  • Потратьте некоторое время на изучение интересных глубин С#, последствия перегрузки оператора, использование небезопасного кода и т.д. Возьмите книгу, такую ​​как отличный С#, в двух словах и сможете пройти и аннотировать весь контент с более глубокими объяснениями того, как можно использовать эту идиому.
  • Изучите динамический язык, такой как Ruby или Python, используйте его для некоторых реальных задач, таких как генерация или искажение тестовых файлов, поэтому вы цените более простой язык для управления файлами, структурами и строками.
  • Изучите F # или другой язык функций и разработайте несколько собственных уловок о последствиях функциональных языков для параллельной обработки и облаков:-) Через несколько лет (или раньше) это принесет огромные выгоды для карьеры, когда люди скремблируют для облачных программистов. Помните, что вы не изучили новый язык, пока не сможете сравнить его со старыми, поэтому вам нужно иметь возможность понтовать о том, когда и где использовать F # (или Haskell) вместо С#.

Ответ 10

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

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

Ответ 11

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

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

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

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

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

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

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

Ответ 12

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

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

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

Ответ 13

Изучите С++, чтобы вы чувствовали, как выдуваете мозги.

Ответ 14

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

Ответ 15

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

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

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

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

Ответ 16

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

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

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

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

Ответ 17

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

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

Ответ 18

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

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

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