Обычно программист не знает разницу между C и C ++? [закрыто]

16

Во время интервью меня спросили, знаю ли я разницу между C и C ++.

Мне было интересно, почему такой вопрос задают?

Стелла Ли
источник
11
Учитывая количество вопросов C, которые я видел за последние несколько недель с тегом C ++, я бы сказал, что это был довольно важный вопрос.
Gort Робот
13
Судя по тому, как часто я вижу «C / C ++», я бы сказал, что это очень часто.
user16764
6
Что ты ответил?
Дима
8
Как правило, соискатель на работу по программированию вообще ничего не знает. Но я бы не назвал этого человека программистом.
vartec
6
@Tjaart - Вы понимаете, что существуют системы, в которых байт не является 8-битным, верно?
Ramhound

Ответы:

25

Если вопросы были сформулированы как «Знаете ли вы разницу между C и C ++?» и вам было позволено просто ответить «Да», тогда я мог видеть ваше замешательство, но если бы они на самом деле спрашивали «Каковы различия между C и C ++?» и ожидался более открытый ответ, я могу видеть его как законный «путь расследования», как они говорят.

Например, только когда-либо закодированный в C и никогда в C ++, я едва ли смог бы ответить, кроме смутного «C ++ поддерживает объектно-ориентированное кодирование?».

Kzqai
источник
40

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

