Чи спільно для програміста не знати різниці між C і C ++? [зачинено]


16

Під час інтерв'ю мене запитали, чи знаю я різницю між C і C ++.

Мені було цікаво, чому таке питання задають?


11
Враховуючи кількість запитань на C, які я бачив лише протягом останніх кількох тижнів з тегом C ++, я б сказав, що це було досить важливим питанням.
Gort the Robot

13
Судячи з того, як часто я бачу "C / C ++", я б сказав, що це дуже часто.
user16764

6
Що ти відповів?
Діма

8
Кандидат на програмування звичайно взагалі нічого не знає. Але я б не назвав цю людину програмістом.
vartec

6
@Tjaart - Ви розумієте, що існують системи, де байт не має 8 біт?
Рамхаунд

Відповіді:


25

Якщо питання були сформульовані так: "Чи знаєте ви різницю між C і C ++?" і вам дозволили просто відповісти "Так", тоді я міг бачити ваше плутанину, але якби вони насправді запитували "Що - це - відмінності між C і C ++?" і очікувалася більш відкрита відповідь, я вважаю це законним "проспектом дізнання", як вони кажуть.

Наприклад, лише коли-небудь кодувавшись на C і ніколи в C ++, я ледве зміг би відповісти поза неясним "C ++ підтримує об'єктно-орієнтоване кодування?".


40

Деякі люди помітили, що існує величезна кількість претендентів на програмування, які взагалі не можуть написати код . Отже, так, задавати "очевидні" питання має ідеальний сенс.


7
Це в значній мірі буде моєю відповіддю. Опитавши людей на посадах програмування, я можу вам сказати, що запитання очевидних питань дуже легко вирізає хорошу кількість кандидатів.
Тяньна

Мільйон грошей на вас. Я вражений питаннями початкового рівня, тому багато опитаних не можуть відповісти.
HLGEM

1
Знову ж таки, я займаюся програмуванням понад 25 років, і є деякі питання для початкового рівня, на які я вже не можу відповісти більше (стає гірше, якщо ви запитаєте визначення). Я дивився на статтю, пов’язану з цією відповіддю, і мені здавалося, що "так, дозвольте мені подумати про це хвилинку", тоді як на роботі я працюю над впровадженням досить складних систем і, як правило, не маю особливих проблем зі створенням рішень. Деякі з цих маленьких запитань мене лякають більше, ніж багаторівнева система і вкладають у якусь багатопоточну функціональність, так лайно ... Дивно, я знаю.
MetalMikester

1
справді. Як обговорювалося в іншому потоці P.SE, для інтерв'ю я звик починати з смішно очевидних питань ("як ти оголошуєш змінну в JS?", "Скільки байтів за 1 int в Java?", " що таке вказівник? "тощо"). Я не заперечую проти першої помилки (стрес - це фактор, навіть якщо я починаю інтерв'ю з розмов, щоб їх розслабити), але зазвичай, якщо я можу отримати 3 страйки, перш ніж дістати гідних питань, то вважаю цілком прийнятним повісити трубку, не йдучи далі або вигнати їх. 5 хвилин, які потрібні, щоб задати дурні питання, варто заощадити час.
хайлем

3
Насправді я навіть вибачаюсь перед тим, як ставити ці перші запитання, оскільки я не хочу, щоб кваліфіковані претенденти їх дивували, або думаю, що я не сприймаю їх серйозно і відчуваю, що вони тут не належатимуть.
хайлем

8

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

Звичайно, якщо ви роботодавець, то сказати, що вони однакові або навіть схожі, - це велике попереджувальне світло.


2
Це викликає дуже хороший момент. Це є прийнятним і, можливо, навіть загальним для навчання C, але використовувати компілятор C ++. Це, звичайно, призводить до плутанини студентів, які ніколи не дізнаються про основні відмінності між C і C ++. Я кажу лише про основні відмінності між тією ж редакцією.
Рамхаунд

4
@Ramhound: Це не прийнятно на всіх . Те, що це звичайне, є ортогональним.
DeadMG

