Во время интервью меня спросили, знаю ли я разницу между C и C ++.
Мне было интересно, почему такой вопрос задают?
Во время интервью меня спросили, знаю ли я разницу между C и C ++.
Мне было интересно, почему такой вопрос задают?
Ответы:
Если вопросы были сформулированы как «Знаете ли вы разницу между C и C ++?» и вам было позволено просто ответить «Да», тогда я мог видеть ваше замешательство, но если бы они на самом деле спрашивали «Каковы различия между C и C ++?» и ожидался более открытый ответ, я могу видеть его как законный «путь расследования», как они говорят.
Например, только когда-либо закодированный в C и никогда в C ++, я едва ли смог бы ответить, кроме смутного «C ++ поддерживает объектно-ориентированное кодирование?».
Некоторые люди заметили, что есть огромное количество соискателей, которые вообще не могут писать код . Так что да, задавать «очевидные» вопросы имеет смысл.
Там их целая куча. Там в бесконечности людей , у которых есть идиотские преподаватели , которые преподают C-строку и new
и delete
, или устарелые учебники или плохие книги, которые учатся «C ++» , но на самом деле C, которые думают , что эти два довольно близко.
Конечно, если вы работодатель, то сказать, что они одинаковы или даже похожи, - большой предупредительный сигнал.
Есть также небольшой процент людей (таких как я), которые изучили C ++, прежде чем они изучили C.
Я уверен, что вы знаете различия, но если вы студент, у которого был только класс C ++, а не класс C, то части C ++, которые не совместимы с C, не будут очевидны.
Некоторые из более очевидных различий, которые я выучил (не исчерпывающий список) ( ), типы данных struct изначально не могли содержать функции и не могли иметь закрытых членов, а это означает, что очень трудно реализовать правила валидности абстрактного типа данных в C. ( ) классы не поддерживаются в C ( ), передача по ссылке с использованием оператора амперсанда специфична для C ++ ( ) C не поддерживает потоки или шаблоны (*) malloc и free предназначены для использования только в C, а не в C ++
К сожалению, я думаю, что это становится все более и более распространенным.
Я думаю, что молодые программисты, только что окончившие техникум (или там, где они учатся), просто не изучают более старые языки, такие как C, C ++, Lisp, OCaml и т. Д. Они просто выступают как «программисты на c #» или «программисты на Java». и т. д. И когда они находят работу, они не бросают себе вызов в изучении других языков.
Конечно, есть некоторые, которые делают, но из тех, с кем я работал, у молодых программистов есть общая тенденция следовать этой схеме.
Отказ от ответственности: поскольку я говорю об образовании, то, конечно, могут быть различия в разных странах в отношении того, что подчеркивается в образовании.
Вероятно, не буквально, потому что они думают, что C ++ и C - это одно и то же, но с точки зрения истинного понимания и способности использовать различные функции C ++, да.
Основной причиной является бинарный характер перечисления языков / инструментов в вашем резюме / резюме. По сути, стандарт, по-видимому, заключается в том, что если у вас есть «Hello World» для компиляции и запуска на каком-либо языке, то все в порядке, чтобы добавить его в свое резюме / CV.
Как это бывает, C версия "Hello, World!" также компилируется и работает на C ++. Таким образом, в отсутствие какой-либо другой информации все, что я вижу в резюме «C ++», говорит мне о том, что этот человек знает достаточно C, чтобы получить «Hello, World!» работает и знает, что большинство программ на C будет компилироваться в C ++.
Учитывая это, мне нужно немного прощупать это на собеседовании. Я, вероятно, не стал бы делать это, спрашивая «Да / Нет» «Знаете ли вы разницу?» Короче, вопрос, потому что он имеет очевидный «правильный» ответ. Я, вероятно, спросила бы кандидата, какой язык ей нравится больше, почему и есть ли какие-то преимущества по сравнению с тем, который она не выбрала.
Ответ
Да, это общее. Я видел эту ситуацию, либо я, коллеги или сторонний код библиотеки.
Например, я иногда работаю с другими языками программирования или средами программирования и должен связывать или обновлять библиотеки «чистого с» или «с ++».
У меня была проблема с изменением кода "Pure C". И используя «new» и «delete» функции выделения памяти, которые являются «c ++». Остальная часть кода не была объектно-ориентированной
Компилятор был C ++. Позже я подал в суд на другой компилятор и обнаружил ошибку.
бонус
Если кто-то спросит, устно, или в письменном тесте, или в онлайн-тестировании:
«Знаете ли вы разницу между C или C ++»
И вы отвечаете «Да» или «Нет».
Они действительно имеют в виду:
"Знаете ли вы разницу между C или C ++, пожалуйста, скажите мне?"
Итак, вы должны ответить:
«Да. Разница в том, что C ++ его объектно-ориентированный, хотя вы можете использовать Pure C внутри программы C ++ для обратной совместимости».
Иногда они не будут спрашивать вас «пожалуйста, скажите мне», и они будут предполагать, что вы не знаете. Не просто отвечайте «да» или «нет».
редактировать
В качестве предварительного замечания отметим, что этот ответ не предназначен для объявления об отсутствии различий или о том, что я признаю, что знаю различия, или даже о том, что я знаю, что «Hello World» в C или C ++. Это ответ на вопрос путем формулировки технического задания, указывающего на то, что многие люди знают элементарные различия (например, у одного есть несколько +
символов в названии), и очень немногие люди будут знать все или даже большинство различий.
Это зависит от того, что вы подразумеваете под «программистом» и что вы подразумеваете под «разницей».
Я «программист» (хотя я называю себя разработчиком), и я бы изо всех сил пытался дать какие-либо реальные различия между C и C ++. Если нажать, я, вероятно, скажу, что C ++ - это расширенный набор C, имеющий пространства имен и наследование; разные способы борьбы с памятью. Я знаю достаточно, чтобы исправить некоторые ошибки или внести некоторые изменения в вашу существующую программу, но я не могу представить, чтобы написать что-то большее, чем простая утилита на C или C ++. Я знаю достаточно, чтобы обойтись, но я не рисую себя как «знающий» ни один из этих языков.
Я знаю других «программистов» (также разработчиков), которые даже не скажут вам разницу между Java и FORTRAN или Javascript и Pascal. Они хороши в том, что они делают, и они не делают процедурных языков.
Тогда есть миллионы посредственных программистов, которые едва знают единственный язык, с которым они работают каждый день.
Термин «разница» неоднозначен. Я указал выше на некоторые отличия, но я знаю, что они не являются окончательными и полными. Очень немногие люди узнают все различия - гораздо больше людей смогут дать некоторые расплывчатые ответы (как и я) об объектной ориентации.
Обычно программист не знает разницу между C и C ++?
Двадцать лет назад? Да.
Сегодня? Не так много.
Причина этого в том, что ландшафт программирования сильно изменился. Многие из сегодняшних программ основаны на Интернете; даже программы, написанные для настольных компьютеров, могут быть написаны на языке более высокого уровня, чем C или C ++. Таким образом, если вы не программист, который пишет код ОС, вы можете не знать много о любом из этих двух языков.
Интервьюер может задать этот вопрос в интервью, чтобы оценить, насколько много вы знаете об основах программирования; если вы знаете разницу между C и C ++, то вы, вероятно, знаете, что такое объектно-ориентированное программирование, вы, вероятно, понимаете библиотеки и компиляторы, вы понимаете функции памяти, ссылки, указатели ... многие вещи, которые повлияли на современные языки программирования , Я не слишком много использую C ++ (и я не могу сказать, что я отличный программист в любом языке; мудрость придет со временем), но я могу сказать, что мой опыт работы с C ++ определенно сделал меня лучшим программистом.