Хорошо ли переводится C # на C ++? [закрыто]


13

Мои уроки программирования в школе были на C ++, но в последние несколько лет я работал над C #. Если бы была такая должность, которая требовала бы, скажем, 1 или 2 года опыта в C ++, был бы достоин рассмотрения мой опыт в C #? Насколько эффективно я могу быть в таком положении? Так нужно ли мне начинать программистом C ++ начального уровня, чтобы получить необходимый опыт?


4
Самым сложным будет изучение идиом C ++ и «правильного» способа ведения дел. В C # такие вещи, как управление памятью и проверка границ, встроены в язык и структуру. В C ++ есть еще много способов выстрелить себе в ногу.
Роберт Харви

1
@RobertHarvey: Только если вы никогда не слышали об умных указателях. Или контейнеры.
DeadMG

11
@DeadMG: я не знаю, что вы подразумеваете под этим. Даже если вы слышали о них, вы все равно должны изучить их.
Роберт Харви

2
Серия Effective C ++ намного сложнее, чем эффективная серия C #.
Работа

@ Роберт: Ну, если вы делаете контейнеры и умные указатели, то вам не нужно управлять объемом памяти. И учить их - это C ++ 101.
DeadMG

Ответы:


13

Проблема здесь заключается в том, что C ++ и C # - это принципиально разные языки с разными подходами ко многим проблемам. Их легко смешать как «язык OO», но простой факт заключается в том, что многие идиомы C # считаются очень плохим кодом в C ++ (и наоборот).

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


5

Я был в одной лодке около 2 лет назад. Ваш опыт работы с c #, вероятно, не будет стоить столько же для работы c ++, сколько c ++ для работы ac #. Тем не менее, если вы знаете, как на самом деле работает c # (на самом деле очень мало программистов на c #), и хорошо изучили ваш c ++, то проблема с c ++ не будет. Проблема будет в том, как вы привыкли к определенным шаблонам проектирования, которые будут слишком высокого уровня для c ++.

Например, переходя от красивой модели доступа к данным ADO.NET к использованию cppcon для доступа к mysql, System.Collections.Generic к использованию stl, множественному наследованию, сборке мусора для очистки вашей памяти в деструкторах и так далее ... все стремятся быть жесткими переходами. С ++ не проблема, изучение библиотек, шаблонов проектирования и того, как их использовать, является проблемой. Большинство рекрутеров не осознают этого. Если вы можете заниматься базовым дизайном и использовать реально часто используемые функции с ++, тогда вы должны быть в порядке в интервью.

Однако готовность к работе - это другая история. Это веселый вызов, но я надеюсь, что все идет хорошо.


Все работы C ++, которые я вижу, требуют 2-3 лет опыта работы в C ++, но моя работа в C #. Это действительно расстраивает меня, я хочу сделать C ++! Ты прав насчет вербовщика, меня застрелили. Как я могу получить этот опыт, если никто не позволит мне попробовать? Я уверен, что если кто-нибудь впустит меня в дверь, я смогу быстро научиться, я просто не знаю, как мне с ними связаться.
MetaGuru

Я вскочил на проект C ++ на моей нынешней работе. Это, вероятно, ваш лучший выбор. Или вы всегда можете получить проект с открытым исходным кодом, который находится на C ++.
Джонатан Хенсон

@ Райан Как сказал Джонатан, есть много способов получить опыт в C ++. По крайней мере, откуда я, вы должны доказать, что у вас есть опыт (вместо популярного утверждения; опыт работы 1 год в пять раз). Это работает в обоих направлениях - кто-то без большого «бумажного» опыта может получить шанс доказать себя. Просто убедитесь, что вы на самом деле знаете C ++, прежде чем пытаться!
Макс

3

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

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


3

Вы точно в той же ситуации, что и я, 4 года назад.

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

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

Но большая часть интервью была посвящена решению проблем и творческим решениям, и C ++ стал второстепенным фактором.

Так что шансы действительно зависят от работодателя и занимаемой должности.

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


1
просто убедитесь, что вы знаете, что такое виртуальный деструктор, чтобы пройти мимо экрана телефона.
Кевин

2
Как говорили другие, убедитесь, что вы помните несколько основ управления памятью в C ++. Это принципиальная разница. В противном случае в отношении библиотек и фреймворков. У большинства (крупных) компаний есть свои собственные библиотеки и оболочки, поэтому они не ожидают, что вы будете знать их реализации. В отличие от C #, где большинство высокоуровневых библиотек поддерживаются в .net framework, и требуется знать набор библиотек, относящихся к позиции.
Койот

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

Да ... Работал там 3 года. Это был отличный опыт ... но я должен был разобраться с особенностями C ++ в первые несколько месяцев.
Койот

1

По-разному. Если вы можете ответить на некоторые базовые вопросы об указателях и тому подобное, то все будет в порядке.

Также полезно, если вы можете перечислить различия между шаблонами C ++ и обобщениями .NET.

Кроме этого, довольно легко догнать остальных по ходу дела.


1

Да. Это может быть не так актуально, как опыт C ++, но это хорошо.

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

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


0

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

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

Если они находятся во встроенной / мобильной среде и / или в среде без сбора мусора, вам действительно необходимо знать, как эффективно управлять памятью. Интеллектуальные указатели, как указывал @DeadMG, являются ключевыми здесь, но также понимают профиль распределения памяти. Программисты игр часто предварительно выделяют большие массивы объектов и перерабатывают их, чтобы заранее знать требования к памяти и сокращать число неизвестных для каждого кадра. Это также техника, используемая в прокрутке TableViews в iOS.

Если есть какая-либо работа по интеграции, вам, вероятно, понадобится опыт уровня C в плане упорядочения данных между языками (например, P / Invoke), а также понимание на уровне байтов того, как эти структуры данных могут использоваться, что не является обычной практикой в C # по моему опыту.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.