1
Сумний факт, що C і C ++ майже повсюдно викладаються погано. Перейдіть до ТА і перегляньте теги C і C ++, і ви побачите однакові помилки, ті ж неправильні інтерпретації, ті ж погані практики, які повторюються знову і знову. Це не випадкові люди, які роблять однакові помилки; їх навчали, як робити ці помилки. "Мій професор сказав ..." - це майже повсюдно для мене червоний прапор.
Джон Боде

5

Є також невеликий відсоток людей (таких як я), які вивчили C ++ ще до того, як засвоїли C.

Я впевнений, що ви знаєте відмінності, але якщо ви студент, який мав лише клас C ++, а не клас C, частини C ++, які не сумісні з C, не будуть очевидними.

Деякі з більш очевидних відмінностей, які я дізнався (не вичерпний перелік) ( ) типів даних структури спочатку не міг містити функцій і не можуть мати приватних членів, тобто дуже важко застосувати правила дійсності абстрактного типу даних в C. ( ) класи не підтримуються в C ( ), передаючи посилання за допомогою оператора ampersand, характерного для C ++ ( ) C не підтримує потоки або шаблони (*) malloc і вільні призначені для використання тільки в C, а не в C ++


2
Я думаю, що це ключове розуміння ... в старі часи у вас був компілятор C, потім прийшов C ++, тож ви дізналися відмінності. Тепер у вас є компілятори C / C ++, і якщо ви чітко навчаєтесь C ++, не можна знати, що таке C, а що є C ++ за межами "предметно-орієнтованих речей". Також я не впевнений, що C / C ++ є найпоширенішим мову вивчити в гніві (?)
Аль Біглан

1
Я дуже сподіваюся, що відсоток не такий малий, тому що ті, хто "перейшов на C ++", програмісти на C часто є дуже поганими програмістами C ++ .
sbi

1

На жаль, я думаю, це стає все більш поширеним.

Я думаю, що молоді програмісти, що вийшли з технікуму (або де вони навчаються на своїх навичках), просто не вивчають старіші мови, такі як C, C ++, Lisp, OCaml тощо. Вони просто виходять як "c # програмісти" або "java-програмісти" "і т. д. І, коли вони знаходять роботу, вони не кидають виклик вивченню інших мов.

Звичайно, є такі, які є, але серед тих, з ким я працював, є загальна тенденція молодших програмістів дотримуватися цієї схеми.

Відмова: Оскільки я говорю про освіту, то, звичайно, можуть бути різниці між країнами та країнами щодо того, на що наголошується в освіті.


Про які університети ви говорите? "Таємні" мови? Мені довелося навчитися збірці для MIPS в римському університеті ...
Виталий Олегович

Взагалі «молоді» програмісти, яких я зустрічав, отримали ступінь інженера. Подумайте, майже всі програмісти, з якими я працюю, мають ступінь інженера, в тому числі і я.
Піт

1
C і C ++ досі викладають у школі. Проблема полягає в тому, що більшу частину часу той самий компілятор використовується для навчання обох. Це означає, що вони ніколи насправді не вивчають відмінностей між двома мовами.
Рамхаунд

@Pete Якщо я з'явився програмістом "C #", я не можу уявити, що буду вивчати C або C ++ як "іншу мову". Звичайно, я хотів би Ruby, Haskell, Javascript, Python. Мови сімейства С досить близькі, що достатньо знати одну.
Кірк Бродхерст

0

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

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

Як це відбувається, версія C "Привіт, світ!" також компілює та працює в C ++. Отже, відсутність будь-якої іншої інформації, все, що бачити "C ++" у резюме говорить мені про те, що ця людина знає достатньо C, щоб отримати "Привіт, світ!" працює і знає, що більшість програм C буде компілюватися в C ++.

Враховуючи це, мені потрібно буде трохи перевірити це на співбесіді. Напевно, я б не зробив цього, запитуючи "Так / Ні" "Чи знаєте ви різницю?" питання, коротше, тому що він має очевидну "правильну" відповідь. Я, мабуть, запитав би кандидата, яка мова їй подобається краще, чому, і якщо є якісь переваги перед тією, яку вона не обрала.