Heinzi
источник
7
Это будет в значительной степени моим ответом. Проведя собеседование с людьми на должности программистов, я могу сказать, что вы задаете очевидные вопросы, которые очень легко отбросят большое количество кандидатов.
Тианна
Миллион голосов за тебя. Я изумлен на вопросах начального уровня, поэтому многие респонденты не могут ответить.
HLGEM
1
С другой стороны, я программирую уже более 25 лет, и есть несколько вопросов для начинающих, на которые я больше не могу отвечать (становится хуже, если вы спрашиваете определения). Я просматривал статью, связанную в этом ответе, и мне было похоже на «хммм, да, позвольте мне подумать об этом на минуту», тогда как на работе я работаю над внедрением довольно сложных систем и, как правило, не испытываю особых проблем с поиском решений. Некоторые из этих маленьких вопросов пугают меня больше, чем многоуровневая система и добавление многопоточной функциональности, вот такая хрень ... Странно, я знаю.
MetalMikester
1
в самом деле. Как обсуждалось в другом потоке P.SE, для интервью у меня появилась привычка начинать со смехотворно очевидных вопросов («как вы объявляете переменную в JS?», «Сколько байт для 1 int в Java?», « что такое указатель? "и т.д ...). Я не возражаю против первой ошибки (стресс является фактором, даже если я начинаю собеседования с разговорами, чтобы расслабить их), но обычно, если я могу получить 3 удара, прежде чем добиваться достойных вопросов, тогда я считаю вполне приемлемым повесить трубку, не переходя дальше или выгнать их. 5 минут, которые нужно, чтобы задать глупые вопросы, стоят сэкономленного времени.
Хайлем
3
На самом деле, я даже извиняюсь перед тем, как задавать эти первые вопросы, так как не хочу, чтобы квалифицированные кандидаты были уволены ими, или думаю, что я не воспринимаю их всерьез и чувствую, что они здесь не будут.
Хайлем
8

Там их целая куча. Там в бесконечности людей , у которых есть идиотские преподаватели , которые преподают C-строку и newи delete, или устарелые учебники или плохие книги, которые учатся «C ++» , но на самом деле C, которые думают , что эти два довольно близко.

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

DeadMG
источник
2
Это поднимает очень хороший вопрос. Приемлемо и, возможно, даже распространено учить C, но использовать компилятор C ++. Это, конечно, приводит в замешательство студентов, которые никогда не изучают основные различия между C и C ++. Я говорю только об основных различиях между одной и той же ревизией.
Ramhound
4
@Ramhound: Это не приемлемо на всех . Факт, что это распространено, является ортогональным.
DeadMG
1
Печальный факт заключается в том, что C и C ++ почти повсеместно преподаются плохо. Зайдите в SO и просмотрите теги C и C ++, и вы увидите те же самые заблуждения, те же самые неправильные интерпретации, те же самые плохие практики, повторяемые снова и снова и снова. Это не люди, которые случайно делают одни и те же ошибки; их учили, как делать эти ошибки. «Мой профессор сказал ...» для меня теперь почти всегда красный флаг.
Джон Боде
5

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

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

Некоторые из более очевидных различий, которые я выучил (не исчерпывающий список) ( ), типы данных struct изначально не могли содержать функции и не могли иметь закрытых членов, а это означает, что очень трудно реализовать правила валидности абстрактного типа данных в C. ( ) классы не поддерживаются в C ( ), передача по ссылке с использованием оператора амперсанда специфична для C ++ ( ) C не поддерживает потоки или шаблоны (*) malloc и free предназначены для использования только в C, а не в C ++

AB
источник
2
Я думаю, что это ключевой момент ... в старые времена у вас был компилятор C, а затем появился C ++, так что вы узнали о различиях. Теперь у вас есть компиляторы C / C ++, и если вас обучают C ++ явно, то практически невозможно узнать, что такое C и что такое C ++, помимо «объектно-ориентированных вещей». Кроме того, я не уверен, что C / C ++ является наиболее распространенным язык выучить в гневе (?)
Аль Биглан
1
Я бы очень надеялся, что этот процент не так мал, потому что те, «преобразованные в C ++», программисты на C часто очень плохие программисты на C ++ .
СБИ
1

К сожалению, я думаю, что это становится все более и более распространенным.

Я думаю, что молодые программисты, только что окончившие техникум (или там, где они учатся), просто не изучают более старые языки, такие как C, C ++, Lisp, OCaml и т. Д. Они просто выступают как «программисты на c #» или «программисты на Java». и т. д. И когда они находят работу, они не бросают себе вызов в изучении других языков.

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

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

Пит
источник
О каких университетах ты говоришь? "Тайные" языки? Я должен был изучить ассемблер для MIPS в университете Рима ...
Виталий Олегович
Как правило, «молодые» программисты, с которыми я встречался, имели диплом инженера. Если задуматься, почти все программисты, с которыми я работаю, имеют диплом инженера, в том числе и я.
Пит
1
C и C ++ все еще преподаются в школе. Проблема в том, что в большинстве случаев один и тот же компилятор используется для обучения обоих. Это означает, что они никогда не узнают различия между двумя языками.
Ramhound
@ Пит Если я выступил в роли программиста на C #, я не могу представить, что буду изучать C или C ++ как «другой язык». Конечно, я бы хотел Ruby, Haskell, Javascript, Python. Языки семейства C достаточно близки, чтобы знать их достаточно.
Кирк Бродхерст
0

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

Основной причиной является бинарный характер перечисления языков / инструментов в вашем резюме / резюме. По сути, стандарт, по-видимому, заключается в том, что если у вас есть «Hello World» для компиляции и запуска на каком-либо языке, то все в порядке, чтобы добавить его в свое резюме / CV.

Как это бывает, C версия "Hello, World!" также компилируется и работает на C ++. Таким образом, в отсутствие какой-либо другой информации все, что я вижу в резюме «C ++», говорит мне о том, что этот человек знает достаточно C, чтобы получить «Hello, World!» работает и знает, что большинство программ на C будет компилироваться в C ++.

Учитывая это, мне нужно немного прощупать это на собеседовании. Я, вероятно, не стал бы делать это, спрашивая «Да / Нет» «Знаете ли вы разницу?» Короче, вопрос, потому что он имеет очевидный «правильный» ответ. Я, вероятно, спросила бы кандидата, какой язык ей нравится больше, почему и есть ли какие-то преимущества по сравнению с тем, который она не выбрала.

JohnMcG
источник
0

Ответ

Да, это общее. Я видел эту ситуацию, либо я, коллеги или сторонний код библиотеки.

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

У меня была проблема с изменением кода "Pure C". И используя «new» и «delete» функции выделения памяти, которые являются «c ++». Остальная часть кода не была объектно-ориентированной

Компилятор был C ++. Позже я подал в суд на другой компилятор и обнаружил ошибку.

бонус

Если кто-то спросит, устно, или в письменном тесте, или в онлайн-тестировании:

«Знаете ли вы разницу между C или C ++»

И вы отвечаете «Да» или «Нет».

Они действительно имеют в виду:

"Знаете ли вы разницу между C или C ++, пожалуйста, скажите мне?"

Итак, вы должны ответить:

«Да. Разница в том, что C ++ его объектно-ориентированный, хотя вы можете использовать Pure C внутри программы C ++ для обратной совместимости».

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

umlcat
источник
2
Ну, я не думаю, что этот ответ является полностью правильным. Правильный ответ: C ++ имеет надежную поддержку объектно-ориентированного кода. Это не требует этого. (Который является источником этой путаницы в первую очередь.)
Gort the Robot
Также «вы можете использовать Pure C внутри программы на C ++» может означать что-то вроде «C ++ является надмножеством C, то есть любая допустимая программа на C также является допустимой программой на C ++» (неправильно). Или это может означать «вы можете связать программы C ++ с библиотеками C» (правда, но большинство языков так или иначе могут ссылаться на библиотеки C). Вы должны быть намного более точными в реальном интервью.
nikie
-2

редактировать

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


Это зависит от того, что вы подразумеваете под «программистом» и что вы подразумеваете под «разницей».

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

Я знаю других «программистов» (также разработчиков), которые даже не скажут вам разницу между Java и FORTRAN или Javascript и Pascal. Они хороши в том, что они делают, и они не делают процедурных языков.

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

Термин «разница» неоднозначен. Я указал выше на некоторые отличия, но я знаю, что они не являются окончательными и полными. Очень немногие люди узнают все различия - гораздо больше людей смогут дать некоторые расплывчатые ответы (как и я) об объектной ориентации.

Кирк Бродхерст
источник
5
«Я бы изо всех сил пытался дать какие-либо реальные различия между C и C ++». Вы, конечно, не программист C ++. Пожалуйста?
СБИ
2
C и C ++ - это совершенно разные языки, закодированные совершенно разными способами. Ты явно просто не знаешь их.
DeadMG
@sbi "Я не рисую себя как" зная "любой из этих языков." Я позволю тебе решить это для себя.
Кирк Бродхерст
Есть какие-либо отзывы о downvotes? Это потому, что я не знаю разницу между ними? Я не предполагал, что это лишит меня права отвечать на вопрос.
Кирк Бродхерст
1
@KirkBroadhurst: Мне кажется, я указал, какую часть вашего ответа мне не понравилась, чтобы понизить голос, и за этот комментарий проголосовали пять раз так же часто, как и за вас после этого, так что я не уверен, какое объяснение вы получите. Однако, чтобы уточнить: здесь достаточно термина «разница», поскольку C и C ++ имеют только поверхностное синтаксическое сходство, и, кроме этого, очень разные языки. Что касается квалификаций: я не думаю, что есть квалификация, необходимая для ответа здесь, но когда ответ явно ошибочен, как этот, он будет отклонен независимо от квалификации.
суббота,
-3

Обычно программист не знает разницу между C и C ++?

Двадцать лет назад? Да.

Сегодня? Не так много.

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

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

lunchmeat317
источник
8
Сказал бы наоборот. Сейчас я вижу больше смущенных людей, чем даже 5-10 лет назад.
Хайлем
@Haylem Оглядываясь назад, я думаю, что хотел сказать наоборот ... упс.
lunchmeat317