0

Відповідь

Так, його загальне. Я бачив таку ситуацію, як я, або колеги, чи код сторонніх бібліотек.

Наприклад, я інколи іноді працюю з іншими мовами програмування або рамками програмування, і мені доводиться пов'язувати або оновлювати бібліотеки "чистого c" або "c ++".

У мене просто з’явилася проблема змінити якийсь код «Pure C». І за допомогою "нових" та "видалити" функції розподілу пам'яті, які є "c ++". Решта коду не була орієнтована на об'єкти

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

Бонус

Якщо хтось запитує, усно, або в письмовому тесті, або в Інтернет-тесті:

"Чи знаєте ви різницю між C або C ++"

А ви відповідаєте "Так" чи "Ні".

Вони справді мають на увазі:

"Чи знаєте ви різницю між C або C ++, якщо ви, будь ласка, скажіть мені?"

Отже, ви повинні відповісти:

"Так. Різниця полягає в тому, що C ++ є її об'єктно-орієнтованою, хоча для зворотної сумісності ви можете використовувати Pure C всередині програми C ++."

Іноді вони не запитають у вас "якщо ви, будь ласка, скажіть мені", і вважають, що ви не знаєте. Не відповідайте просто «так» або «ні».


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 ++. Будь ласка?
sbi

2
C і C ++ - це абсолютно різні мови, кодовані абсолютно різними способами. Ви, очевидно, просто їх не знаєте.
DeadMG

@sbi "Я не вважаю себе" знанням "жодної з цих мов". Я дозволю вам вирішити це для себе.
Кірк Бродхерст

Будь-які відгуки про знищені коментарі? Це тому, що я не знаю різниці між ними? Я б не припускав, що це не дозволить мені відповісти на запитання.
Кірк Бродхерст

1
@KirkBroadhurst: Я думаю, що я вказав, яку частину вашої відповіді мені не подобалося відхилити, і цей коментар був опробований в п’ять разів частіше, ніж вас після цього зволікали, тому я не впевнений, за якими поясненнями ви звертаєтесь. Однак, щоб уточнити: термін "різниця" тут достатній, оскільки C і C ++ поділяють лише поверхневі синтаксичні схожість, і, крім цього, дуже різні мови. Щодо кваліфікації: я не думаю, що тут потрібна кваліфікація, але коли відповідь явно неправильна, як ця, вона буде визнана невідповідною кваліфікації.
sbi

-3

Чи спільно для програміста не знати різниці між C і C ++?

Двадцять років тому? Так.

Сьогодні? Не так багато.

Причиною цього є те, що ландшафт програмування сильно змінився. Багато сучасних програм на базі веб-сторінок; навіть програми, написані для настільних комп'ютерів, можуть бути написані мовою більш високого рівня, ніж C або C ++. Таким чином, якщо ви не програміст, який пише код ОС, ви, можливо, не знаєте багато про одну з двох мов.

Інтерв'юер може задати це питання в інтерв'ю, щоб оцінити, наскільки ви знаєте про основи програмування; якщо ви знаєте різницю між C і C ++, то ви, ймовірно, знаєте, що таке об'єктно-орієнтоване програмування, ви, мабуть, розумієте бібліотеки та компілятори, ви розумієте функції пам'яті, посилання, покажчики .... багато речей, які вплинули на мови програмування сьогодні . Я мало використовую C ++ (і я не можу сказати, що я чудовий програміст на будь-якій мові; мудрість прийде з часом), але можу сказати, що мій досвід роботи з C ++, безумовно, зробив мене кращим програмістом.


8
Сказав би навпаки. Зараз я бачу більше розгублених людей, ніж навіть 5 - 10 років тому.
хайлем

@Haylem Озираючись назад, я думаю, що я мав на увазі сказати навпаки .... ну.
lunchmeat317
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.